/* =============================================================================
   ASHTON ONE — theme.css
   The ONLY place colors, type, and radii are defined. Pages and components
   consume tokens; nothing anywhere else declares a color. (MASTER_PLAN §4, D6)
   ========================================================================== */

/* ---- fonts (local files, no CDN — D6) ---- */
@font-face { font-family: 'Archivo';       src: url('../fonts/archivo-var.woff2') format('woff2'); font-weight: 100 900; font-display: swap; }
@font-face { font-family: 'Inter';         src: url('../fonts/inter-var.woff2') format('woff2');   font-weight: 100 900; font-display: swap; }
@font-face { font-family: 'IBM Plex Mono'; src: url('../fonts/plex-mono-400.woff2') format('woff2'); font-weight: 400; font-display: swap; }
@font-face { font-family: 'IBM Plex Mono'; src: url('../fonts/plex-mono-600.woff2') format('woff2'); font-weight: 600; font-display: swap; }

:root {
  /* ground + surfaces */
  --bg:      #EBEFF5;   /* page ground — never pure white pages */
  --surface: #FFFFFF;   /* cards, panels, drawers, modals */
  --cream:   #F7FAFD;   /* table headers, wells, hover fills */

  /* text */
  --ink:   #16202E;     /* primary text */
  --navy:  #0B2545;     /* display headings, chart bars, dark emphasis */
  --steel: #5B6B7E;     /* secondary text */
  --steel-line: #A9B6C6;
  --line:  #E4EAF1;     /* card borders, dividers */

  /* semantic — meaning, not decoration. Saturated = fills/borders; -deep = text. */
  --blue:       #1763E3;  --blue-tint:  #EAF1FE;
  --ok:         #0C7A45;  --ok-deep:    #0B6E3F;  --ok-tint:    #E2F4EA;
  --amber:      #F2A100;  --amber-deep: #8A5A00;  --amber-tint: #FFF5DD;
  --red:        #C0392B;  --red-tint:   #FBEAE8;
  --warn:       #AC380B;  --warn-tint:  #FDEAD9;

  /* shape + type */
  --r: 12px;
  --shadow: 0 10px 28px rgba(10, 20, 40, .14);
  --display: 'Archivo', system-ui, sans-serif;
  --body:    'Inter', system-ui, sans-serif;
  --mono:    'IBM Plex Mono', ui-monospace, monospace;
}

/* ---- base ---- */
* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
  margin: 0;
  background: var(--bg);
  color: var(--ink);
  font: 400 14px/1.5 var(--body);
}
h1, h2, h3, h4 { font-family: var(--display); color: var(--navy); margin: 0; text-wrap: balance; }
a { color: var(--blue); text-decoration: none; }
a:hover { text-decoration: underline; }
code, .mono { font-family: var(--mono); }
.num { font-variant-numeric: tabular-nums; }
.sr-only {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
}

/* keyboard focus is always visible (charter: a11y) */
:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; border-radius: 4px; }

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