/* ==========================================================================
   K02 Color & Tokens — page styles
   Token tiers, live theme cards, primitive swatches (click to copy), status
   semantics, data-viz palette, contrast table and the copy toast.
   Swatch colours are data-driven: style="--swatch: #…" on the element.
   ========================================================================== */

/* ── Shared page text ───────────────────────────────────────────────────── */

.inline-code { font: 500 .85em 'Geist Mono', monospace; }
.inline-code--body { font-size: .9em; }

.section-text {
  margin: 0;
  max-width: 680px;
  font: 400 16px/1.6 'Geist', sans-serif;
  color: var(--graphite-600);
  text-wrap: pretty;
}
.section-text--small {
  font-size: 14px;
  line-height: 1.5;
  text-wrap: wrap;
}

/* Section head that keeps its note on the same line (02.3) */
.kit-section__head--nowrap { flex-wrap: nowrap; }

/* 02.8 uses a tighter rhythm than the other sections */
.kit-section--code { gap: 20px; }

/* ── 02.1 Token architecture ────────────────────────────────────────────── */

.tier-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  border: 1px solid var(--color-hairline);
  border-radius: var(--radius-l);
  background: var(--graphite-0);
  overflow: hidden;
}

.tier {
  padding: 28px;
  display: flex;
  flex-direction: column;
  gap: 16px;
  border-right: 1px solid var(--ink-a10);
}

.tier__meta {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font: 500 12px/1 'Geist Mono', monospace;
  color: var(--graphite-500);
}
.tier__index { letter-spacing: .08em; }

.tier__name { font: 500 22px/1.2 'Geist', sans-serif; }

.tier__text {
  margin: 0;
  font: 400 15px/1.5 'Geist', sans-serif;
  color: var(--graphite-600);
  text-wrap: pretty;
}

.tier__code {
  margin-top: auto;
  padding: 12px 14px;
  border-radius: var(--radius-m);
  background: var(--graphite-50);
  font: 400 13px/1.5 'Geist Mono', monospace;
  color: var(--graphite-900);
  white-space: pre-wrap;
}

/* ── 02.2 Themes ────────────────────────────────────────────────────────── */

.theme-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 20px;
}

/* Every card carries real theme attributes (data-theme / data-brand), so the
   colours below resolve from tokens.css for that theme. Brand-dependent parts
   read the --brand-* tokens directly, because those are the ones a theme or
   brand layer re-declares on the element itself. */
.theme-card {
  display: flex;
  flex-direction: column;
  gap: 22px;
  padding: 24px;
  border: 1px solid var(--color-hairline);
  border-radius: var(--radius-l);
  background: var(--color-canvas);
  color: var(--color-text);
}

/* OR Dark status tints in the demo card are a touch stronger than the token
   default (.14 instead of .12) */
.theme-card[data-theme="dark"] {
  --status-high-bg: rgba(255, 122, 110, .14);
  --status-medium-bg: rgba(255, 211, 77, .14);
  --status-low-bg: rgba(111, 210, 238, .14);
  --status-success-bg: rgba(158, 214, 114, .14);
}

.theme-card__head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 12px;
}

.theme-card__name { font: 500 18px/1.2 'Geist', sans-serif; }

.theme-card__attr {
  font: 400 12px/1 'Geist Mono', monospace;
  color: var(--color-text-tertiary);
}

.theme-card__actions {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

.theme-card__btn {
  display: inline-flex;
  align-items: center;
  height: 48px;
  border-radius: var(--radius-pill);
  font: 500 16px/1 'Geist', sans-serif;
}
.theme-card__btn--primary {
  gap: 10px;
  padding: 0 22px;
  background: var(--brand-action);
  color: var(--brand-action-fg);
}
.theme-card__btn--outline {
  padding: 0 20px;
  border: 1px solid var(--color-hairline-strong);
  color: var(--color-text);
}

.theme-card__field {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.theme-card__label { font: 500 14px/1 'Geist', sans-serif; }

/* Input shown in its focus-visible state */
.theme-card__input {
  display: flex;
  align-items: center;
  height: 48px;
  padding: 0 14px;
  border: 1px solid var(--color-hairline-strong);
  border-radius: var(--radius-m);
  background: var(--color-surface);
  box-shadow: 0 0 0 2px var(--color-surface), 0 0 0 4px var(--brand-focus);
}

.theme-card__value {
  flex: 1;
  font: 400 16px/1 'Geist', sans-serif;
  font-variant-numeric: tabular-nums;
}

.theme-card__unit {
  font: 400 13px/1 'Geist Mono', monospace;
  color: var(--color-text-tertiary);
}

.theme-card__hint {
  font: 400 12px/1 'Geist Mono', monospace;
  color: var(--color-text-tertiary);
}

.theme-card__kpi {
  padding: 18px;
  border: 1px solid var(--color-hairline);
  border-radius: 12px;
  background: var(--color-surface);
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.theme-card__kpi-label {
  font: 500 11px/1 'Geist Mono', monospace;
  letter-spacing: .08em;
  color: var(--color-text-tertiary);
}

.theme-card__kpi-value {
  font: 500 40px/1 'Geist', sans-serif;
  letter-spacing: -.03em;
  font-variant-numeric: tabular-nums;
}

/* Citation marker */
.theme-card__cite {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 20px;
  height: 18px;
  padding: 0 5px;
  margin-left: 6px;
  vertical-align: 14px;
  border: 1px solid var(--color-hairline-strong);
  border-radius: var(--radius-s);
  color: var(--color-text);
  font: 500 11px/1 'Geist Mono', monospace;
  letter-spacing: 0;
}

.theme-card__meter {
  height: 6px;
  border-radius: 3px;
  background: var(--color-hairline);
  overflow: hidden;
}

.theme-card__meter-bar {
  width: 82%;
  height: 100%;
  background: var(--brand-data-primary);
}

.theme-card__chips {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.theme-card__link,
.theme-card__link:hover {
  font: 500 15px/1 'Geist', sans-serif;
  color: var(--brand-link);
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* ── Status chip (theme cards, 02.4) ────────────────────────────────────── */

.status-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 28px;
  padding: 0 10px;
  border-radius: var(--radius-pill);
  font: 500 13px/1 'Geist', sans-serif;
}
.status-chip__glyph { font: 600 11px/1 'Geist Mono', monospace; }

.status-chip--high    { background: var(--status-high-bg);    color: var(--status-high-fg); }
.status-chip--medium  { background: var(--status-medium-bg);  color: var(--status-medium-fg); }
.status-chip--low     { background: var(--status-low-bg);     color: var(--status-low-fg); }
.status-chip--success { background: var(--status-success-bg); color: var(--status-success-fg); }

.status-chip--lg {
  gap: 8px;
  height: 30px;
  padding: 0 12px;
  font-size: 14px;
}
.status-chip--lg .status-chip__glyph { font-size: 12px; }

/* ── Tables (brand tokens, contrast) ────────────────────────────────────── */

.table-card {
  border: 1px solid var(--color-hairline);
  border-radius: var(--radius-l);
  background: var(--graphite-0);
  overflow-x: auto;
}

.data-table {
  width: 100%;
  border-collapse: collapse;
  font: 400 14px/1.4 'Geist', sans-serif;
}
.data-table--brand    { min-width: 640px; }
.data-table--contrast { min-width: 680px; }

.data-table thead tr {
  text-align: left;
  font: 500 11px/1 'Geist Mono', monospace;
  letter-spacing: .08em;
  color: var(--graphite-500);
}

.data-table th {
  padding: 16px 20px;
  border-bottom: 1px solid var(--ink-a10);
}

.data-table td {
  padding: 12px 20px;
  border-bottom: 1px solid var(--ink-a07);
}
.data-table--contrast td { padding: 10px 20px; }

.data-table .data-table__num { text-align: right; }
.data-table__token { font: 400 13px/1 'Geist Mono', monospace; }
.data-table__theme { color: var(--graphite-600); }
.data-table__ratio {
  font: 500 15px/1 'Geist Mono', monospace;
  font-variant-numeric: tabular-nums;
}

.token-value {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font: 400 13px/1 'Geist Mono', monospace;
}

.token-value__swatch {
  width: 18px;
  height: 18px;
  border: 1px solid var(--ink-a14);
  border-radius: var(--radius-s);
  background: var(--swatch);
}

/* ── 02.3 Primitives ────────────────────────────────────────────────────── */

.primitives__hint {
  font: 400 13px/1 'Geist Mono', monospace;
  color: var(--graphite-500);
}

.scale {
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.scale__head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 16px;
}

.scale__name { font: 500 17px/1.2 'Geist', sans-serif; }

.scale__note {
  font: 400 14px/1.4 'Geist', sans-serif;
  color: var(--graphite-600);
}

.scale__swatches {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(84px, 1fr));
  border: 1px solid var(--color-hairline);
  border-radius: 12px;
  overflow: hidden;
  background: var(--graphite-0);
}

/* Swatch button — copies its hex value */
.swatch {
  display: flex;
  flex-direction: column;
  padding: 0;
  border: 0;
  border-right: 1px solid var(--ink-a08);
  background: var(--graphite-0);
  cursor: pointer;
  text-align: left;
}

.swatch__chip {
  position: relative;
  display: block;
  height: 84px;
  background: var(--swatch);
}

.swatch__tag {
  position: absolute;
  left: 8px;
  top: 8px;
  font: 500 10px/1 'Geist Mono', monospace;
  letter-spacing: .06em;
  color: var(--graphite-900);
}
.swatch__tag--on-dark { color: var(--graphite-0); }

.swatch__info {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 10px 10px 12px;
}

.swatch__step {
  font: 500 13px/1 'Geist', sans-serif;
  color: var(--graphite-900);
}

.swatch__hex {
  font: 400 11px/1 'Geist Mono', monospace;
  color: var(--graphite-500);
}

/* ── 02.4 Status & alarm semantics ──────────────────────────────────────── */

.status-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 16px;
}

.status-card {
  display: flex;
  flex-direction: column;
  gap: 14px;
  padding: 20px;
  border: 1px solid var(--color-hairline);
  border-radius: var(--radius-l);
  background: var(--graphite-0);
}
.status-card--high    { --tone-fill: var(--red-500);    --tone-text: var(--red-600);    --tone-tint: var(--red-50);    --tone-dark: var(--red-300); }
.status-card--medium  { --tone-fill: var(--yellow-400); --tone-text: var(--yellow-700); --tone-tint: var(--yellow-50); --tone-dark: var(--yellow-300); }
.status-card--low     { --tone-fill: var(--cyan-400);   --tone-text: var(--cyan-700);   --tone-tint: var(--cyan-50);   --tone-dark: var(--cyan-300); }
.status-card--success { --tone-fill: var(--leaf-500);   --tone-text: var(--leaf-700);   --tone-tint: var(--leaf-50);   --tone-dark: var(--leaf-300); }

.status-card__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.status-card__shape {
  font: 500 11px/1 'Geist Mono', monospace;
  color: var(--graphite-500);
}

.status-card__ramp {
  display: flex;
  gap: 6px;
}

.status-card__step {
  flex: 1;
  height: 36px;
  border-radius: 6px;
}
.status-card__step--fill { background: var(--tone-fill); }
.status-card__step--text { background: var(--tone-text); }
.status-card__step--tint { background: var(--tone-tint); border: 1px solid var(--ink-a08); }
.status-card__step--dark { background: var(--tone-dark); }

.status-card__legend {
  font: 400 11px/1.4 'Geist Mono', monospace;
  color: var(--graphite-500);
}

.status-card__text {
  margin: 0;
  font: 400 14px/1.5 'Geist', sans-serif;
  color: var(--graphite-600);
}

/* ── 02.5 Data visualization palette ────────────────────────────────────── */

.viz-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
  gap: 20px;
}

.viz-panel {
  --viz-label: var(--graphite-500);
  --viz-baseline: var(--ink-a20);
  display: flex;
  flex-direction: column;
  gap: 16px;
  padding: 24px;
  border: 1px solid var(--color-hairline);
  border-radius: var(--radius-l);
  background: var(--graphite-0);
}
.viz-panel--dark {
  --viz-label: var(--mist-400);
  --viz-baseline: rgba(232, 236, 234, .25);
  border-color: var(--graphite-950);
  background: var(--graphite-950);
}

.viz-panel__head {
  display: flex;
  justify-content: space-between;
  font: 500 11px/1 'Geist Mono', monospace;
  letter-spacing: .08em;
  color: var(--viz-label);
}

.viz-panel__chips {
  display: grid;
  grid-template-columns: repeat(8, 1fr);
  gap: 4px;
}

.viz-chip {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.viz-chip__color {
  height: 48px;
  border-radius: 6px;
  background: var(--swatch);
}

.viz-chip__n {
  font: 400 10px/1 'Geist Mono', monospace;
  color: var(--viz-label);
}

.viz-panel__bars {
  display: flex;
  align-items: flex-end;
  gap: 10px;
  height: 120px;
  padding-top: 8px;
  border-bottom: 1px solid var(--viz-baseline);
}

.viz-panel__bar {
  flex: 1;
  height: var(--value);
  border-radius: 3px 3px 0 0;
  background: var(--swatch);
}

/* Sequential / diverging ramps */
.ramp {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.ramp__label {
  font: 500 11px/1 'Geist Mono', monospace;
  letter-spacing: .08em;
  color: var(--graphite-500);
}

.ramp__steps {
  display: flex;
  height: 40px;
  border-radius: var(--radius-m);
  overflow: hidden;
}
.ramp__steps > span {
  flex: 1;
  background: var(--swatch);
}

.ramp__text {
  font: 400 13px/1.4 'Geist', sans-serif;
  color: var(--graphite-600);
}

/* ── 02.6 Contrast ──────────────────────────────────────────────────────── */

.contrast-sample {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 64px;
  height: 36px;
  border: 1px solid var(--ink-a10);
  border-radius: 6px;
  background: var(--bg);
  color: var(--fg);
  font: 500 16px/1 'Geist', sans-serif;
}

.contrast-pair {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.contrast-pair__name { font: 500 14px/1.2 'Geist', sans-serif; }

.contrast-pair__values {
  font: 400 12px/1 'Geist Mono', monospace;
  color: var(--graphite-500);
}

/* Result badge, rendered by the page JS from <template data-contrast-badge> */
.result-badge {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 26px;
  padding: 0 10px;
  border-radius: var(--radius-pill);
  background: var(--status-success-bg);
  color: var(--status-success-fg);
  font: 500 12px/1 'Geist', sans-serif;
}
.result-badge--fail {
  background: var(--status-high-bg);
  color: var(--status-high-fg);
}
.result-badge__glyph { font: 600 11px/1 'Geist Mono', monospace; }

/* ── 02.7 Color discipline ──────────────────────────────────────────────── */

.discipline-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 20px;
}

.discipline {
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.discipline__stage {
  padding: 28px;
  border: 1px solid var(--color-hairline);
  border-radius: var(--radius-l);
  background: var(--graphite-0);
  display: flex;
  flex-direction: column;
  gap: 18px;
}
.discipline--dont .discipline__stage {
  border-color: var(--scrub-200);
  background: var(--scrub-50);
}

.discipline__eyebrow {
  font: 500 11px/1 'Geist Mono', monospace;
  letter-spacing: .08em;
  color: var(--graphite-500);
}

.discipline__headline {
  font: 500 26px/1.15 'Geist', sans-serif;
  letter-spacing: -.02em;
}

.discipline--dont .discipline__eyebrow,
.discipline--dont .discipline__headline { color: var(--scrub-600); }

.discipline__actions {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

.discipline__btn {
  display: inline-flex;
  align-items: center;
  height: 44px;
  border-radius: var(--radius-pill);
  font: 500 15px/1 'Geist', sans-serif;
}
.discipline__btn--primary {
  padding: 0 20px;
  background: var(--scrub-600);
  color: var(--graphite-0);
}
.discipline__btn--outline {
  padding: 0 18px;
  border: 1px solid var(--ink-a24);
}

.discipline__caption {
  display: flex;
  gap: 10px;
  align-items: flex-start;
}

.discipline__text {
  font: 400 15px/1.5 'Geist', sans-serif;
  color: var(--graphite-750);
}

/* ── 02.8 Implementation ────────────────────────────────────────────────── */

.code-block {
  margin: 0;
  padding: 24px 28px;
  border-radius: var(--radius-l);
  background: var(--graphite-950);
  color: var(--graphite-mist);
  font: 400 14px/1.7 'Geist Mono', monospace;
  overflow-x: auto;
}
.code-block__comment { color: var(--mist-400); }

.token-file {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  align-items: center;
  justify-content: space-between;
  padding: 24px 28px;
  border: 1px solid var(--color-hairline);
  border-radius: var(--radius-l);
  background: var(--graphite-0);
}

.token-file__text {
  font: 400 16px/1.5 'Geist', sans-serif;
  color: var(--graphite-750);
}

.token-file__actions {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

/* ── Copy toast ─────────────────────────────────────────────────────────── */

.copy-toast {
  position: fixed;
  left: 50%;
  bottom: 28px;
  z-index: 50;
  transform: translateX(-50%);
  display: flex;
  align-items: center;
  gap: 10px;
  height: 44px;
  padding: 0 18px;
  border-radius: var(--radius-pill);
  background: var(--graphite-900);
  color: var(--graphite-50);
  font: 500 14px/1 'Geist', sans-serif;
  box-shadow: 0 18px 40px -16px rgba(10, 18, 22, .4);
}
.copy-toast__check { color: var(--scrub-300); }
