/* Self-hosted faces. Every family the public shell uses is served from our
   own origin — no request reaches a webfont host — while the typography
   stays exactly what the v9.3 design specified: Newsreader for prose,
   Space Grotesk for interface, Inter for numerals, IBM Plex Mono for the
   labels and metadata that carry most of the site. */
@font-face{font-family:"Newsreader";font-style:italic;font-weight:400;font-display:swap;src:url("../fonts/newsreader-gf/newsreader-gf-400-italic-latin-ext.c8eb9a42b5ad.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;}
@font-face{font-family:"Newsreader";font-style:italic;font-weight:400;font-display:swap;src:url("../fonts/newsreader-gf/newsreader-gf-400-italic-latin.96616af417c8.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:"Newsreader";font-style:normal;font-weight:400;font-display:swap;src:url("../fonts/newsreader-gf/newsreader-gf-400-latin-ext.40f89707c10e.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;}
@font-face{font-family:"Newsreader";font-style:normal;font-weight:400;font-display:swap;src:url("../fonts/newsreader-gf/newsreader-gf-400-latin.0a301b6df4c7.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:"Newsreader";font-style:normal;font-weight:500;font-display:swap;src:url("../fonts/newsreader-gf/newsreader-gf-500-latin-ext.40f89707c10e.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;}
@font-face{font-family:"Newsreader";font-style:normal;font-weight:500;font-display:swap;src:url("../fonts/newsreader-gf/newsreader-gf-500-latin.0a301b6df4c7.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:"Newsreader";font-style:normal;font-weight:600;font-display:swap;src:url("../fonts/newsreader-gf/newsreader-gf-600-latin-ext.40f89707c10e.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;}
@font-face{font-family:"Newsreader";font-style:normal;font-weight:600;font-display:swap;src:url("../fonts/newsreader-gf/newsreader-gf-600-latin.0a301b6df4c7.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:"Space Grotesk";font-style:normal;font-weight:400;font-display:swap;src:url("../fonts/space-grotesk-gf/space-grotesk-gf-400-latin-ext.dea099b7d5a5.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;}
@font-face{font-family:"Space Grotesk";font-style:normal;font-weight:400;font-display:swap;src:url("../fonts/space-grotesk-gf/space-grotesk-gf-400-latin.25ea4a783c12.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:"Space Grotesk";font-style:normal;font-weight:500;font-display:swap;src:url("../fonts/space-grotesk-gf/space-grotesk-gf-500-latin-ext.dea099b7d5a5.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;}
@font-face{font-family:"Space Grotesk";font-style:normal;font-weight:500;font-display:swap;src:url("../fonts/space-grotesk-gf/space-grotesk-gf-500-latin.25ea4a783c12.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:"Space Grotesk";font-style:normal;font-weight:600;font-display:swap;src:url("../fonts/space-grotesk-gf/space-grotesk-gf-600-latin-ext.dea099b7d5a5.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;}
@font-face{font-family:"Space Grotesk";font-style:normal;font-weight:600;font-display:swap;src:url("../fonts/space-grotesk-gf/space-grotesk-gf-600-latin.25ea4a783c12.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:"Space Grotesk";font-style:normal;font-weight:700;font-display:swap;src:url("../fonts/space-grotesk-gf/space-grotesk-gf-700-latin-ext.dea099b7d5a5.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;}
@font-face{font-family:"Space Grotesk";font-style:normal;font-weight:700;font-display:swap;src:url("../fonts/space-grotesk-gf/space-grotesk-gf-700-latin.25ea4a783c12.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:"Inter";font-style:normal;font-weight:500;font-display:swap;src:url("../fonts/inter/inter-500-latin-ext.01ba6c2a184b.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;}
@font-face{font-family:"Inter";font-style:normal;font-weight:500;font-display:swap;src:url("../fonts/inter/inter-500-latin.65850a373e25.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:"Inter";font-style:normal;font-weight:600;font-display:swap;src:url("../fonts/inter/inter-600-latin-ext.01ba6c2a184b.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;}
@font-face{font-family:"Inter";font-style:normal;font-weight:600;font-display:swap;src:url("../fonts/inter/inter-600-latin.65850a373e25.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:"Inter";font-style:normal;font-weight:700;font-display:swap;src:url("../fonts/inter/inter-700-latin-ext.01ba6c2a184b.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;}
@font-face{font-family:"Inter";font-style:normal;font-weight:700;font-display:swap;src:url("../fonts/inter/inter-700-latin.65850a373e25.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:"IBM Plex Mono";font-style:normal;font-weight:400;font-display:swap;src:url("../fonts/ibm-plex-mono/ibm-plex-mono-400-latin-ext.17a5b2a15bf5.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;}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:400;font-display:swap;src:url("../fonts/ibm-plex-mono/ibm-plex-mono-400-latin.814fe1615d4d.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:"IBM Plex Mono";font-style:normal;font-weight:500;font-display:swap;src:url("../fonts/ibm-plex-mono/ibm-plex-mono-500-latin-ext.216ee1a35b06.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;}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:500;font-display:swap;src:url("../fonts/ibm-plex-mono/ibm-plex-mono-500-latin.6708425c446b.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:"IBM Plex Mono";font-style:normal;font-weight:600;font-display:swap;src:url("../fonts/ibm-plex-mono/ibm-plex-mono-600-latin-ext.6041b3192dc3.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;}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:600;font-display:swap;src:url("../fonts/ibm-plex-mono/ibm-plex-mono-600-latin.e71a597e376e.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;}
/* Libertinus (maths symbols) and Iosevka (mono fallback) are not on any
   webfont host and were already vendored. */
@font-face { font-family: "Libertinus Serif"; font-style: normal; font-weight: 400; font-display: swap;
  src: url("../fonts/libertinus/libertinus-serif-latin-400-normal.17be673f9065.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: "Libertinus Serif"; font-style: normal; font-weight: 400; font-display: swap;
  src: url("../fonts/libertinus/libertinus-serif-latin-ext-400-normal.cfe8f85e75eb.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; }
@font-face { font-family: "Libertinus Serif"; font-style: normal; font-weight: 400; font-display: swap;
  src: url("../fonts/libertinus/libertinus-serif-greek-400-normal.3cf6f49938bd.woff2") format("woff2");
  unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF; }
@font-face { font-family: "Libertinus Serif"; font-style: normal; font-weight: 400; font-display: swap;
  src: url("../fonts/libertinus/libertinus-serif-symbols-400-normal.46284e8bc7ca.woff2") format("woff2");
  unicode-range: U+2080-2089,U+2135,U+221A; }
@font-face { font-family: "Libertinus Serif"; font-style: italic; font-weight: 400; font-display: swap;
  src: url("../fonts/libertinus/libertinus-serif-latin-400-italic.774aded17ad1.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: "Libertinus Serif"; font-style: italic; font-weight: 400; font-display: swap;
  src: url("../fonts/libertinus/libertinus-serif-latin-ext-400-italic.11486be4a774.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; }
@font-face { font-family: "Libertinus Serif"; font-style: italic; font-weight: 400; font-display: swap;
  src: url("../fonts/libertinus/libertinus-serif-greek-400-italic.15602cce8603.woff2") format("woff2");
  unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF; }
@font-face { font-family: "Libertinus Serif"; font-style: normal; font-weight: 700; font-display: swap;
  src: url("../fonts/libertinus/libertinus-serif-latin-700-normal.583ab70b9307.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: "Libertinus Serif"; font-style: normal; font-weight: 700; font-display: swap;
  src: url("../fonts/libertinus/libertinus-serif-latin-ext-700-normal.1ac51de2f024.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; }
@font-face { font-family: "Libertinus Serif"; font-style: normal; font-weight: 700; font-display: swap;
  src: url("../fonts/libertinus/libertinus-serif-greek-700-normal.bddad64ec15d.woff2") format("woff2");
  unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF; }
@font-face { font-family: "Iosevka"; font-style: normal; font-weight: 400; font-display: swap;
  src: url("../fonts/iosevka/iosevka-latin-400-normal.fa9812e7fe0e.woff2") format("woff2"); }
@font-face { font-family: "Iosevka"; font-style: normal; font-weight: 500; font-display: swap;
  src: url("../fonts/iosevka/iosevka-latin-500-normal.1c02fb892408.woff2") format("woff2"); }
@font-face { font-family: "Iosevka"; font-style: normal; font-weight: 600; font-display: swap;
  src: url("../fonts/iosevka/iosevka-latin-600-normal.5525fdd02b57.woff2") format("woff2"); }

/* ============================================================ TOKENS
   Carried over from assets/css/site.css so this drops straight in.       */
:root{
  --paper:#F6F7F9; --paper-raised:#FFFFFF;
  --ink:#131A24; --ink-muted:#5B6672;
  --rule:#DDE1E6; --ghost:#C3C9D0;
  --ink-pure:#23459F; --ink-appl:#3577C4; --ink-prog:#16916A;
  --ink-cs:#A06E10; --ink-ai:#8043B0;
  --d1:#1F9D57; --d2:#159AA8; --d3:#3A6FD0; --d4:#8A52C9; --d5:#D17A1A; --d6:#CF3B2F;

  /* the contest band — always ink, in both modes */
  --panel:#101722; --panel-ink:#94A5B9; --panel-rule:rgba(255,255,255,.085);
  --panel-accent:#F0B429;

  /* the hero figure — inverts in dark so the hexagonal seam stays a real edge */
  --fig:#101722; --fig-ink:#94A5B9; --fig-rule:rgba(255,255,255,.09);
  --fig-gap:rgba(78,124,232,.34); --fig-curve:#8FAAEE; --fig-stair:#EEF2F7;
  --fig-accent:#F0B429; --fig-strong:#FFFFFF; --fig-depth:#FFFFFF; --fig-depth-o:1;
  --fig-pure:#8FAAEE; --fig-appl:#C2D8FB; --fig-prog:#5FB394;
  --fig-cs:#D9BE84; --fig-ai:#B189C4;

  /* the stat mosaic */
  --mos-a:#E2CC98; --mos-a-ink:#131A24;
  --mos-b:#F2EADC; --mos-b-ink:#131A24;
  --mos-c:#17263F; --mos-c-ink:#FFFFFF; --mos-c-acc:#E2CC98;
  --mos-line:rgba(19,26,36,.17); --mos-ink:#23459F; --mos-acc:#C99A2E;
  --mos-flick-a:#4E7CE8; --mos-flick-b:#E2CC98;

  --font-serif:"Newsreader","Libertinus Serif",Georgia,serif;
  --font-display:"Space Grotesk",Inter,ui-sans-serif,-apple-system,"Segoe UI",sans-serif;
  --font-numeric:"Inter","Avenir Next",Arial,sans-serif;
  --font-mono:"IBM Plex Mono","Iosevka",ui-monospace,"SF Mono",Menlo,monospace;
  --radius:2px;
  --pad:clamp(20px,4.4vw,64px);
  --shell:1520px;
  color-scheme:light;
}
@media (prefers-color-scheme:dark){ html:not([data-theme="light"]){
  --paper:#10141B; --paper-raised:#171D26;
  --ink:#E6E9ED; --ink-muted:#93A0AE;
  --rule:#262E3A; --ghost:#333B47;
  --ink-pure:#6E93E8; --ink-appl:#A6C4F6; --ink-prog:#5FB394;
  --ink-cs:#C29A5A; --ink-ai:#B189C4;
  --d1:#4AC97E; --d2:#46C2D8; --d3:#7B9BE8; --d4:#B98CF0; --d5:#E0913A; --d6:#E0574A;
  --panel:#0B1018; --panel-rule:rgba(255,255,255,.07);
  --fig:#EDF0F4; --fig-ink:#5B6672; --fig-rule:rgba(19,26,36,.11);
  --fig-gap:rgba(46,91,211,.20); --fig-curve:#2E5BD3; --fig-stair:#131A24;
  --fig-accent:#9A6B0E; --fig-strong:#131A24; --fig-depth:#0B1018; --fig-depth-o:.9;
  --fig-pure:#23459F; --fig-appl:#3577C4; --fig-prog:#16916A;
  --fig-cs:#A06E10; --fig-ai:#8043B0;
  --mos-a:#463C25; --mos-a-ink:#F2E6CA;
  --mos-b:#1B222D; --mos-b-ink:#E6E9ED;
  --mos-c:#0A1628; --mos-c-ink:#FFFFFF; --mos-c-acc:#D9BE84;
  --mos-line:rgba(255,255,255,.15); --mos-ink:#6E93E8; --mos-acc:#C79B3F;
  --mos-flick-a:#4E7CE8; --mos-flick-b:#D9BE84;
  color-scheme:dark;
}}
html[data-theme="dark"]{
  --paper:#10141B; --paper-raised:#171D26;
  --ink:#E6E9ED; --ink-muted:#93A0AE;
  --rule:#262E3A; --ghost:#333B47;
  --ink-pure:#6E93E8; --ink-appl:#A6C4F6; --ink-prog:#5FB394;
  --ink-cs:#C29A5A; --ink-ai:#B189C4;
  --d1:#4AC97E; --d2:#46C2D8; --d3:#7B9BE8; --d4:#B98CF0; --d5:#E0913A; --d6:#E0574A;
  --panel:#0B1018; --panel-rule:rgba(255,255,255,.07);
  --fig:#EDF0F4; --fig-ink:#5B6672; --fig-rule:rgba(19,26,36,.11);
  --fig-gap:rgba(46,91,211,.20); --fig-curve:#2E5BD3; --fig-stair:#131A24;
  --fig-accent:#9A6B0E; --fig-strong:#131A24; --fig-depth:#0B1018; --fig-depth-o:.9;
  --fig-pure:#23459F; --fig-appl:#3577C4; --fig-prog:#16916A;
  --fig-cs:#A06E10; --fig-ai:#8043B0;
  --mos-a:#463C25; --mos-a-ink:#F2E6CA;
  --mos-b:#1B222D; --mos-b-ink:#E6E9ED;
  --mos-c:#0A1628; --mos-c-ink:#FFFFFF; --mos-c-acc:#D9BE84;
  --mos-line:rgba(255,255,255,.15); --mos-ink:#6E93E8; --mos-acc:#C79B3F;
  --mos-flick-a:#4E7CE8; --mos-flick-b:#D9BE84;
  color-scheme:dark;
}

/* ============================================================ BASE */
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--paper);color:var(--ink);
  font-family:var(--font-serif);font-size:1.0625rem;line-height:1.6;
  -webkit-font-smoothing:antialiased;
  transition:background-color .3s ease,color .3s ease}
a{color:inherit;text-decoration:none}
h1,h2,h3,h4,p,figure{margin:0}
img,svg{display:block;max-width:100%}
:focus-visible{outline:2px solid var(--ink);outline-offset:3px}
::selection{background:color-mix(in srgb,var(--ink-pure) 20%,transparent)}
html.no-js .js-only{display:none!important}
.sr-only{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
.skip-link{position:absolute;left:-9999px;top:0;z-index:100;font-family:var(--font-mono);
  font-size:.8rem;background:var(--paper-raised);border:1px solid var(--rule);padding:8px 12px}
.skip-link:focus-visible{left:12px;top:12px}

.shell{max-width:var(--shell);margin:0 auto;padding-inline:var(--pad)}
.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}
.kicker{font-family:var(--font-mono);font-size:.6875rem;letter-spacing:.2em;
  text-transform:uppercase;color:var(--ink-muted)}
.aleph{font-family:var(--font-mono);font-variant-numeric:tabular-nums;letter-spacing:.05em;font-weight:500}
.aleph .ax{font-family:"Libertinus Serif","Times New Roman",Times,"Apple Symbols","Segoe UI Symbol",serif;font-weight:400}
.k-pure{color:var(--ink-pure)}.k-appl{color:var(--ink-appl)}
.k-prog{color:var(--ink-prog)}
.k-cs{color:var(--ink-cs)}.k-ai{color:var(--ink-ai)}

/* ============================================================ HEADER */
header.site{position:sticky;top:0;z-index:40;background:color-mix(in srgb,var(--paper) 86%,transparent);
  backdrop-filter:blur(14px);border-bottom:1px solid var(--rule)}
header.site .bar{max-width:var(--shell);margin:0 auto;padding:0 var(--pad);height:62px;
  display:flex;align-items:center;justify-content:space-between;gap:24px}
.hgroup{display:flex;align-items:center;gap:40px;min-width:0}
.brand{display:flex;align-items:center;gap:9px;font-family:var(--font-display);
  font-weight:600;letter-spacing:-.02em;font-size:1.0625rem}
.brand-logo{display:block;width:28px;height:28px;flex:0 0 auto}
html[data-theme="dark"] .brand-logo{filter:invert(1)}
@media(prefers-color-scheme:dark){html:not([data-theme="light"]) .brand-logo{filter:invert(1)}}
nav.sections{display:flex;gap:26px}
nav.sections a{font-family:var(--font-display);font-size:.8125rem;font-weight:500;
  letter-spacing:.04em;text-transform:uppercase;color:var(--ink-muted);
  padding:4px 0;border-bottom:1px solid transparent;transition:color .18s,border-color .18s}
nav.sections a:hover{color:var(--ink);border-bottom-color:var(--ink)}
.hactions{display:flex;align-items:center;gap:10px}
.srch{display:flex;align-items:center;gap:12px;height:32px;padding:0 10px 0 12px;
  background:transparent;border:1px solid var(--rule);color:var(--ink-muted);
  font-family:var(--font-mono);font-size:.75rem;cursor:pointer;border-radius:var(--radius);
  transition:border-color .18s,color .18s}
.srch:hover{border-color:var(--ink);color:var(--ink)}
.srch .keys{opacity:.6;font-size:.6875rem}
.iconb{width:32px;height:32px;display:grid;place-items:center;background:none;
  border:1px solid transparent;color:var(--ink-muted);cursor:pointer;border-radius:var(--radius)}
.iconb:hover{color:var(--ink);border-color:var(--rule)}
.iconb svg{width:16px;height:16px}
/* These are anchors, and an inline box ignores height, which left the two
   labels on different baselines. inline-flex makes the height real and
   centres both identically. */
.btn-ghost,.btn-solid{display:inline-flex;align-items:center;justify-content:center;font-family:var(--font-display);font-size:.8125rem;font-weight:500;line-height:1;height:32px;padding:0 15px;border-radius:var(--radius);cursor:pointer;letter-spacing:.01em;text-decoration:none}
.btn-ghost{background:none;border:1px solid transparent;color:var(--ink-muted)}
.btn-ghost:hover{color:var(--ink)}
.btn-solid{background:var(--ink);color:var(--paper);border:1px solid var(--ink)}
.btn-solid:hover{opacity:.86}
@media(max-width:960px){nav.sections,.srch{display:none}}

/* ============================================================ HERO */
.hero{position:relative;border-bottom:1px solid var(--rule);overflow:hidden;
  min-height:min(calc(100vh - 62px),940px);display:flex;align-items:center}
@supports (height:100svh){.hero{min-height:min(calc(100svh - 62px),940px)}}
.hex-wrap{position:absolute;inset:0;overflow:hidden}
.hero-inner{pointer-events:none}
#linkWheel{position:absolute;z-index:3;right:clamp(24px,4.4vw,72px);
  top:var(--rule-h,13px);bottom:var(--rule-h,13px);
  width:clamp(210px,19vw,272px);pointer-events:none;
  clip-path:inset(0 -80vw 0 0)}
.wheel-card{position:absolute;left:0;top:0;width:100%;display:block;
  pointer-events:auto;border-radius:0;padding:11px 13px 12px;
  background:color-mix(in srgb,var(--fig) 84%,transparent);
  border:1px solid color-mix(in srgb,var(--fig-stair) 26%,transparent);
  backdrop-filter:blur(3px);will-change:transform,opacity;
  transform-origin:100% 50%}
.wheel-card:hover{border-color:color-mix(in srgb,var(--fig-stair) 62%,transparent)}
.wc-face{display:block;opacity:calc(1 - var(--fade,0)*3.2)}
.wc-code{display:block;font-family:var(--font-mono);font-size:.625rem;
  letter-spacing:.16em;text-transform:uppercase}
.wc-title{display:block;margin-top:7px;font-family:var(--font-display);font-weight:500;
  font-size:.875rem;line-height:1.3;color:var(--fig-stair);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.wc-blocks{position:absolute;inset:11px 13px 12px;display:flex;flex-direction:column;
  gap:6px;justify-content:center;opacity:calc((var(--fade,0) - 0.26)*3.4);pointer-events:none}
.wc-blocks i{display:block;height:7px;background:var(--fig-stair);opacity:.34}
.wc-blocks i:nth-child(2){opacity:.22}
.wc-blocks i:nth-child(3){opacity:.14}
.wc-pure{color:var(--fig-pure)}.wc-appl{color:var(--fig-appl)}
.wc-prog{color:var(--fig-prog)}
.wc-cs{color:var(--fig-cs)}.wc-ann{color:var(--fig-ink)}
.wc-con{color:var(--fig-accent)}
@media(max-width:900px){#linkWheel{display:none}}
.hero-inner a,.hero-inner button{pointer-events:auto}
#tileField{position:absolute;inset:0;width:100%;height:100%;max-width:none;display:block}
#fieldLayer{position:absolute;max-width:none;display:block;
  transform-origin:50% 50%;will-change:transform}
.hero-inner{position:relative;z-index:2;max-width:var(--shell);margin:0 auto;width:100%;
  padding:clamp(64px,9vw,120px) var(--pad)}
.hero-copy{max-width:min(560px,46vw)}
.fields-pick{margin-top:clamp(34px,4.6vw,54px)}
.fp-row{display:flex;gap:10px}
.fp{width:clamp(48px,4.3vw,62px);aspect-ratio:1;display:grid;place-items:center;
  border-radius:var(--radius);border:1.5px solid var(--fc);
  background:color-mix(in srgb,var(--fc) 12%,transparent);
  font-family:var(--font-numeric);font-weight:700;font-size:1.4rem;color:var(--fc);
  font-variant-numeric:lining-nums tabular-nums;
  transition:background .18s ease,color .18s ease,transform .18s ease}
.fp:hover,.fp:focus-visible{background:var(--fc);color:var(--paper);transform:translateY(-2px)}
.f-pure{--fc:var(--ink-pure)}.f-appl{--fc:var(--ink-appl)}
.f-prog{--fc:var(--ink-prog)}
.f-cs{--fc:var(--ink-cs)}.f-ai{--fc:var(--ink-ai)}
.fp-label{min-height:1.5em;margin-top:16px;font-family:var(--font-mono);font-size:.75rem;
  letter-spacing:.18em;text-transform:uppercase;color:var(--fl,var(--ink-muted));
  opacity:0;transform:translateY(-3px);transition:opacity .18s ease,transform .18s ease}
.fp-label.on{opacity:1;transform:none}
.display .ht-word{white-space:nowrap}
.display .ht-ch{position:relative;display:inline-block;text-align:center;
  transition:color .08s ease,text-shadow .08s ease}
.display .ht-ch.glitching{color:transparent;text-shadow:none}
.display .ht-ch.glitching::after{content:attr(data-flick);position:absolute;inset:0;
  display:grid;place-items:center;color:var(--ink-pure);font-family:var(--font-numeric);
  font-size:.82em;font-weight:700;letter-spacing:0;
  text-shadow:2px 0 var(--ink-ai),-2px 0 var(--ink-prog),0 0 14px currentColor}
.display{font-family:var(--font-display);font-weight:600;text-transform:uppercase;
  font-size:clamp(2.5rem,5.6vw,5rem);line-height:.9;letter-spacing:-.035em;
  text-wrap:balance}
/* ===================================================== SECTION RULE ===== */
/* the same four-field gradient the hero is capped with, as a page divider */
.grad-rule{height:8px;border:0;margin:0;display:block;
  background:linear-gradient(90deg,var(--ink-pure),var(--ink-appl),var(--ink-prog),
    var(--ink-cs),var(--ink-ai),var(--ink-pure));
  background-size:1200px 100%;background-repeat:repeat-x;
  animation:grad-slide 26s linear infinite}
@keyframes grad-slide{from{background-position:0 0}to{background-position:-1200px 0}}
@media(prefers-reduced-motion:reduce){.grad-rule{animation:none}}

/* ============================================================ STAT MOSAIC */
.mosaic-band{}
.mosaic{max-width:var(--shell);margin:0 auto;padding:clamp(20px,2.4vw,38px) var(--pad);
  display:grid;gap:10px;
  grid-template-columns:1.06fr 1fr .92fr 1fr;
  grid-template-rows:1fr 1fr;
  grid-template-areas:"a n b c" "e e g c";
  min-height:clamp(236px,20vw,290px)}
.tile{position:relative;overflow:hidden;border-radius:var(--radius);
  border:2px solid color-mix(in srgb,var(--ink) 24%,transparent);
  display:flex;flex-direction:column;justify-content:center;
  padding:clamp(15px,1.4vw,22px);min-width:0}
.m-a{grid-area:a}.m-b{grid-area:b}.m-c{grid-area:c}
.m-e{grid-area:e}.m-g{grid-area:g}.m-n{grid-area:n}
.t-tan{background:var(--mos-a);color:var(--mos-a-ink)}
.t-cream{background:var(--mos-b);color:var(--mos-b-ink)}
.t-navy{background:var(--mos-c);color:var(--mos-c-ink)}
.t-stat b{display:block;font-family:var(--font-numeric);font-weight:700;
  font-variant-numeric:lining-nums tabular-nums;
  letter-spacing:-.025em;line-height:.9;font-size:clamp(1.7rem,2.5vw,2.4rem);opacity:1}
.t-stat span{display:block;margin-top:10px;font-family:var(--font-mono);
  font-size:.6875rem;letter-spacing:.18em;text-transform:uppercase;opacity:.72}
.t-art{padding:0;background:var(--mos-b);min-height:0;position:relative}
.t-art canvas{position:absolute;inset:0;display:block;width:100%;height:100%}
@media(max-width:900px){
  .mosaic{grid-template-columns:1fr 1fr;grid-template-rows:none;
    grid-auto-rows:minmax(104px,auto);min-height:0;
    grid-template-areas:"a b" "g g" "n n" "c c" "e e"}
  .m-c{min-height:230px}
  .m-e{min-height:140px}
}
@media(max-width:900px){
  .hero{min-height:0;display:flex;flex-direction:column}
  .hero-inner{order:1;padding:clamp(44px,9vw,72px) var(--pad) 40px}
  .hero-copy{max-width:100%}
  .hex-wrap{order:2;position:relative;inset:auto;width:100%;height:clamp(210px,34vw,280px);
    border-top:1px solid var(--rule)}
  #tileField{left:-46%;width:146%}
  #fieldLayer{margin-left:-46%}
}

/* ============================================================ SECTION HEADS */
section.band{padding-block:clamp(26px,3vw,42px) clamp(56px,6vw,86px)}
.shead{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:24px;
  padding-bottom:18px;border-bottom:1px solid var(--ink)}
.shead h2{font-family:var(--font-display);font-weight:600;text-transform:uppercase;
  letter-spacing:-.03em;font-size:clamp(1.75rem,3.2vw,2.75rem);line-height:1}
.shead .kicker{display:block;margin-bottom:14px}
.more{font-family:var(--font-mono);font-size:.75rem;letter-spacing:.1em;text-transform:uppercase;
  color:var(--ink-muted);white-space:nowrap;border-bottom:1px solid var(--ghost);padding-bottom:3px;
  transition:color .18s,border-color .18s}
.more:hover{color:var(--ink);border-color:var(--ink)}

/* ============================================================ FIELD TALLY */
.fields{display:grid;grid-template-columns:152px minmax(0,1fr);gap:clamp(28px,5vw,72px);
  align-items:center;padding:30px 0 4px}
.pie{width:136px;height:136px}
.pie-seg{transition:opacity .2s}
.pie-seg:hover{opacity:.75}
.pc-pure{fill:var(--ink-pure)}.pc-appl{fill:var(--ink-appl)}
.pc-prog{fill:var(--ink-prog)}
.pc-cs{fill:var(--ink-cs)}.pc-ai{fill:var(--ink-ai)}
.pie-total{font-family:var(--font-numeric);font-weight:700;font-size:34px;
  font-variant-numeric:lining-nums tabular-nums;
  letter-spacing:-.03em;fill:var(--ink)}
.pie-total.is-three-digit{font-size:27px;letter-spacing:-.055em}
.field-list{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:0;list-style:none;padding:0;margin:0}
.field-list li{padding:0 16px;border-left:1px solid var(--rule)}
.field-list li:first-child{padding-left:0;border-left:0}
.field-list a{display:block}
.field-list .fnum{font-family:var(--font-mono);font-size:1.375rem;font-weight:500}
.field-list h3{font-family:var(--font-display);font-size:.75rem;font-weight:500;
  text-transform:uppercase;letter-spacing:.08em;margin-top:6px}
.field-list p{font-size:.875rem;color:var(--ink-muted);margin-top:5px;line-height:1.4}
.field-list a:hover h3{text-decoration:underline;text-underline-offset:3px}
@media(max-width:900px){
  .fields{grid-template-columns:1fr;gap:26px}
  .field-list{grid-template-columns:repeat(2,1fr);gap:22px 0}
  .field-list li:nth-child(odd){padding-left:0;border-left:0}
}

/* ============================================================ CATALOG */
.catalog{margin-top:30px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  grid-auto-rows:1fr;gap:20px;align-items:stretch}
.entry{display:flex;flex-direction:column;position:relative;height:100%;min-width:0;
  background:var(--paper-raised);border:1px solid var(--rule);border-radius:var(--radius);
  padding:25px 20px 0;transition:border-color .2s ease,transform .2s ease}
.entry:hover{border-color:var(--tint,var(--ink))}
.entry-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;
  min-width:0;
  padding-bottom:15px;border-bottom:1px solid var(--rule)}
.entry-id{display:flex;flex-direction:column;gap:6px;min-width:0}
.entry-id .aleph{font-size:.9375rem}
.entry-id time{font-family:var(--font-mono);font-size:.75rem;letter-spacing:.06em;
  color:var(--ink-muted)}

.glyph{flex:1 1 auto;min-width:0;align-self:stretch;display:flex;
  align-items:center;justify-content:center;
  font-family:var(--font-serif);font-size:2.9rem;line-height:1;white-space:nowrap;
  color:var(--ink-muted);opacity:.34;overflow:hidden;transition:opacity .2s}
.entry:hover .glyph{opacity:.5}
.glyph.g-sm{font-size:2rem;letter-spacing:.01em}
.glyph sup{font-size:.6em;vertical-align:.45em}
.diffpill{flex:none;height:50px;display:flex;flex-direction:column;align-items:flex-end;
  justify-content:center;gap:3px;border:1px solid var(--rule);border-radius:var(--radius);
  padding:0 11px}
.diffpill small{font-family:var(--font-mono);font-size:.5625rem;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink-muted)}
.diffpill strong{font-family:var(--font-mono);font-size:1rem;font-weight:600;
  font-variant-numeric:tabular-nums;color:var(--dc)}
.entry h3{margin-top:16px;min-width:0;font-family:var(--font-serif);font-weight:600;
  font-size:1.3125rem;line-height:1.2;letter-spacing:-.01em;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.entry p{margin-top:9px;color:var(--ink-muted);font-size:.875rem;line-height:1.5;
  min-width:0;max-width:100%;padding-bottom:9px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.entry-foot{margin-top:auto;padding:14px 0;border-top:1px solid var(--rule);
  display:flex;align-items:center;gap:9px;flex-wrap:nowrap;min-width:0;
  font-family:var(--font-mono);font-size:.6875rem;letter-spacing:.08em;
  text-transform:uppercase;color:var(--ink-muted)}
.entry-foot .by{flex:1 1 auto;min-width:0;overflow:hidden;color:var(--ink);font-size:.625rem;
  font-weight:500;letter-spacing:.02em;text-overflow:ellipsis;white-space:nowrap}
.entry-foot .rt,.entry-foot .entry-votes{flex:0 0 auto;white-space:nowrap}
.tag{border:1px solid var(--rule);border-radius:var(--radius);padding:4px 10px;color:var(--tint)}
.entry-foot .sep,.entry-foot .go{margin-left:auto;color:var(--ink);opacity:0;transform:translateX(-4px);
  transition:opacity .2s,transform .2s}
.entry:hover .go{opacity:1;transform:none}

/* the newest entry is not a card — it is the plate at the head of the catalog */
@media(max-width:820px){
    }

.t-pure{--tint:var(--ink-pure)}.t-appl{--tint:var(--ink-appl)}
.t-prog{--tint:var(--ink-prog)}
.t-cs{--tint:var(--ink-cs)}.t-ai{--tint:var(--ink-ai)}
.t-contest{--tint:var(--ink-cs)}.t-changelog{--tint:var(--ink-prog)}
.t-notice{--tint:var(--ink-pure)}
.d-1{--dc:var(--d1)}.d-2{--dc:var(--d2)}.d-3{--dc:var(--d3)}
.d-4{--dc:var(--d4)}.d-5{--dc:var(--d5)}.d-6{--dc:var(--d6)}
@media(max-width:1120px){.catalog{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:720px){.catalog{grid-template-columns:1fr}}

/* ============================================================ CONTEST BAND */
.contest{position:relative;background:var(--panel);color:#fff;overflow:hidden}
.contest-mesh{position:absolute;inset:-72px;opacity:.5;pointer-events:none;will-change:transform;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='104' viewBox='0 0 120 104'%3E%3Cg fill='none' stroke='%23ffffff' stroke-opacity='.13' stroke-width='1'%3E%3Cpath d='M30 0 L60 17.3 L60 51.9 L30 69.2 L0 51.9 L0 17.3 Z'/%3E%3Cpath d='M90 0 L120 17.3 L120 51.9 L90 69.2 L60 51.9 L60 17.3 Z'/%3E%3Cpath d='M30 69.2 L60 86.5 L60 121 L30 138 L0 121 L0 86.5 Z'/%3E%3Cpath d='M90 69.2 L120 86.5 L120 121 L90 138 L60 121 L60 86.5 Z'/%3E%3C/g%3E%3C/svg%3E")}
.contest-inner{position:relative;z-index:1;max-width:var(--shell);margin:0 auto;
  padding:clamp(26px,3vw,42px) var(--pad) clamp(46px,5vw,72px)}
.contest .shead{border-bottom-color:rgba(255,255,255,.42)}
.contest .shead h2{color:#fff}
.contest .more{color:var(--panel-ink);border-bottom-color:rgba(255,255,255,.3)}
.contest .more:hover{color:#fff;border-bottom-color:#fff}

.contest-grid{margin-top:30px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  gap:20px}
.ctc{display:grid;grid-template-columns:auto minmax(0,1fr);gap:clamp(18px,2vw,28px);
  align-items:center;padding:22px clamp(20px,2vw,28px);
  border:1px solid var(--panel-rule);border-radius:var(--radius);
  background:rgba(255,255,255,.035);
  transition:border-color .2s ease,background .2s ease,transform .2s ease}
.ctc.has-difficulty{grid-template-columns:auto minmax(0,1fr) 72px}
.ctc:hover{border-color:color-mix(in srgb,var(--panel-accent) 55%,transparent);
  background:rgba(255,255,255,.06);transform:translateY(-2px)}
.sigil{width:76px;height:86px;flex:none;display:grid;place-items:center;position:relative}
.sigil svg{position:absolute;inset:0;width:100%;height:100%}
.sigil b{position:relative;font-family:var(--font-mono);font-size:1.125rem;font-weight:500;
  letter-spacing:.08em;color:var(--panel-accent)}
.ctc-name{display:block;font-family:var(--font-display);font-weight:600;
  text-transform:uppercase;letter-spacing:-.02em;line-height:1.02;
  font-size:clamp(1.25rem,1.9vw,1.75rem)}
.ctc-copy{min-width:0}
.ctc-meta{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
.ctc-meta span{display:inline-flex;align-items:baseline;gap:7px;
  border:1px solid var(--panel-rule);border-radius:var(--radius);padding:5px 10px;
  font-family:var(--font-mono);font-size:.6875rem;letter-spacing:.1em;text-transform:uppercase}
.ctc-meta small{color:var(--panel-ink)}
.ctc-meta b{font-weight:500;color:#fff}
.ctc-difficulty{display:grid;width:72px;height:72px;place-content:center;text-align:center;
  border:1px solid var(--dc);border-radius:0;background:color-mix(in srgb,var(--dc) 8%,transparent);
  color:var(--dc)}
.ctc-difficulty small{display:block;font:400 .47rem/1 var(--font-mono);letter-spacing:.1em;text-transform:uppercase}
.ctc-difficulty strong{display:block;margin-top:8px;font:700 1.35rem/1 var(--font-numeric);
  font-variant-numeric:lining-nums tabular-nums;letter-spacing:-.035em}
@media(max-width:900px){.contest-grid{grid-template-columns:1fr}}

/* ============================================================ DISPATCH LEDGER */
.ledger{margin-top:6px}
.row{display:grid;grid-template-columns:132px 118px minmax(0,1fr) 40px;align-items:baseline;
  gap:20px;padding:26px 0;border-bottom:1px solid var(--rule);transition:padding .2s ease}
.row:hover{padding-left:10px}
.row time{font-family:var(--font-mono);font-size:.8125rem;letter-spacing:.06em;color:var(--ink-muted)}
.row .rtag{font-family:var(--font-mono);font-size:.625rem;letter-spacing:.16em;text-transform:uppercase;
  color:var(--tint,var(--ink-muted));font-weight:500}
.row h3{font-family:var(--font-serif);font-weight:600;font-size:1.375rem;letter-spacing:-.01em}
.row p{color:var(--ink-muted);font-size:.9375rem;margin-top:5px}
.row .go{justify-self:end;color:var(--ghost);font-size:1rem;transition:color .2s,transform .2s}
.row:hover .go{color:var(--ink);transform:translate(3px,-3px)}
@media(max-width:760px){
  .row{grid-template-columns:1fr 30px;gap:6px 16px}
  .row time{grid-column:1;font-size:.75rem}
  .row .rtag{grid-column:1;margin-bottom:2px}
  .row h3{grid-column:1}
  .row p{grid-column:1}
  .row .go{grid-column:2;grid-row:1/span 4}
}

/* ============================================================ FOOTER */
footer.site{padding:clamp(48px,6vw,76px) 0 34px;margin-top:0}
.fgrid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr);
  gap:clamp(28px,4vw,56px);align-items:center}
.fnote{font-family:var(--font-mono);font-size:.8125rem;letter-spacing:.04em;
  color:var(--ink-muted);padding:14px 18px;
  border:1px dashed color-mix(in srgb,var(--ink) 26%,transparent)}
.fbrand .brand{font-size:1.25rem}
.fbrand p{margin-top:16px;color:var(--ink-muted);font-size:.9375rem;max-width:34ch}
.fcol h4{font-family:var(--font-mono);font-size:.625rem;letter-spacing:.2em;text-transform:uppercase;
  color:var(--ink-muted);margin-bottom:16px}
.fcol ul{list-style:none;padding:0;margin:0;display:grid;gap:9px}
.fcol a{font-size:.9375rem;color:var(--ink-muted);transition:color .18s}
.fcol a:hover{color:var(--ink)}
.fbase{margin-top:clamp(36px,5vw,60px);padding-top:22px;border-top:1px solid var(--rule);
  display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap;
  font-family:var(--font-mono);font-size:.6875rem;letter-spacing:.08em;color:var(--ink-muted)}
@media(max-width:820px){.fgrid{grid-template-columns:repeat(2,1fr)}}

@media(prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

/* ============================================================ LIVE SITE SHELL
   The rules below extend v9.3 to Django-owned controls and public pages. They
   deliberately use the same flat paper, one-pixel rules, square geometry, and
   three-font hierarchy; no legacy background or card treatment is inherited. */
body{min-height:100vh}
main.wrap,.policy-wrap,.account-wrap,.art{width:min(100%,var(--shell));margin-inline:auto;
  padding:clamp(42px,6vw,84px) var(--pad) clamp(70px,8vw,110px)}
.meta{font-family:var(--font-mono);font-size:.6875rem;letter-spacing:.1em;
  text-transform:uppercase;color:var(--ink-muted)}
.empty-state{padding:34px 0;color:var(--ink-muted);font-family:var(--font-mono);
  font-size:.72rem;letter-spacing:.12em;text-transform:uppercase}
.empty-state-dark{color:var(--panel-ink)}

/* production header additions */
header.site .left,header.site .right{display:flex;align-items:center}
header.site .left{gap:40px}.right.hactions{gap:10px}
header.site .brand .name{font:inherit}
nav.sections a[aria-current="page"]{color:var(--ink);border-bottom-color:var(--ink)}
.auth-guest{display:flex;align-items:center;gap:4px}.auth-user{position:relative}
/* padding:0 and overflow:hidden matter: the UA button padding shrank the
   content box to 20×30, so a photo rendered as a tall strip inside the frame. */
.avatar{display:grid;place-items:center;width:32px;height:32px;padding:0;overflow:hidden;
  border:1px solid color-mix(in srgb,var(--avatar-color) 65%,var(--rule));
  border-radius:var(--radius);background:color-mix(in srgb,var(--avatar-color) 12%,var(--paper));
  color:var(--avatar-color);font:600 .66rem var(--font-mono);line-height:1;cursor:pointer}
.avatar img{display:block;width:100%;height:100%;object-fit:cover}
/* A photo is cropped in a circle on Settings, so it is shown in one here. */
.avatar.has-photo{border-radius:50%}
.account-menu-panel{position:absolute;right:0;top:42px;width:250px;z-index:60;border:1px solid var(--ink);
  background:var(--paper-raised);box-shadow:8px 8px 0 color-mix(in srgb,var(--ink) 9%,transparent)}
.account-menu-panel[hidden]{display:none}.account-menu-panel header{position:static;padding:16px;border-bottom:1px solid var(--rule);background:none}
.account-menu-panel header strong,.account-menu-panel header span{display:block}.account-menu-panel header strong{font:600 .9rem var(--font-display)}
.account-menu-panel header span{margin-top:3px;color:var(--ink-muted);font:400 .62rem var(--font-mono);text-transform:uppercase}
.account-menu-panel nav{display:grid}.account-menu-panel nav a{padding:11px 16px;border-bottom:1px solid var(--rule)}
.account-menu-panel nav a:hover,.account-menu-panel nav a:focus-visible{outline:0;background:color-mix(in srgb,var(--ink) 10%,transparent);color:var(--ink);box-shadow:inset 3px 0 var(--ink)}
.account-menu-panel nav span,.account-menu-panel nav small{display:block}.account-menu-panel nav span{font:500 .78rem var(--font-display);text-transform:uppercase}
.account-menu-panel nav small{margin-top:2px;color:var(--ink-muted);font:.65rem var(--font-mono)}
/* Log out is a menu row like the ones above it, so it highlights like one. */
.account-menu-panel form{padding:0}.account-menu-panel form button{display:block;width:100%;padding:11px 16px;border:0;background:none;color:var(--ink-muted);font:.68rem var(--font-mono);text-transform:uppercase;text-align:left;cursor:pointer;transition:background .15s ease,color .15s ease}.account-menu-panel form button:hover,.account-menu-panel form button:focus-visible{outline:0;background:color-mix(in srgb,var(--ink) 10%,transparent);color:var(--ink);box-shadow:inset 3px 0 var(--ink)}
.nav-toggle{display:none;width:36px;height:32px;border:1px solid var(--rule);border-radius:var(--radius);background:none;color:var(--ink);cursor:pointer}
.nav-toggle span{display:block;width:15px;height:1px;margin:3px auto;background:currentColor}
.mobile-nav[hidden]{display:none!important}
.theme-moon{display:none}html[data-theme="dark"] .theme-sun{display:none}html[data-theme="dark"] .theme-moon{display:block}
@media(prefers-color-scheme:dark){html:not([data-theme="light"]) .theme-sun{display:none}html:not([data-theme="light"]) .theme-moon{display:block}}

/* live homepage additions kept intentionally small */
.entry-votes{display:inline-flex;gap:7px;white-space:nowrap}.entry-votes i,.entry-votes b{font-style:normal;font-weight:400}
.entry-votes i{color:var(--ink-prog)}.entry-votes b{color:var(--d6)}

/* public mastheads */
.page-head{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;
  gap:28px;min-height:236px;padding:72px 0 22px;border-bottom:1px solid var(--ink);overflow:hidden}
.page-head::before{content:"ALEPHZERO / " attr(data-channel);position:absolute;left:0;top:22px;
  font:500 .625rem var(--font-mono);letter-spacing:.2em;text-transform:uppercase;color:var(--ink-muted)}
.page-head::after{content:attr(data-code);position:absolute;right:0;bottom:-.27em;z-index:-1;
  color:var(--ink);opacity:.045;font:700 clamp(7rem,15vw,12rem)/1 var(--font-numeric);letter-spacing:-.06em}
.page-head h1{font:600 clamp(3.4rem,7vw,6.4rem)/.86 var(--font-display);
  letter-spacing:-.055em;text-transform:uppercase}.page-head .meta{max-width:38ch;padding-bottom:5px;text-align:right}

/* archive — a single index, not a wall of cards */
.toolbar{display:flex;align-items:center;gap:10px;padding:22px 0 18px;border-bottom:1px solid var(--rule)}
.toolbar .spacer{flex:1}.tool-btn,.toolbar select{height:36px;padding:0 12px;border:1px solid var(--rule);
  border-radius:var(--radius);background:transparent;color:var(--ink);font:500 .67rem var(--font-mono);
  letter-spacing:.09em;text-transform:uppercase;cursor:pointer}
.toolbar select{min-width:118px}.archive-search{display:flex;align-items:center;gap:8px;flex:0 1 390px;height:36px;
  padding:0 11px;border:1px solid var(--rule);background:transparent}.archive-search:focus-within{border-color:var(--ink)}
.archive-search span{color:var(--ink-muted);font-family:var(--font-mono)}.archive-search input{width:100%;border:0;outline:0;background:transparent;color:var(--ink);font:.72rem var(--font-mono)}
.drawer{display:none;padding:20px 0;border-bottom:1px solid var(--rule)}.drawer.open{display:block}
.facets{display:grid;grid-template-columns:1.4fr 1.2fr .8fr 1.2fr;gap:28px}.f-label{margin-bottom:10px;
  color:var(--ink-muted);font:500 .62rem var(--font-mono);letter-spacing:.13em;text-transform:uppercase}
.chips{display:flex;flex-wrap:wrap;gap:7px}.chip input{position:absolute;opacity:0;pointer-events:none}.chip span{display:block;padding:6px 9px;
  border:1px solid var(--rule);font:400 .64rem var(--font-mono);cursor:pointer}.chip input:checked+span{border-color:var(--chip,var(--ink));color:var(--chip,var(--ink));background:color-mix(in srgb,var(--chip,var(--ink)) 8%,transparent)}
.c-pure{--chip:var(--ink-pure)}.c-appl{--chip:var(--ink-appl)}.c-prog{--chip:var(--ink-prog)}.c-cs{--chip:var(--ink-cs)}.c-ai{--chip:var(--ink-ai)}
.range-pair,.num-pair{display:flex;align-items:center;gap:8px}.range-pair output,.num-pair{font:.65rem var(--font-mono)}
.dual{display:grid;flex:1}.dual input{grid-area:1/1;width:100%;accent-color:var(--ink-pure)}.num-pair input{width:76px;height:34px;padding:0 8px;border:1px solid var(--rule);background:transparent;color:var(--ink);font:.7rem var(--font-mono)}
.archive-table{position:relative;margin-top:20px;border:1px solid var(--rule);background:var(--paper-raised)}
.archive-table::before{content:"";position:absolute;left:-1px;right:-1px;top:-1px;height:7px;background:linear-gradient(90deg,var(--ink-pure),var(--ink-appl),var(--ink-prog),var(--ink-cs),var(--ink-ai))}
.a-head,.a-row{display:grid;grid-template-columns:88px minmax(210px,1.6fr) minmax(112px,.7fr) 92px 62px 72px 62px;gap:14px;align-items:center}
.a-head{padding:24px 18px 11px;border-bottom:1px solid var(--rule);color:var(--ink-muted);font:500 .6rem var(--font-mono);letter-spacing:.13em;text-transform:uppercase}
.a-head button{padding:0;border:0;background:none;color:inherit;font:inherit;letter-spacing:inherit;text-align:left;text-transform:inherit;cursor:pointer}
.a-row{position:relative;min-height:78px;padding:14px 18px;border-bottom:1px solid var(--rule)}.a-row:last-child{border-bottom:0}
.a-row:hover{background:color-mix(in srgb,var(--tint) 4%,transparent)}.a-row.e-pure{--tint:var(--ink-pure)}.a-row.e-appl{--tint:var(--ink-appl)}.a-row.e-prog{--tint:var(--ink-prog)}.a-row.e-cs{--tint:var(--ink-cs)}.a-row.e-ai{--tint:var(--ink-ai)}
.a-title{font:500 1.04rem var(--font-serif)}.a-topic,.a-date,.a-min,.a-votes{color:var(--ink-muted);font:.68rem var(--font-mono)}
.a-votes{display:flex;gap:6px}.a-votes i,.a-votes b{font-style:normal;font-weight:400}.a-votes i{color:var(--ink-prog)}.a-votes b{color:var(--d6)}
.diff{display:inline-grid;place-items:center;min-width:46px;padding:5px 7px;border:1px solid currentColor;color:var(--dc,var(--ink-muted));font:500 .7rem var(--font-mono)}
.diff.d1{--dc:var(--d1)}.diff.d2{--dc:var(--d2)}.diff.d3{--dc:var(--d3)}.diff.d4{--dc:var(--d4)}.diff.d5{--dc:var(--d5)}.diff.d6{--dc:var(--d6)}
.a-empty{padding:30px;text-align:center;color:var(--ink-muted);font:.75rem var(--font-mono)}

/* logs use the v9.3 ledger rhythm with an expanded timestamp */
  align-items:center;padding:24px 0;border-bottom:1px solid var(--rule)}

/* contest directory and public portal */
.contest-directory-head{width:min(100%,var(--shell));margin-inline:auto;padding:0 var(--pad)}.contest-directory{margin-top:24px}.contest-directory .contest-inner{padding-top:38px}
.back-link{display:inline-flex;gap:9px;margin-bottom:22px;color:var(--ink-muted);font:500 .64rem var(--font-mono);letter-spacing:.12em;text-transform:uppercase}.back-link:hover{color:var(--ink)}
.contest-start-dialog{max-width:560px;padding:0;border:1px solid var(--ink);background:var(--paper-raised);color:var(--ink)}.contest-start-dialog::backdrop{background:rgba(5,9,14,.72)}.contest-dialog-panel{padding:28px}.contest-dialog-kicker{font:.62rem var(--font-mono);letter-spacing:.13em;text-transform:uppercase;color:var(--ink-muted)}.contest-dialog-panel h2{margin-top:12px;font:600 2rem var(--font-display);text-transform:uppercase}.contest-dialog-panel p,.contest-dialog-panel ul{margin-top:14px}.contest-dialog-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:22px}.contest-dialog-actions button{padding:11px 14px;border:1px solid var(--ink);font:.66rem var(--font-mono);text-transform:uppercase;cursor:pointer}.contest-dialog-cancel{background:transparent;color:var(--ink)}.contest-dialog-confirm{background:var(--ink);color:var(--paper)}
.contest-loading-screen{position:fixed;inset:0;z-index:100;display:grid;place-content:center;text-align:center;background:color-mix(in srgb,var(--panel) 96%,transparent);color:#fff}.contest-loading-screen[hidden]{display:none}.contest-loading-signal{display:flex;justify-content:center;gap:8px}.contest-loading-screen strong{margin-top:18px;font:600 1.4rem var(--font-display);text-transform:uppercase}.contest-loading-screen p{margin-top:8px;color:var(--panel-ink)}

/* article transmission */
body[data-ink="pure"]{--focus:var(--ink-pure)}body[data-ink="appl"]{--focus:var(--ink-appl)}body[data-ink="prog"]{--focus:var(--ink-prog)}body[data-ink="cs"]{--focus:var(--ink-cs)}body[data-ink="ai"]{--focus:var(--ink-ai)}
.article-search{position:relative;z-index:6;display:grid;grid-template-columns:minmax(180px,.65fr) minmax(300px,1.35fr);gap:18px;margin-top:16px;padding:16px;border:1px solid var(--rule);background:var(--paper-raised)}
.article-search-copy{align-self:center}.article-search-copy strong{display:block;font:600 .72rem var(--font-display);letter-spacing:.04em;text-transform:uppercase}.article-search-copy span{display:block;margin-top:4px;color:var(--ink-muted);font-size:.78rem}
.article-search-control{position:relative}.article-search-field{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:9px;height:42px;padding:0 7px 0 12px;border:1px solid var(--rule);background:var(--paper)}.article-search-field:focus-within{border-color:var(--focus)}
.article-search-field .ax{color:var(--focus);font-family:var(--font-serif)}.article-search-field input{width:100%;min-width:0;border:0;outline:0;background:none;color:var(--ink);font:.72rem var(--font-mono)}.article-search-field input::placeholder{color:var(--ghost)}
.article-search-full{height:28px;padding:0 9px;border:1px solid var(--rule);background:none;color:var(--ink-muted);font:.56rem var(--font-mono);letter-spacing:.07em;text-transform:uppercase;cursor:pointer}.article-search-full:hover{border-color:var(--ink);color:var(--ink)}
.article-search-status{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.article-search-results{position:absolute;left:0;right:0;top:calc(100% + 6px);overflow:hidden;padding:4px;border:1px solid var(--ink);background:var(--paper-raised);box-shadow:7px 7px 0 color-mix(in srgb,var(--ink) 8%,transparent)}.article-search-results[hidden]{display:none}
.article-search-result{display:grid;grid-template-columns:4.8rem minmax(0,1fr) auto;gap:12px;align-items:baseline;padding:9px 10px;border-bottom:1px solid var(--rule)}.article-search-result:last-child{border-bottom:0}.article-search-result:hover,.article-search-result:focus-visible{background:color-mix(in srgb,var(--result-accent,var(--ink)) 7%,transparent)}.article-search-result .aleph{color:var(--result-accent,var(--ink));font-size:.72rem}.article-search-result strong{overflow:hidden;font:500 .94rem var(--font-serif);text-overflow:ellipsis;white-space:nowrap}.article-search-result small{color:var(--ink-muted);font:.57rem var(--font-mono)}.article-search-empty{padding:10px;color:var(--ink-muted);font:.68rem var(--font-mono)}

/* dispatch detail */

/* public authentication and recovery */
.account-wrap{max-width:1240px}.account-stage{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);border:1px solid var(--rule);background:var(--paper-raised)}
.account-stage-compact{max-width:1050px;margin-inline:auto}.account-intro{padding:clamp(38px,5vw,62px);background:var(--panel);color:#fff}.account-index,.account-panel-head{font:.61rem var(--font-mono);letter-spacing:.16em;text-transform:uppercase}.account-index{color:var(--panel-ink)}
.account-intro h1{margin-top:28px;font:600 clamp(3rem,5vw,4.8rem)/.88 var(--font-display);letter-spacing:-.05em;text-transform:uppercase}.account-intro p{margin-top:22px;color:var(--panel-ink)}.account-intro dl{margin:34px 0 0}.account-intro dl div{display:flex;justify-content:space-between;gap:16px;padding:10px 0;border-top:1px solid var(--panel-rule);color:var(--panel-ink);font:.6rem var(--font-mono);text-transform:uppercase}.account-intro dd{margin:0}
.account-panel{padding:clamp(34px,5vw,56px)}.account-panel-head{display:flex;justify-content:space-between;padding-bottom:14px;border-bottom:1px solid var(--rule);color:var(--ink-muted)}.account-panel h2{margin-top:24px;font:600 1.75rem var(--font-display);text-transform:uppercase}.account-panel-copy{margin-top:6px;color:var(--ink-muted)}
.account-form{display:grid;gap:14px;margin-top:24px}.account-field{display:grid;gap:7px}.account-label-line{display:flex;justify-content:space-between;font:500 .72rem var(--font-display)}.account-label-line span:last-child,.account-help{color:var(--ink-muted);font:.57rem var(--font-mono);text-transform:uppercase}.account-input{width:100%;height:48px;padding:0 12px;border:1px solid var(--rule);border-radius:var(--radius);background:var(--paper);color:var(--ink);font:1rem var(--font-display)}textarea.account-input{height:auto;min-height:110px;padding-block:10px}.account-input:focus{outline:0;border-color:var(--ink-pure)}
.account-submit,.account-secondary{display:flex;justify-content:space-between;align-items:center;min-height:46px;padding:0 14px;border:1px solid var(--ink);border-radius:var(--radius);background:var(--ink);color:var(--paper);font:500 .66rem var(--font-mono);letter-spacing:.12em;text-transform:uppercase;cursor:pointer}.account-secondary{background:transparent;color:var(--ink)}
.account-panel-links,.account-switch{display:flex;justify-content:space-between;gap:16px;margin-top:16px;color:var(--ink-muted);font:.62rem var(--font-mono)}.account-switch{display:block}.account-panel a{text-decoration:underline;text-underline-offset:3px}.account-form-errors,.account-field-errors{padding:9px 11px;border-left:2px solid var(--d6);color:var(--d6);font:.68rem var(--font-mono)}
.account-signal{position:relative;min-height:430px;padding:clamp(44px,7vw,82px);overflow:hidden;border:1px solid var(--rule);background:var(--paper-raised)}.account-signal h1{max-width:11ch;margin-top:28px;font:600 clamp(3rem,7vw,6rem)/.88 var(--font-display);text-transform:uppercase}.account-signal p{max-width:54ch;margin-top:20px;color:var(--ink-muted)}.account-signal-glyph{position:absolute;right:6%;bottom:-.18em;color:var(--ink-pure);opacity:.07;font:600 13rem/1 var(--font-display)}.account-signal-actions,.account-closed-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:28px}

/* policy and contact records */
.policy-wrap{max-width:1280px}
.contact-console{display:grid;grid-template-columns:1fr 1fr;border:1px solid var(--rule);border-top:0;background:var(--paper-raised)}.contact-primary{padding:clamp(34px,5vw,58px);border-right:1px solid var(--rule)}.contact-primary h2,.security-channel h2{margin-top:14px;font:600 1.8rem var(--font-display);text-transform:uppercase}.contact-primary p{margin-top:14px;color:var(--ink-muted)}.contact-email{display:flex;justify-content:space-between;margin-top:25px;padding:14px 0;border-top:1px solid var(--ink);border-bottom:1px solid var(--ink);font:.75rem var(--font-mono)}.contact-routing{display:grid;grid-template-columns:1fr 1fr}.contact-routing article{padding:24px;border-right:1px solid var(--rule);border-bottom:1px solid var(--rule)}.contact-routing article:nth-child(even){border-right:0}.contact-routing span{color:var(--ink-muted);font:.58rem var(--font-mono);text-transform:uppercase}.contact-routing h3{margin-top:10px;font:600 1rem var(--font-display);text-transform:uppercase}.contact-routing p{margin-top:8px;color:var(--ink-muted);font-size:.9rem}.security-channel{display:grid;grid-template-columns:1fr 1.5fr auto;gap:30px;align-items:center;padding:32px;margin-top:18px;border:1px solid var(--rule);background:var(--paper-raised)}

/* command palette, messages, and production footer */
.pal-overlay{display:none;position:fixed;inset:0;z-index:80;background:rgba(6,10,16,.7)}.pal-overlay.open{display:block}
.pal{display:none;position:fixed;left:50%;top:14vh;z-index:81;width:min(680px,calc(100vw - 32px));transform:translateX(-50%);border:1px solid var(--ink);background:var(--paper-raised);box-shadow:12px 12px 0 color-mix(in srgb,var(--ink) 13%,transparent)}.pal.open{display:block}
.pal-input{display:flex;align-items:center;gap:12px;padding:14px 16px;border-bottom:1px solid var(--rule)}.pal-input .ax{color:var(--ink-pure);font-family:var(--font-serif)}.pal-input input{width:100%;border:0;outline:0;background:transparent;color:var(--ink);font:1rem var(--font-display)}.pal-list{max-height:46vh;overflow:auto}.pal-row{display:grid;grid-template-columns:80px 1fr auto;gap:12px;padding:11px 16px;border-bottom:1px solid var(--rule);cursor:pointer}.pal-row.sel{background:color-mix(in srgb,var(--ink-pure) 7%,transparent)}.pal-foot{display:flex;gap:18px;padding:10px 16px;color:var(--ink-muted);font:.58rem var(--font-mono)}.pal-foot b{color:var(--ink)}
.flash-stack{position:fixed;right:18px;top:76px;z-index:70;display:grid;gap:8px}.flash{display:grid;grid-template-columns:22px 1fr;gap:9px;max-width:390px;padding:12px 14px;border:1px solid var(--ink);background:var(--paper-raised);font-size:.9rem;transition:opacity .35s ease,transform .35s ease}.flash.is-leaving{opacity:0;transform:translateX(12px)}@media (prefers-reduced-motion:reduce){.flash{transition:none}}.flash>span{color:var(--ink-pure);font-family:var(--font-mono)}
footer.site{border-top:1px solid var(--rule)}.footer-inner{max-width:var(--shell);margin:0 auto;padding-inline:var(--pad)}
.footer-grid{display:grid;grid-template-columns:minmax(0,1.5fr) repeat(3,minmax(130px,.6fr));gap:clamp(28px,4vw,56px)}
.footer-summary{max-width:34ch}.footer-brand{display:flex;align-items:center;gap:9px;font:600 1.15rem var(--font-display)}.footer-brand .brand-logo{width:34px;height:34px}.footer-stats{display:flex;flex-wrap:wrap;gap:7px;margin-top:16px}.footer-stats span{padding:4px 7px;border:1px solid var(--rule);font:.58rem var(--font-mono);text-transform:uppercase}
.footer-group{display:grid;align-content:start;gap:9px}.footer-group strong{margin-bottom:7px;color:var(--ink-muted);font:500 .625rem var(--font-mono);letter-spacing:.18em;text-transform:uppercase}.footer-group a{color:var(--ink-muted);font-size:.9375rem}.footer-group a:hover{color:var(--ink)}
.footer-base{display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap;margin-top:clamp(36px,5vw,60px);padding-top:22px;border-top:1px solid var(--rule);color:var(--ink-muted);font:.6875rem var(--font-mono);letter-spacing:.08em}.footer-base-copy,.footer-utilities,.footer-legal{display:flex;align-items:center;gap:14px;flex-wrap:wrap}

@media(max-width:960px){
  .nav-toggle{display:block}html:not(.no-js) nav.sections,html:not(.no-js) .srch,html:not(.no-js) .auth-guest{display:none}
  .mobile-nav:not([hidden]){display:grid;grid-template-columns:1fr 1fr;gap:22px;max-height:calc(100vh - 62px);overflow:auto;padding:20px var(--pad) 26px;border-top:1px solid var(--rule);background:var(--paper)}
  .mobile-nav nav,.mobile-nav-utilities{display:grid}.mobile-nav nav a,.mobile-nav-utilities>*{display:flex;justify-content:space-between;gap:14px;padding:11px 0;border-bottom:1px solid var(--rule);font:500 .74rem var(--font-display);text-transform:uppercase}.mobile-nav nav span,.mobile-nav-utilities strong{color:var(--ink-muted);font:400 .62rem var(--font-mono)}
  .facets{grid-template-columns:1fr 1fr}.a-head,.a-row{grid-template-columns:78px minmax(180px,1fr) 108px 80px 58px}.a-head>:nth-child(5),.a-head>:nth-child(6),.a-row .a-min,.a-row .a-votes{display:none}
  .footer-grid{grid-template-columns:repeat(2,1fr)}.footer-summary{grid-column:1/-1}
}
@media(max-width:760px){
  main.wrap,.policy-wrap,.account-wrap,.art{padding-top:30px}.page-head{display:block;min-height:190px;padding-top:64px}.page-head h1{font-size:clamp(2.8rem,13vw,4.1rem)}.page-head .meta{margin-top:16px;text-align:left}.page-head::after{font-size:7rem}
  .mobile-nav:not([hidden]){grid-template-columns:1fr}.toolbar{flex-wrap:wrap}.archive-search{flex-basis:100%;order:-1}.toolbar .spacer,.toolbar>.meta:last-child{display:none}.facets{grid-template-columns:1fr}
  .a-head{display:none}.a-row{grid-template-columns:76px minmax(0,1fr) auto;gap:8px 12px;min-height:94px}.a-row .a-topic{grid-column:2}.a-row .a-date{grid-column:1;grid-row:2}.a-row .diff{grid-column:3;grid-row:1/span 2}.a-row .a-min,.a-row .a-votes{display:none}
  
  .article-search{grid-template-columns:1fr}.article-search-field{grid-template-columns:auto minmax(0,1fr)}.article-search-full{grid-column:1/-1;width:100%}.article-search-result{grid-template-columns:4.2rem minmax(0,1fr)}.article-search-result small{display:none}
  .account-stage{grid-template-columns:1fr}.account-intro{min-height:360px}.contact-console{grid-template-columns:1fr}.contact-primary{border-right:0;border-bottom:1px solid var(--rule)}.security-channel{grid-template-columns:1fr}
  .footer-grid{grid-template-columns:1fr 1fr}.footer-base{display:grid}
}
@media(max-width:430px){
  header.site .bar{padding-inline:20px}.brand .name{font-size:.95rem}.fp-row{gap:7px}.fp{width:50px}.display{font-size:clamp(2.25rem,12.2vw,2.75rem)}.hero-inner{padding-inline:20px}
  .mosaic{padding-inline:20px}.entry{padding-inline:17px}.entry-foot{gap:8px}.ctc{gap:12px;padding:16px 14px}.ctc.has-difficulty{grid-template-columns:58px minmax(0,1fr) 62px}.sigil{width:58px;height:66px}.ctc-difficulty{width:62px;height:62px}.ctc-difficulty strong{font-size:1.12rem}.footer-grid{grid-template-columns:1fr}.footer-summary{grid-column:auto}.contact-routing{grid-template-columns:1fr}.contact-routing article{border-right:0}
}

/* ============================================================ V1.1 DIRECTORIES
   Shared octagon-square masthead and the prototype article ledger. */
.directory-page{min-height:65vh}
.directory-band{position:relative;overflow:hidden;background:var(--paper)}
.directory-band-canvas{position:absolute;display:block;max-width:none;transform-origin:50% 50%;will-change:transform}
.directory-band-inner{position:relative;z-index:2;max-width:var(--shell);min-height:clamp(210px,22vw,286px);
  margin:0 auto;padding:clamp(44px,6vw,74px) var(--pad) clamp(30px,4vw,48px);
  display:flex;flex-direction:column;justify-content:flex-end;pointer-events:none}
.directory-band-inner .kicker{margin-bottom:16px}
.directory-band h1{font-size:clamp(2.6rem,6vw,4.6rem)}
.directory-band-meta{display:flex;flex-wrap:wrap;gap:0;margin-top:20px;color:var(--ink-muted);
  font:.75rem var(--font-mono);font-variant-numeric:tabular-nums;letter-spacing:.14em;text-transform:uppercase}
.directory-band-meta span{padding:0 16px;border-left:1px solid var(--rule)}
.directory-band-meta span:first-child{padding-left:0;border-left:0}
.directory-band-meta b{color:var(--ink);font-weight:500}
.directory-band-count{position:absolute;right:var(--pad);bottom:clamp(10px,1.6vw,22px);z-index:2;
  color:var(--fig-ink);opacity:.38;font:700 clamp(4.6rem,10vw,8.8rem)/.8 var(--font-numeric);
  font-variant-numeric:lining-nums tabular-nums;letter-spacing:-.07em;pointer-events:none}

/* contest registry — flat challenge dossiers, deliberately separate from the
   dark hexagonal contest feature used on the homepage */
.contest-record-directory{max-width:var(--shell);margin:0 auto;padding:clamp(38px,5vw,68px) var(--pad) clamp(72px,8vw,112px)}
.contest-record-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px}
.contest-record{--contest-accent:var(--ink-cs);position:relative;display:grid;
  grid-template-columns:92px minmax(0,1fr) 94px;min-height:218px;overflow:hidden;
  border:1px solid var(--rule);border-left:4px solid var(--contest-accent);background:var(--paper-raised);
  transition:transform .2s,border-color .2s,box-shadow .2s}
.contest-record.status-open{--contest-accent:var(--ink-prog)}
.contest-record.status-closed{--contest-accent:var(--d6)}
.contest-record.status-moderating{--contest-accent:var(--ink-cs)}
.contest-record::after{content:attr(data-edition);position:absolute;right:88px;bottom:-.24em;z-index:0;
  color:var(--contest-accent);opacity:.045;font:700 clamp(5.5rem,9vw,8rem)/1 var(--font-numeric);
  font-variant-numeric:lining-nums tabular-nums;letter-spacing:-.07em;pointer-events:none}
.contest-record:hover{z-index:2;border-color:color-mix(in srgb,var(--contest-accent) 62%,var(--rule));
  transform:translate(-3px,-3px);box-shadow:8px 8px 0 color-mix(in srgb,var(--contest-accent) 14%,transparent)}
.contest-record>span{position:relative;z-index:1}
.contest-record-edition{display:flex;flex-direction:column;align-items:center;justify-content:center;
  border-right:1px solid var(--rule);background:color-mix(in srgb,var(--contest-accent) 5%,transparent)}
.contest-record-edition>span,.contest-record-kicker,.contest-record-meta small,.contest-record-terminal small{
  color:var(--ink-muted);font:500 .55rem var(--font-mono);letter-spacing:.14em;text-transform:uppercase}
.contest-record-edition b{margin-top:10px;color:var(--contest-accent);font:700 1.25rem var(--font-numeric);
  font-variant-numeric:lining-nums tabular-nums;letter-spacing:.08em}
.contest-record-edition i{width:22px;height:2px;margin-top:14px;background:var(--contest-accent)}
.contest-record-main{display:flex;min-width:0;flex-direction:column;justify-content:center;padding:26px 24px}
.contest-record-kicker{color:var(--contest-accent)}
.contest-record-title{max-width:20ch;margin-top:14px;font:600 clamp(1.35rem,2vw,1.9rem)/1.04 var(--font-display);
  letter-spacing:-.035em;text-transform:uppercase}
.contest-record-meta{display:flex;flex-wrap:wrap;gap:14px 20px;margin-top:24px;padding-top:13px;border-top:1px solid var(--rule)}
.contest-record-meta span{display:grid;gap:3px}.contest-record-meta b{font:500 .69rem var(--font-mono);letter-spacing:.07em;text-transform:uppercase}
.contest-record-terminal{display:flex;flex-direction:column;align-items:center;justify-content:center;border-left:1px solid var(--rule)}
.contest-record-terminal strong{margin-top:9px;color:var(--dc,var(--contest-accent));font:700 1.5rem var(--font-numeric);
  font-variant-numeric:lining-nums tabular-nums;letter-spacing:-.035em}
.contest-record-terminal i{position:absolute;right:12px;top:12px;color:var(--ghost);font-style:normal;transition:color .18s,transform .18s}
.contest-record:hover .contest-record-terminal i{color:var(--contest-accent);transform:translate(2px,-2px)}

.article-directory-tools{position:sticky;top:62px;z-index:20;border-bottom:1px solid var(--rule);
  background:color-mix(in srgb,var(--paper) 92%,transparent);backdrop-filter:blur(12px)}
.article-directory-tools-inner{max-width:var(--shell);margin:0 auto;padding:14px var(--pad);
  display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.article-directory-search{display:flex;flex:1 1 240px;min-width:0;height:36px;align-items:center;gap:10px;
  padding:0 12px;border:1px solid var(--rule);border-radius:var(--radius);background:var(--paper-raised);
  transition:border-color .18s}
.article-directory-search:focus-within{border-color:var(--ink)}
.article-directory-search .ax{color:var(--ink-muted);font-family:var(--font-serif)}
.article-directory-search input{flex:1;min-width:0;border:0;outline:0;background:none;color:inherit;
  font:.8125rem var(--font-mono)}
.article-directory-chipbar{display:flex;flex-wrap:wrap;gap:6px}
.article-directory-chip{display:inline-flex;height:30px;align-items:center;gap:7px;padding:0 11px;border:1px solid var(--rule);
  border-radius:var(--radius);background:none;color:var(--ink-muted);cursor:pointer;
  font:.6875rem var(--font-mono);letter-spacing:.1em;text-transform:uppercase;
  transition:border-color .16s,color .16s,background .16s}
.article-directory-chip i{width:8px;height:8px;flex:none;border-radius:1px;background:var(--fc)}
.article-directory-chip:hover{border-color:var(--ghost);color:var(--ink)}
.article-directory-chip.on{border-color:var(--fc);background:color-mix(in srgb,var(--fc) 11%,transparent);color:var(--fc)}
.article-directory-spacer{flex:1 1 auto}
.article-directory-count,.article-directory-hint{color:var(--ink-muted);font:.6875rem var(--font-mono);
  font-variant-numeric:tabular-nums;letter-spacing:.1em;text-transform:uppercase;white-space:nowrap}
.article-directory-count b{color:var(--ink);font-weight:500}
.article-directory-hint{color:var(--ghost)}
.article-directory-sort{position:relative;display:flex;align-items:center;gap:8px;color:var(--ink-muted);
  font:.6875rem var(--font-mono);letter-spacing:.1em;text-transform:uppercase}
.article-directory-sort-button{display:flex;height:32px;min-width:142px;align-items:center;justify-content:space-between;gap:16px;
  padding:0 11px;border:1px solid var(--rule);border-radius:var(--radius);background:var(--paper-raised);color:var(--ink);cursor:pointer;
  font:500 .6875rem var(--font-mono);letter-spacing:.09em;text-transform:uppercase;transition:border-color .16s,box-shadow .16s}
.article-directory-sort-button:hover,.article-directory-sort-button:focus-visible,.article-directory-sort.is-open .article-directory-sort-button{border-color:var(--ink);outline:0}
.article-directory-sort.is-open .article-directory-sort-button{box-shadow:3px 3px 0 color-mix(in srgb,var(--ink) 10%,transparent)}
.article-directory-sort-button i{width:7px;height:7px;border-right:1px solid currentColor;border-bottom:1px solid currentColor;
  transform:translateY(-2px) rotate(45deg);transition:transform .16s}
.article-directory-sort.is-open .article-directory-sort-button i{transform:translateY(2px) rotate(225deg)}
.article-directory-sort-menu{position:absolute;right:0;top:calc(100% + 6px);z-index:40;width:190px;padding:5px;
  border:1px solid var(--ink);background:var(--paper-raised);box-shadow:7px 7px 0 color-mix(in srgb,var(--ink) 11%,transparent)}
.article-directory-sort-menu[hidden]{display:none}.article-directory-sort-menu button{display:flex;width:100%;align-items:center;justify-content:space-between;
  min-height:34px;padding:0 10px;border:0;border-bottom:1px solid var(--rule);background:transparent;color:var(--ink-muted);cursor:pointer;text-align:left;
  font:500 .65rem var(--font-mono);letter-spacing:.09em;text-transform:uppercase}
.article-directory-sort-menu button:last-child{border-bottom:0}.article-directory-sort-menu button:hover,.article-directory-sort-menu button:focus-visible{outline:0;background:color-mix(in srgb,var(--ink) 6%,transparent);color:var(--ink)}
.article-directory-sort-menu button[aria-selected="true"]{color:var(--ink);background:color-mix(in srgb,var(--ink-pure) 8%,transparent)}
.article-directory-sort-menu button[aria-selected="true"]::after{content:"■";color:var(--ink-pure);font-size:.48rem}

.article-directory-ledger{--tint:var(--ink);max-width:var(--shell);margin:0 auto;padding:0 var(--pad) clamp(60px,7vw,96px)}
.article-directory-head,.article-directory-row{display:grid;
  grid-template-columns:5.4rem 2.6rem minmax(0,1fr) 8.6rem 5rem 3.4rem 6.9rem;
  gap:0 18px;align-items:center}
.article-directory-head{padding:22px 0 11px;border-bottom:1px solid var(--ink);color:var(--ink-muted);
  font:600 .625rem var(--font-display);letter-spacing:.13em;text-transform:uppercase}
.article-directory-head .is-right{text-align:right}
.article-directory-row{position:relative;padding:17px 0;border-bottom:1px solid var(--rule);
  transition:padding-left .18s ease,background-color .18s ease}
.article-directory-row::before{content:"";position:absolute;left:-14px;top:-1px;bottom:-1px;width:3px;
  background:var(--tint);opacity:0;transition:opacity .18s ease}
.article-directory-row:hover,.article-directory-row.cursor{padding-left:14px;
  background:linear-gradient(90deg,color-mix(in srgb,var(--tint) 7%,transparent),transparent 55%)}
.article-directory-row:hover::before,.article-directory-row.cursor::before{opacity:1}
.article-directory-row[hidden]{display:none}
.article-directory-row .aleph{color:var(--tint);font-size:.9375rem}
.article-directory-symbol{overflow:hidden;color:var(--ink-muted);opacity:.42;text-align:center;white-space:nowrap;
  font:1.5rem/1 var(--font-serif);transition:opacity .18s,color .18s}
.article-directory-row:hover .article-directory-symbol,.article-directory-row.cursor .article-directory-symbol{color:var(--tint);opacity:.9}
.article-directory-main{min-width:0}.article-directory-main h2{font:600 1.3125rem/1.25 var(--font-serif);
  letter-spacing:-.01em;transition:color .18s}
.article-directory-row:hover .article-directory-main h2,.article-directory-row.cursor .article-directory-main h2{color:var(--tint)}
.article-directory-main p{margin-top:4px;overflow:hidden;color:var(--ink-muted);font-size:.875rem;line-height:1.45;
  text-overflow:ellipsis;white-space:nowrap}
.article-directory-field{display:flex;min-width:0;align-items:center;gap:8px;color:var(--tint);
  font:.6875rem var(--font-mono);letter-spacing:.1em;text-transform:uppercase}
.article-directory-field i{width:7px;height:7px;flex:none;border-radius:1px;background:currentColor}
.article-directory-field span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.article-directory-date,.article-directory-minutes{color:var(--ink-muted);font:.75rem var(--font-mono);
  font-variant-numeric:tabular-nums;letter-spacing:.03em}.article-directory-minutes{text-align:right}
.article-directory-difficulty{display:flex;align-items:center;justify-content:flex-end;gap:10px}
.article-directory-difficulty b{width:2.9rem;color:var(--dc);text-align:right;font:600 .9375rem var(--font-mono);
  font-variant-numeric:tabular-nums}
.article-directory-meter{display:flex;flex:none;gap:2px}.article-directory-meter i{width:4px;height:15px;border-radius:1px;background:var(--rule)}
.article-directory-meter i.on{background:var(--dc)}
.article-directory-pager{display:flex;align-items:center;justify-content:center;gap:6px;flex-wrap:wrap;padding:clamp(28px,3.4vw,44px) 0 0}
.article-directory-pager[hidden]{display:none}.article-directory-pager button{min-width:34px;height:34px;padding:0 9px;
  border:1px solid var(--rule);border-radius:var(--radius);background:var(--paper-raised);color:var(--ink-muted);cursor:pointer;
  font:500 .8125rem var(--font-mono);font-variant-numeric:tabular-nums}
.article-directory-pager button:hover:not(:disabled){border-color:var(--ink);color:var(--ink)}
.article-directory-pager button[aria-current="page"]{border-color:var(--ink);background:var(--ink);color:var(--paper)}
.article-directory-pager button:disabled{opacity:.32;cursor:default}.article-directory-pager .gap{width:20px;color:var(--ghost);text-align:center;font:.8125rem var(--font-mono)}
.article-directory-empty,.directory-empty-static{padding:70px 0;color:var(--ink-muted);text-align:center;
  font:.75rem var(--font-mono);letter-spacing:.09em;text-transform:uppercase}
.article-directory-empty button{margin-left:8px;padding:5px 9px;border:1px solid var(--rule);background:none;color:inherit;cursor:pointer;font:inherit;text-transform:inherit}

/* flat square cards for the announcement directory */
.dispatch-directory{max-width:var(--shell);margin:0 auto;padding:clamp(34px,4vw,54px) var(--pad) clamp(70px,8vw,110px)}
.dispatch-directory{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}
.dispatch-directory-card{position:relative;min-height:210px;padding:28px;border:1px solid var(--rule);background:var(--paper-raised);overflow:hidden}
.dispatch-directory-card::before{content:"";position:absolute;inset:-1px -1px auto;height:4px;background:var(--tint)}
.dispatch-directory-card time{display:flex;align-items:baseline;gap:8px;color:var(--ink-muted);font:.62rem var(--font-mono);text-transform:uppercase}
.dispatch-directory-card time strong{color:var(--tint);font:700 2rem/1 var(--font-numeric)}
.dispatch-directory-tag{display:inline-block;margin-top:22px;color:var(--tint);font:500 .6rem var(--font-mono);letter-spacing:.14em;text-transform:uppercase}
.dispatch-directory-card h2{max-width:25ch;margin-top:10px;font:600 1.45rem/1.14 var(--font-serif)}
.dispatch-directory-card p{max-width:58ch;margin-top:10px;color:var(--ink-muted);font-size:.92rem;line-height:1.5}
.dispatch-directory-open{position:absolute;right:24px;top:25px;color:var(--ghost);transition:color .18s,transform .18s}
.dispatch-directory-card:hover .dispatch-directory-open{color:var(--tint);transform:translate(3px,-3px)}

@media(max-width:1180px){
  .article-directory-head,.article-directory-row{grid-template-columns:5rem 2.4rem minmax(0,1fr) 4.6rem 3.2rem 6.5rem}
  .article-directory-head .directory-field-column,.article-directory-field{display:none}
  .article-directory-hint{display:none}
}
@media(max-width:820px){
  .contest-record-grid{grid-template-columns:1fr}
  .article-directory-tools{position:static;top:auto}.article-directory-search{flex-basis:100%}.article-directory-spacer{display:none}
  .article-directory-head{display:none}.article-directory-main p{display:none}
  .article-directory-row{grid-template-columns:4.6rem minmax(0,1fr) 5.6rem;gap:4px 14px;align-items:start;padding:15px 0}
  .article-directory-symbol,.article-directory-date,.article-directory-minutes{display:none}
  .article-directory-row .aleph,.article-directory-main{grid-row:1}.article-directory-difficulty{grid-row:1;align-self:center}
  .article-directory-difficulty b{width:2.6rem}.dispatch-directory{grid-template-columns:1fr}
}
@media(max-width:720px){
  .directory-band-inner{padding-bottom:26px}.directory-band-meta{font-size:.6875rem}.directory-band-meta span:nth-child(n+3){display:none}
  .directory-band-count{font-size:4.5rem}.article-directory-chipbar{order:3;width:100%}
}
@media(max-width:520px){
  .directory-band h1{font-size:clamp(2rem,10.5vw,2.6rem);letter-spacing:-.045em}
  .contest-record{grid-template-columns:70px minmax(0,1fr);min-height:0}.contest-record-main{padding:22px 18px}
  .contest-record-terminal{grid-column:1/-1;display:grid;grid-template-columns:1fr auto;align-items:center;justify-items:start;
    padding:13px 18px;border-top:1px solid var(--rule);border-left:0}.contest-record-terminal strong{grid-column:2;grid-row:1;margin:0}
  .contest-record-terminal i{display:none}
  .contest-record-meta{gap:11px 15px}.contest-record::after{right:6px;bottom:.05em;font-size:5rem}
  .article-directory-tools-inner{gap:10px}.article-directory-count{margin-left:auto}.article-directory-sort{width:100%;justify-content:space-between}
  .article-directory-sort-button{flex:1}.article-directory-sort-menu{left:auto;right:0;width:calc(100% - 42px)}.article-directory-row{grid-template-columns:4rem minmax(0,1fr) 4.7rem;gap:4px 9px}
  .article-directory-meter{display:none}.article-directory-difficulty b{width:auto}.dispatch-directory-card{padding:23px}
}

/* ============================================================ CONTEST PAGES
   The brief (portal) and the score report. Both speak the contest dialect
   set by the homepage band and the directory dossiers: ink panel, diagonal
   hairlines, the edition numeral, amber accent. The brief is a specification
   sheet — numbered clauses with a section index, a signed marking table, a
   threshold scale, and a status seal. The report is a score card — a ring,
   the same scale with the entrant's mark on it, and a bubble sheet of
   problems. Nothing else on the site uses a ring or a bubble sheet. */
.cp-page,.cr-page{--cx:var(--ink-cs);--focus:var(--cx);min-height:65vh}
.cp-page.status-open{--cx:var(--ink-prog)}.cp-page.status-closed{--cx:var(--d6)}.cp-page.status-moderating{--cx:var(--ink-cs)}

/* ---- brief head: ink panel, hairlines, edition, seal --------------------- */
.cp-head,.cr-head{position:relative;overflow:hidden;color:#fff;background:
    repeating-linear-gradient(-38deg,transparent 0 13px,var(--panel-rule) 13px 14px),
    radial-gradient(90% 120% at 100% 0%,color-mix(in srgb,var(--cx) 26%,transparent),transparent 60%),
    var(--panel);border-bottom:1px solid var(--ink)}
.cp-head-inner,.cr-inner{width:min(100%,1560px);margin-inline:auto;padding-inline:var(--pad)}
.cp-head-inner,.cr-head-inner{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:clamp(24px,4vw,56px);align-items:end;
  padding-top:clamp(44px,6vw,80px);padding-bottom:clamp(36px,4.6vw,60px)}
.cp-kicker,.cr-kicker{display:flex;flex-wrap:wrap;align-items:center;gap:0 10px;margin:0;color:var(--panel-ink);
  font:500 .66rem var(--font-mono);letter-spacing:.16em;text-transform:uppercase}
.cp-kicker a,.cr-kicker a{color:inherit;text-decoration:none}.cp-kicker a:hover,.cr-kicker a:hover{color:#fff}
.cp-kicker .sep,.cr-kicker .sep,.cp-lead .sep,.cr-lead .sep{color:rgba(255,255,255,.24)}
.cp-kicker-status{color:var(--cx)}
.cp-title{max-width:16ch;margin:clamp(16px,2vw,24px) 0 0;color:#fff;font:600 clamp(2.4rem,5.4vw,4.6rem)/.92 var(--font-display);
  letter-spacing:-.045em;text-transform:uppercase;text-wrap:balance}
.cp-lead,.cr-lead{display:flex;flex-wrap:wrap;align-items:center;gap:0 10px;margin:clamp(14px,1.6vw,20px) 0 0;color:var(--panel-ink);
  font:.72rem var(--font-mono);letter-spacing:.08em;text-transform:uppercase}
.cp-entrants{margin:22px 0 0;color:#fff;font:.7rem var(--font-mono);letter-spacing:.1em;text-transform:uppercase}
.cp-entrants b{color:var(--cx);font-weight:600}
.cp-head-edition{display:grid;justify-items:end;gap:6px;color:var(--panel-ink);font:500 .6rem var(--font-mono);letter-spacing:.2em;text-transform:uppercase}
.cp-head-edition b{color:#fff;font:700 clamp(4rem,9vw,8rem)/.85 var(--font-numeric);font-variant-numeric:lining-nums tabular-nums;letter-spacing:-.07em;text-shadow:0 0 0 #fff}
/* The seal: a bordered stamp turned a few degrees, in the status colour. */
.cp-seal{position:absolute;right:var(--pad);top:clamp(28px,4vw,48px);padding:7px 12px;border:2px solid var(--cx);color:var(--cx);
  font:700 .68rem var(--font-mono);letter-spacing:.24em;text-transform:uppercase;transform:rotate(-6deg);
  box-shadow:inset 0 0 0 2px var(--panel),inset 0 0 0 3px var(--cx);opacity:.9}

/* ---- the specification sheet ---------------------------------------------- */
.cp-sheet{width:min(100%,1560px);margin-inline:auto;padding:clamp(34px,4.6vw,64px) var(--pad) 0;
  display:grid;grid-template-columns:190px minmax(0,1fr);gap:clamp(28px,5vw,72px)}
.cp-index{position:sticky;top:84px;align-self:start}
.cp-index-label{margin:0 0 10px;color:var(--ink-muted);font:500 .6rem var(--font-mono);letter-spacing:.2em;text-transform:uppercase}
.cp-index ol{margin:0;padding:0;list-style:none;border-top:1px solid var(--ink)}
.cp-index a{display:flex;gap:12px;align-items:baseline;padding:10px 0;border-bottom:1px solid var(--rule);color:var(--ink);text-decoration:none;
  font:500 .82rem var(--font-display)}
.cp-index a span{color:var(--cx);font:500 .62rem var(--font-mono);letter-spacing:.08em}
.cp-index a:hover{color:var(--cx)}
.cp-body{min-width:0}
/* Each clause is boxed with registration marks at the corners, like a form. */
.cp-clause{position:relative;padding:clamp(22px,2.6vw,30px) clamp(20px,2.6vw,30px) clamp(26px,3vw,34px);border:1px solid var(--rule);
  background:var(--paper-raised);margin-bottom:18px}
.cp-clause::before,.cp-clause::after{content:"";position:absolute;width:10px;height:10px;border:1px solid var(--cx)}
.cp-clause::before{left:-1px;top:-1px;border-right:0;border-bottom:0}
.cp-clause::after{right:-1px;bottom:-1px;border-left:0;border-top:0}
.cp-clause>header{display:flex;align-items:baseline;gap:14px;padding-bottom:12px;border-bottom:1px solid var(--ink)}
.cp-clause-no{color:var(--cx);font:500 .66rem var(--font-mono);letter-spacing:.14em}
.cp-clause h2{margin:0;font:600 1.15rem var(--font-display);letter-spacing:.04em;text-transform:uppercase}
/* The figure cells: defined outlines and a lighter fill, as the v1.0 grid had. */
.cp-spec{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:16px 0 0}
.cp-spec>div{padding:18px 18px 16px;border:1px solid var(--ghost);background:color-mix(in srgb,#fff 7%,var(--paper-raised))}
.cp-spec dt{color:var(--ink-muted);font:500 .56rem var(--font-mono);letter-spacing:.16em;text-transform:uppercase}
.cp-spec dd{margin:8px 0 0;font:700 clamp(1.6rem,2.6vw,2.3rem)/1 var(--font-numeric);font-variant-numeric:lining-nums tabular-nums;letter-spacing:-.03em}
.cp-spec dd.is-difficulty{color:var(--dc,var(--ink))}
.cp-spec .d-1{--dc:var(--d1)}.cp-spec .d-2{--dc:var(--d2)}.cp-spec .d-3{--dc:var(--d3)}.cp-spec .d-4{--dc:var(--d4)}.cp-spec .d-5{--dc:var(--d5)}.cp-spec .d-6{--dc:var(--d6)}
.cp-rules{margin:0;padding:0;list-style:none}
.cp-rules li{display:grid;grid-template-columns:2.6rem minmax(0,1fr);gap:16px;padding:14px 0;border-bottom:1px dotted var(--ghost)}
.cp-rules li:last-child{border-bottom:0}
.cp-rules span{color:var(--cx);font:600 .8rem var(--font-numeric);font-variant-numeric:tabular-nums}
.cp-rules p{margin:0;font:1rem/1.55 var(--font-serif)}
.cp-table-wrap{overflow-x:auto}
.cp-marking{width:100%;table-layout:fixed;border-collapse:collapse;font-variant-numeric:tabular-nums}
.cp-marking th,.cp-marking td{padding:13px 14px;border:1px solid var(--ghost);text-align:left}
.cp-marking thead th{border-top:0;border-left:0;border-right:0;border-bottom-color:var(--ink)}
.cp-marking thead th{color:var(--ink-muted);font:500 .56rem var(--font-mono);letter-spacing:.16em;text-transform:uppercase}
.cp-marking tbody th{font:600 .92rem var(--font-display)}
.cp-marking td{font:.8rem var(--font-mono)}
.cp-marking td.is-correct,.cp-marking td.is-blank,.cp-marking td.is-incorrect{font-weight:600}
.cp-marking td.is-correct{color:var(--d1);background:color-mix(in srgb,var(--d1) 14%,transparent)}
.cp-marking td.is-blank{color:var(--ink);background:color-mix(in srgb,#fff 8%,var(--paper-raised))}
.cp-marking td.is-incorrect{color:var(--d6);background:color-mix(in srgb,var(--d6) 14%,transparent)}
.cp-none{margin:18px 0 0;color:var(--ink-muted);font:.9rem/1.5 var(--font-serif)}
.cp-notes{margin-top:14px;font:1rem/1.6 var(--font-serif)}.cp-notes p{margin:0 0 .9em}.cp-notes p:last-child{margin-bottom:0}

/* ---- the threshold scale, shared by brief and report -------------------- */
.cx-scale{margin:34px 0 0;padding:0 12px}
.cx-track{position:relative;height:10px;border:1px solid var(--rule);background:var(--paper)}
.cx-fill{position:absolute;inset:0 auto 0 0;background:var(--cx);opacity:.85}
.cx-tick{position:absolute;top:100%;display:grid;justify-items:center;transform:translateX(-50%);color:var(--ink-muted);
  font:.6rem var(--font-mono);letter-spacing:.08em;text-transform:uppercase}
.cx-tick i{display:block;width:1px;height:14px;background:var(--ink-muted)}
.cx-tick b{margin-top:5px;color:var(--ink);font-weight:600}
.cx-tick small{font-variant-numeric:tabular-nums}
.cx-tick.is-reached i,.cx-tick.is-reached b{color:var(--d1);background-color:var(--d1)}.cx-tick.is-reached b{background:none}
.cx-you{position:absolute;bottom:100%;display:grid;justify-items:center;transform:translateX(-50%);padding-bottom:8px;color:var(--cx);
  font:.6rem var(--font-mono);letter-spacing:.08em;text-transform:uppercase}
.cx-you b{font:700 1.05rem var(--font-numeric);font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.cx-you::after{content:"";width:2px;height:10px;margin-top:3px;background:var(--cx)}
.cx-axis{display:flex;justify-content:space-between;margin-top:48px;color:var(--ghost);font:.58rem var(--font-mono)}
.cx-scale.is-report{margin-top:54px}
.cx-legend{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1px;margin:22px 0 0;padding:0;list-style:none;border:1px solid var(--rule);background:var(--rule)}
.cx-legend li{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 12px;padding:14px 16px;background:var(--paper-raised)}
.cx-legend b{grid-row:1/span 2;align-self:center;color:var(--cx);font:700 1.05rem var(--font-numeric);letter-spacing:.04em}
.cx-legend span{font:600 .9rem var(--font-display)}
.cx-legend em{color:var(--ink-muted);font:normal .62rem var(--font-mono);letter-spacing:.08em;text-transform:uppercase}
.cx-legend li.is-reached b{color:var(--d1)}.cx-legend li.is-reached em{color:var(--d1)}
.cx-legend li.is-missed b{color:var(--ghost)}

/* ---- entry bar ------------------------------------------------------------- */
.cp-entry{width:min(100%,1560px);margin:clamp(26px,3vw,40px) auto 0;padding:0 var(--pad) clamp(70px,8vw,110px)}
.cp-entry-inner{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:18px;padding:22px 24px;
  border:1px solid var(--ink);background:var(--paper-raised);box-shadow:8px 8px 0 color-mix(in srgb,var(--cx) 18%,transparent)}
.cp-entry-copy{display:grid;gap:5px;min-width:0}
.cp-entry-copy span{color:var(--cx);font:500 .58rem var(--font-mono);letter-spacing:.2em;text-transform:uppercase}
.cp-entry-copy strong{font:500 .95rem/1.4 var(--font-serif)}
.contest-take{display:inline-flex;align-items:center;justify-content:center;min-width:220px;min-height:46px;padding:0 22px;border:1px solid var(--ink);
  background:var(--ink);color:var(--paper);text-decoration:none;font:500 .72rem var(--font-mono);letter-spacing:.16em;text-transform:uppercase;cursor:pointer;
  transition:transform .15s,box-shadow .15s}
.contest-take:hover{transform:translate(-2px,-2px);box-shadow:4px 4px 0 var(--cx)}
.contest-take.is-disabled{opacity:.45;cursor:not-allowed}.contest-take.is-disabled:hover{transform:none;box-shadow:none}

/* ---- score report ---------------------------------------------------------- */
.cr-title{margin:clamp(16px,2vw,24px) 0 0;color:#fff;font:600 clamp(2.2rem,4.6vw,3.8rem)/.95 var(--font-display);letter-spacing:-.04em;text-transform:uppercase}
.cr-facts{display:flex;flex-wrap:wrap;gap:16px 34px;margin:clamp(20px,2.4vw,30px) 0 0}
.cr-facts>div{padding:0}
.cr-facts dt{color:var(--panel-ink);font:500 .56rem var(--font-mono);letter-spacing:.16em;text-transform:uppercase}
.cr-facts dd{margin:6px 0 0;color:#fff;font:.82rem var(--font-mono);font-variant-numeric:tabular-nums}
.cr-facts dd small{color:var(--panel-ink);font-size:.66rem}.cr-facts dd .is-muted{color:var(--panel-ink)}
/* The ring: a conic sweep for the percentage, an ink disc inside. */
.cr-score{display:grid;justify-items:center;gap:12px}
.cr-ring{display:grid;place-items:center;width:clamp(170px,18vw,220px);aspect-ratio:1;border-radius:50%;padding:12px;
  background:conic-gradient(var(--cx) calc(var(--pct) * 1%),var(--panel-rule) 0)}
.cr-ring-inner{display:grid;place-items:center;width:100%;height:100%;border-radius:50%;background:var(--panel);text-align:center}
.cr-ring-inner span{color:var(--panel-ink);font:500 .56rem var(--font-mono);letter-spacing:.2em;text-transform:uppercase}
.cr-ring-inner b{margin-top:4px;color:#fff;font:700 clamp(2.6rem,4.4vw,3.6rem)/1 var(--font-numeric);font-variant-numeric:lining-nums tabular-nums;letter-spacing:-.05em}
.cr-ring-inner small{color:var(--panel-ink);font:.72rem var(--font-mono);font-variant-numeric:tabular-nums}
.cr-band .cr-inner,.cr-sheet .cr-inner{padding-top:clamp(30px,3.6vw,48px)}
.cr-band-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:10px;padding-bottom:10px;border-bottom:1px solid var(--ink)}
.cr-band-head h2{margin:0;font:600 .72rem var(--font-display);letter-spacing:.16em;text-transform:uppercase}
.cr-band-head small{color:var(--ink-muted);font:.62rem var(--font-mono);letter-spacing:.1em;text-transform:uppercase}
.cr-tally{display:flex;flex-wrap:wrap;gap:16px;font:.62rem var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-muted)}
.cr-tally b{font-weight:600}.cr-tally .is-correct b{color:var(--d1)}.cr-tally .is-incorrect b{color:var(--d6)}
/* The bubble sheet: one square per problem, coloured by outcome. */
.cr-bubbles{display:flex;flex-wrap:wrap;gap:6px;margin:18px 0 0;padding:0;list-style:none}
.cr-bubbles a{display:grid;place-items:center;width:34px;height:34px;border:1px solid var(--rule);color:var(--ink-muted);text-decoration:none;
  font:600 .72rem var(--font-numeric);font-variant-numeric:tabular-nums;transition:transform .12s}
.cr-bubbles a:hover{transform:translateY(-2px)}
.cr-bubbles .is-correct a{border-color:var(--d1);background:color-mix(in srgb,var(--d1) 16%,transparent);color:var(--d1)}
.cr-bubbles .is-incorrect a{border-color:var(--d6);background:color-mix(in srgb,var(--d6) 14%,transparent);color:var(--d6)}
.cr-bubbles .is-blank a{border-style:dashed;color:var(--ghost)}
.cr-problems{display:grid;gap:14px;margin-top:26px}
.cr-problem{border:1px solid var(--rule);border-left:4px solid var(--ghost);background:var(--paper-raised);scroll-margin-top:84px}
.cr-problem.is-correct{border-left-color:var(--d1)}.cr-problem.is-incorrect{border-left-color:var(--d6)}
.cr-problem>header{display:flex;align-items:center;gap:14px;padding:12px 18px;border-bottom:1px solid var(--rule)}
.cr-problem-no{font:700 1rem var(--font-numeric);font-variant-numeric:tabular-nums}
.cr-problem-state{color:var(--ink-muted);font:500 .58rem var(--font-mono);letter-spacing:.16em;text-transform:uppercase}
.cr-problem.is-correct .cr-problem-state{color:var(--d1)}.cr-problem.is-incorrect .cr-problem-state{color:var(--d6)}
.cr-problem-marks{margin-left:auto;font:.78rem var(--font-mono);font-variant-numeric:tabular-nums;color:var(--ink-muted)}
.cr-problem-marks b{font:700 1.05rem var(--font-numeric);color:var(--ink)}.cr-problem.is-correct .cr-problem-marks b{color:var(--d1)}.cr-problem.is-incorrect .cr-problem-marks b{color:var(--d6)}
.cr-prompt{padding:18px 20px;font:1rem/1.65 var(--font-serif)}.cr-prompt p{margin:0 0 .8em}.cr-prompt p:last-child{margin:0}
.cr-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;margin:0;padding:0 20px 18px;list-style:none}
.cr-options li{display:flex;gap:10px;align-items:baseline;padding:9px 12px;border:1px solid var(--rule);font:.92rem/1.45 var(--font-serif)}
.cr-options b{color:var(--cx);font:600 .7rem var(--font-mono)}
.cr-answers{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);border-top:1px solid var(--rule)}
.cr-answer{padding:12px 18px;border-right:1px solid var(--rule)}
.cr-answer span,.cr-reveal [data-correct-answer] span{display:block;color:var(--ink-muted);font:500 .56rem var(--font-mono);letter-spacing:.16em;text-transform:uppercase}
.cr-answer strong,.cr-reveal [data-correct-answer] strong{display:block;margin-top:5px;font:600 .95rem var(--font-display)}
.cr-reveal{display:flex;flex-wrap:wrap;align-items:center;gap:14px;padding:10px 18px;background:color-mix(in srgb,var(--cx) 6%,transparent)}
.cr-reveal button{padding:7px 11px;border:1px solid var(--ink);background:transparent;color:var(--ink);cursor:pointer;
  font:500 .6rem var(--font-mono);letter-spacing:.12em;text-transform:uppercase}
.cr-reveal button:hover{background:var(--ink);color:var(--paper)}
.cr-reveal [data-correct-answer][hidden]{display:none}
.cr-problem-time{display:flex;flex-wrap:wrap;gap:0;border-top:1px solid var(--rule);background:color-mix(in srgb,var(--ink) 2%,var(--paper-raised))}
.cr-problem-time span{display:grid;gap:3px;padding:10px 18px;border-right:1px solid var(--rule)}
.cr-problem-time span:last-child{border-right:0}
.cr-problem-time small{color:var(--ink-muted);font:500 .54rem var(--font-mono);letter-spacing:.16em;text-transform:uppercase}
.cr-problem-time b{font:600 .82rem var(--font-mono);font-variant-numeric:tabular-nums}
.cr-problem-time .is-muted b{color:var(--ghost);font-weight:400}
.cr-sealed{display:flex;align-items:center;gap:22px;margin-top:18px;padding:26px;border:1px dashed var(--ghost);background:var(--paper-raised)}
.cr-sealed-glyph{color:var(--cx);font:2rem/1 var(--font-serif)}
.cr-sealed strong{font:600 1.05rem var(--font-display)}.cr-sealed p{margin:6px 0 0;color:var(--ink-muted);font:.92rem/1.5 var(--font-serif)}
.cr-foot .cr-inner{display:flex;justify-content:space-between;gap:16px;margin-top:clamp(40px,5vw,64px);padding-top:18px;padding-bottom:clamp(70px,8vw,110px);border-top:1px solid var(--ink)}
.cr-exit{display:inline-flex;align-items:center;gap:8px;color:var(--ink-muted);text-decoration:none;font:.72rem var(--font-mono);letter-spacing:.08em;text-transform:uppercase}
.cr-exit:hover{color:var(--cx)}

@media(max-width:1180px){.cp-sheet{grid-template-columns:1fr;gap:20px}.cp-index{position:static}.cp-index ol{display:flex;flex-wrap:wrap;border-top:0}.cp-index a{padding:8px 12px 8px 0;border-bottom:0}}
@media(max-width:820px){
  .cp-head-inner,.cr-head-inner{grid-template-columns:1fr;gap:22px}.cp-head-edition{justify-items:start}.cp-head-edition b{font-size:3.4rem}
  .cp-seal{top:16px;right:16px;font-size:.56rem}.cp-spec{grid-template-columns:1fr 1fr}
  .cr-facts{gap:14px 24px}.cr-score{justify-items:start}
  .cr-options{grid-template-columns:1fr}.cr-answers{grid-template-columns:1fr}.cr-answer{border-right:0;border-bottom:1px solid var(--rule)}
  .cx-legend{grid-template-columns:1fr}
}
@media(max-width:520px){.cp-title{font-size:2rem}.cp-clause{padding:18px 16px 22px}.cp-spec{grid-template-columns:1fr}.cr-bubbles a{width:30px;height:30px}}

/* ============================================================ DISPATCH
   The announcement page. Kin to the reading page (plate, fact strip,
   measured prose, a foot with the way out) but a notice rather than an
   article: a paper plate with a stamp column instead of the ink plate, a
   display-face title in sentence case, the dispatch label running down the
   margin, and the older / newer neighbours at the foot. The tag sets the
   accent. */
.dp-page{--dp:var(--ink-pure);--focus:var(--dp);min-height:65vh}
.dp-page.tag-contest{--dp:var(--ink-cs)}.dp-page.tag-changelog{--dp:var(--ink-prog)}.dp-page.tag-notice{--dp:var(--ink-pure)}
.dp-plate{position:relative;overflow:hidden;border-top:4px solid var(--dp);border-bottom:1px solid var(--ink);
  background:radial-gradient(80% 120% at 0% 100%,color-mix(in srgb,var(--dp) 10%,transparent),transparent 60%),var(--paper)}
.dp-plate-inner{width:min(100%,1560px);margin-inline:auto;padding:clamp(40px,5.5vw,76px) var(--pad) clamp(36px,4.4vw,58px);
  display:grid;grid-template-columns:150px minmax(0,1fr);gap:clamp(24px,4vw,56px);align-items:start}
.dp-stamp{display:grid;gap:8px;padding-right:clamp(18px,2.5vw,32px);border-right:1px solid var(--rule)}
.dp-stamp-tag,.dp-stamp-label{font:500 .6rem var(--font-mono);letter-spacing:.2em;text-transform:uppercase}
.dp-stamp-tag{color:var(--dp)}.dp-stamp-label{color:var(--ink-muted)}
.dp-stamp-num{color:var(--dp);font:700 clamp(3.4rem,6vw,5.4rem)/.9 var(--font-numeric);font-variant-numeric:lining-nums tabular-nums;letter-spacing:-.06em}
.dp-kicker{display:flex;flex-wrap:wrap;align-items:center;gap:0 10px;margin:0;color:var(--ink-muted);
  font:500 .66rem var(--font-mono);letter-spacing:.16em;text-transform:uppercase}
.dp-kicker a{color:inherit;text-decoration:none}.dp-kicker a:hover{color:var(--dp)}
.dp-kicker .sep{color:var(--ghost)}.dp-kicker-tag{color:var(--dp)}
.dp-title{max-width:22ch;margin:clamp(16px,2vw,24px) 0 0;font:600 clamp(2rem,4.2vw,3.4rem)/1.06 var(--font-display);
  letter-spacing:-.035em;text-wrap:balance}
.dp-stand{max-width:58ch;margin:clamp(16px,1.9vw,24px) 0 0;color:var(--ink-muted);
  font:400 clamp(1.04rem,.4vw + .95rem,1.2rem)/1.55 var(--font-serif)}
.dp-strip-tag{color:var(--dp)}
.dp-body-wrap{width:min(100%,1560px);margin-inline:auto;padding:clamp(40px,5vw,72px) var(--pad) 0;
  display:grid;grid-template-columns:150px minmax(0,68ch);gap:clamp(24px,4vw,56px)}
.dp-rail-text{position:sticky;top:90px;display:inline-block;writing-mode:vertical-rl;transform:rotate(180deg);
  color:var(--ghost);font:.62rem var(--font-mono);letter-spacing:.22em;text-transform:uppercase;white-space:nowrap}
.dp-body{font:1.06rem/1.7 var(--font-serif)}
.dp-body p{margin:0 0 1.15em}.dp-body a{color:var(--dp)}
.dp-foot{width:min(100%,1560px);margin:clamp(46px,5.5vw,70px) auto 0;padding:0 var(--pad) clamp(70px,8vw,110px)}
.dp-foot-inner{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:20px;align-items:center;
  padding-top:clamp(18px,2.2vw,24px);border-top:1px solid var(--ink)}
.dp-adjacent{display:grid;gap:6px;min-width:0;color:inherit;text-decoration:none}
.dp-adjacent small{color:var(--ink-muted);font:.62rem var(--font-mono);letter-spacing:.14em;text-transform:uppercase}
.dp-adjacent span{overflow:hidden;font:600 1rem/1.3 var(--font-serif);text-overflow:ellipsis;white-space:nowrap;transition:color .18s}
.dp-adjacent.is-newer{text-align:right}
a.dp-adjacent:hover span{color:var(--dp)}
.dp-adjacent.is-empty span{color:var(--ghost);font-style:italic;font-weight:400}
.dp-exit{display:inline-flex;align-items:center;gap:8px;min-height:36px;padding:0 14px;border:1px solid var(--rule);border-radius:var(--radius);
  color:var(--ink-muted);text-decoration:none;font:.7rem var(--font-mono);letter-spacing:.08em;text-transform:uppercase;white-space:nowrap}
.dp-exit:hover{border-color:var(--ink);color:var(--ink)}
@media(max-width:820px){
  .dp-plate-inner,.dp-body-wrap{grid-template-columns:1fr;gap:20px}
  .dp-stamp{grid-template-columns:auto auto auto;align-items:baseline;gap:14px;padding:0 0 14px;border-right:0;border-bottom:1px solid var(--rule)}
  .dp-stamp-num{font-size:2.6rem}.dp-rail{display:none}
  .dp-foot-inner{grid-template-columns:1fr;gap:16px}.dp-adjacent.is-newer{text-align:left}.dp-exit{justify-self:start}
}

/* ============================================================ COLLECTIONS
   Journals and courses: ordered sets of articles with a front of their own.
   Both sit inside the v11 shell (band, rules, fact strip) but carry their own
   texture. A journal issue is print: a cover plate with a frame, laid-paper
   hairlines, a wordmark, and a contents page with leaders. A course is a
   syllabus: graph paper, a level tab, a numbered ladder of units, one rail
   running down the list. The field ink sets the accent for both. */
.col-page{--focus:var(--ink);min-height:65vh}
.jn-plate,.jn-head,.cs-ticket,.cs-head{--jx:var(--ink-pure)}
.jn-plate.f-appl,.jn-head.f-appl,.cs-ticket.f-appl,.cs-head.f-appl{--jx:var(--ink-appl)}
.jn-plate.f-prog,.jn-head.f-prog,.cs-ticket.f-prog,.cs-head.f-prog{--jx:var(--ink-prog)}
.jn-plate.f-cs,.jn-head.f-cs,.cs-ticket.f-cs,.cs-head.f-cs{--jx:var(--ink-cs)}
.jn-plate.f-ai,.jn-head.f-ai,.cs-ticket.f-ai,.cs-head.f-ai{--jx:var(--ink-ai)}
.jn-entry,.cs-unit,.cs-ticket-ladder i,.cs-head-ladder i{--tint:var(--ink)}
.jn-entry.t-pure,.cs-unit.t-pure,.cs-ticket-ladder i.t-pure,.cs-head-ladder i.t-pure{--tint:var(--ink-pure)}
.jn-entry.t-appl,.cs-unit.t-appl,.cs-ticket-ladder i.t-appl,.cs-head-ladder i.t-appl{--tint:var(--ink-appl)}
.jn-entry.t-prog,.cs-unit.t-prog,.cs-ticket-ladder i.t-prog,.cs-head-ladder i.t-prog{--tint:var(--ink-prog)}
.jn-entry.t-cs,.cs-unit.t-cs,.cs-ticket-ladder i.t-cs,.cs-head-ladder i.t-cs{--tint:var(--ink-cs)}
.jn-entry.t-ai,.cs-unit.t-ai,.cs-ticket-ladder i.t-ai,.cs-head-ladder i.t-ai{--tint:var(--ink-ai)}
.jn-entry.d-1,.cs-unit.d-1{--dc:var(--d1)}.jn-entry.d-2,.cs-unit.d-2{--dc:var(--d2)}.jn-entry.d-3,.cs-unit.d-3{--dc:var(--d3)}
.jn-entry.d-4,.cs-unit.d-4{--dc:var(--d4)}.jn-entry.d-5,.cs-unit.d-5{--dc:var(--d5)}.jn-entry.d-6,.cs-unit.d-6{--dc:var(--d6)}

/* ---- journal shelf ------------------------------------------------------ */
.jn-shelf{max-width:var(--shell);margin:0 auto;padding:clamp(38px,5vw,68px) var(--pad) clamp(72px,8vw,112px);
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:26px}
.jn-plate{position:relative;display:flex;flex-direction:column;border:1px solid var(--rule);background:var(--paper-raised);
  transition:transform .2s,border-color .2s,box-shadow .2s}
.jn-plate:hover{z-index:2;border-color:color-mix(in srgb,var(--jx) 62%,var(--rule));transform:translate(-3px,-3px);
  box-shadow:8px 8px 0 color-mix(in srgb,var(--jx) 14%,transparent)}
/* The cover: laid-paper hairlines under a corner wash, a double frame inset
   like a printed border, and the issue year set huge and faint behind. */
.jn-cover,.jn-head-cover{position:relative;display:flex;flex-direction:column;overflow:hidden;
  background:
    radial-gradient(120% 90% at 100% 0%,color-mix(in srgb,var(--jx) 24%,transparent),transparent 58%),
    repeating-linear-gradient(-32deg,transparent 0 10px,color-mix(in srgb,var(--jx) 9%,transparent) 10px 11px),
    color-mix(in srgb,var(--jx) 6%,var(--paper-raised))}
.jn-cover{min-height:340px;padding:28px 28px 26px}
.jn-cover::after,.jn-head-cover::after{content:attr(data-year);position:absolute;right:-.06em;bottom:-.22em;z-index:0;
  color:var(--jx);opacity:.07;font:700 clamp(6rem,9vw,8.5rem)/1 var(--font-numeric);
  font-variant-numeric:lining-nums tabular-nums;letter-spacing:-.08em;pointer-events:none}
.jn-cover>span,.jn-head-cover>span{position:relative;z-index:1}
.jn-cover-frame{position:absolute!important;inset:10px;z-index:0!important;border:1px solid color-mix(in srgb,var(--jx) 40%,transparent);pointer-events:none}
.jn-cover-frame::after{content:"";position:absolute;inset:4px;border:1px solid color-mix(in srgb,var(--jx) 18%,transparent)}
.jn-cover-top{display:flex;align-items:flex-start;justify-content:space-between;color:var(--jx);
  font:500 .58rem var(--font-mono);letter-spacing:.18em;text-transform:uppercase}
.jn-cover-seal{font:400 1.45rem/1 var(--font-serif);letter-spacing:0;opacity:.85}
.jn-cover-mark{margin-top:auto;color:var(--jx);font:700 clamp(3rem,4.6vw,4.4rem)/.88 var(--font-display);letter-spacing:-.055em}
.jn-cover-title{display:block;margin-top:12px;color:var(--ink);font:600 1.05rem/1.28 var(--font-serif)}
.jn-cover-issue{display:block;margin-top:7px;color:var(--ink-muted);font:.64rem var(--font-mono);letter-spacing:.14em;text-transform:uppercase}
.jn-cover-rule{display:flex;gap:4px;margin-top:16px}
.jn-cover-rule i{display:block;height:2px;background:var(--jx)}
.jn-cover-rule i:nth-child(1){width:34px}.jn-cover-rule i:nth-child(2){width:12px;opacity:.6}.jn-cover-rule i:nth-child(3){width:5px;opacity:.35}
.jn-cover-blurb{display:block;margin-top:14px;max-width:34ch;color:var(--ink-muted);font:.86rem/1.45 var(--font-serif)}
.jn-colophon{display:grid;grid-template-columns:1fr 1fr 1fr auto;align-items:center;gap:10px;padding:14px 20px;border-top:1px solid var(--rule)}
.jn-colophon small{display:block;color:var(--ink-muted);font:500 .52rem var(--font-mono);letter-spacing:.15em;text-transform:uppercase}
.jn-colophon b{display:block;margin-top:4px;color:var(--ink);font:500 .78rem var(--font-mono);font-variant-numeric:tabular-nums;white-space:nowrap}
.jn-colophon-open{color:var(--ghost);transition:color .18s,transform .18s}
.jn-plate:hover .jn-colophon-open{color:var(--jx);transform:translate(2px,-2px)}

/* ---- journal issue page --------------------------------------------------- */
.jn-head,.cs-head{position:relative;overflow:hidden;border-bottom:1px solid var(--ink)}
.jn-head{background:
    radial-gradient(70% 120% at 0% 100%,color-mix(in srgb,var(--jx) 12%,transparent),transparent 60%),
    repeating-linear-gradient(-32deg,transparent 0 10px,color-mix(in srgb,var(--jx) 5%,transparent) 10px 11px),
    var(--paper)}
.jn-head-inner,.cs-head-inner{position:relative;max-width:var(--shell);margin:0 auto;
  padding:clamp(44px,6vw,74px) var(--pad) clamp(34px,4vw,52px);display:grid;gap:40px;align-items:end}
.jn-head-inner{grid-template-columns:minmax(0,1fr) 230px}
.jn-head .kicker,.cs-head .kicker{color:var(--jx)}
.jn-head .kicker a,.cs-head .kicker a{color:inherit;text-decoration:none;border-bottom:1px solid color-mix(in srgb,var(--jx) 40%,transparent)}
.jn-head .kicker a:hover,.cs-head .kicker a:hover{border-bottom-color:var(--jx)}
.jn-head h1,.cs-head h1{margin-top:14px;font-size:clamp(2.3rem,5vw,4rem)}
/* A course title is a subject, not a masthead: sentence case, as on its ticket. */
.cs-head h1{text-transform:none;letter-spacing:-.035em}
.jn-head-issue{margin-top:12px;color:var(--jx);font:500 .72rem var(--font-mono);letter-spacing:.16em;text-transform:uppercase}
.jn-head-blurb,.cs-head-blurb{max-width:62ch;margin-top:18px;color:var(--ink);font:1.05rem/1.55 var(--font-serif)}
.jn-head-byline,.cs-head-by{margin-top:14px;color:var(--ink-muted);font:.66rem var(--font-mono);letter-spacing:.1em;text-transform:uppercase}
.jn-head-cover{aspect-ratio:3/4;padding:22px 22px 20px;border:1px solid var(--rule);box-shadow:10px 10px 0 color-mix(in srgb,var(--jx) 12%,transparent)}
.jn-head-cover .jn-cover-mark{font-size:2.6rem}
.jn-head-cover::after{font-size:5.6rem}
.jn-contents-inner,.cs-syllabus-inner{max-width:var(--shell);margin:0 auto;padding:clamp(34px,4vw,54px) var(--pad) clamp(70px,8vw,110px)}
.jn-about,.cs-about{max-width:66ch;margin:0 0 34px;color:var(--ink-muted);font:1rem/1.6 var(--font-serif)}
.jn-contents-head,.cs-syllabus-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:10px;
  padding-bottom:12px;border-bottom:1px solid var(--ink);font:600 .68rem var(--font-display);letter-spacing:.14em;text-transform:uppercase}
.jn-contents-head small,.cs-syllabus-head small{color:var(--ink-muted);font:.66rem var(--font-mono);letter-spacing:.1em;text-transform:uppercase}
.jn-section{margin:34px 0 2px;color:var(--jx);font:500 .62rem var(--font-mono);letter-spacing:.2em;text-transform:uppercase}
.jn-section::after{content:"";display:inline-block;width:28px;height:1px;margin-left:10px;vertical-align:middle;background:var(--jx)}
/* Contents rows: number, title and author, dotted leaders, facts, coordinate.
   Leaders are what make it read as a printed table of contents. */
.jn-entry{position:relative;display:grid;grid-template-columns:3rem minmax(0,auto) minmax(28px,1fr) auto 7.2rem;gap:0 18px;align-items:center;
  padding:18px 0;border-bottom:1px solid var(--rule);color:inherit;text-decoration:none;transition:padding-left .18s ease,background-color .18s ease}
.jn-entry::before{content:"";position:absolute;left:-14px;top:-1px;bottom:-1px;width:3px;background:var(--tint);opacity:0;transition:opacity .18s}
.jn-entry:hover{padding-left:14px;background:linear-gradient(90deg,color-mix(in srgb,var(--tint) 7%,transparent),transparent 55%)}
.jn-entry:hover::before{opacity:1}
.jn-entry-num{color:var(--ink-muted);font:600 1.05rem var(--font-numeric);font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.jn-entry-main{min-width:0;max-width:58ch}
.jn-entry-title{display:block;font:600 1.35rem/1.2 var(--font-serif);letter-spacing:-.01em;transition:color .18s}
.jn-entry:hover .jn-entry-title{color:var(--tint)}
.jn-entry-by{display:block;margin-top:5px;overflow:hidden;color:var(--ink-muted);font:.88rem/1.4 var(--font-serif);text-overflow:ellipsis;white-space:nowrap}
.jn-entry-leader{align-self:center;height:0;border-bottom:1px dotted var(--ghost);transform:translateY(.15em)}
.jn-entry-meta{display:flex;align-items:center;gap:18px;color:var(--ink-muted);font:.64rem var(--font-mono);
  letter-spacing:.08em;text-transform:uppercase;white-space:nowrap}
.jn-entry-field{display:flex;align-items:center;gap:7px;color:var(--tint)}
.jn-entry-field i{width:7px;height:7px;border-radius:1px;background:currentColor}
.jn-entry-diff b{color:var(--dc,var(--ink-muted));font:600 .8rem var(--font-mono);font-variant-numeric:tabular-nums}
.jn-entry-aleph{justify-self:end;color:var(--tint);font-size:.95rem}

/* ---- course grid ------------------------------------------------------------ */
.cs-grid{max-width:var(--shell);margin:0 auto;padding:clamp(38px,5vw,68px) var(--pad) clamp(72px,8vw,112px);
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px}
/* Graph paper: two hairline gradients in the accent, 22px cells. */
.cs-ticket,.cs-head{background:
    linear-gradient(color-mix(in srgb,var(--jx) 8%,transparent) 1px,transparent 1px) 0 0/100% 22px,
    linear-gradient(90deg,color-mix(in srgb,var(--jx) 8%,transparent) 1px,transparent 1px) 0 0/22px 100%,
    var(--paper-raised)}
.cs-ticket{position:relative;display:grid;grid-template-columns:104px minmax(0,1fr);min-height:264px;
  border:1px solid var(--rule);border-top:4px solid var(--jx);color:inherit;text-decoration:none;
  transition:transform .2s,border-color .2s,box-shadow .2s}
.cs-ticket.is-collective{border-top:6px double var(--jx)}
.cs-ticket:hover{z-index:2;border-color:color-mix(in srgb,var(--jx) 62%,var(--rule));border-top-color:var(--jx);
  transform:translate(-3px,-3px);box-shadow:8px 8px 0 color-mix(in srgb,var(--jx) 14%,transparent)}
.cs-ticket-level{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:22px 10px;
  border-right:1px solid var(--rule);background:color-mix(in srgb,var(--jx) 7%,var(--paper-raised));text-align:center}
.cs-ticket-level small,.cs-ticket-kicker,.cs-ticket-foot,.cs-ticket-units{color:var(--ink-muted);font:500 .55rem var(--font-mono);letter-spacing:.14em;text-transform:uppercase}
.cs-ticket-level b{color:var(--jx);font:700 .72rem var(--font-mono);letter-spacing:.12em;text-transform:uppercase}
.cs-ticket-units{margin-top:14px;padding-top:14px;border-top:1px solid var(--rule)}
.cs-ticket-units strong{display:block;margin-bottom:4px;color:var(--ink);font:700 1.7rem/1 var(--font-numeric);letter-spacing:-.04em}
.cs-ticket-main{display:flex;min-width:0;flex-direction:column;padding:24px 26px 20px}
.cs-ticket-kicker{color:var(--jx)}
.cs-ticket-title{margin-top:12px;font:600 clamp(1.5rem,2.2vw,2rem)/1.05 var(--font-display);letter-spacing:-.03em}
.cs-ticket-sub{display:block;margin-top:6px;color:var(--ink-muted);font:italic .95rem var(--font-serif)}
.cs-ticket-blurb{display:block;max-width:52ch;margin-top:12px;color:var(--ink);font:.9rem/1.45 var(--font-serif)}
.cs-ticket-ladder{display:flex;flex-wrap:wrap;gap:5px;margin-top:auto;padding-top:20px}
.cs-ticket-ladder i,.cs-head-ladder i{display:grid;place-items:center;border:1px solid color-mix(in srgb,var(--tint) 55%,var(--rule));
  background:color-mix(in srgb,var(--tint) 10%,var(--paper-raised));color:var(--tint);font-style:normal}
.cs-ticket-ladder i{width:26px;height:26px;font:600 .6rem var(--font-mono)}
.cs-ticket-foot{display:flex;justify-content:space-between;gap:12px;margin-top:14px;padding-top:12px;border-top:1px solid var(--rule)}
.cs-ticket-go{position:absolute;right:14px;top:12px;color:var(--ghost);transition:color .18s,transform .18s}
.cs-ticket:hover .cs-ticket-go{color:var(--jx);transform:translate(2px,-2px)}

/* ---- course page ------------------------------------------------------------ */
.cs-head-inner{grid-template-columns:minmax(0,1fr) auto}
.cs-head-sub{margin-top:10px;color:var(--ink-muted);font:italic 1.05rem var(--font-serif)}
.cs-head-actions{display:flex;flex-wrap:wrap;align-items:center;gap:18px;margin-top:24px}
.cs-begin{display:inline-flex;align-items:center;gap:9px;min-height:40px;padding:0 18px;border:1px solid var(--ink);
  background:var(--ink);color:var(--paper);text-decoration:none;font:500 .74rem var(--font-mono);letter-spacing:.1em;text-transform:uppercase;
  transition:transform .15s,box-shadow .15s}
.cs-begin:hover{transform:translate(-2px,-2px);box-shadow:4px 4px 0 color-mix(in srgb,var(--jx) 40%,transparent)}
.cs-head-actions .cs-head-by{margin-top:0}
.cs-head-ladder{display:grid;grid-template-columns:repeat(3,44px);gap:6px;align-self:end}
.cs-head-ladder i{width:44px;height:44px;font:700 .8rem var(--font-numeric)}
.cs-units{position:relative;margin:0;padding:0;list-style:none}
.cs-units::before{content:"";position:absolute;left:1.35rem;top:0;bottom:0;width:1px;background:var(--rule)}
.cs-unit a{position:relative;display:grid;grid-template-columns:2.7rem minmax(0,1fr) auto;gap:0 26px;align-items:start;
  padding:24px 0;border-bottom:1px solid var(--rule);color:inherit;text-decoration:none}
.cs-unit-num b{position:relative;z-index:1;display:grid;place-items:center;width:2.7rem;height:2.7rem;border:1px solid var(--tint);
  background:var(--paper-raised);color:var(--tint);font:700 .95rem var(--font-numeric);font-variant-numeric:tabular-nums;transition:background .18s,color .18s}
.cs-unit a:hover .cs-unit-num b{background:var(--tint);color:var(--paper)}
.cs-unit-label{color:var(--tint);font:500 .58rem var(--font-mono);letter-spacing:.16em;text-transform:uppercase}
.cs-unit-title{display:block;margin-top:8px;font:600 1.45rem/1.15 var(--font-display);letter-spacing:-.025em;transition:color .18s}
.cs-unit a:hover .cs-unit-title{color:var(--tint)}
.cs-unit-standfirst{display:block;max-width:64ch;margin-top:8px;color:var(--ink-muted);font:.95rem/1.5 var(--font-serif)}
.cs-unit-meta{display:flex;flex-wrap:wrap;align-items:center;gap:18px;margin-top:12px;color:var(--ink-muted);
  font:.64rem var(--font-mono);letter-spacing:.08em;text-transform:uppercase}
.cs-unit-meta .aleph{color:var(--tint);font-size:.85rem}
.cs-unit-diff{display:inline-flex;align-items:center;gap:8px}
.cs-unit-diff b{color:var(--dc,var(--ink-muted));font:600 .8rem var(--font-mono)}
.cs-unit-go{align-self:center;color:var(--ghost);transition:color .18s,transform .18s}
.cs-unit a:hover .cs-unit-go{color:var(--tint);transform:translate(2px,-2px)}

@media(max-width:1180px){
  .jn-shelf{grid-template-columns:repeat(2,minmax(0,1fr))}
  .jn-entry{grid-template-columns:3rem minmax(0,1fr) auto 6.4rem}.jn-entry-leader{display:none}
}
@media(max-width:820px){
  .jn-shelf,.cs-grid{grid-template-columns:1fr}
  .jn-head-inner,.cs-head-inner{grid-template-columns:1fr;gap:26px}
  .jn-head-cover{width:min(100%,220px)}.cs-head-ladder{grid-template-columns:repeat(6,36px)}.cs-head-ladder i{width:36px;height:36px}
  /* Explicit cells: an item with a definite row is placed before the
     auto-flow ones, so the coordinate would otherwise take column 1. */
  .jn-entry{grid-template-columns:2.6rem minmax(0,1fr) auto;gap:6px 12px}
  .jn-entry-num{grid-column:1;grid-row:1}.jn-entry-main{grid-column:2;grid-row:1;max-width:none}
  .jn-entry-aleph{grid-column:3;grid-row:1}.jn-entry-meta{grid-column:2;grid-row:2;gap:12px;white-space:normal;flex-wrap:wrap}
  .jn-entry-by{white-space:normal}
}
@media(max-width:520px){
  .jn-cover{min-height:300px;padding:22px}.jn-colophon{grid-template-columns:1fr 1fr;gap:12px 10px}.jn-colophon-open{display:none}
  .cs-ticket{grid-template-columns:1fr}
  .cs-ticket-level{flex-direction:row;justify-content:flex-start;gap:16px;padding:12px 18px;border-right:0;border-bottom:1px solid var(--rule);text-align:left}
  .cs-ticket-units{margin-top:0;margin-left:auto;padding-top:0;border-top:0;display:flex;align-items:baseline;gap:6px}
  .cs-ticket-units strong{margin:0;font-size:1.2rem}
  .cs-unit a{grid-template-columns:2.2rem minmax(0,1fr);gap:0 14px}.cs-units::before{left:1.1rem}
  .cs-unit-num b{width:2.2rem;height:2.2rem;font-size:.8rem}.cs-unit-go{display:none}
}

/* ============================================================================
   ARTICLE — the reading surface
   The page is a document, not a dashboard. Where the directories use boxes and
   watermarks to make a dense index scannable, a reading page needs the opposite:
   one column, one measure, and hairlines instead of panels. The shell language
   still shows through in the mono kicker, the field accent, and the rules.
   ========================================================================== */
.art{width:min(100%,1160px);margin-inline:auto;
  padding:clamp(24px,3vw,40px) var(--pad) clamp(64px,7vw,104px)}

/* ---- masthead ---------------------------------------------------------- */
/* Deliberately not a panel. The old header was a 270px bordered block with a
   10rem watermark and a title up to 5.8rem, which pushed the first paragraph
   below the fold and made every article look like a poster. */
.art-masthead{padding-bottom:clamp(20px,2.4vw,28px);border-bottom:1px solid var(--rule)}

/* The constant plate. Articles carry symbol/value metadata that is part of the
   catalog's identity, so it is shown — as a hairline row, not another card. */
/* Flex items default to min-width:auto, so an unbreakable 17-digit constant
   would set a floor on the whole document and push every other element past
   the viewport on a phone. Each level opts out explicitly. */
.art-plate{display:flex;flex-wrap:wrap;gap:10px clamp(18px,2.4vw,34px);align-items:baseline;
  min-width:0;margin-top:clamp(16px,2vw,22px);padding-top:clamp(14px,1.7vw,18px);
  border-top:1px solid var(--rule)}

/* ---- column layout ------------------------------------------------------ */
.art-columns{min-width:0;margin-top:clamp(30px,4vw,48px)}
@media (min-width:1120px){
  /* Title, prose, and foot share one left edge; the contents rail lives in the
     margin beside them rather than pushing the text out of alignment. */
  .art-masthead{margin-left:calc(186px + clamp(34px,4.5vw,76px))}
}

/* ---- prose -------------------------------------------------------------- */
/* One measure, one rhythm. 66ch at ~17.5px is the readable band for a serif
   this size; everything wider than the measure (math, tables, code, figures)
   is allowed to break out rather than forcing the text column wider. */
.art-body{min-width:0;max-width:62ch;color:var(--ink);
  font:400 clamp(1.0625rem,.28vw + 1rem,1.15rem)/1.75 var(--font-serif);
  counter-reset:art-section}
@media (min-width:900px){
}

/* Breakouts: wider than the measure, capped at the column. */
.art-body pre,.art-body table,.art-body figure,.art-body .katex-display{
  width:min(100%,860px);max-width:none}

/* ---- sidenotes ---------------------------------------------------------- */
/* The corpus writes these as <details class="sn"> with a <span class="sn-ref">
   marker in the paragraph. Keeping the disclosure keeps them out of the way of
   the argument while staying reachable by keyboard and on a phone. */
.art-body .sn-ref{color:var(--focus);font:500 .62em var(--font-mono);
  vertical-align:super;line-height:0;padding-left:2px}
/* The corpus writes the summary as nothing but a numbered mark, which gives a
   reader no signal that it opens. The label and caret are supplied here so the
   stored article HTML stays untouched. */
.art-body .sn summary{display:flex;align-items:center;gap:0;cursor:pointer;
  list-style:none;color:var(--ink-muted);
  font:500 .68rem var(--font-mono);letter-spacing:.1em;text-transform:uppercase}

/* ---- foot: reader signal + exit ----------------------------------------- */
.art-foot{max-width:62ch;margin-top:clamp(42px,5.5vw,68px);
  padding-top:clamp(18px,2.2vw,24px);border-top:1px solid var(--rule);
  display:flex;flex-wrap:wrap;gap:16px 24px;align-items:center;justify-content:space-between}
@media (min-width:1120px){}
.vote-btn{display:inline-flex;align-items:center;gap:5px;height:31px;padding:0 11px;
  border:1px solid var(--rule);background:transparent;color:var(--ink-muted);
  font:.7rem var(--font-mono);cursor:pointer;border-radius:var(--radius);
  transition:border-color .15s ease,color .15s ease,background .15s ease}
.vote-btn:hover{border-color:var(--ghost);color:var(--ink)}
.vote-btn[aria-pressed="true"]{border-color:var(--focus);color:var(--focus);
  background:color-mix(in srgb,var(--focus) 8%,transparent)}
.vote-score{min-width:2ch;text-align:center;font:500 .78rem var(--font-mono);color:var(--ink)}

@media (max-width:640px){
}
@media (prefers-reduced-motion:reduce){
  .vote-btn{transition:none}
}

/* The catalog cross-reference is injected by site.js after the body. On a
   reading page it is a footnote to the piece, so it sits at the measure and is
   separated by a rule rather than floating as a panel over the opening line. */
.art-stream .article-search{max-width:62ch;margin-top:clamp(36px,4.5vw,54px);
  padding:clamp(16px,2vw,20px) 0 0;border:0;border-top:1px solid var(--rule);background:none}

/* ============================================================================
   AUTH — sign in, sign up, and the recovery flow
   One centred card on a hex field that echoes the homepage, capped with the
   same four-field gradient the section rules use. The old split layout put a
   billboard next to a form; a login page only needs the form.
   ========================================================================== */
.auth{position:relative;display:flex;align-items:center;justify-content:center;
  min-height:min(76vh,720px);padding:clamp(34px,6vw,76px) var(--pad);overflow:hidden}

.auth-field{position:absolute;inset:-2px;color:var(--rule);opacity:.9;pointer-events:none}
.auth-field svg{display:block;width:100%;height:100%}
/* Fade the lattice out toward the card so the form always wins the contrast. */
.auth::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(ellipse 58% 62% at 50% 48%,
    var(--paper) 0%,color-mix(in srgb,var(--paper) 72%,transparent) 34%,
    color-mix(in srgb,var(--paper) 22%,transparent) 62%,transparent 82%)}

/* Gradient hairline around the card: 1px of gradient showing past the inner
   surface, which keeps a true gradient on all four edges. */
/* Conic, not linear: a linear ramp across a tall box puts one hue on the right
   edge and leaves the top-left reading as flat colour. Sweeping the same six
   field stops around the centre keeps every edge live. */
.auth-card{position:relative;z-index:1;width:min(100%,430px);padding:1.5px;
  border-radius:calc(var(--radius) + 1px);
  background:conic-gradient(from 218deg,var(--ink-pure),var(--ink-appl),var(--ink-prog),
    var(--ink-cs),var(--ink-ai),var(--ink-pure));
  box-shadow:0 20px 52px -30px color-mix(in srgb,var(--ink) 62%,transparent)}
.auth-card-inner{padding:clamp(26px,3.6vw,38px);border-radius:var(--radius);
  background:var(--paper-raised)}
.auth-card.is-wide{width:min(100%,520px)}

.auth-kicker{margin:0;color:var(--ink-muted);font:500 .72rem var(--font-mono);
  letter-spacing:.04em}
.auth-card h1{margin:14px 0 0;font:600 clamp(1.5rem,2.4vw,1.85rem)/1.15 var(--font-display);
  letter-spacing:-.015em}
.auth-lede{margin:10px 0 0;color:var(--ink-muted);font:.92rem/1.55 var(--font-serif)}

.auth-form{display:grid;gap:15px;margin-top:24px}
.auth-form .account-field{display:grid;gap:6px}
.auth-form .account-label-line{display:flex;justify-content:space-between;align-items:baseline;
  font:500 .74rem var(--font-display)}
.auth-form .account-label-line span:last-child{color:var(--ink-muted);
  font:.72rem var(--font-mono);letter-spacing:0;text-transform:none}
/* Help text is prose — the password rules in particular. Uppercase mono made a
   four-item validation list genuinely hard to read. */
.auth-form .account-help{color:var(--ink-muted);font:.74rem/1.5 var(--font-mono);
  letter-spacing:0;text-transform:none}
.auth-form .account-help ul{margin:3px 0 0;padding-left:1.15em}
.auth-form .account-help li{margin:2px 0}
.auth-form .account-help li::marker{color:var(--ghost)}
.auth-form .account-input{width:100%;height:44px;padding:0 12px;border:1px solid var(--rule);
  border-radius:var(--radius);background:var(--paper);color:var(--ink);
  font:.95rem var(--font-display)}
.auth-form .account-input:focus{outline:0;border-color:var(--focus,var(--ink-pure));
  box-shadow:0 0 0 3px color-mix(in srgb,var(--focus,var(--ink-pure)) 16%,transparent)}
.auth-form .account-field.has-error .account-input{border-color:var(--d6)}
.auth-form .account-form-errors,.auth-form .account-field-errors{
  padding:8px 11px;border-left:2px solid var(--d6);color:var(--d6);font:.7rem/1.45 var(--font-mono)}
.auth-form .account-form-errors p,.auth-form .account-field-errors p{margin:0}

/* Sized to its label rather than stretched across the card. */
.auth-submit{justify-self:start;display:inline-flex;align-items:center;gap:9px;
  min-height:42px;margin-top:3px;padding:0 22px;border:1px solid var(--ink);
  border-radius:var(--radius);background:var(--ink);color:var(--paper);
  font:500 .82rem var(--font-display);letter-spacing:.01em;
  cursor:pointer;transition:opacity .15s ease}
.auth-submit:hover{opacity:.86}
.auth-submit:focus-visible{outline:2px solid var(--focus,var(--ink-pure));outline-offset:3px}

.auth-meta{margin-top:20px;padding-top:16px;border-top:1px solid var(--rule);
  display:grid;gap:9px;color:var(--ink-muted);font:.72rem/1.5 var(--font-mono)}
.auth-meta a{color:var(--ink);text-decoration:underline;
  text-decoration-color:color-mix(in srgb,var(--focus,var(--ink-pure)) 60%,transparent);
  text-underline-offset:3px}
.auth-meta a:hover{color:var(--focus,var(--ink-pure))}
.auth-legal{margin:14px 0 0;color:var(--ink-muted);font:.7rem/1.55 var(--font-mono)}
.auth-legal a{color:var(--ink);text-decoration:underline;
  text-decoration-color:color-mix(in srgb,var(--focus,var(--ink-pure)) 60%,transparent);
  text-underline-offset:3px}
.auth-legal a:hover{color:var(--focus,var(--ink-pure))}

/* Outcome pages (activation sent, recovery complete, expired link). */
.auth-glyph{display:inline-grid;place-items:center;width:38px;height:38px;margin-bottom:16px;
  border:1px solid var(--rule);border-radius:var(--radius);
  color:var(--focus,var(--ink-pure));font:400 1.05rem var(--font-display)}
.auth-card.is-error .auth-glyph{border-color:var(--d6);color:var(--d6)}
.auth-card.is-success .auth-glyph{border-color:var(--d1);color:var(--d1)}
.auth-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}
.auth-secondary{display:inline-flex;align-items:center;min-height:42px;padding:0 18px;
  border:1px solid var(--rule);border-radius:var(--radius);background:transparent;color:var(--ink);
  font:500 .82rem var(--font-display);letter-spacing:.01em}
.auth-secondary:hover{border-color:var(--ink)}

@media (prefers-reduced-motion:reduce){.auth-submit{transition:none}}

/* ============================================================================
   POLICY — privacy and terms
   These are documents people are asked to actually read, so they get the same
   treatment as an article: a compact masthead, one measure, a sticky contents
   rail, and no 6rem uppercase billboard above the first sentence.
   ========================================================================== */
.policy-wrap{width:min(100%,1160px);max-width:1160px;margin-inline:auto;
  padding:clamp(24px,3vw,40px) var(--pad) clamp(64px,7vw,104px)}

.policy-hero{display:block;min-height:0;gap:0;padding:0 0 clamp(20px,2.4vw,28px);
  border:0;border-bottom:1px solid var(--rule);background:none}
.policy-kicker{display:block;color:var(--ink-muted);font:500 .66rem var(--font-mono);
  letter-spacing:.15em;text-transform:uppercase}
.policy-hero h1{max-width:22ch;margin:clamp(13px,1.7vw,20px) 0 0;
  font:600 clamp(1.85rem,3.1vw,2.7rem)/1.1 var(--font-serif);
  letter-spacing:-.02em;text-transform:none;text-wrap:balance}
.policy-hero>p{max-width:58ch;margin:clamp(11px,1.3vw,16px) 0 0;color:var(--ink-muted);
  font:400 clamp(1rem,.35vw + .93rem,1.12rem)/1.55 var(--font-serif)}

.policy-layout{display:block;margin-top:clamp(30px,4vw,48px);border:0;background:none}
.policy-aside{padding:0;border:0;font:inherit;text-transform:none}
.policy-aside>span{display:block;color:var(--ink-muted);font:500 .6rem var(--font-mono);
  letter-spacing:.15em;text-transform:uppercase}
.policy-aside>strong{display:block;margin-top:4px;color:var(--ink);font:500 .8rem var(--font-mono)}
.policy-aside nav{display:grid;gap:0;margin-top:22px;border-left:1px solid var(--rule)}
.policy-aside nav a{display:block;padding:5px 0 5px 13px;margin-left:-1px;
  border-left:1px solid transparent;color:var(--ink-muted);
  font:.76rem/1.35 var(--font-display);text-decoration:none;
  transition:color .15s ease,border-color .15s ease}
.policy-aside nav a:hover{color:var(--ink)}

.policy-content{max-width:62ch;min-width:0;padding:0;color:var(--ink);
  font:400 clamp(1.0625rem,.28vw + 1rem,1.15rem)/1.75 var(--font-serif)}
.policy-content section{position:relative;max-width:none;padding:0 0 2em;border-bottom:0}
.policy-content section + section{padding-top:2.1em;border-top:1px solid var(--rule)}
.policy-content section:last-child{padding-bottom:0}
.policy-section-index{display:block;margin-bottom:.7em;color:var(--focus,var(--ink-pure));
  font:500 .64rem var(--font-mono);letter-spacing:.14em}
.policy-content h2{margin:0 0 .6em;font:600 clamp(1.28rem,1.5vw,1.5rem)/1.24 var(--font-display);
  letter-spacing:-.012em;text-transform:none;scroll-margin-top:96px}
.policy-content p,.policy-content ul{margin:0 0 1.3em}
.policy-content p:last-child,.policy-content ul:last-child{margin-bottom:0}
.policy-content ul{padding-left:1.4em}
.policy-content li{margin:.4em 0;padding-left:.2em}
.policy-content li::marker{color:var(--focus,var(--ink-pure))}
.policy-content a{color:inherit;text-decoration:underline;
  text-decoration-color:color-mix(in srgb,var(--focus,var(--ink-pure)) 55%,transparent);
  text-underline-offset:3px}
.policy-content a:hover{color:var(--focus,var(--ink-pure))}
.policy-lead p{color:var(--ink-muted);font-size:1.05em;line-height:1.7}

@media (min-width:1120px){
  .policy-layout{display:grid;grid-template-columns:186px minmax(0,1fr);
    gap:clamp(34px,4.5vw,76px);align-items:start}
  .policy-aside{position:sticky;top:88px;max-height:calc(100vh - 130px);
    overflow-y:auto;padding-right:6px}
  /* Masthead shares the prose column's left edge; the rail sits beside it. */
  .policy-hero{margin-left:calc(186px + clamp(34px,4.5vw,76px))}
}
@media (max-width:1119px){
  .policy-aside nav{grid-template-columns:1fr 1fr}
}
@media (prefers-reduced-motion:reduce){.policy-aside nav a{transition:none}}


/* ==========================================================================
   ARTICLE READING PAGE — v1, from direction B (plate).
   Namespaced .v1-* so nothing collides with the live .art-* rules.
   Tokens, header and footer all come from v11.css.
   ========================================================================== */

/* Anchor jumps from the contents rail glide instead of teleporting. */
html{scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
/* Focus ring for the keyboard-reachable note markers. */
.v1-ref:focus-visible,.v1-cite:focus-visible{outline:2px solid var(--focus);outline-offset:2px}

/* Field accents readable ON the dark plate. The light-theme --ink-* values are
   far too dark against --panel, so the dark-theme values are used there. */
body[data-ink="pure"]{--field-lit:#6E93E8}
body[data-ink="appl"]{--field-lit:#A6C4F6}
body[data-ink="prog"]{--field-lit:#5FB394}
body[data-ink="cs"]  {--field-lit:#C29A5A}
body[data-ink="ai"]  {--field-lit:#B189C4}

/* vote gradient endpoints */
:root{--vote-up:#1F9D57;--vote-down:#CF3B2F}
[data-theme="dark"]{--vote-up:#4AC97E;--vote-down:#E0574A}

/* ---- the plate ----------------------------------------------------------- */
.v1-plate{position:relative;overflow:hidden;background:var(--panel);color:#fff}
.v1-plate-inner{position:relative;z-index:2;width:min(100%,1560px);margin-inline:auto;
  padding:clamp(46px,6vw,92px) var(--pad) clamp(38px,4.6vw,64px)}
.v1-ghost{position:absolute;right:-.04em;bottom:-.2em;z-index:1;pointer-events:none;
  color:rgba(255,255,255,.05);font:600 clamp(5.5rem,16.2vw,15rem)/1 var(--font-numeric);
  font-variant-numeric:tabular-nums;letter-spacing:-.04em}
.v1-kicker{display:flex;flex-wrap:wrap;gap:0 10px;align-items:center;
  margin:0 0 clamp(18px,2.2vw,26px);
  font:500 .66rem var(--font-mono);letter-spacing:.16em;text-transform:uppercase;
  color:var(--panel-ink)}
.v1-kicker a{color:var(--field-lit);text-decoration:none}
.v1-kicker a:hover{text-decoration:underline;text-underline-offset:4px}
.v1-kicker .sep{color:rgba(255,255,255,.24)}
.v1-title{max-width:19ch;margin:0;color:#fff;
  font:600 clamp(2.3rem,5vw,4.1rem)/1.02 var(--font-serif);
  letter-spacing:-.028em;text-wrap:balance}
.v1-stand{max-width:52ch;margin:clamp(16px,1.9vw,24px) 0 0;color:var(--panel-ink);
  font:400 clamp(1.04rem,.4vw + .95rem,1.22rem)/1.55 var(--font-serif)}

/* ---- the fact strip ------------------------------------------------------
   Five cells, drawn rather than merely divided: each carries a corner tick in
   the seam language used by the directory band, a real inset, and a hover
   state. The old version had bare dividers and text jammed on the rule. */
.v1-strip{border-top:1px solid var(--ink);border-bottom:1px solid var(--ink);
  background:var(--paper-raised)}
.v1-strip-inner{width:min(100%,1560px);margin-inline:auto;padding:0 var(--pad);
  display:grid;grid-template-columns:repeat(5,minmax(0,1fr))}
.v1-cell{position:relative;padding:15px 20px 16px;border-right:1px solid var(--rule);
  transition:background .18s ease}
.v1-cell:first-child{border-left:1px solid var(--rule)}
.v1-cell::before{content:"";position:absolute;left:9px;top:9px;width:8px;height:8px;
  border-left:1px solid var(--ghost);border-top:1px solid var(--ghost);
  transition:border-color .18s ease}
.v1-cell::after{content:"";position:absolute;right:9px;bottom:9px;width:8px;height:8px;
  border-right:1px solid transparent;border-bottom:1px solid transparent;
  transition:border-color .18s ease}
.v1-cell:hover{background:color-mix(in srgb,var(--focus) 5%,transparent)}
.v1-cell:hover::before,.v1-cell:hover::after{border-color:var(--focus)}
.v1-cell>span{display:block;color:var(--ink-muted);font:500 .55rem var(--font-mono);
  letter-spacing:.15em;text-transform:uppercase}
.v1-cell strong{display:flex;align-items:center;gap:9px;margin-top:6px;color:var(--ink);
  font:500 .9rem var(--font-mono);font-variant-numeric:tabular-nums}
.v1-cell strong.is-muted{color:var(--ghost)}
/* The band drives the colour, matching the archive rows and article cards.
   --dc is set on the cell by the d1..d6 class the template emits. */
.v1-diff{color:var(--dc,var(--ink-muted));font-weight:600}
.v1-cell.d1{--dc:var(--d1)}.v1-cell.d2{--dc:var(--d2)}.v1-cell.d3{--dc:var(--d3)}
.v1-cell.d4{--dc:var(--d4)}.v1-cell.d5{--dc:var(--d5)}.v1-cell.d6{--dc:var(--d6)}
.v1-meter{display:inline-flex;gap:2px}
.v1-meter i{width:5px;height:12px;background:var(--rule)}
.v1-meter i.on{background:var(--dc,var(--ink-muted))}

/* ---- three zones: contents | measure | notes ------------------------------
   The measure is centred on the page and the rails sit in the outer margins,
   so the prose block, the section rules and the foot bar share one pair of
   edges. --measure caps it on very wide screens; drop it to narrow the text. */
.v1{--rail:210px;--gap:clamp(26px,2.8vw,44px);--measure:92ch;
  width:min(100%,1560px);margin-inline:auto;
  padding:0 var(--pad) clamp(64px,7vw,104px);
  display:grid;justify-content:center;align-items:start;
  grid-template-columns:
    [rail] var(--rail) [g1] var(--gap) [text] minmax(0,var(--measure))
    [g2] var(--gap) [note] var(--rail) [end]}

.v1-rail{grid-column:rail;grid-row:1/4;position:sticky;top:96px;align-self:start;
  padding-top:clamp(40px,5vw,66px);max-height:calc(100vh - 140px);overflow-y:auto}
.v1-rail-label{margin:0 0 12px;color:var(--ink-muted);font:500 .58rem var(--font-mono);
  letter-spacing:.15em;text-transform:uppercase}
.v1-toc{list-style:none;margin:0;padding:0}
.v1-toc a{display:grid;grid-template-columns:1.9rem minmax(0,1fr);align-items:baseline;
  padding:7px 0;border-bottom:1px solid var(--rule);color:var(--ink-muted);text-decoration:none}
.v1-toc a i{font-style:normal;color:var(--ghost);font:500 .56rem var(--font-mono)}
.v1-toc a span{font:.76rem/1.35 var(--font-display)}
.v1-toc a:hover{color:var(--ink)}
.v1-toc a.is-current{color:var(--focus)} .v1-toc a.is-current i{color:var(--focus)}

.v1-stream{grid-column:text;min-width:0;padding-top:clamp(40px,5vw,66px)}
.v1-notes{grid-column:note;position:relative;align-self:stretch;
  padding-top:clamp(40px,5vw,66px)}
.v1-note{position:absolute;left:0;right:0;padding-top:9px;border-top:1px solid var(--rule);
  color:var(--ink-muted);font:.79rem/1.55 var(--font-serif);
  transition:top .18s ease,color .15s,border-color .15s}
.v1-note b{display:block;margin-bottom:5px;color:var(--focus);font:500 .57rem var(--font-mono);
  letter-spacing:.13em;text-transform:uppercase}
.v1-note.is-lit{color:var(--ink);border-top-color:var(--focus)}
.v1-note p{margin:0}
.v1-note code{font-size:.9em}

/* ---- prose --------------------------------------------------------------- */
.v1-body{min-width:0;color:var(--ink);counter-reset:v1-sec;
  font:400 clamp(1.09rem,.3vw + 1.02rem,1.22rem)/1.72 var(--font-serif)}
.v1-body>*:first-child{margin-top:0}
.v1-body p{margin:0 0 1.35em}
.v1-body>p:first-of-type{font-size:1.06em;line-height:1.68}
.v1-body h2,.v1-body h3{font-family:var(--font-display);letter-spacing:-.012em;
  color:var(--ink);text-wrap:balance;scroll-margin-top:104px}
.v1-body h2{counter-increment:v1-sec;margin:2.6em 0 .6em;padding-top:.85em;
  border-top:1px solid var(--rule);
  font-size:clamp(1.34rem,1.5vw,1.62rem);font-weight:600;line-height:1.2}
.v1-body h2::before{content:counter(v1-sec,decimal-leading-zero);display:block;
  margin-bottom:.55em;color:var(--focus);font:500 .64rem var(--font-mono);letter-spacing:.14em}
.v1-body h3{margin:2em 0 .5em;font-size:1.1rem;font-weight:600}
.v1-body a{color:inherit;text-decoration:underline;text-underline-offset:3px;
  text-decoration-color:color-mix(in srgb,var(--focus) 55%,transparent);text-decoration-thickness:1px}
.v1-body a:hover{color:var(--focus);text-decoration-color:var(--focus)}
.v1-body ul,.v1-body ol{margin:0 0 1.35em;padding-left:1.4em}
.v1-body li::marker{color:var(--focus)}
.v1-body blockquote{margin:1.7em 0;padding:.1em 0 .1em 1.3em;border-left:2px solid var(--focus);
  color:var(--ink-muted);font-style:italic}
.v1-body blockquote p:last-child{margin-bottom:0}
.v1-body code{padding:.12em .35em;border:1px solid var(--rule);background:var(--paper-raised);
  font:.84em var(--font-mono);border-radius:var(--radius)}
.v1-body pre{margin:1.9em 0;padding:16px 18px;overflow-x:auto;border:1px solid var(--rule);
  background:var(--paper-raised);font:.82rem/1.65 var(--font-mono)}
.v1-body pre code{padding:0;border:0;background:none;font-size:inherit}
.v1-body table{margin:1.9em 0;border-collapse:collapse;font-size:.9em;width:100%}
.v1-body th,.v1-body td{padding:10px 13px;border:1px solid var(--rule);text-align:left;
  font-variant-numeric:tabular-nums}
.v1-body th{background:var(--paper-raised);font:500 .72rem var(--font-mono);
  letter-spacing:.06em;text-transform:uppercase}
.v1-body figcaption{margin-top:.7em;color:var(--ink-muted);font:.76rem/1.5 var(--font-mono)}
.v1-figure figcaption{padding-right:92px}
.v1-body .katex-display{margin:0;padding:.4em 0;overflow-x:auto;overflow-y:hidden}
.v1-ref{color:var(--focus);font:500 .62em var(--font-mono);vertical-align:super;
  line-height:0;padding-left:2px;cursor:pointer}
.v1-cite + .v1-ref{padding-left:4px}

/* ---- legacy sidenotes, no-JS fallback ------------------------------------
   The seeded corpus stores sidenotes as <span class="sn-ref"> + <details
   class="sn">. article.js rebuilds them into margin notes at load; without
   JS they read as an inline note under the paragraph instead of a bare
   disclosure triangle. */
.v1-body .sn-ref{color:var(--focus);font:500 .62em var(--font-mono);vertical-align:super;
  line-height:0;padding-left:2px}
.v1-body details.sn{margin:1.6em 0;padding:12px 0 0;border-top:1px solid var(--rule);
  color:var(--ink-muted);font:.86rem/1.6 var(--font-serif)}
.v1-body details.sn summary{list-style:none;cursor:pointer;color:var(--focus);
  font:500 .57rem var(--font-mono);letter-spacing:.13em;text-transform:uppercase}
.v1-body details.sn summary::-webkit-details-marker{display:none}
.v1-body details.sn summary::before{content:"Note "}
.v1-body details.sn .sn-body{margin-top:5px}

/* ---- maths blocks, with a copy-as-LaTeX affordance ----------------------- */
.v1-figure{position:relative;margin:1.9em 0;padding:clamp(20px,2.4vw,30px);
  border:1px solid var(--rule);background:var(--paper-raised)}
.v1-copy{position:absolute;right:8px;bottom:8px;display:inline-flex;align-items:center;gap:6px;
  height:28px;padding:0 9px;border:1px solid var(--rule);border-radius:var(--radius);
  background:var(--paper);color:var(--ink-muted);cursor:pointer;
  font:.58rem var(--font-mono);letter-spacing:.1em;text-transform:uppercase;
  opacity:0;transform:translateY(3px);transition:opacity .16s ease,transform .16s ease,
  border-color .16s,color .16s}
.v1-figure:hover .v1-copy,.v1-copy:focus-visible{opacity:1;transform:none}
.v1-copy:hover{border-color:var(--focus);color:var(--focus)}
.v1-copy svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:1.5}
.v1-copy.is-done{border-color:var(--vote-up);color:var(--vote-up)}

/* ---- citation markers ---------------------------------------------------- */
.v1-cite{color:var(--focus);font:500 .6em var(--font-mono);vertical-align:super;
  line-height:0;padding-left:2px;text-decoration:none;cursor:pointer}
/* Consecutive citations must not read as one number: a run renders [4,5,6],
   which also distinguishes citations from the bare sidenote markers. */
.v1-cite::before{content:"["}
.v1-cite::after{content:"]"}
.v1-cite + .v1-cite{padding-left:0}
.v1-cite + .v1-cite::before{content:","}
.v1-cite:has(+ .v1-cite)::after{content:""}
.v1-cite:hover,.v1-cite:focus-visible{text-decoration:underline;text-underline-offset:3px}
.v1-cite.is-open{background:color-mix(in srgb,var(--focus) 16%,transparent)}

/* A marker click pops the single entry in place, so a reader never has to
   travel to the list. This is what stops 20+ references mattering. */
.v1-refpop{position:absolute;z-index:50;width:min(360px,80vw);padding:12px 14px;
  border:1px solid var(--ink);background:var(--paper-raised);
  box-shadow:6px 6px 0 color-mix(in srgb,var(--ink) 11%,transparent);
  color:var(--ink);font:.8rem/1.55 var(--font-serif)}
.v1-refpop[hidden]{display:none}
.v1-refpop b{display:block;margin-bottom:5px;color:var(--focus);
  font:500 .56rem var(--font-mono);letter-spacing:.13em;text-transform:uppercase}
.v1-refpop a{color:var(--focus);font:.7rem var(--font-mono);text-decoration:none}
.v1-refpop a:hover{text-decoration:underline}

/* ---- reference list ------------------------------------------------------ */
.v1-refs{grid-column:text;margin-top:clamp(44px,5vw,64px);
  padding-top:clamp(16px,2vw,22px);border-top:1px solid var(--ink)}
.v1-refs-head{display:flex;flex-wrap:wrap;gap:10px 18px;align-items:baseline;
  justify-content:space-between;margin:0 0 clamp(14px,1.8vw,20px)}
.v1-refs-head h2{margin:0;color:var(--ink-muted);font:500 .6rem var(--font-mono);
  letter-spacing:.15em;text-transform:uppercase}
.v1-refs-head h2 b{color:var(--ink);font-weight:500}
/* No-JS fallback is native two-column flow; with JS the list is split into two
   sub-lists at the index that makes the columns closest in height. */
.v1-reflist{margin:0;padding:0;list-style:none;
  columns:2;column-gap:clamp(28px,3vw,52px)}
.v1-refcols{display:grid;grid-template-columns:1fr 1fr;
  column-gap:clamp(28px,3vw,52px);align-items:start}
.v1-refcol{columns:auto}
.v1-reflist li{break-inside:avoid;display:grid;grid-template-columns:2.4rem minmax(0,1fr);
  margin:0 0 11px;padding-bottom:11px;border-bottom:1px solid var(--rule);
  color:var(--ink-muted);font:.79rem/1.5 var(--font-serif)}
.v1-reflist li:target,.v1-reflist li.is-lit{color:var(--ink)}
.v1-reflist li:target .v1-refnum,.v1-reflist li.is-lit .v1-refnum{color:var(--focus)}
.v1-refnum{color:var(--ghost);font:500 .7rem var(--font-mono);
  font-variant-numeric:tabular-nums;padding-top:.15em}
.v1-reflist cite{font-style:normal;color:var(--ink)}
.v1-reflist .src{color:var(--ink-muted);font-style:italic}
.v1-reflist a{display:inline-block;margin-top:3px;color:var(--focus);
  font:.65rem var(--font-mono);text-decoration:none;word-break:break-all}
.v1-reflist a:hover{text-decoration:underline}
@media (max-width:1000px){
  .v1-reflist{columns:1}
  .v1-refcols{grid-template-columns:1fr}}

/* ---- foot: all-articles + vote ------------------------------------------- */
.v1-foot{grid-column:text;margin-top:clamp(46px,5.5vw,70px);
  padding-top:clamp(18px,2.2vw,24px);border-top:1px solid var(--ink);
  display:flex;flex-wrap:wrap;gap:16px 26px;align-items:center;justify-content:space-between}
.v1-exit{display:inline-flex;align-items:center;gap:8px;color:var(--ink-muted);
  font:.74rem var(--font-mono);letter-spacing:.06em;text-decoration:none}
.v1-exit:hover{color:var(--focus)}
.v1-vote{display:flex;align-items:center;gap:8px}
.v1-vote button{display:inline-flex;align-items:center;gap:7px;height:34px;padding:0 13px;
  border:1px solid var(--rule);border-radius:var(--radius);background:var(--paper-raised);
  cursor:pointer;font:500 .74rem var(--font-mono);font-variant-numeric:tabular-nums;
  transition:border-color .15s,background .15s}
.v1-vote .up{color:var(--vote-up)}
.v1-vote .down{color:var(--vote-down)}
.v1-vote .up:hover{border-color:var(--vote-up);background:color-mix(in srgb,var(--vote-up) 9%,transparent)}
.v1-vote .down:hover{border-color:var(--vote-down);background:color-mix(in srgb,var(--vote-down) 9%,transparent)}
.v1-vote .score{min-width:3.2rem;text-align:center;
  font:600 1.05rem var(--font-numeric);font-variant-numeric:tabular-nums;
  transition:color .2s ease}
.v1-votewrap{display:flex;flex-direction:column;align-items:flex-end;gap:9px}
.v1-vote-note{margin:0;color:var(--ink-muted);font:.7rem var(--font-mono);text-align:right}
.v1-vote-note a{color:var(--focus)}
/* Signed out: the controls are visibly inert and the score stays neutral. */
.v1-vote button[disabled]{color:var(--ghost);border-color:var(--rule);
  background:var(--paper);cursor:not-allowed}
.v1-vote button[disabled]:hover{border-color:var(--rule);background:var(--paper)}

/* ---- responsive ---------------------------------------------------------- */
/* Below the margin-note breakpoint the notes keep one DOM copy and simply
   restack under the prose, so nothing is duplicated and nothing is lost. */
@media (max-width:1320px){
  .v1{grid-template-columns:[rail] var(--rail) [g1] var(--gap) [text] minmax(0,var(--measure)) [g2] 0 [note] 0 [end]}
  .v1-notes{grid-column:text;grid-row:2;position:static;padding-top:0}
  .v1-note{position:static;margin:1.7em 0 0;padding:12px 0 0}}
@media (max-width:1000px){
  .v1{grid-template-columns:minmax(0,1fr)}
  .v1-stream,.v1-foot{grid-column:1/-1} .v1-rail{display:none}
  .v1-strip-inner{grid-template-columns:repeat(2,minmax(0,1fr))}
  .v1-cell{border-bottom:1px solid var(--rule)} .v1-cell:nth-child(2n){border-right:0}
  .v1-copy{opacity:1;transform:none}}


