/* ============================================================
   thisarchiveisnotreal.com — DESIGN TOKENS
   Single source of truth. Swap this file, re-skin the archive.

   Built from the WOUND book's own locked canon so the archive
   reads as a sibling artifact of the $10 PDF, not a clone of
   anything. Cold institutional, two registers:
     · institutional  — Void + IBM Plex  (Loop Authority voice)
     · recovered       — Parchment + Garamond/Playfair (older papers)

   Discipline (non-negotiable):
     · ONE accent (--accent) + ONE alarm (--alarm) at any moment.
       A third hue in a layout is a bug.
     · Faction colour appears ONLY as a 2px rule, a small-caps
       label, or a dot. Never a page recolour.
     · Body type is Plex (mono/sans) or EB Garamond. VT323 and
       Share Tech Mono are banned as text faces.
   ============================================================ */

@import url('https://fonts.googleapis.com/css2?family=Archivo:ital,wght@0,400;0,500;0,600;0,700;0,800;1,500&family=Archivo+Expanded:wght@500;600;700;800&family=EB+Garamond:ital,wght@0,400;0,500;0,600;1,400;1,500&family=IBM+Plex+Mono:ital,wght@0,300;0,400;0,500;0,600;1,400&family=IBM+Plex+Sans:ital,wght@0,300;0,400;0,500;0,600;1,400&family=Playfair+Display:ital,wght@0,400;0,600;0,700;1,400&display=swap');

:root{
  /* ── INK & PAPER (two registers) ─────────────────────────── */
  --void:      #0A0A0A;   /* primary institutional ground (Loop Authority) */
  --void-2:    #111214;   /* raised institutional surface (cards, rows)     */
  --ghost:     #F4F0E6;   /* body text on void                              */
  --parchment: #FBFAF6;   /* recovered-document ground (older/personal)     */
  --parchment-2:#F3EFE3;  /* recovered raised surface                       */
  --el-ink:    #1A1A1A;   /* body text on parchment                         */

  /* ── NEUTRALS / STRUCTURE ────────────────────────────────── */
  --steel:     #8A9BA8;   /* cold labels, metadata, page numbers            */
  --steel-dim: #5C6A75;   /* quieter metadata / disabled                    */
  --secondary: #6B6657;   /* muted headers on parchment                     */
  --rule-dark: #2A2724;   /* hairlines on void (a touch darker than spec    */
  --rule-warm: #C9C4B3;   /* hairlines on parchment                         */

  /* ── ONE ACCENT + ONE ALARM (canon faction colours) ──────── */
  --accent:    #3A6B8A;   /* SF-Coherence — THE single institutional accent */
  --accent-hi: #5C90B0;   /* accent, lifted for hover / on-void legibility  */
  --accent-soft: rgba(58,107,138,.10);
  --alarm:     #A03030;   /* SF-Paradox — genuine alerts ONLY               */
  --alarm-hi:  #C24848;
  --electric:  #D4B886;   /* Alan electric-tan — sparing display highlight  */

  /* ── FACTION TAXONOMY (demoted to small tags only) ───────── */
  --fac-authority: var(--accent);  /* coherence blue            */
  --fac-chen:      #B08D5B;        /* warm annotation brown (lifted for void) */
  --fac-church:    #9A5252;        /* burgundy (lifted for void)*/
  --fac-revel:     var(--alarm);   /* paradox red — they ARE the paradox */
  --fac-scion:     #7C8C82;        /* desaturated slate, muted  */
  --fac-journal:   var(--steel);   /* recovered personal papers */

  /* ── TYPE ────────────────────────────────────────────────── */
  --font-mono:    'IBM Plex Mono', ui-monospace, 'SFMono-Regular', monospace;
  --font-sans:    'IBM Plex Sans', system-ui, sans-serif;
  --font-serif:   'EB Garamond', Georgia, serif;
  --font-playfair:'Playfair Display', Georgia, serif;
  /* neo-grotesque for display + big numerals (the data-page voice) */
  --font-grotesk: 'Archivo', system-ui, sans-serif;
  --font-expanded:'Archivo Expanded', 'Archivo', system-ui, sans-serif;
  --font-display: var(--font-playfair);  /* recovered-doc display */

  /* type scale (modular ~1.25, tuned for institutional cool) */
  --t-micro:  .6875rem;  /* 11px — table data, fine labels   */
  --t-small:  .8125rem;  /* 13px — metadata, captions        */
  --t-body:   1rem;      /* 16px — body                      */
  --t-lead:   1.1875rem; /* 19px — lead paragraph            */
  --t-h3:     1.25rem;
  --t-h2:     1.75rem;
  --t-h1:     2.5rem;
  --t-display:3.5rem;

  --tracking-label: .18em;  /* small-caps institutional labels  */
  --tracking-wide:  .32em;  /* masthead / system lines          */

  /* big graphic numerals (Hickman / Muller data-page voice) */
  --num-xl:   4.5rem;    /* hero holdings figure              */
  --num-lg:   3.25rem;   /* section numbers 01 / 02          */
  --num-md:   1.5rem;    /* legend counts                    */

  /* rule-weight hierarchy — structure you can see */
  --rule-hair:  1px;
  --rule-mid:   2px;
  --rule-bold:  3px;

  /* ── SPACING / GRID ──────────────────────────────────────── */
  --measure: 68ch;       /* max line length for body                       */
  --gutter:  2rem;
  --baseline: 1.6;       /* generous; whitespace is the look               */
  --margin-col: 15rem;   /* width of the annotation margin column on docs  */
  --col-index: 3.5rem;   /* left index-number column on the finding aid    */

  /* ── FIELD-RECORD GRID (asymmetric Swiss, 4-column) ──────────
     Col 1 = locked 75px tracking sidebar (serials, vertical rules,
     small-caps anchors). Cols 2–4 = document body on a rigid
     baseline. Structural dividers are crisp hairlines only. */
  --col-track:   75px;
  --field-maxw:  1200px;
  --field-gutter: 1.75rem;
  --baseline-px: 25px;   /* rigid vertical rhythm — lines align across cols */
  --body-size:   15px;   /* sterile IBM Plex Mono body                      */

  /* RGB channels so structural rules can be true low-opacity hairlines */
  --accent-rgb: 58,107,138;
  --alarm-rgb:  160,48,48;
  --ghost-rgb:  244,240,230;
  --ink-rgb:    26,26,26;
  --hairline:        rgba(var(--accent-rgb), .12);
  --hairline-faint:  rgba(var(--accent-rgb), .06);
  --reg-mark:        rgba(var(--accent-rgb), .35);  /* registration crosshairs */
  /* registration cross (+) used for blueprint corner marks */
  --cross: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='11'%3E%3Cpath d='M5.5 0v11M0 5.5h11' stroke='%233A6B8A' stroke-opacity='0.55' stroke-width='1'/%3E%3C/svg%3E");

  --space-1: .375rem;
  --space-2: .75rem;
  --space-3: 1.25rem;
  --space-4: 2rem;
  --space-5: 3.25rem;
  --space-6: 5rem;

  --maxw: 1140px;        /* finding-aid / shell max width                  */

  /* ── TEXTURE ─────────────────────────────────────────────── */
  --grain-opacity: .045; /* paper grain garnish — ≤6%, off by default      */
}

/* ============================================================
   REGISTER MIXINS
   Set on <body> (or any container) to switch the whole palette.
   ============================================================ */
.register-institutional{
  --ground:  var(--void);
  --surface: var(--void-2);
  --body:    var(--ghost);
  --label:   var(--steel);
  --label-dim: var(--steel-dim);
  --rule:    var(--rule-dark);
  --link:    var(--accent-hi);
  --display-face: var(--font-mono);
  --body-face:    var(--font-sans);
  color: var(--body);
  background: var(--ground);
}
.register-recovered{
  --ground:  var(--parchment);
  --surface: var(--parchment-2);
  --body:    var(--el-ink);
  --label:   var(--secondary);
  --label-dim: #9A927F;
  --rule:    var(--rule-warm);
  --link:    var(--accent);
  --display-face: var(--font-display);
  --body-face:    var(--font-serif);
  color: var(--body);
  background: var(--ground);
}

/* ── FACTION COLOUR RESOLUTION (for knockout blocks + crests) ──
   The page declares data-faction; --fac-color resolves to that hue.
   Used ONLY by knockout headers, crests and rules — never as a wash. */
[data-faction]{ --fac-color: var(--accent); }
[data-faction="authority"]{ --fac-color: var(--fac-authority); }
[data-faction="chen"]     { --fac-color: var(--fac-chen); }
[data-faction="church"]   { --fac-color: var(--fac-church); }
[data-faction="revel"]    { --fac-color: var(--fac-revel); }
[data-faction="scionfall"]{ --fac-color: var(--fac-scion); }
[data-faction="journal"]  { --fac-color: var(--fac-journal); }

/* ── PAPER-GRAIN GARNISH ──────────────────────────────────────
   A single faint grain overlay, ≤6%. Opt-in: add .grain to <body>.
   No scanlines, no vignette. */
.grain::after{
  content:'';
  position:fixed; inset:0; z-index:1; pointer-events:none;
  opacity:var(--grain-opacity);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  mix-blend-mode:overlay;
}

/* ── FACTION TAG — the ONLY way faction colour is allowed to show ──
   A small-caps mono label preceded by a 2px rule / dot. Never fills. */
.fac{
  display:inline-flex; align-items:center; gap:.5em;
  font-family:var(--font-mono); font-size:var(--t-micro);
  letter-spacing:var(--tracking-label); text-transform:uppercase;
  color:var(--label);
}
.fac::before{
  content:''; width:2px; height:.95em; background:var(--steel);
  display:inline-block;
}
.fac[data-fac="authority"]::before{ background:var(--fac-authority); }
.fac[data-fac="chen"]::before     { background:var(--fac-chen); }
.fac[data-fac="church"]::before   { background:var(--fac-church); }
.fac[data-fac="revel"]::before    { background:var(--fac-revel); }
.fac[data-fac="scion"]::before,
.fac[data-fac="scionfall"]::before{ background:var(--fac-scion); }
.fac[data-fac="journal"]::before  { background:var(--fac-journal); }

/* dot variant */
.fac-dot{ width:7px; height:7px; border-radius:50%; background:var(--steel);
  display:inline-block; flex-shrink:0; vertical-align:middle; }
.fac-dot[data-fac="authority"]{ background:var(--fac-authority); }
.fac-dot[data-fac="chen"]     { background:var(--fac-chen); }
.fac-dot[data-fac="church"]   { background:var(--fac-church); }
.fac-dot[data-fac="revel"]    { background:var(--fac-revel); }
.fac-dot[data-fac="scion"],
.fac-dot[data-fac="scionfall"]{ background:var(--fac-scion); }
.fac-dot[data-fac="journal"]  { background:var(--fac-journal); }
