/* General. */
body {
  background-image: url("/waves.svg");
  background-repeat: no-repeat;
}

body > header svg,
body > footer svg {
  fill: var(--ly-brand);
  transition: fill var(--tr-duration);
  width: 1rem;
  height: 1rem;
}

body > header li.muted svg,
body > footer li.muted svg {
  fill: var(--dark-muted);
}

body > header li:hover svg,
body > footer li:hover svg {
  fill: var(--accent);
}

body > header svg.sponsor,
body > footer svg.sponsor {
  fill: var(--variant);
}

main {
  min-height: calc(100vh - 2 * var(--ly-header-size) - 1rem);
}

/* Additional classes. */
.underline-dotted {
  text-decoration: underline dotted;
}

/* Offset all headings by size of the header bar. */
main :is(h1, h2, h3, h4, h5, h6, .hx)[id]::before {
  content: "";
  display: block;
  height: calc(1rem + var(--ly-header-size));
  margin-top: calc(-1 * (1rem + var(--ly-header-size)));
  visibility: hidden;
  pointer-events: none;
}

/* Table of content. */
.toc > ul > li {
  font-weight: bold;
}

.toc > ul > li > ul > li {
  font-weight: normal;
}

.toc > ul > li > ul > li > ul > li {
  font-size: 85%;
}

.toc > ul > li > ul > li > ul > li a {
  color: var(--muted);
}

.toc .toc-hidden {
  display: none;
}

/* Logo and catchphrase. */
.logo {
  margin-top: 3rem;
}

.catchphrase {
  text-align: center;
  font-size: 3rem;
  font-weight: bold;
  background: linear-gradient(180deg, var(--dark-accent), var(--light-accent));
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  text-fill-color: transparent;
  text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4);
  margin-bottom: 3rem;
}

@media (prefers-color-scheme: dark) {
  .catchphrase {
    filter: brightness(2);
  }
}

/* Features. */
.features {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1.5rem;
}

.features h2 {
  display: flex;
  align-items: center;
  margin-top: 0;
  margin-bottom: 0.5rem;
  border: none;
  font-size: 1.25rem;
}

.features h2 svg {
  fill: currentColor;
  margin-right: 0.75rem;
  height: 1.25rem;
}

@media (min-width: 480px) {
  .features {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (min-width: 1100px) {
  .features {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

/** Usage snippets. */
.usage-snippet {
  cursor: pointer;
  user-select: all;
  transition: background var(--tr-duration);
}

.usage-snippet:hover {
  background: var(--bg-subtle);
}

/** Syntax explanation. */
.syntax-explain {
  justify-content: center;
  display: flex;
  flex-wrap: wrap;
  font-family: var(--ft-mono);
  margin-bottom: 1rem;
}

.syntax-explain div {
  display: inline-flex;
  border-bottom: 0.25rem solid currentColor;
  white-space: nowrap;
}

.syntax-explain div.hljs-comment {
  border-bottom-color: transparent;
}

/* Notes. */
.note svg {
  fill: currentColor;
  height: 1em;
  flex-shrink: 0;
  margin-top: 0.3rem;
}

/* Mizu api. */
.api {
  margin-left: 0;
  margin-right: 0;
  margin-bottom: 2rem;
}

.api h4 {
  font-size: 1.5rem;
  display: flex;
  flex-direction: column;
}

.api h4 .pills {
  margin-top: 1rem;
  justify-content: flex-start;
}

@media (min-width: 768px) {
  .api h4 {
    flex-direction: row;
    align-items: center;
  }
  .api h4 .pills {
    margin-top: 0;
    justify-content: flex-end;
  }
}

.api .toc-hidden, .api .toc-hidden [class*="hljs-"] {
  color: var(--muted) !important;
  font-weight: normal !important;
}

.api .toc-hidden {
  font-size: 1rem;
}

.api .hljs-title.class_ {
  color: var(--bullet);
}

/* Mizu directives. */
.directive {
  margin-left: 0;
  margin-right: 0;
  padding: 0;
  background-color: var(--bg-default);
}

.directive h3 {
  font-size: 1.5rem;
  display: flex;
  flex-direction: column;
}

.directive h3 a {
  flex-shrink: 0;
}

.directive h3 .pills {
  margin-top: 1rem;
  justify-content: flex-start;
}

@media (min-width: 768px) {
  .directive h3 {
    flex-direction: row;
    align-items: center;
  }
  .directive h3 .pills {
    margin-top: 0;
    justify-content: flex-end;
  }
}

.directive h4, .directive h5 {
  font-size: 1.25rem;
  margin: 1rem 0 1rem !important;
  border-bottom: 1px solid var(--bd-muted);
  padding-bottom: 0.5rem;
}

.directive h5 {
  font-size: 1rem;
  margin-bottom: 0.5rem !important;
  border-bottom: 1px dashed var(--bd-muted);
}

.directive > section {
  padding: 1rem 1rem 0;
}

.directive > header:first-child {
  padding: 1rem;
  margin: 0;
  width: auto;
}

.directive > footer:last-child {
  padding: 0;
  text-align: left;
  margin: 0;
}

.directive > footer:last-child details {
  margin: 0;
  border-left: none;
  border-right: none;
  border-top: none;
}

.directive > footer:last-child details summary {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
}

.directive > footer:last-child details summary .pills {
  justify-content: flex-start;
}

.directive .notes > * > :last-child {
  margin-bottom: 0.25rem;
}

.directive :is(.variables, .modifiers) > :not(h4) > :last-child {
  margin-bottom: 1.5rem;
}

.directive :is(.variables, .modifiers) > :not(h4):last-child > :last-child {
  margin-bottom: 0.5rem;
}

.directive .notes + .variables {
  margin-top: 1.5rem;
}

.directive .variables + .modifiers {
  margin-top: 1.5rem;
}

.directive .note ul {
  margin-bottom: 0;
}

/* Pills */
.pills {
  display: inline-flex;
  flex-grow: 1;
  flex-wrap: wrap;
  font-weight: normal;
  justify-content: flex-end;
  font-size: 0.85rem;
}

.pills > span {
  margin: 0.25rem;
  padding: 0 0.5rem;
  border-radius: 1rem;
}

.pills > span code {
  font-size: inherit !important;
  background: none;
  padding: 0;
}

.pills > span code:not(:first-child) {
  margin-left: 0.25rem;
}

/* Demo */
.demo {
  background: transparent;
  margin: 2rem 0 2rem;
}

.demo .dock {
  display: flex;
  justify-content: center;
  margin-top: 2rem;
  margin-bottom: 1rem;
}

.demo .dock > * {
  border-bottom: 4px solid transparent;
  transition: border-bottom-color var(--tr-duration);
  margin: 0 1rem;
  padding-bottom: 0.5rem;
  cursor: pointer;
}

.demo .dock img {
  max-height: 3rem;
  filter: grayscale(1) brightness(0.5);
  transition: filter var(--tr-duration);
}

.demo .dock :hover {
  border-bottom-color: var(--muted);
}

.demo .dock :hover img {
  filter: grayscale(0.2) brightness(0.8);
}

.demo .dock .active {
  border-bottom-color: var(--accent);
}

.demo .dock .active img {
  filter: grayscale(0) brightness(1);
}

.demo .mockups {
  position: relative;
  height: 600px;
}

.demo .dock, .demo [data-demo-tab] {
  transition: opacity var(--tr-duration);
  opacity: 1;
}

.demo.loading .dock, .demo.loading [data-demo-tab] {
  opacity: 0.25;
  cursor: wait !important;
}

/* App mockups. */
.mockup {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  display: flex;
  flex-direction: column;
  background: var(--dark);
  border-radius: var(--bd-radius);
  overflow: hidden;
  box-shadow: 0 16px 36px rgba(0, 0, 0, 0.3);
}

.mockup .fake {
  opacity: 0.25;
  pointer-events: none;
}

.mockup .tabs {
  display: flex;
  align-items: center;
  color: var(--muted);
}

.mockup .tabs .tab {
  display: flex;
  align-items: center;
  transition: color var(--tr-duration);
  cursor: pointer;
}

.mockup .tabs .tab:hover {
  color: var(--accent);
}

.mockup .tabs .tab.active {
  background: var(--bg-muted);
  color: var(--default);
}

.mockup .tabs svg {
  fill: currentColor;
  height: 1.5rem;
  margin: 0 1rem;
}

.mockup .app-icon {
  height: 1.5rem;
  margin: 0 1rem;
  filter: grayscale(1) brightness(0.5);
}

.mockup .usage-snippet:hover {
  background: var(--bg-subtle) !important;
}

@media (max-width: 768px) {
  .mockup .hide-small {
    display: none !important;
  }
}

/* Runtime mockup. */
.mockup.runtime .tabs .tab {
  padding: 0.5rem 1rem;
}

.mockup.runtime .tabs svg {
  margin-top: 0.5rem;
  margin-bottom: 0.5rem;
}

.mockup.runtime .app-view {
  display: grid;
  grid-template-rows: 0.7fr 0.3fr;
  flex-grow: 1;
}

.mockup.runtime .runtime-view {
  background-color: var(--bg-muted);
  overflow: auto;
  position: relative;
}

.mockup.runtime .runtime-view pre {
  height: calc(100% - 2rem);
}

.mockup.runtime .runtime-view .lines,
.mockup.runtime .runtime-terminal .prompt {
  position: absolute;
  top: 0;
  left: 0;
  padding: 1rem 0.5rem;
  text-align: right;
  color: var(--muted);
  pointer-events: none;
}

.mockup.runtime .runtime-view pre {
  background-color: transparent;
  padding-left: 3rem;
  border-radius: 0;
  margin: 0;
}

.mockup.runtime .runtime-view pre .hljs-meta:first-child {
  color: var(--comment);
}

.mockup.runtime .runtime-terminal {
  font-size: 0.85rem;
  background: black;
  display: flex;
  flex-direction: column;
}

.mockup.runtime .runtime-terminal .tabs {
  background: var(--light-default);
  border-top: 1px solid var(--light-muted);
  border-bottom: 1px solid var(--light-muted);
}

.mockup.runtime .runtime-terminal .tabs .tab:first-child {
  color: var(--default);
  pointer-events: no-events;
}

.mockup.runtime .runtime-terminal .tabs .tab:first-child span {
  border-bottom: 2px solid var(--accent);
}

.mockup.runtime .runtime-terminal .terminal {
  overflow: auto;
  position: relative;
  flex-grow: 1;
}

.mockup.runtime .runtime-terminal .prompt {
  padding: 1rem 0.5rem;
}

.mockup.runtime .runtime-terminal pre {
  border-radius: 0;
  padding-left: 2rem;
  height: calc(100% - 2rem);
  background: transparent;
  margin: 0;
}

@media (min-width: 768px) {
  .mockup.runtime .runtime-terminal pre {
    padding-left: 7rem;
  }
}

/* Browser mockup. */
.mockup.browser .tabs .tab {
  border-top-left-radius: calc(2 * var(--bd-radius));
  border-top-right-radius: calc(2 * var(--bd-radius));
  padding: 0.5rem 1rem;
  position: relative;
}

.mockup.browser .tabs .tab.active .before, .mockup.browser .tabs .tab.active .after {
  position: absolute;
  bottom: 0;
  left: -1rem;
  width: 1rem;
  height: 1rem;
  background-color: var(--bg-muted);
}

.mockup.browser .tabs .tab.active .after {
  left: auto;
  right: -1rem;
}

.mockup.browser .tabs .tab.active .before::before, .mockup.browser .tabs .tab.active .after::before {
  content: "";
  position: absolute;
  width: 100%;
  height: 100%;
  background-color: var(--dark);
  border-bottom-right-radius: calc(2 * var(--bd-radius));
}

.mockup.browser .tabs .tab.active .after::before {
  border-bottom-right-radius: 0;
  border-bottom-left-radius: calc(2 * var(--bd-radius));
}

.mockup.browser .urlbar {
  display: flex;
  background: var(--bg-muted);
  padding: 0.5rem;
  align-items: center;
}

.mockup.browser .urlbar svg {
  fill: currentColor;
  height: 1.5rem;
  margin: 0 0.5rem;
}

.mockup.browser .urlbar input {
  margin: 0;
  background-color: var(--dark);
}

.mockup.browser .app-view {
  display: grid;
  grid-template-rows: 0.2fr 1fr;
  flex-grow: 1;
}

.mockup.browser .browser-view {
  background-color: var(--light);
  color: var(--light-default);
  padding: 1rem;
  border-right: 2px solid var(--light-muted);
}

.mockup.browser .browser-view:has(iframe) {
  padding: 0;
}

.mockup.browser .browser-inspector {
  display: flex;
  flex-direction: column;
}

.mockup.browser .browser-inspector-bar {
  color: var(--muted);
  display: flex;
}

.mockup.browser .browser-inspector-bar div {
  display: flex;
  align-items: center;
  border-bottom: 2px solid transparent;
  padding-right: 0.5rem;
  cursor: pointer;
  transition: color var(--tr-duration), border-bottom-color var(--tr-duration);
}

.mockup.browser .browser-inspector-bar div:hover {
  color: var(--accent);
}

.mockup.browser .browser-inspector-bar div.active {
  color: var(--accent);
  border-bottom-color: currentColor;
  background-color: var(--bg-muted);
}

.mockup.browser .browser-inspector-bar svg {
  fill: currentColor;
  height: 1rem;
  margin: 0.5rem;
}

.mockup.browser .browser-inspector-bar .errors-count:has(b:not(:empty)) {
  color: var(--danger);
  background-color: var(--bg-danger);
}

.mockup.browser .browser-inspector-bar .errors-count b:not(:empty) {
  margin-right: 0.5rem;
}

.mockup.browser .browser-inspector-content {
  flex-grow: 1;
  overflow: auto;
  width: 100%;
  background-color: var(--bg-muted);
}

.mockup.browser .browser-inspector-content pre {
  background-color: transparent;
  margin: 0;
  border-radius: 0;
  padding-bottom: 0;
  height: calc(100% - 1rem);
}

.mockup.browser .browser-inspector-content .wrapper {
  margin: 1rem 1rem 0;
  height: calc(100% - 1rem);
}

.mockup.browser .browser-inspector-content .editor,
.mockup.browser .browser-inspector-content .editor textarea,
.mockup.browser .browser-inspector-content .editor .highlight {
  padding: 0;
  height: 100%;
  border-radius: 0;
  border: none;
}
.mockup.browser .browser-inspector-content .editor textarea:hover,
.mockup.browser .browser-inspector-content .editor textarea:focus {
  border-color: transparent !important;
}

.mockup.browser .browser-inspector-content .message {
  padding: 0.5rem 1rem;
  padding-left: 2rem;
  font-family: var(--ft-mono);
  border-bottom: 1px solid currentColor;
  font-size: 0.85rem;
  position: relative;
}

.mockup.browser .browser-inspector-content .message.warn {
  color: var(--attention);
  background-color: var(--bg-attention);
}

.mockup.browser .browser-inspector-content .message.warn::before {
  content: "⚠️";
  position: absolute;
  left: 0.5rem;
}

.mockup.browser .browser-inspector-content .message.debug {
  color: var(--muted);
  background-color: var(--bg-muted);
}

.mockup.browser .browser-inspector-content .message.info {
  color: var(--accent);
  background-color: var(--bg-infoaccent);
}

.mockup.browser .browser-inspector-content .message.info::before {
  content: "ℹ️";
  position: absolute;
  left: 0.5rem;
}

.mockup.browser .browser-inspector-content .message.template {
  display: none !important;
}

@media (min-width: 768px) {
  .mockup.browser .tabs .tab {
    min-width: 10rem;
  }
  .mockup.browser .app-view {
    grid-template-rows: initial;
    grid-template-columns: 0.3fr 0.7fr;
    flex-grow: 1;
  }
}

/** Playground. */
.playground.demo .mockups {
  height: 700px;
}

.playground #render {
  cursor: pointer;
  transition: color var(--tr-duration);
}

.playground #render:hover {
  color: var(--accent);
}

.playground.pending #render {
  color: var(--muted);
  animation: spin 1s linear infinite;
  cursor: wait;
}

@keyframes spin {
  0% {
    transform: scaleX(-1) rotate(0deg);
  }
  100% {
    transform: scaleX(-1) rotate(-360deg);
  }
}

.playground iframe {
  border-radius: 0;
  width: 100%;
  height: 100%;
}

.playground.pending iframe {
  opacity: 0.25;
  cursor: wait;
}

.playground .mockup.browser .app-view {
  grid-template-rows: 0.5fr 0.5fr;
}

@media (min-width: 768px) {
  .playground .mockup.browser .app-view {
    grid-template-rows: initial;
  }
}

/** Carbon like examples. */
.carbon-like {
  display: flex;
  flex-direction: column;
  background-color: white;
  border-radius: var(--bd-radius);
  box-shadow: 0 16px 68px rgba(0, 0, 0, 0.55);
  margin-bottom: 1.5rem;
}

@media (prefers-color-scheme: dark) {
  .carbon-like {
    background-color: black;
  }
}

.carbon-like .title {
  display: flex;
  justify-content: space-between;
  padding: 1rem;
  font-family: var(--ft-mono);
  text-decoration: underline;
  text-decoration-color: var(--muted);
}

.carbon-like .title :is(h1, h2, h3, h4, h5, h6) {
  margin: 0;
}

.carbon-like pre, .carbon-like .editor {
  padding-top: 0;
  background: none;
}

/** Builder */
.builder .directives small, .builder input[type="checkbox"].padded small {
  margin-left: 1.75rem;
}

.builder small.no-after::after {
  content: "";
}

.builder.pending {
  cursor: progress;
}

.builder.pending :is(input, textarea, select) {
  background-color: var(--bg-muted);
}

.builder.pending label, .builder.pending label *, .builder.pending button {
  color: var(--muted) !important;
  pointer-events: none;
}

.builder.pending :is(input[type="checkbox"], input[type="radio"], textarea, select, button) {
  color: var(--muted);
  border-color: var(--bd-muted);
}

.builder fieldset[data-group="rendering"] {
  opacity: 0.5;
  pointer-events: none;
}
