/* ============================================================
   KARST KIT · shared design system (kit.css)
   One grammar for every surface. District palettes arrive via
   the compiler's seams on the tokens below; surfaces add only
   their own layout on top of this layer.
   ============================================================ */
:root{
  /* palette (seam targets) */
  --k-primary:#012561; --k-primary-deep:#011C4A; --k-night:#011C4A; --k-ink:#011336;
  --k-night-rgb:1,19,54;
  --k-accent:#E1B138; --k-accent-ink:#A87F12; --k-gold:#E1B138;
  --k-signal:#236548; --k-secondary:#6E6355;
  /* register-neutral surfaces */
  --k-cream:#F5F3EC; --k-paper:#FEFDFB; --k-line:#DDD8CB; --k-line-strong:#C9C2B2;
  --k-ink-soft:#3F3A30; --k-muted:#6E6355; --k-hairline:rgba(14,14,12,.14);
  /* semantic */
  --k-success:#356D55; --k-success-wash:#EFF7F2; --k-warning:#8A5F19; --k-warning-wash:#FFF8E8;
  /* geometry + motion */
  --k-radius:3px;
  --k-ease:cubic-bezier(.4,0,.6,1); --k-ease-arrive:cubic-bezier(.4,0,.2,1);
  --k-quick:.32s; --k-calm:.45s;
  --k-shadow:0 14px 38px rgba(var(--k-night-rgb),.08);
  --k-shadow-hover:0 18px 44px rgba(var(--k-night-rgb),.12);
  --k-font-head:"Montserrat","Inter",sans-serif;
  --k-font-body:"Inter",-apple-system,sans-serif;
  --k-font-editorial:"Libre Baskerville",serif;
}

/* ---- base ---- */
.k-body{background:var(--k-cream);color:var(--k-ink);font-family:var(--k-font-body);-webkit-font-smoothing:antialiased}

/* ---- type ---- */
.k-eyebrow{font:600 10px/1 var(--k-font-head);letter-spacing:.2em;text-transform:uppercase;color:var(--k-accent-ink)}
.k-eyebrow--night{color:var(--k-gold)}
.k-h1{font:600 clamp(34px,5vw,56px)/1.06 var(--k-font-head);letter-spacing:-.03em;text-wrap:balance}
.k-h2{font:600 clamp(24px,3.6vw,32px)/1.12 var(--k-font-head);letter-spacing:-.02em;text-wrap:balance}
.k-lede{font-size:clamp(15px,1.4vw,18px);line-height:1.62;color:var(--k-ink-soft)}
.k-lede--night{color:rgba(255,255,255,.78)}
.k-editorial{font-family:var(--k-font-editorial);font-style:italic}

/* ---- buttons ---- */
.k-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:42px;padding:0 18px;border-radius:var(--k-radius);border:1px solid transparent;font:600 12px/1 var(--k-font-head);letter-spacing:.08em;text-transform:uppercase;cursor:pointer;text-decoration:none;transition:background var(--k-quick) var(--k-ease),color var(--k-quick) var(--k-ease),border-color var(--k-quick) var(--k-ease)}
.k-btn--primary{background:var(--k-accent);color:#fff}
.k-btn--primary:hover{background:var(--k-accent-ink)}
.k-btn--ghost{border-color:var(--k-line-strong);color:var(--k-ink);background:transparent}
.k-btn--ghost:hover{background:rgba(var(--k-night-rgb),.05)}
.k-btn--ghost-night{border-color:rgba(255,255,255,.35);color:rgba(255,255,255,.88);background:transparent}
.k-btn--ghost-night:hover{background:rgba(255,255,255,.08)}

/* ---- chips + truth ---- */
.k-chip{display:inline-flex;align-items:center;font:600 9.5px/1 var(--k-font-head);letter-spacing:.13em;text-transform:uppercase;padding:8px 11px;border-radius:999px;box-shadow:inset 0 0 0 1px var(--k-hairline);color:var(--k-muted);white-space:nowrap}
.k-chip--night{box-shadow:inset 0 0 0 1px rgba(255,255,255,.22);color:rgba(255,255,255,.85)}
.k-chip--accent{background:var(--k-accent);box-shadow:none;color:#fff}
.k-truthline{padding:12px 14px;background:#F1EDE0;border:1px solid #DDD4BC;border-radius:var(--k-radius);font:600 9.5px/1.6 var(--k-font-head);letter-spacing:.12em;text-transform:uppercase;color:#3f3a30}

/* ---- cards ---- */
.k-card{background:var(--k-paper);border-top:2px solid var(--k-primary);box-shadow:0 1px 0 rgba(14,14,12,.06),var(--k-shadow);border-radius:var(--k-radius);padding:24px}
.k-card--featured{border-top-color:var(--k-accent)}
.k-card--flag{border-left:3px solid var(--k-accent)}

/* ---- night hero (deck-cover grammar) ---- */
.k-hero-night{position:relative;overflow:hidden;background:var(--k-night);color:#fff}
.k-hero-night__image{position:absolute;inset:-3%;z-index:0;background:center/cover no-repeat;animation:kDrift 20s ease-in-out infinite alternate}
.k-hero-night__scrim{position:absolute;inset:0;z-index:1;pointer-events:none;background:linear-gradient(112deg,transparent 33%,rgba(255,224,187,.08) 46%,transparent 60%) 0% 0%/230% 100% no-repeat,linear-gradient(90deg,rgba(var(--k-night-rgb),.94),rgba(var(--k-night-rgb),.72) 55%,rgba(var(--k-night-rgb),.38));animation:kPass 16s ease-in-out infinite alternate}
.k-hero-night>*{position:relative}
.k-hero-night .k-hero-night__content{z-index:2}
@keyframes kPass{from{background-position:0% 0%,0 0}to{background-position:100% 0%,0 0}}
@keyframes kDrift{from{transform:scale(1)}to{transform:scale(1.05)}}

/* ---- night bar (app expression) ---- */
.k-bar{position:sticky;top:0;z-index:60;background:rgba(var(--k-night-rgb),.88);border-bottom:1px solid rgba(255,255,255,.12);box-shadow:0 18px 44px rgba(var(--k-night-rgb),.22);backdrop-filter:blur(20px) saturate(130%);-webkit-backdrop-filter:blur(20px) saturate(130%);color:#fff}
.k-bar__seal{background:var(--k-paper);border-radius:50%;padding:4px}

/* ---- reveals (R17) ---- */
/* Progressive: content is VISIBLE by default. Reveal styling engages only after
   a script adds .k-js to <html> — so blocked, delayed, or absent JS can never
   blank a page (embedded viewers, previews, print pipelines). */
.k-js .k-rv{opacity:0}
.k-rv.k-in{animation:kRise var(--k-calm) var(--k-ease-arrive) both}
@keyframes kRise{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}

/* ---- focus policy: keyboard earns the ring ---- */
.k-kbd-scope :focus-visible{outline:3px solid rgba(201,169,107,.7);outline-offset:2px}
.k-kbd-scope:not(.kbd) :focus-visible{outline:none}

@media (prefers-reduced-motion:reduce){
  .k-rv{opacity:1!important;animation:none!important}
  .k-hero-night__image,.k-hero-night__scrim{animation:none}
  .k-btn{transition:none}
}
@media print{
  .k-bar{display:none}
  .k-hero-night{background:#fff;color:var(--k-ink)}
  .k-hero-night__image,.k-hero-night__scrim{display:none}
}

/* Print safety: reveal states must never suppress content on paper. */
@media print {
  .k-rv, .k-in { opacity: 1 !important; transform: none !important; transition: none !important; animation: none !important; }
}

/* Print break hygiene: cards, receipts, and rows never split across page breaks. */
@media print{.insight-card,.method-receipt,.k-card,figure,.chart-q,.rowbar,.insight-src{break-inside:avoid;page-break-inside:avoid}tr{break-inside:avoid}thead{display:table-header-group}}
