/* ============================================================
   CHANZELU: one token layer, served to both browser surfaces.
   The landing page and the console used to define this twice
   under different names. This file is the only definition.
   ============================================================ */

/* Self-hosted: a page that promises the data stays in Zambia should not send
   every visitor's IP to a third party to fetch its own type. */
@font-face{
  font-family:"Public Sans";
  font-style:normal;
  font-weight:100 900;
  font-display:swap;
  src:url("/static/shared/fonts/public-sans-latin.woff2") format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:"Public Sans";
  font-style:normal;
  font-weight:100 900;
  font-display:swap;
  src:url("/static/shared/fonts/public-sans-latin-ext.woff2") format("woff2");
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

/* Names only. Loaded lazily, so a page with no human names never fetches it. */
@font-face{
  font-family:"Source Serif 4";
  font-style:normal;
  font-weight:200 900;
  font-display:swap;
  src:url("/static/shared/fonts/source-serif-latin.woff2") format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:"Source Serif 4";
  font-style:normal;
  font-weight:200 900;
  font-display:swap;
  src:url("/static/shared/fonts/source-serif-latin-ext.woff2") format("woff2");
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

/* Latin only: every identifier this face sets is ASCII by validation. */
@font-face{
  font-family:"Commit Mono";
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url("/static/shared/fonts/commit-mono-400-latin.woff2") format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+20AC,U+2122,U+2212,U+FEFF,U+FFFD;
}
@font-face{
  font-family:"Commit Mono";
  font-style:normal;
  font-weight:600;
  font-display:swap;
  src:url("/static/shared/fonts/commit-mono-600-latin.woff2") format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+20AC,U+2122,U+2212,U+FEFF,U+FFFD;
}

/* Metrics-matched stand-ins, so the swap does not reflow the page under it.
   Tuned by eye until the hero and the case table stopped moving. */
@font-face{font-family:"Public Sans Fallback";src:local("Arial");size-adjust:104%;ascent-override:92%;descent-override:24%}
@font-face{font-family:"Source Serif Fallback";src:local("Georgia");size-adjust:97%;ascent-override:92%;descent-override:24%}
@font-face{font-family:"Commit Mono Fallback";src:local("Menlo"),local("Consolas");size-adjust:96%}

:root{
  /* Palette from security printing: bottle-green vault ink, cool certificate
     paper, registrar's stamp blue. Contrast ratios are against --paper. */
  --ink:        #0C2119;   /* bottle green, near black      */
  --ink-2:      #102C22;   /* raised surface on ink         */
  --ink-3:      #17392C;   /* hairline on ink               */
  --paper:      #EDEFEC;   /* certificate stock             */
  --paper-2:    #E2E6E1;   /* recessed panel                */
  --paper-3:    #F5F7F4;   /* raised panel, form fields     */
  --rule:       #C7CEC8;   /* hairline on paper             */
  --rule-soft:  #D8DED8;

  --text:       #0C2119;
  --muted:      #47554F;   /* 6.7:1 on paper                */
  --faint:      #6B7A73;   /* 4.6:1 on paper, labels only   */
  --on-ink:     #EDEFEC;
  --muted-ink:  #9BAAA3;   /* 6.9:1 on ink                  */
  --faint-ink:  #7C8D85;   /* 4.5:1 on ink, labels only     */

  /* Stamp blue is brand, not interface. On the console it is allowed only on
     focus rings and links, so the three verdict colours own attention. */
  --stamp:      #2A3A8F;   /* 8.6:1 on paper                */
  --stamp-ink:  #8FA3F0;   /* same role on ink surfaces     */

  /* The only semantic colours. These are what a case screen is for. */
  --pass:       #1B6B49;
  --pass-ink:   #58C08F;
  --pass-wash:  rgba(27,107,73,.09);
  --flag:       #9B2226;
  --flag-ink:   #E58A8C;
  --flag-wash:  rgba(155,34,38,.09);
  --hold:       #8A5F00;
  --hold-ink:   #E0B04A;
  --hold-wash:  rgba(138,95,0,.10);
  --faint-wash: rgba(71,85,79,.08);

  /* Type. Sans is the interface's voice, mono is anything a machine said,
     serif is a human name and nothing else. */
  --sans:  "Public Sans","Public Sans Fallback","Helvetica Neue",Arial,sans-serif;
  --serif: "Source Serif 4","Source Serif Fallback",Georgia,"Times New Roman",serif;
  --mono:  "Commit Mono","Commit Mono Fallback",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;

  /* Product scale, fixed rem at 1.125 to 1.2. The landing page overrides the
     display steps with clamp(); a console does not want fluid headings. */
  --t-micro: .6875rem;   /* 11px, uppercase labels only */
  --t-small: .8125rem;   /* 13px */
  --t-body:  .9375rem;   /* 15px */
  --t-lede:  1.0625rem;  /* 17px */
  --t-h3:    1.1875rem;  /* 19px */
  --t-h2:    1.4375rem;  /* 23px */
  --t-h1:    1.75rem;    /* 28px */

  /* Spacing. Every ad-hoc rem literal in the console maps onto one of these. */
  --s-1: .25rem;
  --s-2: .5rem;
  --s-3: .75rem;
  --s-4: 1rem;
  --s-5: 1.5rem;
  --s-6: 2rem;
  --s-7: 3rem;
  --s-8: 4rem;
  --band: clamp(4.5rem, 9vw, 8rem);   /* landing band rhythm */

  /* Zero radius is the security-printing decision and stays the default.
     Controls get one hair of a curve so a hard corner does not read unfinished. */
  --r: 0;
  --r-control: 3px;

  /* One hard offset print shadow, no soft blur anywhere. */
  --lift: 12px 12px 0 rgba(12,33,25,.09);
  --lift-tight: 7px 7px 0 rgba(12,33,25,.09);

  /* State transitions only. Nothing here choreographs a page load. */
  --fast: 120ms;
  --base: 180ms;
  --slow: 240ms;
  --ease: cubic-bezier(.4,0,.2,1);

  --shell: 1160px;
  --rail: 15rem;

  font-synthesis-weight: none;
}

/* Shared primitives both surfaces use. Component styling stays in each
   surface's own sheet; only what is genuinely common lives here. */
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
.name{font-family:var(--serif);font-weight:500;letter-spacing:0}

/* The one signature: a mono key/value row, used where the product is making
   an audit statement and nowhere else. */
.ledger{border-top:1px solid var(--rule)}
.ledger-row{
  display:flex;gap:var(--s-3);align-items:baseline;
  padding:var(--s-2) 0;border-bottom:1px solid var(--rule);
}
.ledger-row > dt,.ledger-row .k{
  font-family:var(--mono);font-size:var(--t-micro);line-height:1.5;
  letter-spacing:.14em;text-transform:uppercase;color:var(--faint);
  min-width:8.5rem;flex:none;margin:0;
}
.ledger-row > dd,.ledger-row .v{margin:0;font-size:var(--t-small);color:var(--text)}
.on-ink .ledger,.on-ink .ledger-row{border-color:var(--ink-3)}
.on-ink .ledger-row > dt,.on-ink .ledger-row .k{color:var(--faint-ink)}
.on-ink .ledger-row > dd,.on-ink .ledger-row .v{color:var(--on-ink)}

@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation-duration:.01ms !important;transition-duration:.01ms !important}
}
