/* GENERATED from brand/tokens. Run npm run brand:sync; do not edit. */
@font-face{font-family:"Geist";font-style:normal;font-display:swap;font-weight:100 900;src:url("/fonts/geist-latin-wght-normal.woff2") format("woff2-variations")}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-display:swap;font-weight:400;src:url("/fonts/ibm-plex-mono-latin-400-normal.woff2") format("woff2")}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-display:swap;font-weight:500;src:url("/fonts/ibm-plex-mono-latin-500-normal.woff2") format("woff2")}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-display:swap;font-weight:600;src:url("/fonts/ibm-plex-mono-latin-600-normal.woff2") format("woff2")}

/* source: brand/tokens/colors.css */
/* Lazu canonical color tokens — 02 云母 Yunmu (Console).
   LOCKED 2026-08-20. Default theme = LIGHT.
   Primary action = ink/paper reversal. Evidence color = periwinkle, small-area only.
   Charts never use a brand fill; semantic chroma remains state-only. */
:root {
  color-scheme: light;

  /* ground: three-layer warm paper, gradient stops live in shell CSS */
  --lazu-page: #f2f2ef;
  --lazu-page-top: #fbfaf7;
  --lazu-page-bottom: #eaebe9;
  --lazu-ambient-cool: rgb(197 216 255 / 52%);
  --lazu-ambient-warm: rgb(247 219 184 / 24%);
  --lazu-grid-line: rgb(60 66 78 / 3.5%);
  --lazu-grid-opacity: 0.34;

  --lazu-surface: rgb(255 252 247 / 92%);
  --lazu-surface-solid: #fdfdfc;
  --lazu-surface-muted: rgb(238 239 236 / 55%);
  /* raised = a second sheet of paper (panels, popovers). */
  --lazu-surface-raised: rgb(255 252 247 / 78%);
  /* selected = the neutral tint used for active nav and chips; never a panel. */
  --lazu-surface-selected: rgb(60 66 78 / 9%);
  --lazu-sidebar: rgb(255 252 247 / 80%);
  --lazu-border: rgb(60 66 78 / 12%);
  --lazu-border-strong: rgb(60 66 78 / 20%);

  --lazu-ink: #22242a;
  --lazu-text-muted: #5f646d;
  --lazu-text-faint: #8a8e95;

  /* primary action = ink on paper */
  --lazu-action: #202329;
  --lazu-action-hover: #2c3038;
  --lazu-action-soft: rgb(136 165 242 / 14%);
  --lazu-on-action: #f2f3f5;

  /* evidence = periwinkle: links, hits, focus, peak markers, small chips */
  --lazu-evidence: #5e79cf;
  --lazu-evidence-strong: #4a66bd;
  --lazu-evidence-soft: rgb(136 165 242 / 14%);

  --lazu-on-success: #ffffff;
  --lazu-on-danger: #ffffff;
  --lazu-overlay-scrim: rgb(20 22 28 / 35%);
  --lazu-control-knob: #fdfdfc;
  --lazu-code-bg: #20242c;
  --lazu-code-text: #e6e8ec;
  --lazu-code-muted: #878c96;
  --lazu-code-border: rgb(255 255 255 / 8%);
  --lazu-code-surface: rgb(255 255 255 / 7%);
  --lazu-code-surface-selected: rgb(255 255 255 / 10%);
  --lazu-code-surface-hover: rgb(255 255 255 / 14%);
  --lazu-code-keyword: #9fb6f7;
  --lazu-code-string: #e8c890;
  --lazu-code-flag: #7ed3a7;
  --lazu-code-strong: #ffffff;

  --lazu-chart-1: #5e79cf;
  --lazu-chart-2: #8aa5d8;
  --lazu-chart-3: #c2cde6;

  --lazu-success: #3f7957;
  --lazu-success-soft: rgb(68 155 110 / 16%);
  --lazu-warning: #b3821b;
  --lazu-warning-soft: rgb(179 130 27 / 14%);
  --lazu-danger: #b8443a;
  --lazu-danger-soft: rgb(184 68 58 / 12%);

  --ui-bg: var(--lazu-page);
  --ui-surface: var(--lazu-surface);
  --ui-surface-muted: var(--lazu-surface-muted);
  --ui-border: var(--lazu-border);
  --ui-text: var(--lazu-ink);
  --ui-text-muted: var(--lazu-text-muted);
  --ui-accent: var(--lazu-evidence);
  --ui-success: var(--lazu-success);
  --ui-warning: var(--lazu-warning);
  --ui-danger: var(--lazu-danger);
}

[data-theme="dark"],
html.dark,
body[theme-mode="dark"] {
  color-scheme: dark;

  --lazu-page: #171718;
  --lazu-page-top: #1d1d1f;
  --lazu-page-bottom: #121213;
  --lazu-ambient-cool: rgb(136 165 242 / 16%);
  --lazu-ambient-warm: transparent;
  --lazu-grid-line: rgb(241 241 242 / 4.5%);
  --lazu-grid-opacity: 0.45;

  --lazu-surface: rgb(40 40 42 / 88%);
  --lazu-surface-solid: #232325;
  --lazu-surface-muted: rgb(255 255 255 / 5%);
  --lazu-surface-raised: rgb(40 40 42 / 72%);
  --lazu-surface-selected: rgb(255 255 255 / 10%);
  --lazu-sidebar: rgb(40 40 42 / 80%);
  --lazu-border: rgb(241 241 242 / 11%);
  --lazu-border-strong: rgb(241 241 242 / 19%);

  --lazu-ink: #f1f1f2;
  --lazu-text-muted: #a4a4a7;
  --lazu-text-faint: #818184;

  --lazu-action: #f1f1f2;
  --lazu-action-hover: #ffffff;
  --lazu-action-soft: rgb(136 165 242 / 18%);
  --lazu-on-action: #1a1a1b;

  --lazu-evidence: #9fb6f7;
  --lazu-evidence-strong: #b7c9fa;
  --lazu-evidence-soft: rgb(136 165 242 / 18%);

  --lazu-on-success: #101a14;
  --lazu-on-danger: #21100f;
  --lazu-overlay-scrim: rgb(0 0 0 / 54%);
  --lazu-control-knob: #f1f1f2;
  --lazu-code-bg: #101215;
  --lazu-code-text: #d8dade;
  --lazu-code-muted: #767b84;

  --lazu-chart-1: #9fb6f7;
  --lazu-chart-2: #6d84b8;
  --lazu-chart-3: #454e63;

  --lazu-success: #7ed3a7;
  --lazu-success-soft: rgb(105 205 155 / 15%);
  --lazu-warning: #d8a53c;
  --lazu-warning-soft: rgb(216 165 60 / 14%);
  --lazu-danger: #f06f62;
  --lazu-danger-soft: rgb(240 111 98 / 14%);
}


/* source: brand/tokens/data-viz.css */
/* Kumo Native data grammar.
   Periwinkle = current primary evidence; blue = secondary evidence.
   Categories identify models/providers and never communicate health. */
:root {
  --lazu-data-orange: #f27828;
  --lazu-data-blue: #4c78a0;
  --lazu-data-teal: #4f807b;
  --lazu-data-plum: #795f91;
  --lazu-data-clay: #a46852;
  --lazu-data-olive: #777a58;
  --lazu-data-steel: #717b83;
  --lazu-data-grid: #e4e3df;
  --lazu-data-area: rgb(94 121 207 / 12%);
}

[data-theme="dark"],
body[theme-mode="dark"] {
  --lazu-data-orange: #ff8a45;
  --lazu-data-blue: #7ea0be;
  --lazu-data-teal: #75a69f;
  --lazu-data-plum: #a88eb8;
  --lazu-data-clay: #c08d77;
  --lazu-data-olive: #9da274;
  --lazu-data-steel: #a0a4a7;
  --lazu-data-grid: #302f2b;
  --lazu-data-area: rgb(159 182 247 / 14%);
}


/* source: brand/tokens/ui.css */
/* Lazu product UI tokens — Kumo Native / Warm Utility. LOCKED 2026-07-11. */
:root {
  --lazu-font-sans:
    "Geist", -apple-system, BlinkMacSystemFont, "SF Pro Text", "PingFang SC",
    "Noto Sans SC", sans-serif; /* @kind font */
  --lazu-font-mono:
    "IBM Plex Mono", ui-monospace, "SFMono-Regular", "Cascadia Code", Menlo,
    Consolas, monospace; /* @kind font */

  /* Yunmu 2026-08: controls 12 / cards 18 / overlays 20 — the console reads
     as soft paper sheets, not squared panels. */
  --lazu-radius-control: 12px;
  --lazu-radius-surface: 18px;
  --lazu-radius-overlay: 20px;
  --lazu-radius-badge: 8px;
  --lazu-radius-pill: 999px;

  --lazu-space-1: 4px;
  --lazu-space-2: 8px;
  --lazu-space-3: 12px;
  --lazu-space-4: 16px;
  --lazu-space-5: 20px;
  --lazu-space-6: 24px;
  --lazu-space-7: 28px;
  --lazu-space-8: 32px;

  --lazu-control-height-sm: 30px;
  --lazu-control-height: 34px;
  --lazu-control-height-lg: 38px;
  --lazu-row-height: 40px;
  --lazu-sidebar-width: 244px;

  --lazu-icon-stroke: 1.5; /* @kind other */
  --lazu-hairline: 1px;
  --lazu-shadow-overlay: 0 18px 42px rgba(46, 43, 36, 0.12);
  --lazu-shadow-action: 0 6px 14px rgba(180, 83, 42, 0.16);

  /* Quiet Precision data display — locked 2026-07-19, see foundations/quiet-precision.md */
  --lazu-display-kpi: 34px;
  --lazu-display-stat: 26px;
  --lazu-display-tracking: -0.02em;

  --lazu-motion-fast: 120ms; /* @kind other */
  --lazu-motion-base: 180ms; /* @kind other */
  --lazu-motion-slow: 240ms; /* @kind other */
  --lazu-motion-loading-cycle: 1500ms; /* @kind other */
  --lazu-ease-direct: cubic-bezier(0.2, 0.8, 0.2, 1); /* @kind other */
  --lazu-ease-mechanical: var(
    --lazu-ease-direct
  ); /* @kind other */ /* compatibility alias */
}

/* ---------------------------------------------------------------------------
 * Silent scroll — LOCKED 2026-08-22, BRAND.md § "02 云母 Yunmu (Console)" 规则 9.
 * Scroll containers never render a visible bar or track. A grey rail cutting
 * down a floating paper panel breaks the sheet illusion the whole system rests
 * on, and it is chrome the reader never asked for.
 *
 * Scrolling itself is untouched: wheel, trackpad, touch, keyboard (arrows /
 * PageUp / PageDown / Home / End) and programmatic scrollIntoView all still
 * work, and focus outlines still travel. Only the painted bar goes.
 *
 * This is the single canonical implementation — components must NOT re-declare
 * `scrollbar-width` / `::-webkit-scrollbar` locally, and must never paint a
 * thumb or track back in.
 * ------------------------------------------------------------------------ */
* {
  scrollbar-width: none; /* Firefox */
  -ms-overflow-style: none; /* legacy Edge */
}

*::-webkit-scrollbar {
  height: 0;
  width: 0;
}

*::-webkit-scrollbar-thumb,
*::-webkit-scrollbar-track,
*::-webkit-scrollbar-corner {
  background: transparent;
}


/* source: brand/tokens/public-web.css */
/* Lazu public web tokens — Kumo Native / Mono Utility. LOCKED 2026-07-11. */
:root {
  /* 01–03 · typography */
  --lazu-web-font-display: var(--lazu-font-mono); /* @kind font */
  --lazu-web-font-reading: var(--lazu-font-sans); /* @kind font */
  --lazu-web-display-size: clamp(42px, 5.2vw, 72px);
  --lazu-web-display-line-height: 1.02; /* @kind other */
  --lazu-web-display-tracking: -0.055em;
  --lazu-web-h1-size: clamp(36px, 4vw, 56px);
  --lazu-web-h2-size: clamp(30px, 3vw, 42px);
  --lazu-web-h3-size: clamp(22px, 2vw, 28px);
  --lazu-web-body-size: 17px;
  --lazu-web-body-line-height: 1.75; /* @kind other */
  --lazu-web-reading-width: 720px;

  /* 04–06 · layout */
  --lazu-web-container: 1280px;
  --lazu-web-columns: 12; /* @kind other */
  --lazu-web-gutter: 24px;
  --lazu-web-page-padding: clamp(20px, 4vw, 48px);
  --lazu-web-section-gap: clamp(72px, 9vw, 120px);
  --lazu-web-section-gap-compact: clamp(48px, 6vw, 80px);

  /* 07–15 · public chrome */
  --lazu-web-header-height: 58px;
  --lazu-web-announcement-height: 32px;
  --lazu-web-footer-columns: 4; /* @kind other */
  --lazu-web-mobile-sheet-radius: 16px;
  --lazu-web-mobile-sheet-max-height: 82dvh; /* @kind other */

  /* 26–40 · public components */
  --lazu-web-field-height: 44px;
  --lazu-web-button-height: 40px;
  --lazu-web-badge-radius: var(--lazu-radius-badge);
  --lazu-web-table-row-height: 48px;
  --lazu-web-side-sheet-width: min(520px, 92vw);
  --lazu-web-toast-center-width: min(440px, calc(100vw - 32px));

  /* The public landing runs on the canonical Yunmu tokens (BRAND.md § 02).
     It used to carry its own colour layer here — warm-orange action on a tan
     ground — which made the marketing site and the console two different
     brands. That layer is gone; anything the landing still needs it aliases
     from --lazu-* in pages/Home/lazu-landing.css. */
}
