/*
 * TDB docs — one visual system with the landing page at tdb.asvanlabs.com.
 *
 * The landing page is light and editorial: white and slate grounds, hairline
 * borders, Source Serif 4 headings over Inter, JetBrains Mono for code, an
 * indigo accent. The docs use the same tokens so crossing between the two reads
 * as one product. Light is the default (see mkdocs.yml); dark is a toggle.
 */

@import url("https://fonts.googleapis.com/css2?family=Source+Serif+4:opsz,wght@8..60,600;8..60,700&display=swap");

/* ============================ tokens ====================================== */

:root {
  --tdb-radius:      10px;
  --tdb-radius-lg:   14px;
  --md-text-font:    "Inter";
  --md-code-font:    "JetBrains Mono";
  --tdb-serif:       "Source Serif 4", Georgia, "Times New Roman", serif;
}

/* ---- light: the landing page's tokens ------------------------------------ */
[data-md-color-scheme="default"] {
  --tdb-bg:        #FFFFFF;
  --tdb-bg-soft:   #F8FAFC;
  --tdb-bg-inset:  #F1F5F9;
  --tdb-line:      #E2E8F0;
  --tdb-line-soft: #EEF2F6;
  --tdb-ink:       #0F172A;
  --tdb-ink-dim:   #475569;
  --tdb-accent:    #4F46E5;
  --tdb-shadow:    0 1px 2px rgba(15,23,42,.04), 0 12px 32px -12px rgba(15,23,42,.12);

  --md-default-bg-color:          var(--tdb-bg);
  --md-default-fg-color:          var(--tdb-ink);
  --md-default-fg-color--light:   var(--tdb-ink-dim);
  --md-default-fg-color--lighter: #64748B;
  --md-primary-fg-color:          var(--tdb-bg);
  --md-primary-bg-color:          var(--tdb-ink);
  --md-accent-fg-color:           var(--tdb-accent);
  --md-typeset-a-color:           var(--tdb-accent);
  --md-code-bg-color:             var(--tdb-bg-inset);
  --md-code-fg-color:             #2B303B;
}

/* ---- dark: the toggle, kept as a full design ------------------------------ */
[data-md-color-scheme="slate"] {
  --md-hue: 220;
  --tdb-bg:        #0A0B0D;
  --tdb-bg-soft:   #101216;
  --tdb-bg-inset:  #0D0F12;
  --tdb-line:      #1C2027;
  --tdb-line-soft: #16191F;
  --tdb-ink:       #E9EBEF;
  --tdb-ink-dim:   #A2A9B4;
  --tdb-accent:    #818CF8;

  --md-default-bg-color:          var(--tdb-bg);
  --md-default-bg-color--light:   var(--tdb-bg-soft);
  --md-default-fg-color:          var(--tdb-ink);
  --md-default-fg-color--light:   var(--tdb-ink-dim);
  --md-default-fg-color--lighter: #6E7681;
  --md-primary-fg-color:          var(--tdb-bg);
  --md-primary-bg-color:          var(--tdb-ink);
  --md-accent-fg-color:           var(--tdb-accent);
  --md-typeset-a-color:           var(--tdb-accent);
  --md-code-bg-color:             var(--tdb-bg-inset);
  --md-code-fg-color:             #D6DAE1;
  --md-footer-bg-color:           var(--tdb-bg);
  --md-footer-bg-color--dark:     var(--tdb-bg);
}

/* ============================ chrome ====================================== */

/* Header + tabs read as one blurred bar, like the landing page's nav. */
.md-header {
  background-color: color-mix(in srgb, var(--tdb-bg) 78%, transparent);
  backdrop-filter: saturate(160%) blur(12px);
  -webkit-backdrop-filter: saturate(160%) blur(12px);
  border-bottom: 1px solid var(--tdb-line);
  box-shadow: none;
  color: var(--tdb-ink);
}
.md-tabs {
  background-color: transparent;
  border-bottom: 1px solid var(--tdb-line);
  color: var(--tdb-ink-dim);
}
.md-tabs__link { opacity: 1; color: var(--tdb-ink-dim); font-size: .74rem; }
.md-tabs__link:hover { color: var(--tdb-ink); }
.md-tabs__link--active { color: var(--tdb-ink); font-weight: 600; }
.md-header__title { font-weight: 600; letter-spacing: -.01em; }

/* Search: a field, not a filled slab. */
.md-search__form {
  background-color: var(--tdb-bg-soft);
  border: 1px solid var(--tdb-line);
  border-radius: 9px;
  box-shadow: none;
}
.md-search__form:hover { background-color: var(--tdb-bg-soft); border-color: var(--tdb-accent); }
[data-md-toggle="search"]:checked ~ .md-header .md-search__form { border-radius: 9px 9px 0 0; }
.md-search__input::placeholder { color: var(--md-default-fg-color--lighter); }

/* Sidebars: quieter, with the active item marked by weight and a rule. */
.md-sidebar { font-size: .72rem; }
.md-nav__title { color: var(--md-default-fg-color--lighter); font-size: .68rem; letter-spacing: .06em; text-transform: uppercase; }
.md-nav__link { color: var(--tdb-ink-dim); border-radius: 6px; }
.md-nav__link:hover { color: var(--tdb-ink); }
.md-nav__link--active,
.md-nav__item .md-nav__link--active { color: var(--tdb-accent); font-weight: 600; }
.md-nav--secondary .md-nav__link--active { border-left: 2px solid var(--tdb-accent); padding-left: .6rem; margin-left: -.6rem; }

/* ============================ typography ================================== */

.md-typeset { font-size: .78rem; line-height: 1.72; }
.md-typeset h1,
.md-typeset h2 { font-family: var(--tdb-serif); }
.md-typeset h1 {
  color: var(--tdb-ink);
  font-weight: 700;
  letter-spacing: -.015em;
  font-size: 2.05rem;
  line-height: 1.18;
  margin: 0 0 .8rem;
}
.md-typeset h2 {
  font-weight: 700;
  letter-spacing: -.01em;
  font-size: 1.4rem;
  line-height: 1.26;
  margin: 2.2rem 0 .8rem;
  padding-top: 1.4rem;
  border-top: 1px solid var(--tdb-line-soft);
}
.md-typeset h3 { font-weight: 600; letter-spacing: -.012em; font-size: 1.02rem; margin-top: 1.6rem; }
.md-typeset h4 { font-weight: 600; font-size: .86rem; }
.md-typeset a { text-underline-offset: 3px; }
.md-typeset a:hover { text-decoration: underline; }

/* ============================ code ======================================== */

.md-typeset code {
  font-size: .84em;
  border-radius: 5px;
  padding: .12em .38em;
  border: 1px solid var(--tdb-line);
  background-color: var(--tdb-bg-inset);
}
.md-typeset pre > code {
  border-radius: var(--tdb-radius);
  padding: 1rem 1.05rem;
  line-height: 1.72;
}
.md-typeset .highlight,
.md-typeset pre {
  border-radius: var(--tdb-radius);
}
.md-typeset .highlight > pre > code,
.md-typeset .highlighttable .linenos { border: 1px solid var(--tdb-line); }
.md-typeset .md-clipboard { color: var(--md-default-fg-color--lighter); }
.md-typeset .md-clipboard:hover { color: var(--tdb-accent); }

/* Tabbed code blocks (=== "macOS / Linux") — a real tab strip. */
.md-typeset .tabbed-labels { box-shadow: none; border-bottom: 1px solid var(--tdb-line); }
.md-typeset .tabbed-labels > label { font-size: .68rem; font-weight: 600; color: var(--tdb-ink-dim); }
.md-typeset .tabbed-labels > label:hover { color: var(--tdb-accent); }
.md-typeset .tabbed-set > input:checked + label { color: var(--tdb-accent); }

/* ============================ tables ====================================== */

/* The API reference is mostly tables, so they get the most attention. */
.md-typeset table:not([class]) {
  font-size: .7rem;
  border: 1px solid var(--tdb-line);
  border-radius: var(--tdb-radius);
  overflow: hidden;
  box-shadow: none;
}
.md-typeset table:not([class]) th {
  background-color: var(--tdb-bg-soft);
  color: var(--tdb-ink);
  font-weight: 600;
  letter-spacing: .01em;
  border-bottom: 1px solid var(--tdb-line);
}
.md-typeset table:not([class]) td { border-top: 1px solid var(--tdb-line-soft); }
.md-typeset table:not([class]) tr:hover { background-color: var(--tdb-bg-soft); }

/* ============================ admonitions ================================= */

.md-typeset .admonition,
.md-typeset details {
  border: 1px solid var(--tdb-line);
  border-left-width: 3px;
  border-radius: var(--tdb-radius);
  box-shadow: none;
  font-size: .72rem;
  background-color: var(--tdb-bg-soft);
}
.md-typeset .admonition-title,
.md-typeset summary {
  background-color: transparent;
  font-weight: 600;
  border: 0;
}
.md-typeset .admonition-title::before,
.md-typeset summary::before { top: .5rem; }

/* ============================ buttons + cards ============================= */

.md-typeset .md-button {
  border-radius: 9px;
  font-weight: 600;
  font-size: .74rem;
  padding: .5rem 1.1rem;
  border-width: 1px;
  transition: background-color .15s ease, color .15s ease, border-color .15s ease;
}
.md-typeset .md-button--primary {
  background-color: var(--tdb-accent);
  border-color: var(--tdb-accent);
  color: #fff;
}
[data-md-color-scheme="slate"] .md-typeset .md-button--primary { color: #0A0B0D; }
.md-typeset .md-button:not(.md-button--primary) { color: var(--tdb-ink); border-color: var(--tdb-line); }
.md-typeset .md-button:not(.md-button--primary):hover { background-color: var(--tdb-bg-soft); border-color: var(--tdb-accent); color: var(--tdb-ink); }

/* Grid cards (docs index) — same card treatment as the landing page. */
.md-typeset .grid.cards > ul > li {
  border: 1px solid var(--tdb-line);
  border-radius: var(--tdb-radius-lg);
  background-color: var(--tdb-bg);
  box-shadow: var(--tdb-shadow, none);
  padding: 1.1rem 1.15rem;
  transition: border-color .15s ease;
}
.md-typeset .grid.cards > ul > li:hover {
  border-color: var(--tdb-accent);
  box-shadow: var(--tdb-shadow, none);
}
.md-typeset .grid.cards > ul > li > p:first-child strong { font-family: var(--tdb-serif); font-size: 1.05em; }

/* ============================ footer ====================================== */

.md-footer { border-top: 1px solid var(--tdb-line); }
.md-footer-meta { background-color: transparent; }
.md-footer__link { opacity: .85; }
.md-footer__link:hover { opacity: 1; }
.md-copyright { color: var(--md-default-fg-color--lighter); }

/* ============================ misc ======================================== */

.md-typeset hr { border-bottom: 1px solid var(--tdb-line); }
/* A section written as `---` then `## Heading` drew two rules: the hr, and the
   h2's own border-top. Keep the hr's line and drop the heading's. */
.md-typeset hr + h2 { border-top: 0; padding-top: 0; margin-top: 1.6rem; }
.md-typeset kbd {
  background-color: var(--tdb-bg-inset);
  border: 1px solid var(--tdb-line);
  box-shadow: none;
  border-radius: 5px;
}
.md-typeset blockquote {
  border-left: 2px solid var(--tdb-accent);
  color: var(--tdb-ink-dim);
}

@media (prefers-reduced-motion: reduce) {
  .md-typeset .md-button,
  .md-typeset .grid.cards > ul > li { transition: none; }
}

/* ---- admonition accents ---------------------------------------------------
 * Material's defaults are fully saturated (cyan info, lime tip) and read as
 * loud against a near-black ground next to an indigo accent. These keep the
 * semantic distinction — you still know a danger from a note at a glance —
 * but pull each hue into the same tonal range as the rest of the page.
 *
 * Per scheme, because they must be: the lifted hues that carry on near-black
 * are far too pale on white. The light set is darkened to stay readable.
 */
[data-md-color-scheme="slate"] { --md-admonition-bg-color: var(--tdb-bg-soft); }

.md-typeset .admonition.note,    .md-typeset details.note    { border-left-color: #7C8CFF; }
.md-typeset .admonition.info,    .md-typeset details.info    { border-left-color: #5EAECD; }
.md-typeset .admonition.tip,     .md-typeset details.tip     { border-left-color: #4FB286; }
.md-typeset .admonition.warning, .md-typeset details.warning { border-left-color: #C99A32; }
.md-typeset .admonition.danger,  .md-typeset details.danger  { border-left-color: #D9536F; }

/* dark — lifted hues, legible on #0A0B0D */
[data-md-color-scheme="slate"] {
  --tdb-adm-note: #A5B0FF;
  --tdb-adm-info: #8FCBE0;
  --tdb-adm-tip:  #7EE787;
  --tdb-adm-warn: #E3B341;
  --tdb-adm-danger: #F08098;
}
/* light — darkened, since the lifted set fails contrast on white */
[data-md-color-scheme="default"] {
  --tdb-adm-note: #3F4BC4;
  --tdb-adm-info: #256B85;
  --tdb-adm-tip:  #226B49;
  --tdb-adm-warn: #7E570A;
  --tdb-adm-danger: #A32F46;
}

.md-typeset .note    > .admonition-title, .md-typeset .note    > summary { color: var(--tdb-adm-note); }
.md-typeset .info    > .admonition-title, .md-typeset .info    > summary { color: var(--tdb-adm-info); }
.md-typeset .tip     > .admonition-title, .md-typeset .tip     > summary { color: var(--tdb-adm-tip); }
.md-typeset .warning > .admonition-title, .md-typeset .warning > summary { color: var(--tdb-adm-warn); }
.md-typeset .danger  > .admonition-title, .md-typeset .danger  > summary { color: var(--tdb-adm-danger); }

.md-typeset .note    > .admonition-title::before, .md-typeset .note    > summary::before { background-color: var(--tdb-adm-note); }
.md-typeset .info    > .admonition-title::before, .md-typeset .info    > summary::before { background-color: var(--tdb-adm-info); }
.md-typeset .tip     > .admonition-title::before, .md-typeset .tip     > summary::before { background-color: var(--tdb-adm-tip); }
.md-typeset .warning > .admonition-title::before, .md-typeset .warning > summary::before { background-color: var(--tdb-adm-warn); }
.md-typeset .danger  > .admonition-title::before, .md-typeset .danger  > summary::before { background-color: var(--tdb-adm-danger); }

/* Inline code in a table must not break mid-identifier — `source_id` was
   rendering as "source_i / d" in the narrow Field column, which reads as a
   different parameter name. Material already wraps tables in a horizontal
   scroll container, so keeping tokens whole costs nothing. */
.md-typeset table:not([class]) code { white-space: nowrap; }

/* ============================ docs home hero ============================== */

.tdb-hero {
  background: radial-gradient(60rem 26rem at 85% 0%, color-mix(in srgb, var(--tdb-accent) 10%, transparent), transparent 70%),
              linear-gradient(180deg, var(--tdb-bg-soft), var(--tdb-bg));
  border-bottom: 1px solid var(--tdb-line);
}
.tdb-hero__inner {
  display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(0, .85fr); gap: 2.4rem; align-items: center;
  padding: 3.2rem .8rem 2.8rem;
}
@media screen and (max-width: 60em) { .tdb-hero__inner { grid-template-columns: 1fr; padding-top: 2.2rem; } }
.tdb-eyebrow {
  display: inline-flex; align-items: center; gap: .45rem; font-size: .68rem; font-weight: 600; color: var(--tdb-ink-dim);
  border: 1px solid var(--tdb-line); border-radius: 99px; padding: .2rem .7rem .2rem .55rem; background: var(--tdb-bg);
}
.tdb-dot { width: .35rem; height: .35rem; border-radius: 50%; background: #15803D; }
.tdb-hero h1 {
  font-family: var(--tdb-serif); font-weight: 700; color: var(--tdb-ink); letter-spacing: -.015em;
  font-size: clamp(1.9rem, 3.6vw, 2.8rem); line-height: 1.08; margin: .9rem 0 .8rem; max-width: 18ch;
}
.tdb-hero h1 em { font-style: normal; color: var(--tdb-accent); }
.tdb-hero p { color: var(--tdb-ink-dim); font-size: .9rem; line-height: 1.65; max-width: 56ch; margin: 0 0 1.3rem; }
.tdb-hero__ctas { display: flex; flex-wrap: wrap; gap: .5rem; }
.tdb-hero .md-button {
  border-radius: 9px; font-weight: 600; font-size: .74rem; padding: .5rem 1.1rem; border: 1px solid var(--tdb-line);
  color: var(--tdb-ink); background: var(--tdb-bg);
}
.tdb-hero .md-button:hover { border-color: var(--tdb-accent); color: var(--tdb-ink); }
.tdb-hero .md-button--primary { background: var(--tdb-accent); border-color: var(--tdb-accent); color: #fff; }
.tdb-hero .md-button--primary:hover { color: #fff; filter: brightness(.92); }
[data-md-color-scheme="slate"] .tdb-hero .md-button--primary { color: #0A0B0D; }
.tdb-flow { list-style: none; margin: 0; padding: 0; display: grid; gap: .45rem; counter-reset: none; }
.tdb-flow li { margin: 0; }
.tdb-flow a {
  display: grid; grid-template-columns: 2rem 1fr; grid-template-rows: auto auto; column-gap: .6rem; align-items: center;
  border: 1px solid var(--tdb-line); border-radius: 12px; background: var(--tdb-bg); padding: .6rem .85rem;
  color: var(--tdb-ink); box-shadow: var(--tdb-shadow, none); transition: border-color .15s ease, transform .15s ease;
}
.tdb-flow a:hover { border-color: var(--tdb-accent); transform: translateX(3px); }
.tdb-flow span { grid-row: 1 / 3; font-family: var(--tdb-serif); font-weight: 700; color: var(--tdb-accent); font-size: .95rem; }
.tdb-flow b { font-size: .8rem; }
.tdb-flow small { color: var(--tdb-ink-dim); font-size: .66rem; }
@media (prefers-reduced-motion: reduce) { .tdb-flow a { transition: none; } .tdb-flow a:hover { transform: none; } }

/* ============================ OpenAPI (Swagger UI) ======================== */
.tdb-openapi .swagger-ui { font-family: var(--md-text-font-family); }
.tdb-openapi .swagger-ui .info { display: none; }
.tdb-openapi .swagger-ui .scheme-container { display: none; }
[data-md-color-scheme="slate"] .tdb-openapi { background: #fff; border-radius: var(--tdb-radius); padding: .4rem .8rem; }
