/* ONE SHEET — base: tokens, fonts, reset, typography, chrome, SSR / no-JS, layers (owner A).
   The block between the critical markers is also inlined into <head> by index.php. */

/*! critical:start */
:root {
  /* palette (SPEC §2.1) — the only colours on the site */
  --paper: #F2F1ED;
  --paper-2: #E7E5DF;
  --ink: #121212;
  --graphite: #5C5B57;
  --2h: #B9B7B1;
  --numeral: #D6D4CE;
  --hair: rgba(18, 18, 18, .16);
  --night: #141413;
  --night-ink: #E9E7E2;
  --night-graphite: #9C9A95;

  --hair-w: 1px;
  --wk: 1;

  --serif: "Instrument Serif", "Iowan Old Style", Palatino, Georgia, serif;
  --mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;

  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --ease-io: cubic-bezier(0.65, 0, 0.35, 1);
  --ease-tone: cubic-bezier(0.3, 0, 0.2, 1);
  --ease-in: cubic-bezier(0.55, 0, 1, 0.45);
  --d-160: 160ms; --d-240: 240ms; --d-320: 320ms; --d-480: 480ms;
  --d-720: 720ms; --d-960: 960ms; --d-1280: 1280ms; --d-2400: 2400ms;

  /* layers (SPEC §3.2) */
  --z-base: 0; --z-gl: 20; --z-spine: 30; --z-overlay: 40; --z-chrome: 50; --z-intro: 60; --z-toast: 70;

  --header-h: 48px;
  --m: 16px;
  --g: 12px;
  --safe-b: env(safe-area-inset-bottom, 0px);

  /* chrome colours (switched by html.is-night) */
  --fg: var(--ink);
  --fg-2: var(--graphite);
  --bg: var(--paper);
  --rule: var(--hair);
  --night-ms: 480ms;
}
@media (min-width: 700px) { :root { --m: 32px; --g: 16px; } }
@media (min-width: 1024px) { :root { --m: 40px; --g: 24px; } }
@media (min-width: 1440px) { :root { --m: 48px; } }
@media (min-resolution: 2dppx) { :root { --hair-w: .5px; } }
@media (prefers-contrast: more) { :root { --hair: rgba(18, 18, 18, .4); --2h: #8E8C86; } }

html.is-night {
  --fg: var(--night-ink);
  --fg-2: var(--night-graphite);
  --bg: var(--night);
  --rule: rgba(233, 231, 226, .16);
}

html {
  scrollbar-gutter: stable;
  /* classic (Windows) scrollbars in the palette: a 2H thumb on the sheet's own paper, not a grey
     system slab beside it; inherited by every scroller (About, Index, the key map). Width unchanged. */
  scrollbar-color: var(--2h) var(--bg);
  background: var(--paper);
  background: var(--bg);           /* the reserved scrollbar gutter follows night mode too */
  transition: background-color var(--night-ms) var(--ease-io);
  color: var(--ink);
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}
body {
  margin: 0;
  min-height: 100vh;
  background: var(--paper);
  color: var(--ink);
  font: 400 12px/20px var(--mono);
  font-feature-settings: "tnum";
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  overflow-x: clip;
}
html.is-frozen, html.c-lock { overflow: hidden; }
[hidden] { display: none !important; }
.js #ssr { display: none; }
.boot-failed #ssr { display: block; }
.boot-failed #cam, .boot-failed #index-view, .boot-failed #spine, .boot-failed #gl, .boot-failed #detail, .boot-failed #about { display: none !important; }

/* header (SPEC §7.3) */
.c-header {
  position: fixed; top: 0; left: 0; right: 0; z-index: 50;
  height: var(--header-h);
  display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; column-gap: 24px;
  padding: 0 max(var(--m), env(safe-area-inset-right)) 0 max(var(--m), env(safe-area-inset-left));
  color: var(--fg);
  background: rgba(242, 241, 237, .92);
  background: color-mix(in srgb, var(--bg) 92%, transparent);
  transition: transform var(--d-320) var(--ease-out), color var(--night-ms) var(--ease-io), background-color var(--night-ms) var(--ease-io), opacity var(--d-240) var(--ease-out);
}
.c-rule {
  position: absolute; left: 0; right: 0; bottom: 0;
  height: var(--hair-w); background: var(--rule);
  transform-origin: 0 50%;
  pointer-events: none;
}
.c-logo {
  grid-column: 1; justify-self: start;
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 44px; height: var(--header-h); margin-left: -6px; padding: 0 6px;
  color: inherit; text-decoration: none;
}
.c-mark {
  display: inline-block;
  font-family: var(--serif); font-style: normal; font-weight: 400;
  letter-spacing: -.01em; line-height: 1; text-transform: none;
  transform: rotate(180deg);
}
.c-logo .c-mark { font-size: 20px; transition: transform var(--d-480) var(--ease-io); }
.c-item {
  font: 400 11px/16px var(--mono); letter-spacing: .08em; text-transform: uppercase;
  color: inherit; text-decoration: none; white-space: nowrap;
  display: inline-flex; align-items: center; min-height: 44px;
  background: none; border: 0; padding: 0; margin: 0; cursor: pointer;
}
/* inline-block: the parent's underline does not propagate into the count. That holds only inside an
   inline formatting context (a flex item is decorated), so the series links are inline blocks. */
.c-item sup { display: inline-block; font-size: 8px; line-height: 0; margin-left: 2px; vertical-align: 6px; letter-spacing: 0; color: var(--fg-2); }
.c-nav-series .c-item { display: inline-block; line-height: 44px; }
.c-sep { color: var(--fg-2); opacity: .6; font: 400 11px/16px var(--mono); }
.c-nav { display: flex; align-items: center; gap: 10px; }
.c-nav-series { grid-column: 2; justify-self: center; min-width: 0; transition: opacity var(--d-240) var(--ease-out); }
.c-nav-site { grid-column: 3; justify-self: end; }
.c-menu-btn { display: none; }
.c-header.c-tight .c-nav-series, .c-header.c-tight .c-wide { display: none; }
.js .c-header.c-tight .c-menu-btn { display: inline-flex; }
@media (max-width: 1023px) {
  .c-nav-series, .c-wide { display: none; }
  .js .c-menu-btn { display: inline-flex; }
  .no-js .c-wide, .boot-failed .c-wide { display: inline-flex; }
  .boot-failed .c-menu-btn { display: none; }
}
/* touch: 44 px targets (§8.1); the padding hangs into the margin, the text keeps its place */
@media (max-width: 1023px), (pointer: coarse) {
  .c-nav-site { gap: 0; margin-right: -8px; }
  .c-nav-site .c-item { min-width: 44px; justify-content: center; padding: 0 8px; }
}

/* intro, first frame (SPEC §4.1) */
#intro {
  position: fixed; inset: 0; z-index: 60;
  display: none; place-items: center;
  background: var(--paper); color: var(--ink);
  pointer-events: none; overflow: hidden;
}
.intro-run #intro, .no-js #intro { display: grid; }
.intro-mark {
  display: block;
  font: 400 22vw/1 var(--serif);
  letter-spacing: -.01em; white-space: nowrap;
  transform-origin: 50% 50%;
}
.intro-line {
  position: absolute; left: 0; right: 0;
  top: calc(50% + 11vw + 40px);
  text-align: center;
  font: 400 11px/16px var(--mono); letter-spacing: .08em; text-transform: uppercase;
  color: var(--graphite);
}
@keyframes intro-turn { from { transform: rotate(0deg); } to { transform: rotate(180deg); } }
/* the mono line steps back while the turning glyphs sweep across it (same span as the turn) */
@keyframes intro-dip { 0%, 100% { opacity: 1; } 19%, 81% { opacity: .12; } }
@keyframes intro-out { to { opacity: 0; visibility: hidden; } }
.no-js .intro-mark { animation: intro-turn 1280ms var(--ease-io) 320ms both; }
.no-js .intro-line { animation: intro-dip 1280ms var(--ease-io) 320ms both; }
.intro-run.fonts-ready .intro-mark { animation: intro-turn 1280ms var(--ease-io) var(--intro-delay, 320ms) both; }
.intro-run.fonts-ready .intro-line { animation: intro-dip 1280ms var(--ease-io) var(--intro-delay, 320ms) both; }
@media (max-width: 699px) {
  .no-js .intro-mark, .intro-run.fonts-ready .intro-mark,
  .no-js .intro-line, .intro-run.fonts-ready .intro-line { animation-duration: 960ms; }
}
.no-js #intro { animation: intro-out 480ms var(--ease-out) 1840ms both; }
.intro-run .c-header { opacity: 0; }
/* The sheet stays under a sheet of paper (below the GL canvas) until the intro hands off. It is
   covered, not hidden: the frontispiece <img> paints as soon as its preload lands (LCP, decode). */
.intro-run #app::after {
  content: ""; position: fixed; inset: 0; z-index: 1;
  background: var(--paper); pointer-events: none;
}
.boot-failed #intro { display: none; }
.boot-failed .c-header { opacity: 1; }
@media (prefers-reduced-motion: reduce) {
  .intro-mark { animation: none !important; transform: rotate(180deg); }
  .intro-line { animation: none !important; }
  .no-js #intro { display: none; }
}
/*! critical:end */

/* ------------------------------------------------------------------ fonts (SPEC §2.2) */

@font-face {
  font-family: "Instrument Serif"; font-style: normal; font-weight: 400; font-display: swap;
  src: url(../fonts/instrument-serif-latin-400-normal.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: "Instrument Serif"; font-style: normal; font-weight: 400; font-display: swap;
  src: url(../fonts/instrument-serif-latin-ext-400-normal.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: "Instrument Serif"; font-style: italic; font-weight: 400; font-display: swap;
  src: url(../fonts/instrument-serif-latin-400-italic.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: "Instrument Serif"; font-style: italic; font-weight: 400; font-display: swap;
  src: url(../fonts/instrument-serif-latin-ext-400-italic.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-latin-400-normal.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-latin-ext-400-normal.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-latin-500-normal.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-latin-ext-500-normal.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;
}

/* ------------------------------------------------------------------ reset */

*, *::before, *::after { box-sizing: border-box; }
h1, h2, h3, h4, h5, h6, p, figure, blockquote, dl, dd, ol, ul { margin: 0; }
h1, h2, h3, h4, h5, h6, b, strong, th { font-weight: 400; }
ol, ul { padding: 0; }
img, svg, video, canvas { display: block; max-width: 100%; }
img { border: 0; }
a { color: inherit; text-decoration-thickness: 1px; text-underline-offset: 3px; }
button, input, select, textarea { font: inherit; color: inherit; letter-spacing: inherit; }
button { background: none; border: 0; padding: 0; cursor: pointer; border-radius: 0; }
button:disabled { cursor: default; }
::selection { background: var(--ink); color: var(--paper); }
:focus { outline: none; }
:focus-visible { outline: 1px solid var(--ink); outline-offset: 3px; }
html.is-night .c-header :focus-visible { outline-color: var(--night-ink); }

/* ------------------------------------------------------------------ typography (SPEC §2.2) */

.t-mono11 { font: 400 11px/16px var(--mono); letter-spacing: .08em; text-transform: uppercase; font-feature-settings: "tnum"; }
.t-mono12 { font: 400 12px/20px var(--mono); font-feature-settings: "tnum"; }
.t-serif { font-family: var(--serif); font-weight: 400; letter-spacing: -.01em; }
.t-s15 { font: 400 15px/1.3 var(--serif); }
.t-s20i { font: italic 400 20px/1.1 var(--serif); }
.t-s32 { font: 400 32px/1.1 var(--serif); letter-spacing: -.01em; }
.t-s48 { font: 400 48px/.95 var(--serif); letter-spacing: -.01em; }
.t-s64 { font: 400 64px/.95 var(--serif); letter-spacing: -.01em; }
.t-s88 { font: 400 88px/.95 var(--serif); letter-spacing: -.01em; }
.t-title { font-family: var(--serif); font-weight: 400; line-height: .95; letter-spacing: -.01em; text-wrap: balance; }
.t-muted { color: var(--graphite); }
kbd {
  display: inline-block; min-width: 20px; padding: 0 5px;
  font: 500 11px/18px var(--mono); letter-spacing: .04em; text-align: center; text-transform: none;
  border: var(--hair-w) solid var(--ink); border-radius: 2px;
}

/* ------------------------------------------------------------------ utilities */

/* Monochrome only (§2.1): emoji in titles / materials never render in colour. .emo wraps them where
   the page builds the markup (store helpers, util el(), SSR); the containers other modules fill with
   textContent are desaturated as a whole (plain text in the palette is unchanged by it). */
body { font-variant-emoji: text; }
.emo { font-variant-emoji: text; filter: grayscale(1); }
.s-cap .s-t, .s-cap .s-l3, .s-bcap, .s-cap-cell, .s-spine-card > span,
.d-title-in, .d-dl dd, .i-cap-t, .i-cap-rest, .i-row-link, .a-ref-ds a,
.nojs-t, .nojs-series li > span, .ssr-d h1, .ssr-d dd, .ssr-nav a, .ssr-note { filter: grayscale(1); }

.sr-only {
  position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; border: 0;
}
.c-skip {
  position: fixed; left: var(--m); top: 8px; z-index: 71;
  padding: 8px 12px; background: var(--ink); color: var(--paper);
  font: 400 11px/16px var(--mono); letter-spacing: .08em; text-transform: uppercase; text-decoration: none;
  transform: translateY(-300%);
}
.c-skip:focus { transform: none; }

/* ------------------------------------------------------------------ layers (SPEC §3.2) */

#app { position: relative; z-index: 0; display: block; }
#app:focus { outline: none; }
/* the app reserves a screen for the sheet; the server page (no JS, boot failed) starts under the header */
.js:not(.boot-failed) #app { min-height: 100vh; }
#cam { position: relative; z-index: 0; }
#cam.c-off { visibility: hidden; opacity: 0; }
#index-view { position: relative; z-index: 0; }
#gl { position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: 20; pointer-events: none; }
#spine { z-index: 30; }
#detail { position: fixed; inset: 0; z-index: 40; }
#about { position: fixed; inset: 0; z-index: 40; }
#toast, #live { z-index: 70; }
.about-open #cam, .about-open #index-view, .about-open #spine, .about-open #gl { visibility: hidden; }

/* ------------------------------------------------------------------ header states */

.c-item.is-active, .c-item[aria-current] { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 4px; }
.c-item.is-active sup, .c-item:hover sup { text-decoration: none; }
@media (hover: hover) and (pointer: fine) {             /* no sticky :hover after a tap */
  .c-item:hover { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 4px; }
  .c-logo:hover .c-mark, .c-logo:focus-visible .c-mark { transform: rotate(0deg); }
}
.c-header.is-tucked { transform: translateY(-100%); }
html[data-mode="detail"] .c-nav-series { opacity: 0; pointer-events: none; }
html.c-menu-open .c-header { background: var(--paper); color: var(--ink); }

/* ------------------------------------------------------------------ menu (< 1024) */

.c-menu {
  position: fixed; inset: 0; z-index: 50;
  overflow: auto; overscroll-behavior: contain;
  background: var(--paper); color: var(--ink);
  padding: calc(var(--header-h) + 24px) max(var(--m), env(safe-area-inset-right, 0px)) calc(40px + var(--safe-b)) max(var(--m), env(safe-area-inset-left, 0px));
}
.c-menu-in { max-width: 720px; }
.c-menu-list { list-style: none; }
.c-menu-a {
  display: flex; align-items: baseline; justify-content: space-between; gap: 16px;
  min-height: 56px; padding: 10px 0 12px;
  border-bottom: var(--hair-w) solid var(--hair);
  color: var(--ink); text-decoration: none;
}
.c-menu-t { font: 400 40px/1 var(--serif); letter-spacing: -.01em; }
.c-menu-n { font: 400 11px/16px var(--mono); letter-spacing: .08em; color: var(--graphite); }
.c-menu-a.is-active .c-menu-t, .c-menu-a:hover .c-menu-t { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 6px; }
.c-menu-follow {
  display: inline-flex; align-items: center; min-height: 44px; margin-top: 24px;
  font: 400 11px/16px var(--mono); letter-spacing: .08em; text-transform: uppercase; text-decoration: none; color: var(--ink);
}
.c-menu-follow:hover { text-decoration: underline; }

/* ------------------------------------------------------------------ toast, live */

#toast {
  position: fixed; left: 50%; bottom: calc(24px + var(--safe-b));
  transform: translate(-50%, 8px); opacity: 0; pointer-events: none;
  padding: 8px 12px; background: var(--ink); color: var(--paper);
  font: 400 11px/16px var(--mono); letter-spacing: .08em; text-transform: uppercase; white-space: nowrap;
  transition: opacity var(--d-240) var(--ease-out), transform var(--d-240) var(--ease-out);
}
#toast.is-on { opacity: 1; transform: translate(-50%, 0); }
#toast:empty { visibility: hidden; }

/* ------------------------------------------------------------------ keyboard overlay */

.c-keys {
  position: fixed; inset: 0; z-index: 60;
  display: grid; place-items: center; padding: var(--m);
  background: rgba(242, 241, 237, .92);
  background: color-mix(in srgb, var(--paper) 92%, transparent);
}
.c-keys-in {
  position: relative; width: 100%; max-width: 760px; max-height: calc(100vh - 2 * var(--m));
  overflow: auto; overscroll-behavior: contain;
  padding: 32px; background: var(--paper); color: var(--ink); border: 1px solid var(--ink);
}
.c-keys-t { font: 400 32px/1 var(--serif); letter-spacing: -.01em; margin: 0 0 24px; }
.c-keys-cols { columns: 2 300px; column-gap: 40px; }
.c-keys-sec { break-inside: avoid; margin: 0 0 24px; }
/* wide screens: three columns, so the whole map fits a 768 px tall laptop without scrolling */
@media (min-width: 1000px) {
  .c-keys-in { max-width: 1000px; }
  .c-keys-cols { columns: 3 240px; }
}
@media (max-height: 800px) {
  .c-keys-in { padding: 24px 32px; }
  .c-keys-t { margin-bottom: 16px; }
  .c-keys-sec { margin-bottom: 16px; }
  .c-keys-row { padding: 3px 0; }
}
.c-keys-h { font: 400 11px/16px var(--mono); letter-spacing: .08em; text-transform: uppercase; color: var(--graphite); margin: 0 0 6px; }
.c-keys-sec.is-here .c-keys-h { color: var(--ink); text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 4px; }
.c-keys-dl { margin: 0; }
.c-keys-row {
  display: flex; align-items: center; justify-content: space-between; gap: 16px;
  padding: 5px 0; border-bottom: var(--hair-w) solid var(--hair);
}
.c-keys-row dt { display: flex; gap: 4px; flex-wrap: wrap; }
.c-keys-row dd { margin: 0; font: 400 12px/20px var(--mono); color: var(--graphite); text-align: right; }
.c-keys-x {
  position: absolute; top: 24px; right: 24px; min-height: 44px; padding: 0 4px;
  font: 400 11px/16px var(--mono); letter-spacing: .08em; text-transform: uppercase;
}
.c-keys-x:hover { text-decoration: underline; text-underline-offset: 4px; }

/* ------------------------------------------------------------------ 404 upside down (SPEC §7.4) */

.is-404 #cam, .is-404 #spine, .is-404 #index-view { visibility: hidden; }
html.is-404 { overflow: hidden; }       /* nothing to scroll behind the upside-down page */
.c-404 {
  position: fixed; inset: var(--header-h) 0 0; z-index: 1;
  display: grid; place-items: center; padding: var(--m);
}
.c-404-in { max-width: 760px; text-align: center; transform: rotate(180deg); }
.c-404-in.is-turned { transform: none; }
.c-404-k { font: 400 11px/16px var(--mono); letter-spacing: .08em; color: var(--graphite); }
.c-404-t {
  margin: 16px 0 40px;
  font: 400 clamp(40px, 6vw, 88px)/.95 var(--serif); letter-spacing: -.01em; text-wrap: balance;
}
.c-404-t .c-mark { font-size: 1em; }
.c-404-btn, .a-turn {
  display: inline-flex; align-items: center; min-height: 44px; padding: 0 16px;
  border: 1px solid var(--ink); color: var(--ink);
  font: 400 11px/16px var(--mono); letter-spacing: .08em; text-transform: uppercase;
  transition: background-color var(--d-160) var(--ease-out), color var(--d-160) var(--ease-out);
}
.c-404-btn:hover, .a-turn:hover { background: var(--ink); color: var(--paper); }
.c-404-back { font: italic 400 32px/1.1 var(--serif); text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 6px; }

/* ------------------------------------------------------------------ About: back of the sheet (SPEC §7.2) */

#about { perspective: 1600px; background: var(--paper); }
.a-card { position: absolute; inset: 0; transform-style: preserve-3d; }
.a-face {
  position: absolute; inset: 0; overflow: hidden;
  background: var(--paper);
  -webkit-backface-visibility: hidden; backface-visibility: hidden;
}
.a-back { transform: rotateY(180deg); }
#about.is-flat .a-card, #about.is-flat .a-back { transform: none; }
#about.is-flat .a-front { display: none; }
.a-clip { position: absolute; isolation: isolate; background: var(--paper); }
.a-clip img { position: absolute; max-width: none; user-select: none; }
.a-ghosts {
  position: absolute; inset: 0; pointer-events: none;
  transform: scaleX(-1); filter: blur(3px) grayscale(1); opacity: .12;
}
/* a toned or dark sheet held against the window: fainter, no shadow, edges dissolve (never a slab) */
.a-ghosts .a-clip.a-sheet {
  opacity: .4;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 40px, #000 calc(100% - 40px), transparent),
    linear-gradient(180deg, transparent, #000 40px, #000 calc(100% - 40px), transparent);
  -webkit-mask-composite: source-in;
  mask-image: linear-gradient(90deg, transparent, #000 40px, #000 calc(100% - 40px), transparent),
    linear-gradient(180deg, transparent, #000 40px, #000 calc(100% - 40px), transparent);
  mask-composite: intersect;
}
.a-front .a-snap { position: absolute; overflow: hidden; pointer-events: none; }
.a-front .a-snap > * { position: absolute !important; inset: 0 !important; margin: 0 !important; }
.a-scroll {
  position: absolute; inset: 0; overflow: auto; overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
}
.a-scroll:focus { outline: none; }
.a-content { max-width: 920px; margin: 0 auto; padding: calc(var(--header-h) + 10vh) var(--m) calc(80px + var(--safe-b)); }
.a-mark { font: 400 clamp(72px, 13vw, 176px)/1 var(--serif); letter-spacing: -.01em; margin: 0 0 48px; }
.a-mark .c-mark { font-size: 1em; }
.a-text p { font: 400 32px/1.12 var(--serif); letter-spacing: -.01em; max-width: 24em; text-wrap: pretty; margin: 0 0 .6em; }
@media (max-width: 699px) { .a-text p { font-size: 24px; } }
.a-sec { margin-top: 72px; }
.a-h {
  font: 400 11px/16px var(--mono); letter-spacing: .08em; text-transform: uppercase; color: var(--graphite);
  padding-bottom: 8px; margin-bottom: 12px; border-bottom: var(--hair-w) solid var(--hair);
}
.a-rows { list-style: none; columns: 2 320px; column-gap: 48px; }
.a-rows li { break-inside: avoid; }
.a-row {
  display: flex; align-items: baseline; gap: 8px; min-height: 32px;
  margin: 0 -8px; padding: 6px 8px;
  font: 400 11px/16px var(--mono); letter-spacing: .08em; text-transform: uppercase;
  color: var(--ink); text-decoration: none;
  transition: background-color var(--d-160) var(--ease-out);
}
.a-row:focus-visible { background: var(--paper-2); }
@media (hover: hover) and (pointer: fine) { .a-row:hover { background: var(--paper-2); } }
@media (pointer: coarse) { .a-row { padding-top: 14px; padding-bottom: 14px; } }   /* 44 px rows */
.a-row-t { flex: 0 1 auto; }
.a-row-dots { flex: 1 1 24px; min-width: 24px; border-bottom: 1px dotted var(--2h); transform: translateY(-4px); }
.a-row-n { color: var(--graphite); }
.a-reflist { list-style: none; }
.a-ref {
  display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 4px 16px;
  padding: 8px 0; border-bottom: var(--hair-w) solid var(--hair);
}
.a-ref-n { font: italic 400 20px/1.2 var(--serif); }
.a-ref-ds { font: 400 11px/16px var(--mono); letter-spacing: .08em; text-transform: uppercase; color: var(--graphite); }
.a-ref-ds a { text-decoration: none; }
.a-ref-ds a:hover { color: var(--ink); text-decoration: underline; }
.a-follow { display: flex; flex-wrap: wrap; gap: 8px 32px; }
.a-follow-a {
  display: inline-flex; align-items: center; min-height: 44px;
  font: 400 11px/16px var(--mono); letter-spacing: .08em; text-transform: uppercase; text-decoration: underline;
}
.a-colophon { margin-top: 72px; font: 400 11px/20px var(--mono); letter-spacing: .08em; text-transform: uppercase; color: var(--graphite); }
.a-colophon .c-mark { font-size: 18px; letter-spacing: -.01em; color: var(--ink); vertical-align: -2px; }
.a-turn { margin-top: 48px; }

/* ------------------------------------------------------------------ SSR / no-JS (SPEC §8.4) */

/* #app is a stacking context: the paper behind the multiply images has to be inside it */
#ssr { padding: calc(var(--header-h) + 48px) var(--m) calc(96px + var(--safe-b)); background: var(--paper); }
.no-js .c-header, .boot-failed .c-header { position: absolute; }
.nojs-h1 { font: 400 clamp(48px, 9vw, 120px)/.95 var(--serif); letter-spacing: -.01em; margin: 0 0 72px; }
.nojs-series { margin: 0 0 120px; }
.nojs-series h2 { font: 400 clamp(40px, 6vw, 88px)/.95 var(--serif); letter-spacing: -.01em; margin: 0 0 12px; text-wrap: balance; }
.nojs-series h2 small { font: 400 11px/16px var(--mono); letter-spacing: .08em; color: var(--graphite); vertical-align: top; margin-left: 8px; }
.nojs-series > p { font: 400 12px/20px var(--mono); color: var(--graphite); margin: 0 0 40px; max-width: 60ch; }
.nojs-series ul { list-style: none; display: grid; grid-template-columns: repeat(auto-fill, minmax(168px, 1fr)); gap: 56px 24px; margin-top: 40px; }
.nojs-series li { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; }
.nojs-a { display: flex; flex-direction: column; gap: 12px; width: 100%; text-decoration: none; }
.nojs-series li img { width: 100%; height: auto; mix-blend-mode: multiply; }
.nojs-t { font: italic 400 20px/1.1 var(--serif); text-wrap: balance; }
.nojs-a:hover .nojs-t, .nojs-a:focus-visible .nojs-t { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 3px; }
.nojs-series time, .nojs-series li > span { font: 400 11px/16px var(--mono); letter-spacing: .08em; text-transform: uppercase; color: var(--graphite); }

.ssr-d { display: grid; gap: 40px; max-width: 1480px; margin: 0 auto; }
@media (min-width: 1024px) { .ssr-d { grid-template-columns: minmax(0, 5fr) minmax(280px, 2fr); align-items: end; } }
.ssr-d img { width: 100%; height: auto; max-height: calc(100vh - 140px); object-fit: contain; mix-blend-mode: multiply; }
.ssr-no { font: 400 11px/16px var(--mono); letter-spacing: .08em; text-transform: uppercase; }
.ssr-d h1 { font: 400 clamp(40px, 4.4vw, 88px)/.95 var(--serif); letter-spacing: -.01em; text-wrap: balance; margin: 8px 0 24px; }
.ssr-d dl { display: grid; grid-template-columns: auto 1fr; gap: 0 24px; padding-top: 16px; border-top: var(--hair-w) solid var(--hair); font: 400 12px/20px var(--mono); }
.ssr-d dt { font: 400 11px/20px var(--mono); letter-spacing: .08em; text-transform: uppercase; color: var(--graphite); }
.ssr-d dd { margin: 0; }
.ssr-note { font: italic 400 18px/1.3 var(--serif); margin-top: 24px; }
.ssr-nav { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 16px; margin-top: 40px; font: 400 11px/16px var(--mono); letter-spacing: .08em; text-transform: uppercase; }
.ssr-nav a { display: inline-flex; min-height: 44px; align-items: center; }
.ssr-about { max-width: 920px; }
.ssr-about p { font: 400 32px/1.12 var(--serif); letter-spacing: -.01em; margin: 0 0 .6em; }
.ssr-about .ssr-follow { font: 400 11px/16px var(--mono); letter-spacing: .08em; text-transform: uppercase; margin-top: 40px; }

/* CSS-only 404 turn for no-JS */
.nf { min-height: 60vh; display: grid; place-items: center; text-align: center; }
.nf-in { transform: rotate(180deg); transition: transform var(--d-720) var(--ease-io); }
.nf:target .nf-in { transform: none; }
.nf-t { font: 400 clamp(40px, 6vw, 88px)/.95 var(--serif); letter-spacing: -.01em; margin: 0 0 32px; }
.nf-turn, .nf-back { font: 400 11px/16px var(--mono); letter-spacing: .08em; text-transform: uppercase; }
.nf-back { display: none; }
.nf:target .nf-back { display: inline; }
.nf:target .nf-turn { display: none; }

@media (prefers-reduced-motion: reduce) {
  .c-header, .c-logo .c-mark, #toast, .a-row, .c-404-btn, .a-turn, .nf-in { transition-duration: 0ms !important; }
}
