/* ============================================================
   FREE KNOWLEDGE LIBRARY — Papery archival redesign
   ============================================================ */

:root {
  --dark:          #0C0A06;
  --dark-mid:      #17110A;
  --dark-warm:     #221508;
  --dark-border:   rgba(200, 148, 58, 0.30);
  --dark-border-s: rgba(200, 148, 58, 0.15);

  --gold:          #C8943A;
  --gold-light:    #DFA84A;
  --gold-dim:      #8B6520;
  --gold-faint:    rgba(200,148,58,0.18);

  --cream:         #F0E4C8;
  --cream-dim:     #C0A878;
  --cream-ghost:   #7A6040;

  /* Warm parchment tones */
  --parch:         #E2CAA0;
  --parch-light:   #EDD8B8;
  --parch-card:    #F5E8CA;
  --parch-sidebar: #EAD8B4;
  --parch-dark:    #D4B888;

  --ink:           #1A1408;
  --ink-mid:       #3C2E18;
  --ink-light:     #7A6040;
  --ink-ghost:     #A89070;

  --border:        #C4A870;
  --border-light:  #D8C090;
  --border-card:   #C0A060;

  --green-bg:   #D8F5E0;
  --green-tx:   #146830;
  --green-bd:   rgba(20,104,48,0.3);
  --maroon:     #6E1A1A;
  --maroon-h:   #8C2222;
  --red-badge:  #5E1616;

  --red-bg:  rgba(110,26,26,0.12); --red-tx:  #A02828;
  --yel-bg:  rgba(150,100,8,0.12); --yel-tx:  #9A6C10;
  --grn-bg:  rgba(20,104,48,0.12); --grn-tx:  #187830;
  --blu-bg:  rgba(18,50,120,0.12); --blu-tx:  #1E58A8;

  --font-serif: Georgia, 'Times New Roman', Times, serif;
  --font-sans:  -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
  --font-mono:  'Courier New', Courier, monospace;

  --max-w: 820px;

  /* Subtle paper texture via SVG noise */
  --paper-texture: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='400' height='400'%3E%3Cfilter id='p'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0.55 0 0 0 0 0.40 0 0 0 0 0.18 0 0 0 0.065 0'/%3E%3C/filter%3E%3Crect width='400' height='400' filter='url(%23p)'/%3E%3C/svg%3E");
}

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

html { font-size: 16px; -webkit-text-size-adjust: 100%; background: var(--dark); }

body {
  font-family: var(--font-serif);
  background-color: var(--parch);
  background-image: var(--paper-texture);
  color: var(--ink);
  line-height: 1.7;
  min-height: 100vh;
  overflow-x: hidden;
}

h1, h2, h3, h4 { font-family: var(--font-serif); font-weight: normal; color: var(--ink); }
a { color: var(--gold-dim); text-decoration: none; }
a:hover { color: var(--gold); text-decoration: underline; }
p { margin-bottom: 1rem; }
strong { font-weight: bold; }
em { font-style: italic; }

/* ══════════════════════════════════
   NAVIGATION
══════════════════════════════════ */
.site-nav {
  background: var(--dark);
  border-bottom: 1px solid var(--dark-border-s);
  position: sticky;
  top: 0;
  z-index: 200;
}

.site-nav__inner {
  max-width: 1240px;
  margin: 0 auto;
  padding: 0 1.75rem;
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 2rem;
  min-height: 84px;
}

/* Brand area — bordered panel */
.site-nav__brand {
  display: flex;
  align-items: center;
  gap: 0.9rem;
  text-decoration: none;
  border: 1px solid var(--dark-border);
  padding: 0.6rem 1rem 0.6rem 0.75rem;
  margin: 0.5rem 0;
}
.site-nav__brand:hover { text-decoration: none; border-color: var(--gold); }

.nav-logo-icon { flex-shrink: 0; }

.nav-brand-text { display: flex; flex-direction: column; line-height: 1; gap: 2px; }
.nav-brand-top {
  font-size: 0.65rem; letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--gold); font-family: var(--font-sans); font-weight: 700;
}
.nav-brand-name {
  font-size: 1.5rem; font-weight: 700; color: var(--cream); font-family: var(--font-serif);
  letter-spacing: -0.01em; line-height: 1;
}
.nav-brand-tagline {
  font-size: 0.58rem; letter-spacing: 0.18em; text-transform: uppercase;
  color: var(--cream-ghost); font-family: var(--font-mono);
}

/* Nav links */
.site-nav__links {
  display: flex; align-items: center; justify-content: center; gap: 0.25rem;
}
.site-nav__link {
  font-size: 0.72rem; letter-spacing: 0.15em; text-transform: uppercase;
  color: var(--cream-dim); text-decoration: none; padding: 0.5rem 1rem;
  border-bottom: 2px solid transparent; transition: all 0.15s;
  font-family: var(--font-sans); font-weight: 700;
}
.site-nav__link:hover { color: var(--cream); text-decoration: none; }
.site-nav__link.active { color: var(--cream); border-bottom-color: var(--gold); }

/* Nav right */
.nav-actions { display: flex; align-items: center; gap: 0.85rem; }
.nav-search {
  display: flex; align-items: center;
  background: rgba(255,255,255,0.06);
  border: 1px solid rgba(200,148,58,0.25); border-radius: 3px; overflow: hidden;
}
.nav-search-input {
  background: transparent; border: none; outline: none;
  color: var(--cream); font-family: var(--font-serif); font-size: 0.82rem;
  padding: 0.5rem 0.8rem; width: 185px;
}
.nav-search-input::placeholder { color: var(--cream-ghost); }
.nav-search-btn {
  background: transparent; border: none;
  border-left: 1px solid rgba(200,148,58,0.25);
  color: var(--cream-ghost); cursor: pointer;
  padding: 0.5rem 0.7rem; font-size: 1rem; line-height: 1; transition: color 0.12s;
}
.nav-search-btn:hover { color: var(--gold); }
.btn-support {
  background: var(--maroon); color: var(--cream); font-family: var(--font-sans);
  font-size: 0.7rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase;
  padding: 0.6rem 1.15rem; border-radius: 2px; text-decoration: none; white-space: nowrap;
  transition: background 0.15s; border: 1px solid rgba(255,255,255,0.1);
}
.btn-support:hover { background: var(--maroon-h); color: var(--cream); text-decoration: none; }

.site-nav__operator { display: none; }

/* ══════════════════════════════════
   HOME HERO
══════════════════════════════════ */
.home-hero-shell {
  position: relative; overflow: hidden; min-height: 560px;
  background:
    linear-gradient(105deg, rgba(12,10,6,0.92) 0%, rgba(18,14,8,0.82) 40%, rgba(12,10,6,0.42) 100%),
    url("/assets/reading-room-hero.png") center 30% / cover no-repeat,
    var(--dark-mid);
  border-bottom: 3px solid var(--gold-dim);
}
.home-hero-shell::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(180deg, transparent 60%, rgba(12,10,6,0.5) 100%);
  pointer-events: none;
}

.home-hero-grid {
  position: relative; z-index: 1;
  display: grid; grid-template-columns: 55% 45%;
  max-width: 1240px; margin: 0 auto; padding: 0 1.75rem;
  min-height: 510px; align-items: center;
}

.home-hero-copy {
  display: flex; flex-direction: column; justify-content: center;
  padding: 4rem 3.5rem 4rem 0;
}
.hero__kicker {
  font-size: 0.68rem; letter-spacing: 0.2em; text-transform: uppercase;
  color: var(--gold); font-family: var(--font-sans); font-weight: 700; margin-bottom: 1rem;
}
.home-hero-copy h1 {
  font-size: clamp(3.2rem, 6.5vw, 5.2rem); line-height: 0.93;
  color: var(--cream); font-weight: 700; letter-spacing: -0.03em; margin-bottom: 0.85rem;
}
.home-hero-tagline {
  font-size: 1.2rem; color: var(--gold); font-style: italic;
  font-family: var(--font-serif); margin-bottom: 1.25rem; line-height: 1.35;
}
.home-hero-copy p {
  font-size: 0.93rem; color: var(--cream-dim); line-height: 1.7;
  margin-bottom: 2rem; max-width: 48ch;
}
.hero__actions { display: flex; gap: 1rem; align-items: center; flex-wrap: wrap; }
.btn-hero-primary {
  display: inline-flex; align-items: center; gap: 0.45rem;
  background: var(--maroon); border: 1px solid rgba(255,255,255,0.15);
  color: var(--cream); font-family: var(--font-sans); font-size: 0.72rem;
  font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase;
  padding: 0.75rem 1.4rem; text-decoration: none; border-radius: 2px; transition: all 0.15s;
}
.btn-hero-primary:hover { background: var(--maroon-h); color: var(--cream); text-decoration: none; }
.btn-hero-ghost {
  display: inline-block; background: rgba(240,228,200,0.08);
  border: 1px solid rgba(200,148,58,0.4); color: var(--cream-dim);
  font-family: var(--font-sans); font-size: 0.72rem; font-weight: 700;
  letter-spacing: 0.12em; text-transform: uppercase; padding: 0.75rem 1.4rem;
  text-decoration: none; border-radius: 2px; transition: all 0.15s;
}
.btn-hero-ghost:hover { border-color: var(--gold); color: var(--cream); text-decoration: none; }

/* Accession slip — right panel of hero */
.home-hero-media {
  display: flex; flex-direction: column; align-items: flex-end;
  justify-content: center; padding: 4rem 0 4rem 2rem;
}
.accession-slip {
  background: #F8EDCF;
  background-image: var(--paper-texture);
  border: 1px solid #C4A870;
  padding: 1.25rem 1.4rem 1.5rem;
  position: relative;
  box-shadow: 4px 6px 28px rgba(0,0,0,0.55), 0 2px 6px rgba(0,0,0,0.3);
  max-width: 265px;
  transform: rotate(-1.5deg);
}
/* Top fold */
.accession-slip::before {
  content: '';
  position: absolute; top: -1px; right: -1px;
  width: 18px; height: 18px;
  background: linear-gradient(225deg, #DCC8A0 48%, #F8EDCF 50%);
}
.accession-slip__header {
  font-family: var(--font-mono);
  font-size: 0.62rem;
  letter-spacing: 0.25em;
  text-transform: uppercase;
  color: var(--ink-light);
  border-bottom: 1px solid var(--border);
  padding-bottom: 0.5rem;
  margin-bottom: 0.75rem;
}
.slip-fields { display: flex; flex-direction: column; gap: 0; }
.slip-row {
  display: grid;
  grid-template-columns: 56px 1fr;
  gap: 0.5rem;
  border-bottom: 1px dotted rgba(196,168,112,0.5);
  padding: 0.28rem 0;
}
.slip-row:last-child { border-bottom: none; }
.slip-key {
  font-family: var(--font-mono); font-size: 0.6rem; text-transform: uppercase;
  letter-spacing: 0.05em; color: var(--ink-light); padding-top: 1px;
}
.slip-val {
  font-family: var(--font-mono); font-size: 0.68rem; color: var(--ink);
  font-weight: normal;
}
/* Big PRESERVED stamp on slip */
.slip-pres-stamp {
  position: absolute; bottom: 1rem; right: 1rem;
  font-family: var(--font-mono); font-size: 0.78rem; font-weight: 700;
  letter-spacing: 0.1em; text-transform: uppercase;
  color: var(--maroon); border: 2px solid var(--maroon);
  padding: 0.25rem 0.55rem; border-radius: 1px;
  transform: rotate(10deg);
  opacity: 0.82;
}

/* ── Stats strip ── */
.hero-stats-strip {
  background: rgba(12,10,6,0.88);
  border-top: 1px solid var(--dark-border-s);
  position: relative; z-index: 1;
}
.hero-stats-inner {
  max-width: 1240px; margin: 0 auto; padding: 0 1.75rem;
  display: grid; grid-template-columns: repeat(4,1fr);
}
.hero-stat {
  display: flex; align-items: center; gap: 0.9rem;
  padding: 1.1rem 1.25rem;
  border-right: 1px solid var(--dark-border-s);
}
.hero-stat:first-child { padding-left: 0; }
.hero-stat:last-child { border-right: none; }
.hero-stat-icon { font-size: 1.4rem; line-height: 1; opacity: 0.78; }
.hero-stat-num {
  display: block; font-size: 1.5rem; font-weight: 700;
  color: var(--cream); font-family: var(--font-serif); letter-spacing: -0.02em;
  line-height: 1;
}
.hero-stat-label {
  display: block; font-size: 0.62rem; letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--cream-ghost); font-family: var(--font-sans); font-weight: 700; margin-top: 2px;
}

/* ══════════════════════════════════
   CONTENT AREA (parchment)
══════════════════════════════════ */
.content-area {
  background-color: var(--parch);
  background-image: var(--paper-texture);
}

/* ── Section header ── */
.section-header {
  display: flex; align-items: center; justify-content: space-between;
  padding: 1.5rem 0 1rem; border-bottom: 2px solid var(--ink); margin-bottom: 1.5rem;
}
.section-header-left { display: flex; align-items: center; gap: 1rem; }
.section-title {
  font-size: 1.05rem; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--ink); font-family: var(--font-sans);
}
.section-badge {
  background: var(--red-badge); color: var(--cream); font-size: 0.6rem;
  font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase;
  padding: 0.3rem 0.7rem; border-radius: 2px; font-family: var(--font-sans);
}
.section-controls { display: flex; align-items: center; gap: 0.75rem; }
.sort-label { font-size: 0.75rem; color: var(--ink-light); font-family: var(--font-sans); }
.sort-select {
  font-family: var(--font-sans); font-size: 0.78rem;
  background: var(--parch-card); border: 1px solid var(--border);
  color: var(--ink); padding: 0.4rem 1.5rem 0.4rem 0.65rem;
  outline: none; border-radius: 2px; cursor: pointer; appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%233C2E18' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 0.4rem center;
}
.sort-select:focus { border-color: var(--gold-dim); }
.sort-select option { background: var(--parch-card); color: var(--ink); }
.view-toggle { display: flex; border: 1px solid var(--border); border-radius: 2px; overflow: hidden; }
.view-toggle-btn {
  background: var(--parch-card); border: none; border-right: 1px solid var(--border);
  padding: 0.4rem 0.58rem; cursor: pointer; color: var(--ink-light);
  font-size: 0.82rem; line-height: 1; transition: all 0.1s;
}
.view-toggle-btn:last-child { border-right: none; }
.view-toggle-btn.active, .view-toggle-btn:hover { background: var(--parch-dark); color: var(--ink); }

/* ══════════════════════════════════
   ARCHIVE LAYOUT
══════════════════════════════════ */
.archive-layout {
  display: grid; grid-template-columns: 220px 1fr; gap: 2.5rem;
  padding-bottom: 3.5rem; align-items: start;
}

/* ── Sidebar ── */
.archive-sidebar { position: sticky; top: 104px; }

.sidebar-header-row {
  display: flex; align-items: center; gap: 0.6rem;
  padding-bottom: 0.65rem; border-bottom: 1px solid var(--border); margin-bottom: 1.1rem;
}
.sidebar-header-row svg { flex-shrink: 0; opacity: 0.6; }
.sidebar-header {
  font-size: 0.68rem; letter-spacing: 0.18em; text-transform: uppercase;
  color: var(--ink-light); font-family: var(--font-sans); font-weight: 700;
}

.sidebar-section { margin-bottom: 0; }

.sidebar-section-header {
  display: flex; align-items: center; justify-content: space-between;
  padding: 0.55rem 0;
  border-bottom: 1px solid var(--border-light);
  cursor: pointer;
}
.sidebar-section-title {
  font-size: 0.65rem; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--ink); font-family: var(--font-sans); font-weight: 700;
}
.sidebar-section-toggle {
  font-size: 0.8rem; color: var(--ink-light); font-family: var(--font-sans); font-weight: 700;
  line-height: 1; padding: 0 2px;
}
.sidebar-section-body { padding: 0.35rem 0 0.5rem; }
.sidebar-section-body.collapsed { display: none; }

.search-input {
  width: 100%; padding: 0.5rem 0.75rem; font-family: var(--font-serif);
  font-size: 0.88rem; background: var(--parch-card); border: 1px solid var(--border);
  color: var(--ink); outline: none; border-radius: 2px; margin-bottom: 0.25rem;
}
.search-input::placeholder { color: var(--ink-ghost); font-style: italic; }
.search-input:focus { border-color: var(--gold-dim); }

.filter-group { list-style: none; }
.filter-item {
  display: flex; align-items: center; justify-content: space-between;
  padding: 0.22rem 0;
}
.filter-item label {
  display: flex; align-items: center; gap: 0.5rem;
  font-size: 0.82rem; color: var(--ink-mid); cursor: pointer; font-family: var(--font-sans);
}
.filter-item input[type="checkbox"] { width: 12px; height: 12px; accent-color: var(--gold-dim); cursor: pointer; }
.filter-count { font-size: 0.68rem; color: var(--ink-ghost); font-family: var(--font-sans); }
.filter-more {
  font-size: 0.75rem; color: var(--gold-dim); cursor: pointer; padding: 0.3rem 0 0;
  display: block; font-family: var(--font-sans); text-decoration: none;
}
.filter-more:hover { color: var(--gold); text-decoration: underline; }

.collection-list { list-style: none; }
.collection-item {
  padding: 0.28rem 0 0.28rem 0.6rem; cursor: pointer; font-size: 0.82rem;
  color: var(--ink-mid); transition: color 0.1s; position: relative;
  font-family: var(--font-sans); display: flex; align-items: center; justify-content: space-between;
}
.collection-item:hover { color: var(--ink); }
.collection-item.active { color: var(--ink); font-weight: 700; }
.collection-item.active::before {
  content: ''; position: absolute; left: 0; top: 50%; transform: translateY(-50%);
  width: 3px; height: 1rem; background: var(--gold-dim);
}
.collection-count { font-size: 0.68rem; color: var(--ink-ghost); font-family: var(--font-sans); }

.sidebar-note {
  font-size: 0.78rem; color: var(--ink-light); font-style: italic; line-height: 1.55;
  padding: 0.7rem 0.8rem; border: 1px solid var(--border-light);
  background: rgba(0,0,0,0.035); border-radius: 1px; margin-top: 0.5rem;
}

/* Archive count */
.archive-count {
  font-size: 0.7rem; letter-spacing: 0.1em; text-transform: uppercase;
  color: var(--ink-ghost); margin-bottom: 0.85rem; font-family: var(--font-sans);
}

/* ══════════════════════════════════
   ARCHIVE CARDS
══════════════════════════════════ */
.archive-card {
  display: grid;
  grid-template-columns: 110px 1fr 200px 120px;
  border: 1px solid var(--border-card);
  background-color: var(--parch-card);
  background-image: var(--paper-texture);
  margin-bottom: 1rem;
  text-decoration: none;
  color: var(--ink);
  border-radius: 1px;
  overflow: hidden;
  transition: box-shadow 0.18s, transform 0.18s;
  min-height: 155px;
  box-shadow: 2px 3px 10px rgba(40,20,4,0.10), 0 1px 2px rgba(40,20,4,0.07);
}
.archive-card:hover {
  text-decoration: none; color: var(--ink);
  box-shadow: 4px 8px 28px rgba(40,20,4,0.18), 0 2px 6px rgba(40,20,4,0.10);
  transform: translateY(-2px);
}

/* Book cover */
.archive-card__cover {
  display: flex; flex-direction: column; justify-content: space-between;
  padding: 0.85rem 0.7rem 0.65rem;
  position: relative; overflow: hidden;
  min-height: 150px;
}
.cover-title {
  font-size: 0.72rem; font-weight: 700; color: rgba(255,255,255,0.9);
  line-height: 1.3; font-family: var(--font-serif); text-align: center;
  text-shadow: 0 1px 3px rgba(0,0,0,0.5);
}
.cover-line {
  width: 28px; height: 1px; background: rgba(255,255,255,0.3);
  margin: 5px auto;
}
.cover-type {
  position: absolute; bottom: 6px; left: 6px;
  font-size: 0.55rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase;
  color: rgba(255,255,255,0.7); border: 1px solid rgba(255,255,255,0.3);
  padding: 2px 5px; border-radius: 1px; font-family: var(--font-sans);
}
.cover-aged::after {
  content: '';
  position: absolute; inset: 0;
  background: linear-gradient(135deg, rgba(255,255,255,0.04) 0%, transparent 50%, rgba(0,0,0,0.15) 100%);
  pointer-events: none;
}

/* Cover colors */
.cover-philosophy  { background: linear-gradient(170deg, #1B2D52, #0E1B35); }
.cover-political   { background: linear-gradient(170deg, #1C2C1A, #101B10); }
.cover-radical     { background: linear-gradient(170deg, #3A1818, #241010); }
.cover-religious   { background: linear-gradient(170deg, #281838, #1A0E26); }
.cover-science     { background: linear-gradient(170deg, #152E30, #0C1E20); }
.cover-fringe      { background: linear-gradient(170deg, #1C1C2C, #121218); }
.cover-misc        { background: linear-gradient(170deg, #2A1E12, #1A130A); }

/* Body */
.archive-card__body {
  padding: 1rem 1.2rem 0.85rem;
  display: flex; flex-direction: column; justify-content: center;
  border-right: 1px solid var(--border-light);
}
.archive-card__collection {
  font-size: 0.65rem; letter-spacing: 0.1em; text-transform: uppercase;
  color: var(--gold-dim); margin-bottom: 0.3rem;
  font-family: var(--font-sans); font-weight: 700; font-style: italic;
}
.archive-card__title {
  font-size: 1.08rem; font-weight: 700; color: var(--ink); margin-bottom: 0.2rem;
  line-height: 1.2; font-family: var(--font-serif);
  transition: color 0.1s;
}
.archive-card:hover .archive-card__title { color: var(--gold-dim); }
.archive-card__author {
  font-size: 0.8rem; font-style: italic; color: var(--ink-mid); margin-bottom: 0.5rem;
}
.archive-card__summary {
  font-size: 0.8rem; color: var(--ink-mid); line-height: 1.5;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}

/* Meta panel */
.archive-card__meta {
  padding: 0.85rem 0.9rem;
  display: flex; flex-direction: column; justify-content: center; gap: 0.28rem;
  border-right: 1px solid var(--border-light);
  background: rgba(180,140,60,0.04);
}
.meta-row {
  display: flex; justify-content: space-between; align-items: baseline; gap: 0.5rem;
}
.meta-key { font-size: 0.62rem; color: var(--ink-ghost); font-family: var(--font-sans); white-space: nowrap; }
.meta-val {
  font-size: 0.62rem; color: var(--ink-mid); font-family: var(--font-mono);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 9ch;
}
.badge-preserved {
  display: inline-block; background: var(--green-bg); color: var(--green-tx);
  font-size: 0.58rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase;
  padding: 0.18rem 0.55rem; border-radius: 999px; font-family: var(--font-sans);
  border: 1px solid var(--green-bd);
}

/* Actions panel */
.archive-card__actions {
  padding: 0.85rem 0.8rem;
  display: flex; flex-direction: column; align-items: center;
  justify-content: space-between; gap: 0.65rem;
}

/* VERIFIED rubber stamp — double border */
.verified-stamp {
  width: 100%;
  border: 2px solid var(--ink);
  padding: 3px;
  border-radius: 1px;
  text-align: center;
}
.verified-stamp-inner {
  border: 1px solid var(--ink);
  padding: 6px 4px 5px;
}
.verified-stamp-label {
  display: block;
  font-family: var(--font-mono);
  font-size: 0.62rem;
  font-weight: 700;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--ink);
  line-height: 1;
}
.verified-stamp-date {
  display: block;
  font-family: var(--font-mono);
  font-size: 0.68rem;
  color: var(--ink);
  margin-top: 3px;
  line-height: 1;
}

.view-record-btn {
  display: block; width: 100%;
  background: #1A2D44; color: var(--cream);
  font-family: var(--font-sans); font-size: 0.62rem; font-weight: 700;
  letter-spacing: 0.1em; text-transform: uppercase; padding: 0.55rem 0.35rem;
  border-radius: 1px; text-align: center; text-decoration: none;
  border: none; cursor: pointer; transition: background 0.12s; white-space: nowrap;
}
.view-record-btn:hover { background: #243D5A; color: var(--cream); text-decoration: none; }

/* Legacy / hide */
.archive-card__num, .archive-card__meta-row, .preservation-row { display: none; }

.empty-state { text-align: center; padding: 4rem 0; color: var(--ink-light); }
.empty-state__title {
  font-size: 0.82rem; letter-spacing: 0.14em; text-transform: uppercase;
  margin-bottom: 0.75rem; font-family: var(--font-sans);
}
.empty-state__sub { font-size: 0.9rem; font-style: italic; }
.empty-state__sub a { color: var(--gold-dim); }

/* ══════════════════════════════════
   INNER PAGE HERO
══════════════════════════════════ */
.hero {
  background: var(--dark);
  padding: 3rem 1.75rem 2.5rem;
  border-bottom: 3px solid var(--gold-dim);
}
.hero__kicker {
  font-size: 0.68rem; letter-spacing: 0.18em; text-transform: uppercase;
  color: var(--gold); font-family: var(--font-sans); font-weight: 700; margin-bottom: 0.9rem;
}
.hero__title {
  font-size: clamp(1.8rem, 4vw, 2.6rem); line-height: 1.2;
  color: var(--cream); margin-bottom: 0.7rem; max-width: 700px; font-weight: 700;
}
.hero__sub { font-size: 0.95rem; color: var(--cream-dim); font-style: italic; margin-bottom: 1.75rem; }

/* ══════════════════════════════════
   BUTTONS
══════════════════════════════════ */
.btn {
  display: inline-block; font-size: 0.74rem; letter-spacing: 0.1em; text-transform: uppercase;
  text-decoration: none; padding: 0.68rem 1.4rem; border: none; cursor: pointer;
  font-family: var(--font-sans); font-weight: 700; border-radius: 2px; transition: all 0.15s;
}
.btn--primary { background: var(--maroon); color: var(--cream); }
.btn--primary:hover { background: var(--maroon-h); color: var(--cream); text-decoration: none; }
.btn--ghost {
  background: rgba(255,255,255,0.07); color: var(--cream-dim);
  border: 1px solid rgba(200,148,58,0.35);
}
.btn--ghost:hover { border-color: var(--gold); color: var(--cream); text-decoration: none; }
.btn--link { background: transparent; color: var(--gold-dim); padding: 0; border: none; font-size: 0.82rem; }
.btn--link:hover { color: var(--gold); text-decoration: underline; }

/* ══════════════════════════════════
   LIBRARY GRID (homepage)
══════════════════════════════════ */
.library-grid {
  display: grid; grid-template-columns: 1fr 1fr; gap: 0;
  border-top: 1px solid var(--border); border-left: 1px solid var(--border); margin-bottom: 2rem;
}
.library-card {
  border-right: 1px solid var(--border); border-bottom: 1px solid var(--border);
  padding: 1.6rem; text-decoration: none; color: var(--ink);
  background-color: var(--parch-card); background-image: var(--paper-texture);
  display: flex; flex-direction: column; transition: background 0.15s;
  box-shadow: inset 0 0 0 0 transparent;
}
.library-card:hover {
  background-color: #FAF0D8; text-decoration: none; color: var(--ink);
}
.library-card__meta {
  font-size: 0.65rem; letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--gold-dim); margin-bottom: 0.45rem; font-family: var(--font-sans); font-weight: 700;
}
.library-card__title { font-size: 1.15rem; font-weight: 700; margin-bottom: 0.25rem; line-height: 1.2; }
.library-card__author { font-size: 0.85rem; color: var(--ink-mid); font-style: italic; margin-bottom: 0.65rem; }
.library-card__summary { font-size: 0.86rem; color: var(--ink-mid); line-height: 1.55; flex: 1; margin-bottom: 0.8rem; }
.library-card__cta { font-size: 0.68rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--gold-dim); font-family: var(--font-sans); font-weight: 700; }

/* Topic chips */
.section-kicker {
  font-size: 0.68rem; letter-spacing: 0.16em; text-transform: uppercase;
  color: var(--ink-mid); margin-bottom: 0.85rem; font-family: var(--font-sans); font-weight: 700;
}
.topic-list { display: flex; flex-wrap: wrap; gap: 0.45rem; }
.topic-chip {
  font-size: 0.78rem; padding: 0.3rem 0.9rem; border: 1px solid var(--border);
  color: var(--ink-mid); text-decoration: none; background: var(--parch-card);
  border-radius: 2px; transition: all 0.12s; font-family: var(--font-sans);
}
.topic-chip:hover { border-color: var(--gold-dim); color: var(--gold-dim); text-decoration: none; }

/* ══════════════════════════════════
   ENTRY / POST PAGE
══════════════════════════════════ */
.entry-back {
  font-size: 0.72rem; letter-spacing: 0.1em; text-transform: uppercase;
  color: var(--ink-light); margin-bottom: 2rem; display: inline-block;
  text-decoration: none; font-family: var(--font-sans);
}
.entry-back:hover { color: var(--gold-dim); text-decoration: none; }
.entry-back::before { content: '‹ '; }
.entry-collection {
  font-size: 0.68rem; letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--gold-dim); margin-bottom: 0.65rem; font-family: var(--font-sans); font-weight: 700;
}
.entry-title { font-size: clamp(1.7rem, 4vw, 2.4rem); margin-bottom: 0.5rem; line-height: 1.15; font-weight: 700; }
.entry-author { font-size: 1rem; font-style: italic; color: var(--ink-mid); margin-bottom: 1.5rem; }
.entry-summary { font-size: 1rem; color: var(--ink-mid); line-height: 1.65; margin-bottom: 2rem; }

.meta-grid {
  display: grid; grid-template-columns: repeat(4,1fr); gap: 1.5rem;
  padding: 1.5rem 0; border-top: 1px solid var(--border); border-bottom: 1px solid var(--border);
  margin-bottom: 1.5rem;
}
.meta-cell__label {
  font-size: 0.65rem; letter-spacing: 0.1em; text-transform: uppercase;
  color: var(--ink-light); margin-bottom: 0.3rem; display: block; font-family: var(--font-sans);
}
.meta-cell__value { font-size: 0.9rem; color: var(--ink); }

.credibility-dots { display: inline-flex; gap: 3px; align-items: center; margin-right: 0.4rem; }
.dot { width: 7px; height: 7px; border-radius: 50%; background: var(--gold-dim); display: inline-block; }
.dot.empty { background: transparent; border: 1px solid var(--border); }

.context-labels { display: flex; gap: 0.65rem; flex-wrap: wrap; margin-bottom: 1.25rem; }
.context-label {
  font-size: 0.66rem; letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--ink-mid); border: 1px solid var(--border);
  padding: 0.25rem 0.65rem; border-radius: 1px; font-family: var(--font-sans);
}
.context-label::before { content: '▸ '; color: var(--gold-dim); }

.source-ref {
  background-color: var(--parch-card); background-image: var(--paper-texture);
  border: 1px solid var(--border); border-left: 4px solid var(--gold-dim);
  padding: 1rem 1.25rem; margin-bottom: 1.5rem;
}
.source-ref__label {
  font-size: 0.65rem; letter-spacing: 0.1em; text-transform: uppercase;
  color: var(--ink-light); margin-bottom: 0.35rem; display: block; font-family: var(--font-sans);
}
.source-ref__url { font-size: 0.88rem; color: var(--gold-dim); word-break: break-all; }
.source-ref__date { font-size: 0.78rem; color: var(--ink-light); margin-top: 0.3rem; }

.tags-row { margin-bottom: 2rem; }
.tags-label {
  font-size: 0.65rem; letter-spacing: 0.1em; text-transform: uppercase;
  color: var(--ink-light); margin-right: 0.5rem; font-family: var(--font-sans);
}
.tag { display: inline; font-size: 0.88rem; color: var(--ink-mid); text-decoration: none; }
.tag:hover { color: var(--gold-dim); text-decoration: underline; }
.tag-sep { color: var(--ink-light); margin: 0 0.35rem; }

.transcript-section { margin-top: 1rem; }
.transcript-kicker {
  font-size: 0.65rem; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--gold-dim); font-family: var(--font-sans);
}
.transcript-title { font-size: 1.5rem; margin-bottom: 1rem; font-weight: 700; }
.transcript-notice {
  background: var(--yel-bg); border-left: 3px solid var(--yel-tx);
  padding: 0.85rem 1.1rem; font-size: 0.82rem; color: var(--yel-tx);
  margin-bottom: 1.5rem; border-radius: 0 2px 2px 0;
}
.transcript-body {
  font-size: 0.93rem; line-height: 1.8; color: var(--ink-mid); white-space: pre-wrap;
  max-height: 600px; overflow-y: auto; padding: 1.25rem;
  /* Captured documents contain unbreakable runs — PDF dot leaders, long URLs —
     which have no space to wrap at and pushed the pane sideways. Reading is
     vertical; force the break instead. */
  overflow-x: hidden; overflow-wrap: anywhere; word-break: break-word; max-width: 100%;
  border: 1px solid var(--border); background-color: var(--parch-card);
  background-image: var(--paper-texture); border-left: 3px solid var(--border-light);
}
.transcript-toggle {
  display: block; margin-top: 1rem; font-size: 0.76rem; letter-spacing: 0.08em;
  text-transform: uppercase; color: var(--gold-dim); cursor: pointer;
  background: none; border: none; font-family: var(--font-sans); padding: 0;
}
.transcript-toggle:hover { text-decoration: underline; }
.transcript-loading { color: var(--ink-light); font-style: italic; font-size: 0.9rem; padding: 2rem 0; }

.post-meta-row {
  display: flex; gap: 2rem; padding: 1.25rem 0;
  border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); margin-bottom: 1.5rem;
}
.overview-section { margin-bottom: 2rem; }
.overview-title { font-size: 1.25rem; margin-bottom: 0.75rem; font-weight: 700; }
.overview-body { font-size: 0.95rem; line-height: 1.7; color: var(--ink-mid); }

.arguments-list { list-style: none; border-top: 1px solid var(--border); }
.argument-item {
  display: grid; grid-template-columns: 1fr 3fr; gap: 1.5rem;
  padding: 1.1rem 0; border-bottom: 1px solid var(--border-light); font-size: 0.93rem;
}
.argument-label { font-weight: bold; color: var(--ink); }
.argument-text { color: var(--ink-mid); line-height: 1.55; }

.filed-under { display: flex; align-items: center; gap: 0.75rem; flex-wrap: wrap; margin-bottom: 2rem; }
.filed-label {
  font-size: 0.66rem; letter-spacing: 0.1em; text-transform: uppercase;
  color: var(--ink-light); font-family: var(--font-sans);
}
.filed-chip {
  font-size: 0.83rem; color: var(--ink-mid); border: 1px solid var(--border);
  padding: 0.22rem 0.65rem; border-radius: 1px; text-decoration: none; transition: all 0.12s;
}
.filed-chip:hover { border-color: var(--gold-dim); color: var(--gold-dim); text-decoration: none; }

/* ══════════════════════════════════
   ABOUT PAGE
══════════════════════════════════ */
.about-h2 { font-size: 1.55rem; margin-bottom: 1rem; font-weight: 700; }
.about-p { font-size: 0.96rem; color: var(--ink-mid); line-height: 1.7; margin-bottom: 1rem; }
.about-num { font-size: 0.8rem; color: var(--gold-dim); margin-right: 0.75rem; display: inline-block; width: 1.5rem; font-style: italic; }
.about-section { margin-bottom: 3.5rem; }
/* The glossary pointer is a footnote to the whole page, not another section of
   it. The Commitment block above carries no bottom margin, so without this the
   line sat flush against it and read as part of it. A little more than the 3.5rem
   section rhythm, so it reads as set apart rather than as the next section. */
.about-section--glossary { margin-top: 4.25rem; }
.pipeline-stage {
  display: grid; grid-template-columns: 90px 1fr; gap: 1rem;
  padding: 1.25rem 0; border-bottom: 1px solid var(--border-light);
}
.pipeline-stage-num {
  font-size: 0.66rem; letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--gold-dim); font-family: var(--font-sans); font-weight: 700;
}
.pipeline-stage-title { font-size: 1.1rem; margin-bottom: 0.35rem; font-weight: 700; }
.pipeline-stage-desc { font-size: 0.9rem; color: var(--ink-mid); line-height: 1.55; }

.context-features { list-style: none; }
.context-feature {
  padding: 1.25rem 0; border-bottom: 1px solid var(--border-light);
  display: grid; grid-template-columns: 2rem 1fr; gap: 1rem; align-items: baseline;
}
.context-feature-num { font-size: 1rem; color: var(--gold-dim); font-style: italic; }
.context-feature-title { font-size: 1rem; margin-bottom: 0.3rem; font-weight: 700; }
.context-feature-desc { font-size: 0.9rem; color: var(--ink-mid); line-height: 1.55; }

.commitment-block {
  background: var(--dark); color: var(--cream); border-left: 5px solid var(--gold-dim);
  padding: 2.5rem 2rem; margin: 3rem 0 0;
}
.commitment-kicker {
  font-size: 0.66rem; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--gold); margin-bottom: 0.75rem; font-family: var(--font-sans); font-weight: 700;
}
.commitment-quote { font-size: 1.1rem; font-style: italic; color: var(--cream); line-height: 1.55; margin-bottom: 1rem; }
.commitment-body { font-size: 0.9rem; color: var(--cream-dim); line-height: 1.65; }

/* ══════════════════════════════════
   OPERATOR
══════════════════════════════════ */
.operator-header {
  background: var(--dark); color: var(--cream); padding: 1.75rem;
  margin-bottom: 2rem; display: flex; align-items: center; justify-content: space-between;
  border-bottom: 3px solid var(--gold-dim);
}
.operator-title {
  font-size: 1rem; letter-spacing: 0.08em; text-transform: uppercase;
  font-family: var(--font-sans); font-weight: 700; color: var(--cream);
}
.operator-badge {
  font-size: 0.68rem; letter-spacing: 0.08em; text-transform: uppercase;
  border: 1px solid var(--dark-border); padding: 0.25rem 0.6rem; color: var(--cream-dim); border-radius: 1px;
}
.operator-tabs { display: flex; border-bottom: 1px solid var(--border); margin-bottom: 2rem; gap: 0; }
.op-tab {
  font-size: 0.76rem; letter-spacing: 0.08em; text-transform: uppercase;
  padding: 0.75rem 1.5rem; cursor: pointer; color: var(--ink-light);
  border-bottom: 2px solid transparent; margin-bottom: -1px;
  background: none; border-left: none; border-right: none; border-top: none;
  font-family: var(--font-sans); font-weight: 700; transition: all 0.12s;
}
.op-tab:hover { color: var(--ink); }
.op-tab.active { color: var(--ink); border-bottom-color: var(--gold-dim); }
.op-panel { display: none; }
.op-panel.active { display: block; }

.mode-toggle {
  display: flex; gap: 0; border: 1px solid var(--border);
  border-radius: 2px; overflow: hidden; margin-bottom: 1.5rem; width: max-content;
}
.mode-btn {
  font-size: 0.76rem; letter-spacing: 0.06em; padding: 0.5rem 1.1rem;
  background: var(--parch-card); border: none; cursor: pointer;
  font-family: var(--font-sans); font-weight: 700; color: var(--ink-mid); transition: all 0.12s;
}
.mode-btn.active { background: var(--dark); color: var(--cream); }
.mode-btn:hover:not(.active) { background: var(--parch-dark); }

/* ══════════════════════════════════
   FORMS
══════════════════════════════════ */
.form-group { margin-bottom: 1.5rem; }
.form-label {
  display: block; font-size: 0.7rem; letter-spacing: 0.1em; text-transform: uppercase;
  color: var(--ink-light); margin-bottom: 0.5rem; font-family: var(--font-sans); font-weight: 700;
}
.form-input, .form-textarea, .form-select {
  width: 100%; padding: 0.75rem; font-family: var(--font-serif); font-size: 0.95rem;
  background: var(--parch-card); border: 1px solid var(--border); color: var(--ink);
  outline: none; border-radius: 2px;
}
.form-input:focus, .form-textarea:focus, .form-select:focus { border-color: var(--gold-dim); }
.form-textarea { min-height: 120px; resize: vertical; }
.form-hint { font-size: 0.76rem; color: var(--ink-light); margin-top: 0.4rem; font-style: italic; }
.form-select option { background: var(--parch-card); color: var(--ink); }

.ingest-result {
  background: var(--parch-card); border: 1px solid var(--border);
  border-left: 4px solid var(--gold-dim); padding: 1.5rem;
  border-radius: 2px; margin-top: 1.5rem; display: none;
}
.ingest-result.visible { display: block; }
.ingest-result__title { font-size: 1.1rem; margin-bottom: 0.5rem; font-weight: 700; }
.ingest-result__field { margin-bottom: 0.75rem; }
.ingest-result__label {
  font-size: 0.65rem; letter-spacing: 0.1em; text-transform: uppercase;
  color: var(--ink-light); margin-bottom: 0.25rem; display: block; font-family: var(--font-sans);
}
.ingest-result__val { font-size: 0.9rem; color: var(--ink-mid); }

.queue-item {
  padding: 1.25rem 0; border-bottom: 1px solid var(--border-light);
  display: grid; grid-template-columns: 1fr auto; gap: 1rem; align-items: center;
}
.queue-item__title { font-size: 1rem; margin-bottom: 0.2rem; font-weight: 700; }
.queue-item__meta { font-size: 0.8rem; color: var(--ink-light); font-family: var(--font-mono); }
.queue-item__actions { display: flex; gap: 0.5rem; }
.queue-btn {
  font-size: 0.68rem; letter-spacing: 0.06em; text-transform: uppercase; padding: 0.35rem 0.85rem;
  border: 1px solid var(--border); cursor: pointer; font-family: var(--font-sans); font-weight: 700;
  background: var(--parch-card); color: var(--ink-mid); border-radius: 2px; transition: all 0.12s;
}
.queue-btn:hover { border-color: var(--ink-mid); color: var(--ink); }
.queue-btn--publish { border-color: rgba(20,104,48,0.4); color: var(--grn-tx); }
.queue-btn--publish:hover { background: var(--grn-bg); }
.queue-btn--reject { border-color: rgba(160,40,40,0.4); color: var(--red-tx); }
.queue-btn--reject:hover { background: var(--red-bg); }

/* ══════════════════════════════════
   NOTICES + AUTH
══════════════════════════════════ */
.notice { font-size: 0.82rem; padding: 0.75rem 1rem; border-radius: 2px; margin-bottom: 1rem; }
.notice--info { background: var(--blu-bg); color: var(--blu-tx); border-left: 3px solid var(--blu-tx); }
.notice--warn { background: var(--yel-bg); color: var(--yel-tx); border-left: 3px solid var(--yel-tx); }
.notice--err  { background: var(--red-bg); color: var(--red-tx); border-left: 3px solid var(--red-tx); }
.notice--ok   { background: var(--grn-bg); color: var(--grn-tx); border-left: 3px solid var(--grn-tx); }

.auth-gate {
  max-width: 400px; margin: 6rem auto; text-align: center;
  background-color: var(--parch-card); background-image: var(--paper-texture);
  border: 1px solid var(--border); border-top: 4px solid var(--gold-dim);
  padding: 2.5rem; border-radius: 2px;
  box-shadow: 3px 4px 20px rgba(40,20,4,0.15);
}
.auth-gate__icon { font-size: 2rem; margin-bottom: 1rem; }
.auth-gate__title { font-size: 1.5rem; margin-bottom: 0.5rem; font-weight: 700; }
.auth-gate__sub { font-size: 0.9rem; color: var(--ink-mid); margin-bottom: 2rem; font-style: italic; }
.auth-gate__input { text-align: center; letter-spacing: 0.1em; }

/* ══════════════════════════════════
   LINK ROT PANEL (entry page)
══════════════════════════════════ */
.link-rot-panel {
  background-color: var(--parch-card); background-image: var(--paper-texture);
  border: 1px solid var(--border); border-left: 4px solid var(--gold-dim); padding: 1rem 1.2rem;
}
.link-rot-panel__title {
  font-size: 0.65rem; letter-spacing: 0.16em; text-transform: uppercase;
  color: var(--gold); font-family: var(--font-sans); font-weight: 700; margin-bottom: 0.75rem;
}
.link-rot-grid > div {
  display: flex; justify-content: space-between; gap: 1rem;
  border-top: 1px dashed rgba(196,168,112,0.5); padding: 0.5rem 0;
  font-family: var(--font-mono); font-size: 0.72rem;
  text-transform: uppercase; letter-spacing: 0.06em;
}
.link-rot-grid span { color: var(--ink-ghost); }
.link-rot-grid strong { color: var(--ink); }

/* ══════════════════════════════════
   DIVIDERS + MISC
══════════════════════════════════ */
.floret-divider {
  display: flex; align-items: center; justify-content: center;
  color: var(--gold-dim); font-size: 1.1rem; margin: 2.5rem 0;
}
.floret-divider::before, .floret-divider::after {
  content: ''; flex: 1; height: 1px; background: var(--border);
}
.floret-divider::before { margin-right: 1rem; }
.floret-divider::after  { margin-left: 1rem; }
.rule { height: 1px; background: var(--border); margin: 2rem 0; }
.spinner {
  display: inline-block; width: 1em; height: 1em;
  border: 2px solid var(--border); border-top-color: var(--gold-dim);
  border-radius: 50%; animation: spin 0.7s linear infinite; vertical-align: middle;
}
@keyframes spin { to { transform: rotate(360deg); } }

/* ══════════════════════════════════
   FOOTER — archival four-pillar
══════════════════════════════════ */
.site-footer { background: var(--dark); border-top: 1px solid var(--dark-border-s); }

.footer-pillars {
  max-width: 1240px; margin: 0 auto; padding: 2.5rem 1.75rem 2rem;
  display: grid; grid-template-columns: repeat(4,1fr); gap: 2.5rem;
  border-bottom: 1px solid var(--dark-border-s);
}
.footer-pillar { display: flex; flex-direction: column; align-items: center; text-align: center; }
.footer-pillar-icon {
  margin-bottom: 0.75rem; opacity: 0.8;
  color: var(--gold);
}
.footer-pillar-icon svg { display: block; }
.footer-pillar-title {
  font-size: 0.65rem; font-weight: 700; letter-spacing: 0.16em; text-transform: uppercase;
  color: var(--cream); font-family: var(--font-sans); margin-bottom: 0.45rem;
}
.footer-pillar-desc { font-size: 0.78rem; color: var(--cream-ghost); line-height: 1.5; font-family: var(--font-sans); }

.footer-bottom-bar {
  max-width: 1240px; margin: 0 auto; padding: 1.25rem 1.75rem;
  display: flex; align-items: center; justify-content: space-between;
}
.footer-quote { font-size: 0.82rem; font-style: italic; color: var(--cream-ghost); }
.footer-id {
  font-size: 0.68rem; font-family: var(--font-mono); letter-spacing: 0.1em;
  color: var(--cream-ghost); background: rgba(255,255,255,0.06);
  border: 1px solid var(--dark-border-s); padding: 0.25rem 0.65rem; border-radius: 1px;
}

/* ══════════════════════════════════
   PAGE WRAPPERS
══════════════════════════════════ */
.page-wrap { max-width: var(--max-w); margin: 0 auto; padding: 0 1.75rem; }
.page-wrap--wide { max-width: 1240px; margin: 0 auto; padding: 0 1.75rem; }

/* ══════════════════════════════════
   CONCEPT HOME OVERRIDES
══════════════════════════════════ */
.site-nav__inner { min-height: 72px; }
.site-nav__brand { padding: 0.45rem 0.85rem 0.45rem 0.65rem; }
.nav-logo-icon { width: 42px; height: 42px; }
.nav-brand-name { font-size: 1.34rem; }
.home-hero-shell { min-height: 346px; }
.home-hero-grid { min-height: 288px; }
.home-hero-copy { padding-top: 1.8rem; padding-bottom: 1.55rem; }
.home-hero-copy h1 { font-size: clamp(2.65rem, 4.8vw, 4rem); margin-bottom: 0.55rem; }
.home-hero-tagline { margin-bottom: 0.85rem; }
.home-hero-copy p { max-width: 44ch; margin-bottom: 1rem; line-height: 1.55; }
.home-hero-media { padding-top: 1.3rem; padding-bottom: 1.3rem; }
.accession-slip { max-width: 246px; padding: 1rem 1.15rem 1.25rem; }
.hero-stat { padding-top: 0.7rem; padding-bottom: 0.7rem; }

.home-archive-preview {
  padding: 0 1.5rem 2rem;
  border-bottom: 1px solid var(--border);
}
.home-archive-inner {
  max-width: 1200px;
  margin: 0 auto;
}
.home-section-header { padding-top: 1rem; padding-bottom: 0.75rem; }
.home-archive-layout {
  grid-template-columns: 210px 1fr;
  gap: 1.4rem;
  padding-bottom: 0.5rem;
}
.home-archive-sidebar {
  position: static;
  border-right: 1px solid var(--border-light);
  padding-right: 1rem;
}
.home-taxonomy-list {
  display: flex;
  flex-direction: column;
  gap: 0.18rem;
  margin-bottom: 0.8rem;
}
.home-taxonomy-list a {
  color: var(--ink-mid);
  font-family: var(--font-sans);
  font-size: 0.78rem;
  padding: 0.2rem 0 0.2rem 0.6rem;
  border-left: 3px solid transparent;
}
.home-taxonomy-list a:hover {
  color: var(--ink);
  border-left-color: var(--gold-dim);
  text-decoration: none;
}
.home-record-card {
  min-height: 126px;
  margin-bottom: 0.72rem;
  grid-template-columns: 92px 1fr 180px 112px;
}
.home-record-card .archive-card__cover { min-height: 126px; }
.home-record-card .archive-card__body { padding-top: 0.72rem; padding-bottom: 0.72rem; }
.home-record-card .archive-card__summary { -webkit-line-clamp: 2; }
.home-full-archive { display: inline-block; margin-top: 0.4rem; }

.taxonomy-band {
  padding: 2rem 1.5rem 2.35rem;
  border-bottom: 1px solid var(--border);
}
.taxonomy-inner {
  max-width: 1200px;
  margin: 0 auto;
}
.taxonomy-grid {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 0;
  border: 1px solid var(--border);
  background: var(--parch-card);
}
.taxonomy-card {
  min-height: 132px;
  padding: 0.9rem 1rem;
  border-right: 1px solid var(--border-light);
  background-image: var(--paper-texture);
}
.taxonomy-card:last-child { border-right: none; }
.taxonomy-tier {
  display: block;
  font-family: var(--font-sans);
  font-size: 0.6rem;
  font-weight: 700;
  color: var(--gold-dim);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  margin-bottom: 0.35rem;
}
.taxonomy-card strong {
  display: block;
  font-size: 1rem;
  line-height: 1.2;
  margin-bottom: 0.45rem;
}
.taxonomy-card p {
  font-family: var(--font-sans);
  color: var(--ink-light);
  font-size: 0.75rem;
  line-height: 1.45;
  margin: 0;
}
.label-strip {
  display: flex;
  flex-wrap: wrap;
  gap: 0.45rem;
  margin-top: 1rem;
}
.label-strip a {
  border: 1px solid var(--border);
  background: rgba(245,232,202,0.65);
  color: var(--ink-mid);
  font-family: var(--font-sans);
  font-size: 0.66rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 0.28rem 0.52rem;
}
.label-strip a:hover { border-color: var(--gold-dim); color: var(--ink); text-decoration: none; }

.translate-control {
  display: flex;
  align-items: stretch;
  border: 1px solid rgba(200,148,58,0.25);
  background: rgba(255,255,255,0.06);
  border-radius: 3px;
  overflow: hidden;
}
.translate-select {
  max-width: 120px;
  background: transparent;
  color: var(--cream-dim);
  border: none;
  outline: none;
  font-family: var(--font-sans);
  font-size: 0.66rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 0.5rem 0.35rem 0.5rem 0.55rem;
}
.translate-select option {
  background: var(--dark);
  color: var(--cream);
}
.translate-btn {
  background: transparent;
  border: none;
  border-left: 1px solid rgba(200,148,58,0.25);
  color: var(--gold);
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: 0.66rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 0 0.55rem;
}

.ingest-actions { display: flex; gap: 0.75rem; flex-wrap: wrap; margin-top: 1.25rem; }
.publish-error { margin-top: 0.7rem; }

/* ══════════════════════════════════
   RESPONSIVE
══════════════════════════════════ */
@media (max-width: 1024px) {
  .site-nav__inner { gap: 1rem; }
  .nav-search-input { width: 140px; }
  .btn-support { padding-left: 0.8rem; padding-right: 0.8rem; }
  .taxonomy-grid { grid-template-columns: repeat(3, 1fr); }
  .home-record-card { grid-template-columns: 88px 1fr; }
  .home-record-card .archive-card__meta,
  .home-record-card .archive-card__actions { display: none; }
}
@media (max-width: 900px) {
  .home-hero-grid { grid-template-columns: 1fr; }
  .home-hero-copy { padding: 3rem 1.75rem; }
  .home-hero-media { align-items: flex-start; padding: 2rem 1.75rem 3rem; }
  .archive-layout { grid-template-columns: 1fr; }
  .archive-sidebar { position: static; }
  .footer-pillars { grid-template-columns: 1fr 1fr; }
  .hero-stats-inner { grid-template-columns: 1fr 1fr; }
  .home-archive-layout { grid-template-columns: 1fr; }
  .home-archive-sidebar { border-right: none; padding-right: 0; }
}
@media (max-width: 720px) {
  html, body { overflow-x: hidden; }
  .site-nav__inner { grid-template-columns: 1fr; padding: 0.85rem 1rem; min-height: auto; gap: 0.6rem; }
  .site-nav__links { justify-content: flex-start; flex-wrap: wrap; }
  .nav-search { display: none; }
  .nav-actions { flex-wrap: wrap; justify-content: flex-start; }
  .translate-select { max-width: 150px; }
  .library-grid { grid-template-columns: 1fr; }
  .meta-grid { grid-template-columns: 1fr 1fr; }
  .archive-card { grid-template-columns: 88px 1fr; }
  .archive-card__meta, .archive-card__actions { display: none; }
  .hero-stats-inner { grid-template-columns: 1fr 1fr; }
  .footer-pillars { grid-template-columns: 1fr; gap: 1.5rem; }
  .footer-bottom-bar { flex-direction: column; gap: 0.5rem; text-align: center; }
  .taxonomy-grid { grid-template-columns: 1fr; }
  .taxonomy-card { border-right: none; border-bottom: 1px solid var(--border-light); }
  .taxonomy-card:last-child { border-bottom: none; }
}
@media (max-width: 480px) {
  .home-hero-copy h1 { font-size: 2.8rem; }
  .meta-grid { grid-template-columns: 1fr; }
  .archive-card { grid-template-columns: 1fr; min-height: auto; }
  .archive-card__cover { display: none; }
  .hero-stats-inner { grid-template-columns: 1fr; }
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: 0.001ms !important; transition-duration: 0.001ms !important; }
}

/* ══════════════════════════════════
   CONCEPT-ART MATCH SYSTEM
   Dark wood + parchment archive language shared across pages.
══════════════════════════════════ */
:root {
  --concept-wood: #100904;
  --concept-black: #090604;
  --concept-gold: #c8943a;
  --concept-gold-soft: #e1b665;
  --concept-paper: #e7d6b4;
  --concept-paper-light: #f1e4c8;
  --concept-paper-dark: #d5bc8d;
  --concept-ink: #201406;
  --concept-line: #9e7a3d;
  --concept-maroon: #6d1f18;
}

body {
  background-color: var(--concept-paper);
  background-image:
    linear-gradient(rgba(80,48,16,0.05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(80,48,16,0.04) 1px, transparent 1px),
    var(--paper-texture);
  background-size: 56px 56px, 56px 56px, auto;
  color: var(--concept-ink);
}

.site-nav {
  background:
    linear-gradient(rgba(14,8,4,0.96), rgba(8,5,3,0.99)),
    var(--concept-wood);
  border-bottom: 2px solid rgba(200,148,58,0.58);
  box-shadow: 0 4px 18px rgba(0,0,0,0.35);
}

.site-nav__inner {
  position: relative;
  max-width: 1536px;
  min-height: 74px;
  padding: 0 2.45rem;
  gap: 2.2rem;
  grid-template-columns: 342px 1fr auto;
}

.site-nav__brand {
  position: absolute;
  left: 2.45rem;
  top: 0;
  width: 342px;
  min-height: 108px;
  min-width: 342px;
  margin: 0;
  padding: 0.72rem 1.1rem 0.6rem 0.92rem;
  border: 1px solid rgba(200,148,58,0.62);
  border-top-color: rgba(200,148,58,0.34);
  border-radius: 3px;
  background: rgba(10,7,4,0.36);
  box-shadow: inset 0 0 0 1px rgba(255,236,180,0.04);
}

.nav-logo-icon {
  width: 58px;
  height: 58px;
  filter: drop-shadow(0 1px 0 rgba(0,0,0,0.5));
}

.site-nav__links { grid-column: 2; }
.nav-actions { grid-column: 3; }

.nav-brand-text { gap: 0; }
.nav-brand-top { display: none; }
.nav-brand-name,
.concept-brand-name {
  color: #ead8b0;
  font-size: 1.55rem;
  font-weight: 700;
  line-height: 0.95;
  text-transform: uppercase;
  letter-spacing: 0.055em;
}
.nav-brand-tagline {
  margin-top: 0.35rem;
  color: var(--concept-gold-soft);
  font-size: 0.62rem;
  font-weight: 700;
  letter-spacing: 0.2em;
}

.site-nav__links { justify-content: flex-start; gap: 1.45rem; }
.site-nav__link {
  color: #e9d6b5;
  font-family: Georgia, "Times New Roman", serif;
  font-size: 0.86rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  padding: 0.4rem 0.15rem 0.7rem;
}
.site-nav__link.active {
  color: #fff0c8;
  border-bottom-color: var(--concept-gold);
}

.nav-actions { gap: 1rem; }
.nav-search {
  height: 38px;
  border: 1px solid rgba(200,148,58,0.7);
  background: rgba(8,6,4,0.72);
  border-radius: 3px;
}
.nav-search-input {
  width: 270px;
  color: #ecd9bd;
  font-size: 0.92rem;
}
.nav-search-btn { color: var(--concept-gold-soft); font-size: 1.18rem; }
.btn-support {
  height: 38px;
  display: inline-flex;
  align-items: center;
  border: 1px solid rgba(221,141,76,0.72);
  background: linear-gradient(#7e281d, #5a1712);
  color: #f3dfba;
  border-radius: 3px;
  font-family: Georgia, "Times New Roman", serif;
  font-size: 0.82rem;
  letter-spacing: 0.1em;
  padding: 0 1.55rem;
}
.btn-support:hover { background: linear-gradient(#8b3022, #651a14); color: #fff1cb; }

.concept-page {
  background: var(--concept-black);
}

.concept-hero {
  min-height: 444px;
  max-width: 1536px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: 45% 55%;
  background:
    linear-gradient(90deg, rgba(6,5,3,0.99) 0%, rgba(8,6,4,0.98) 40%, rgba(8,6,4,0.78) 54%, rgba(8,6,4,0.22) 68%, rgba(8,6,4,0) 82%),
    url("/assets/concept-hero-desk.png") right center / auto 100% no-repeat,
    var(--concept-black);
  border-bottom: 1px solid rgba(200,148,58,0.55);
}

.concept-hero__copy {
  padding: 3.1rem 2rem 1.25rem 6.8rem;
  color: #eee2c8;
}
.concept-hero__copy h1 {
  margin: 0 0 0.35rem;
  color: #e8ddc6;
  font-size: clamp(4.2rem, 6vw, 5.75rem);
  font-weight: 700;
  line-height: 0.87;
  letter-spacing: 0.015em;
  text-shadow: 0 2px 0 rgba(0,0,0,0.65);
}
.concept-hero__tag {
  margin: 0;
  color: var(--concept-gold-soft);
  font-size: 1.55rem;
  font-style: normal;
  line-height: 1.2;
}
.concept-rule {
  width: 240px;
  height: 16px;
  margin: 0.52rem 0 0.6rem;
  border-top: 1px solid var(--concept-gold);
  position: relative;
}
.concept-rule::after {
  content: "X";
  position: absolute;
  right: -26px;
  top: -12px;
  color: var(--concept-gold);
  font-size: 1rem;
}
.concept-hero__body {
  max-width: 460px;
  margin: 0 0 1rem;
  color: #d8c7a8;
  font-size: 1.05rem;
  line-height: 1.42;
}
.concept-actions {
  display: flex;
  gap: 1.45rem;
  align-items: center;
  margin-bottom: 1rem;
}
.btn-hero-primary,
.btn-hero-ghost {
  min-width: 210px;
  justify-content: center;
  border-radius: 3px;
  font-family: Georgia, "Times New Roman", serif;
  font-size: 0.9rem;
  letter-spacing: 0.08em;
  padding: 0.72rem 1.1rem;
}
.btn-hero-primary {
  background: linear-gradient(#82291e, #641b16);
  border-color: rgba(231,151,83,0.65);
}
.btn-hero-ghost {
  color: #e1c89b;
  background: rgba(11,8,5,0.55);
  border: 1px solid rgba(200,148,58,0.58);
}
.btn-icon {
  font-family: var(--font-mono);
  margin-right: 0.45rem;
}
.concept-stats {
  display: grid;
  grid-template-columns: repeat(4, minmax(96px, 1fr));
  max-width: 575px;
  border-left: 1px solid rgba(200,148,58,0.16);
}
.concept-stats div {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 0 0.55rem;
  padding: 0 1rem;
  border-right: 1px solid rgba(200,148,58,0.18);
  color: var(--concept-gold-soft);
}
.stat-symbol {
  grid-row: span 2;
  color: var(--concept-gold);
  font-family: var(--font-mono);
  font-size: 1.08rem;
  align-self: center;
}
.concept-stats strong { display: block; color: var(--concept-gold-soft); font-size: 1.18rem; line-height: 1; }
.concept-stats small { color: #d4bd88; font-size: 0.7rem; line-height: 1.1; }

.concept-archive-shell {
  max-width: 1536px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: 325px 1fr;
  gap: 1.7rem;
  padding: 0.95rem 3rem 1.1rem;
  background:
    linear-gradient(rgba(110,70,22,0.06) 1px, transparent 1px),
    linear-gradient(90deg, rgba(110,70,22,0.05) 1px, transparent 1px),
    var(--paper-texture),
    var(--concept-paper);
  background-size: 72px 72px, 72px 72px, auto, auto;
}
.concept-filter-card {
  min-height: 430px;
  padding: 1.1rem 1.25rem;
  background: rgba(238,222,187,0.88);
  border: 1px solid #a8864d;
  border-radius: 4px;
  box-shadow: 2px 3px 12px rgba(57,34,8,0.24), inset 0 0 35px rgba(116,68,18,0.08);
}
.concept-filter-title {
  display: flex;
  gap: 0.75rem;
  align-items: center;
  color: #432811;
  font-size: 0.92rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  border-bottom: 1px solid rgba(92,61,20,0.25);
  padding-bottom: 0.85rem;
  margin-bottom: 0.8rem;
}
.concept-search span { display: none; }
.concept-search input {
  width: 100%;
  height: 32px;
  padding: 0 0.65rem;
  background: rgba(248,239,212,0.72);
  border: 1px solid #b69963;
  color: var(--concept-ink);
  font-family: Georgia, "Times New Roman", serif;
}
.concept-filter-group {
  margin-top: 0.8rem;
  padding-top: 0.55rem;
  border-top: 1px solid rgba(92,61,20,0.2);
}
.concept-filter-heading {
  width: 100%;
  display: flex;
  justify-content: space-between;
  border: 0;
  background: transparent;
  color: #2b1b0b;
  font-family: var(--font-sans);
  font-size: 0.65rem;
  font-weight: 800;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  cursor: pointer;
}
.concept-filter-group label {
  display: grid;
  grid-template-columns: auto 1fr auto;
  gap: 0.45rem;
  align-items: center;
  color: #3d2a13;
  font-size: 0.78rem;
  line-height: 1.38;
  margin-top: 0.25rem;
}
.concept-filter-group input { accent-color: #7b2318; }
.concept-filter-group em {
  color: #664a23;
  font-style: normal;
  font-size: 0.72rem;
}
.risk-count { color: #8b2018 !important; }

.concept-records { min-width: 0; }
.concept-records__header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 1rem;
  margin-bottom: 0.65rem;
  border-bottom: 2px solid rgba(45,29,10,0.75);
  padding-bottom: 0.45rem;
}
.concept-records__header h2 {
  display: inline-block;
  margin: 0 0.7rem 0 0;
  color: #1c1308;
  font-size: 1.26rem;
  font-weight: 700;
  letter-spacing: 0.13em;
  text-transform: uppercase;
}
.public-good-stamp {
  display: inline-block;
  transform: rotate(-2deg);
  border: 2px solid rgba(126,34,24,0.62);
  color: #8b281d;
  font-family: var(--font-mono);
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 0.12rem 0.45rem;
}
.concept-sort {
  display: flex;
  align-items: center;
  gap: 0.7rem;
  color: #3a250e;
  font-size: 0.74rem;
}
.concept-sort select {
  height: 31px;
  min-width: 170px;
  background: rgba(238,222,187,0.7);
  border: 1px solid #aa8b55;
  color: var(--concept-ink);
  font-family: Georgia, "Times New Roman", serif;
}
.view-icons { font-family: var(--font-mono); color: #2a1b0b; }
.concept-record-list { display: flex; flex-direction: column; gap: 0.45rem; }
.concept-record {
  min-height: 127px;
  display: grid;
  grid-template-columns: 122px minmax(260px, 1fr) minmax(300px, 0.88fr) 180px;
  gap: 0;
  color: var(--concept-ink);
  text-decoration: none;
  background: rgba(239,224,193,0.82);
  border: 1px solid #8d6c39;
  border-radius: 4px;
  box-shadow: 1px 2px 5px rgba(55,32,7,0.16);
  overflow: hidden;
}
.concept-record:hover {
  color: var(--concept-ink);
  text-decoration: none;
  background: rgba(246,232,200,0.9);
}
.concept-book {
  margin: 0.72rem 0.9rem;
  padding: 0.85rem 0.55rem;
  border: 2px solid #0d1720;
  background: linear-gradient(90deg, #0a1119 0 18%, #11243a 18% 100%);
  color: #d5af58;
  box-shadow: 2px 3px 5px rgba(0,0,0,0.25);
  display: flex;
  flex-direction: column;
  justify-content: center;
  text-align: center;
}
.concept-book.is-paper {
  background: #e8d4a8;
  border-color: #b79056;
  color: #1b1208;
}
.concept-book strong { font-size: 0.82rem; line-height: 1.1; }
.concept-book span { margin-top: 0.45rem; font-size: 0.55rem; color: currentColor; opacity: 0.75; }
.concept-record-main {
  padding: 0.9rem 1.05rem 0.72rem;
  border-right: 1px solid rgba(70,45,16,0.28);
}
.concept-record-main h3 {
  margin: 0;
  color: #170f07;
  font-size: 1.2rem;
  font-weight: 700;
}
.record-byline,
.record-kinds {
  margin: 0;
  color: #2f210f;
  font-size: 0.78rem;
  font-style: italic;
  line-height: 1.25;
}
.concept-record-main p:not(.record-byline):not(.record-kinds) {
  margin: 0.45rem 0 0;
  color: #2b1d0d;
  font-size: 0.75rem;
  line-height: 1.3;
}
.book-chip {
  display: inline-block;
  margin-top: 0.35rem;
  border: 1px solid #9e7a3d;
  background: #d0ad64;
  color: #1c1308;
  font-size: 0.66rem;
  padding: 0.04rem 0.32rem;
}
.concept-record-meta {
  margin: 0;
  padding: 0.78rem 1rem;
  border-right: 1px solid rgba(70,45,16,0.28);
}
.concept-record-meta div {
  display: grid;
  grid-template-columns: 130px 1fr;
  gap: 0.55rem;
  align-items: baseline;
  margin: 0 0 0.28rem;
  font-size: 0.72rem;
}
.concept-record-meta dt { color: #241709; }
.concept-record-meta dd { margin: 0; color: #1f1509; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.concept-record-actions {
  padding: 0.9rem 1rem;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  align-items: stretch;
}
.concept-record-actions .verified-stamp {
  width: 116px;
  align-self: center;
  border: 3px solid #4b4232;
  color: #4b4232;
  padding: 0.25rem 0.2rem;
  transform: rotate(1deg);
  text-align: center;
  text-transform: uppercase;
  font-family: var(--font-mono);
  background: rgba(245,233,201,0.35);
}
.concept-record-actions .verified-stamp span { display: block; font-size: 0.95rem; font-weight: 700; letter-spacing: 0.08em; }
.concept-record-actions .verified-stamp em { display: block; font-size: 0.85rem; font-style: normal; }
.concept-record-actions .view-record-btn {
  background: linear-gradient(#11100d, #050504);
  border: 1px solid #b88b42;
  color: #f0d198;
  font-size: 0.76rem;
  padding: 0.55rem 0.7rem;
}

.concept-footer {
  max-width: 1536px;
  min-height: 72px;
  margin: 0 auto;
  padding: 0.7rem 5.9rem 0.7rem 6rem;
  display: grid;
  grid-template-columns: 1fr 1fr 1fr 1fr 180px;
  gap: 1.2rem;
  align-items: center;
  background:
    linear-gradient(rgba(7,4,2,0.88), rgba(7,4,2,0.94)),
    url("/assets/concept-wood-strip.png") center / cover,
    var(--concept-wood);
  border-top: 1px solid rgba(200,148,58,0.42);
  color: #ead7b4;
}
.concept-footer div:not(.footer-slip) {
  display: grid;
  grid-template-columns: 34px 1fr;
  gap: 0 0.75rem;
}
.footer-symbol {
  grid-row: span 2;
  color: var(--concept-gold);
  font-family: var(--font-mono);
  font-size: 1.4rem;
}
.concept-footer strong {
  display: block;
  color: #efd8a5;
  font-size: 0.72rem;
  letter-spacing: 0.15em;
  text-transform: uppercase;
}
.concept-footer small {
  color: #c4a56e;
  font-size: 0.69rem;
  line-height: 1.1;
}
.footer-slip {
  background: #e5d1a3;
  color: #3a2510;
  border: 1px solid #a47a3b;
  transform: rotate(2deg);
  padding: 0.5rem 0.65rem;
  text-align: center;
  box-shadow: 0 3px 12px rgba(0,0,0,0.35);
}
.footer-slip em { display: block; font-size: 0.72rem; line-height: 1.15; }
.footer-slip span {
  display: inline-block;
  margin-top: 0.35rem;
  color: #8b271b;
  border: 1px solid #8b271b;
  padding: 0.1rem 0.55rem;
  font-family: var(--font-mono);
  font-size: 0.62rem;
}

.content-area,
.hero,
.operator-header {
  background-image:
    linear-gradient(rgba(110,70,22,0.06) 1px, transparent 1px),
    linear-gradient(90deg, rgba(110,70,22,0.05) 1px, transparent 1px),
    var(--paper-texture);
  background-size: 72px 72px, 72px 72px, auto;
}

.hero,
.operator-header {
  background:
    linear-gradient(rgba(10,6,3,0.88), rgba(10,6,3,0.93)),
    url("/assets/concept-wood-strip.png") center / cover,
    var(--concept-wood);
  color: #ecd8af;
  border-bottom: 1px solid rgba(200,148,58,0.45);
}
.hero__title,
.hero h1,
.operator-title { color: #ecd8af !important; }

.auth-gate,
.op-panel,
.archive-card,
.library-card,
.link-rot-panel,
.transcript-body,
.source-ref,
.commitment-block {
  background-color: rgba(239,224,193,0.88) !important;
  background-image: var(--paper-texture) !important;
  border-color: #9d793d !important;
  border-radius: 4px !important;
  box-shadow: 1px 2px 8px rgba(55,32,7,0.14);
}

.entry-title,
.archive-card__title,
.library-card__title,
.about-h2,
.overview-title,
.transcript-title {
  color: #171008 !important;
  font-weight: 700 !important;
}

.site-footer {
  background:
    linear-gradient(rgba(7,4,2,0.88), rgba(7,4,2,0.94)),
    url("/assets/concept-wood-strip.png") center / cover,
    var(--concept-wood);
}

/* Concept continuity for every non-home page */
.nav-brand-top {
  display: block;
  color: #ead8b0;
  font-family: Georgia, "Times New Roman", serif;
  font-size: 1.04rem;
  font-weight: 700;
  line-height: 0.95;
  letter-spacing: 0.075em;
  text-transform: uppercase;
}

.content-area,
#entryWrap {
  background:
    linear-gradient(rgba(110,70,22,0.055) 1px, transparent 1px),
    linear-gradient(90deg, rgba(110,70,22,0.045) 1px, transparent 1px),
    var(--paper-texture),
    var(--concept-paper) !important;
  background-size: 72px 72px, 72px 72px, auto, auto !important;
}

.section-header {
  border-bottom-color: rgba(45,29,10,0.72);
}

.section-badge {
  transform: rotate(-2deg);
  border: 2px solid rgba(126,34,24,0.62);
  background: transparent;
  color: #8b281d;
  font-family: var(--font-mono);
  border-radius: 0;
}

.archive-sidebar {
  padding: 1.05rem 1.1rem;
  background-color: rgba(238,222,187,0.88);
  background-image: var(--paper-texture);
  border: 1px solid #a8864d;
  border-radius: 4px;
  box-shadow: 2px 3px 12px rgba(57,34,8,0.18), inset 0 0 35px rgba(116,68,18,0.06);
}

.archive-card {
  border-color: #8d6c39 !important;
  border-radius: 4px !important;
  box-shadow: 1px 2px 6px rgba(55,32,7,0.16) !important;
  transform: none !important;
}

.archive-card:hover {
  background-color: rgba(246,232,200,0.94) !important;
  box-shadow: 2px 3px 10px rgba(55,32,7,0.2) !important;
}

.archive-card__meta,
.archive-card__body {
  border-color: rgba(70,45,16,0.28) !important;
}

.badge-preserved {
  border-radius: 2px;
  background: #b9c79b;
  border-color: #6f7f4b;
  color: #233214;
  font-family: var(--font-mono);
}

.verified-stamp {
  color: #4b4232;
  border-color: #4b4232;
  transform: rotate(1deg);
}

.view-record-btn,
.queue-btn--publish {
  background: linear-gradient(#11100d, #050504) !important;
  border: 1px solid #b88b42 !important;
  color: #f0d198 !important;
}

.view-record-btn:hover,
.queue-btn--publish:hover {
  background: linear-gradient(#1c1812, #090806) !important;
  color: #ffe0a8 !important;
}

.meta-grid,
.context-feature,
.pipeline-stage,
.queue-item {
  background: rgba(239,224,193,0.64);
  background-image: var(--paper-texture);
  border-color: rgba(142,106,52,0.58) !important;
}

.context-feature,
.pipeline-stage,
.queue-item {
  border: 1px solid rgba(142,106,52,0.45);
  border-radius: 4px;
  padding: 1rem;
  margin-bottom: 0.75rem;
}

.meta-grid {
  border: 1px solid rgba(142,106,52,0.58);
  border-radius: 4px;
  padding: 1.1rem;
}

.operator-tabs {
  border-bottom-color: rgba(142,106,52,0.58);
}

.op-tab,
.mode-btn {
  color: #442c12;
  background: rgba(230,209,164,0.45);
  border-color: #a8864d !important;
}

.op-tab.active,
.mode-btn.active {
  background: linear-gradient(#8b3022, #651a14);
  color: #f4dfba;
}

.form-input,
.form-textarea,
.form-select,
.sort-select,
.search-input {
  background-color: rgba(248,239,212,0.78) !important;
  border-color: #a8864d !important;
  color: #241709 !important;
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.2);
}

.notice {
  border-radius: 3px;
  background-image: var(--paper-texture);
}

@media (max-width: 1380px) {
  .site-nav__inner {
    grid-template-columns: 300px 1fr auto;
    padding: 0 1rem;
    gap: 1.1rem;
  }
  .site-nav__brand {
    left: 1rem;
    width: 300px;
    min-width: 300px;
  }
  .nav-logo-icon { width: 50px; height: 50px; }
  .nav-brand-top { font-size: 0.86rem; }
  .nav-brand-name,
  .concept-brand-name { font-size: 1.32rem; }
  .site-nav__links { gap: 1rem; }
  .site-nav__link { font-size: 0.78rem; }
  .nav-search-input { width: 210px; }
  .btn-support { padding: 0 1rem; font-size: 0.72rem; }
}

@media (max-width: 1180px) {
  .site-nav__brand { min-width: 280px; width: 280px; }
  .nav-search-input { width: 190px; }
  .concept-hero__copy { padding-left: 3.5rem; }
  .concept-archive-shell { grid-template-columns: 280px 1fr; padding-left: 2rem; padding-right: 2rem; }
  .concept-record { grid-template-columns: 105px 1fr 260px 150px; }
}

@media (max-width: 900px) {
  .site-nav__inner { grid-template-columns: 1fr; padding: 0.8rem 1rem; gap: 0.6rem; }
  .site-nav__brand { position: static; min-width: 0; width: 100%; min-height: auto; }
  .concept-hero { grid-template-columns: 1fr; background-position: center top; }
  .concept-hero__copy { padding: 2.2rem 1.4rem; background: rgba(7,5,3,0.76); }
  .concept-archive-shell { grid-template-columns: 1fr; }
  .concept-filter-card { min-height: auto; }
  .concept-record { grid-template-columns: 95px 1fr; }
  .concept-record-meta,
  .concept-record-actions { display: none; }
  .concept-footer { grid-template-columns: 1fr 1fr; padding: 1rem 1.5rem; }
  .footer-slip { display: none; }
}

@media (max-width: 620px) {
  .concept-hero__copy h1 { font-size: 3.1rem; }
  .concept-stats { grid-template-columns: 1fr 1fr; }
  .concept-records__header { align-items: flex-start; flex-direction: column; }
  .concept-footer { grid-template-columns: 1fr; }
}

/* ══════════════════════════════════
   RETRO-FUTURISTIC ANALOG THEME
   CRT archive terminal + VHS data vault.
══════════════════════════════════ */
:root {
  --retro-bg: #050814;
  --retro-panel: rgba(7, 15, 32, 0.88);
  --retro-panel-2: rgba(17, 10, 30, 0.84);
  --retro-cyan: #6df6ff;
  --retro-magenta: #ff4fd8;
  --retro-amber: #ffd166;
  --retro-green: #8aff80;
  --retro-red: #ff5f57;
  --retro-ink: #e8fbff;
  --retro-muted: #9bb6c8;
  --retro-line: rgba(109, 246, 255, 0.34);
  --retro-shadow-cyan: 0 0 18px rgba(109, 246, 255, 0.34);
  --retro-shadow-magenta: 0 0 18px rgba(255, 79, 216, 0.28);
}

html { background: var(--retro-bg); }

body {
  font-family: "Courier New", Courier, monospace;
  background:
    radial-gradient(circle at 70% 12%, rgba(255,79,216,0.18), transparent 32rem),
    radial-gradient(circle at 18% 8%, rgba(109,246,255,0.16), transparent 28rem),
    linear-gradient(180deg, #071023 0%, #050814 44%, #03040a 100%) !important;
  color: var(--retro-ink);
  letter-spacing: 0;
}

body::before {
  content: "";
  position: fixed;
  inset: 0;
  z-index: 5000;
  pointer-events: none;
  background:
    repeating-linear-gradient(180deg, rgba(255,255,255,0.055) 0 1px, transparent 1px 5px),
    linear-gradient(90deg, rgba(255,79,216,0.04), rgba(109,246,255,0.035), rgba(255,209,102,0.025));
  mix-blend-mode: screen;
  opacity: 0.48;
}

body::after {
  content: "";
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background:
    linear-gradient(rgba(109,246,255,0.055) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,79,216,0.045) 1px, transparent 1px);
  background-size: 44px 44px, 44px 44px;
  mask-image: linear-gradient(180deg, transparent 0, black 12rem, black 100%);
}

h1, h2, h3, h4,
.entry-title,
.archive-card__title,
.library-card__title,
.about-h2,
.overview-title,
.transcript-title {
  font-family: "Courier New", Courier, monospace !important;
  color: var(--retro-ink) !important;
  text-shadow: 0 0 12px rgba(109,246,255,0.22);
}

a {
  color: var(--retro-cyan);
}

a:hover {
  color: var(--retro-amber);
}

.site-nav {
  background:
    linear-gradient(180deg, rgba(10,17,35,0.98), rgba(3,6,14,0.98)) !important;
  border-bottom: 1px solid rgba(109,246,255,0.52);
  box-shadow: 0 0 24px rgba(109,246,255,0.18), inset 0 -1px 0 rgba(255,79,216,0.42);
}

.site-nav__inner {
  grid-template-columns: auto 1fr auto !important;
  min-height: 86px;
  padding: 0 1.45rem;
}

.site-nav::before {
  content: "SIGNAL: LOCKED   //   FKL ARCHIVE NODE 08   //   TAPE INDEX ONLINE";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -1.25rem;
  height: 1.25rem;
  overflow: hidden;
  color: rgba(138,255,128,0.72);
  background: rgba(3,7,15,0.86);
  border-bottom: 1px solid rgba(138,255,128,0.22);
  font-size: 0.62rem;
  line-height: 1.25rem;
  letter-spacing: 0.16em;
  text-align: center;
  text-transform: uppercase;
}

.site-nav__brand {
  position: static !important;
  width: auto !important;
  min-width: 0 !important;
  min-height: auto !important;
  background:
    linear-gradient(135deg, rgba(109,246,255,0.11), rgba(255,79,216,0.08)),
    rgba(3,8,18,0.9);
  border: 1px solid rgba(109,246,255,0.72);
  box-shadow: var(--retro-shadow-cyan), inset 0 0 28px rgba(255,79,216,0.08);
  clip-path: polygon(0 0, calc(100% - 14px) 0, 100% 14px, 100% 100%, 14px 100%, 0 calc(100% - 14px));
}

.site-nav__links,
.nav-actions {
  grid-column: auto !important;
}

.nav-logo-icon {
  filter: drop-shadow(0 0 8px rgba(109,246,255,0.65)) drop-shadow(0 0 8px rgba(255,79,216,0.35));
}

.nav-brand-top,
.nav-brand-name,
.concept-brand-name {
  color: var(--retro-ink) !important;
  font-family: "Courier New", Courier, monospace !important;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  text-shadow: 0 0 10px rgba(109,246,255,0.48), 2px 0 0 rgba(255,79,216,0.2);
}

.nav-brand-top {
  color: var(--retro-cyan) !important;
  font-size: 0.9rem;
}

.nav-brand-tagline {
  color: var(--retro-green) !important;
  font-family: "Courier New", Courier, monospace !important;
  letter-spacing: 0.18em;
}

.site-nav__link {
  color: var(--retro-muted);
  font-family: "Courier New", Courier, monospace;
  text-shadow: none;
}

.site-nav__link:hover,
.site-nav__link.active {
  color: var(--retro-amber);
  border-bottom-color: var(--retro-magenta);
  text-shadow: 0 0 12px rgba(255,209,102,0.48);
}

.nav-search,
.translate-control {
  background: rgba(2, 7, 16, 0.9);
  border: 1px solid rgba(109,246,255,0.52);
  box-shadow: inset 0 0 16px rgba(109,246,255,0.08);
}

.nav-search-input,
.translate-select {
  color: var(--retro-green) !important;
  font-family: "Courier New", Courier, monospace;
}

.nav-search-input::placeholder {
  color: rgba(155,182,200,0.78);
}

.nav-search-btn,
.translate-btn {
  color: var(--retro-cyan);
  border-color: rgba(109,246,255,0.28);
}

.btn-support,
.btn--primary,
.btn-hero-primary,
.queue-btn--publish {
  background: linear-gradient(180deg, rgba(255,79,216,0.38), rgba(120,26,107,0.92)) !important;
  border: 1px solid rgba(255,79,216,0.78) !important;
  color: #fff7ff !important;
  box-shadow: var(--retro-shadow-magenta), inset 0 0 14px rgba(255,255,255,0.08);
  font-family: "Courier New", Courier, monospace !important;
  text-shadow: 0 0 8px rgba(255,255,255,0.26);
}

.btn-support:hover,
.btn--primary:hover,
.btn-hero-primary:hover,
.queue-btn--publish:hover {
  background: linear-gradient(180deg, rgba(255,209,102,0.45), rgba(255,79,216,0.82)) !important;
  color: #06101f !important;
}

.btn--ghost,
.btn-hero-ghost {
  background: rgba(2,8,18,0.72) !important;
  border: 1px solid rgba(109,246,255,0.58) !important;
  color: var(--retro-cyan) !important;
  box-shadow: var(--retro-shadow-cyan);
  font-family: "Courier New", Courier, monospace !important;
}

.concept-page {
  background: transparent !important;
}

.concept-hero {
  max-width: none;
  min-height: 620px;
  grid-template-columns: minmax(420px, 43%) 1fr;
  background:
    linear-gradient(90deg, rgba(3,6,14,0.96) 0%, rgba(3,6,14,0.82) 40%, rgba(3,6,14,0.26) 70%),
    url("/assets/retro-analog-hero.png") center / cover no-repeat,
    var(--retro-bg) !important;
  border-bottom: 1px solid rgba(109,246,255,0.58);
  box-shadow: inset 0 -90px 80px rgba(3,6,14,0.62);
}

.concept-hero__copy {
  padding: 6.2rem 2rem 2rem 6.8rem;
}

.concept-hero__copy h1 {
  color: #f2feff !important;
  font-size: clamp(3.4rem, 5.3vw, 5.8rem);
  line-height: 0.92;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  text-shadow:
    0 0 20px rgba(109,246,255,0.38),
    4px 0 0 rgba(255,79,216,0.22),
    -2px 0 0 rgba(138,255,128,0.12);
}

.concept-hero__tag {
  color: var(--retro-amber);
  font-family: "Courier New", Courier, monospace;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  text-shadow: 0 0 12px rgba(255,209,102,0.38);
}

.concept-rule {
  border-top-color: var(--retro-cyan);
  box-shadow: 0 0 12px rgba(109,246,255,0.45);
}

.concept-rule::after {
  content: "REC";
  color: var(--retro-red);
  right: -44px;
  top: -11px;
  font-size: 0.8rem;
  text-shadow: 0 0 8px rgba(255,95,87,0.6);
}

.concept-hero__body {
  color: var(--retro-muted);
  max-width: 540px;
}

.concept-stats {
  border-left-color: rgba(109,246,255,0.28);
}

.concept-stats div {
  color: var(--retro-cyan);
  border-right-color: rgba(109,246,255,0.26);
}

.concept-stats strong,
.concept-stats small,
.stat-symbol {
  color: var(--retro-amber);
  font-family: "Courier New", Courier, monospace;
}

.concept-archive-shell,
.content-area,
#entryWrap,
body > div[style*="max-width:820px"] {
  max-width: none;
  background:
    linear-gradient(rgba(109,246,255,0.04) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,79,216,0.035) 1px, transparent 1px),
    linear-gradient(180deg, rgba(5,8,20,0.96), rgba(6,8,18,0.98)) !important;
  background-size: 38px 38px, 38px 38px, auto !important;
  color: var(--retro-ink);
}

.concept-archive-shell {
  grid-template-columns: 325px 1fr;
  padding-top: 2rem;
  border-top: 1px solid rgba(255,79,216,0.35);
}

.concept-filter-card,
.archive-sidebar,
.auth-gate,
.op-panel,
.archive-card,
.library-card,
.link-rot-panel,
.transcript-body,
.source-ref,
.commitment-block,
.meta-grid,
.context-feature,
.pipeline-stage,
.queue-item {
  background:
    linear-gradient(180deg, rgba(10,23,45,0.9), rgba(10,11,28,0.92)) !important;
  border: 1px solid rgba(109,246,255,0.38) !important;
  border-radius: 0 !important;
  box-shadow: var(--retro-shadow-cyan), inset 0 0 28px rgba(255,79,216,0.07) !important;
  color: var(--retro-ink) !important;
  clip-path: polygon(0 0, calc(100% - 10px) 0, 100% 10px, 100% 100%, 10px 100%, 0 calc(100% - 10px));
}

.concept-filter-title,
.sidebar-header,
.section-title,
.concept-records__header h2,
.operator-title,
.auth-gate__title,
.about-h2,
.form-label,
.sidebar-section-title,
.ingest-result__label,
.footer-pillar-title {
  color: var(--retro-amber) !important;
  font-family: "Courier New", Courier, monospace !important;
  text-shadow: 0 0 10px rgba(255,209,102,0.28);
}

.public-good-stamp,
.section-badge {
  background: rgba(255,79,216,0.1);
  border-color: rgba(255,79,216,0.72);
  color: var(--retro-magenta);
  box-shadow: 0 0 12px rgba(255,79,216,0.28);
}

.concept-search input,
.form-input,
.form-textarea,
.form-select,
.sort-select,
.search-input,
.concept-sort select {
  background: rgba(2, 8, 18, 0.9) !important;
  border: 1px solid rgba(109,246,255,0.46) !important;
  color: var(--retro-green) !important;
  font-family: "Courier New", Courier, monospace !important;
  box-shadow: inset 0 0 18px rgba(109,246,255,0.07);
}

.concept-search input::placeholder,
.form-input::placeholder,
.form-textarea::placeholder,
.search-input::placeholder {
  color: rgba(138,255,128,0.52);
  font-style: normal;
}

.concept-filter-heading,
.concept-filter-group label,
.filter-item label,
.collection-item,
.sidebar-note,
.sort-label,
.concept-sort,
.archive-count,
.about-p,
.pipeline-stage-desc,
.context-feature-desc,
.entry-summary,
.archive-card__summary,
.archive-card__author,
.record-byline,
.record-kinds,
.concept-record-main p,
.meta-key,
.meta-val,
.source-ref__date,
.source-ref__snapshot,
.queue-item__meta,
.form-hint {
  color: var(--retro-muted) !important;
  font-family: "Courier New", Courier, monospace !important;
}

input[type="checkbox"] {
  accent-color: var(--retro-magenta);
}

.concept-record,
.archive-card {
  background:
    linear-gradient(90deg, rgba(5,12,26,0.96), rgba(12,13,34,0.92)) !important;
  border-color: rgba(109,246,255,0.44) !important;
}

.concept-record:hover,
.archive-card:hover {
  background:
    linear-gradient(90deg, rgba(13,28,52,0.98), rgba(35,14,46,0.96)) !important;
  box-shadow: 0 0 24px rgba(255,79,216,0.26), 0 0 24px rgba(109,246,255,0.16) !important;
}

.concept-book,
.archive-card__cover {
  background:
    linear-gradient(180deg, rgba(255,79,216,0.2), rgba(4,12,24,0.96)),
    repeating-linear-gradient(90deg, transparent 0 10px, rgba(109,246,255,0.1) 10px 12px) !important;
  border: 1px solid rgba(255,209,102,0.66) !important;
  color: var(--retro-amber) !important;
  box-shadow: inset 0 0 22px rgba(255,79,216,0.12), 0 0 16px rgba(255,209,102,0.12);
}

.concept-book.is-paper {
  background:
    linear-gradient(180deg, rgba(109,246,255,0.2), rgba(4,12,24,0.96)),
    repeating-linear-gradient(90deg, transparent 0 10px, rgba(255,209,102,0.1) 10px 12px) !important;
  color: var(--retro-cyan) !important;
}

.concept-record-main,
.concept-record-meta,
.archive-card__body,
.archive-card__meta {
  border-color: rgba(109,246,255,0.24) !important;
}

.book-chip,
.badge-preserved,
.context-label,
.operator-badge {
  background: rgba(138,255,128,0.13) !important;
  border: 1px solid rgba(138,255,128,0.58) !important;
  color: var(--retro-green) !important;
  border-radius: 0 !important;
  font-family: "Courier New", Courier, monospace !important;
}

.verified-stamp,
.concept-record-actions .verified-stamp {
  border-color: var(--retro-amber) !important;
  color: var(--retro-amber) !important;
  background: rgba(255,209,102,0.08) !important;
  box-shadow: 0 0 14px rgba(255,209,102,0.18);
}

.concept-record-actions .view-record-btn,
.view-record-btn {
  background: rgba(2,8,18,0.92) !important;
  border: 1px solid rgba(109,246,255,0.64) !important;
  color: var(--retro-cyan) !important;
  box-shadow: 0 0 14px rgba(109,246,255,0.18);
}

.operator-header,
.hero {
  background:
    linear-gradient(90deg, rgba(3,6,14,0.94), rgba(8,12,30,0.72)),
    url("/assets/retro-analog-hero.png") center / cover no-repeat,
    var(--retro-bg) !important;
  border-bottom: 1px solid rgba(109,246,255,0.54);
  color: var(--retro-ink);
}

.hero__kicker,
.entry-collection,
.archive-card__collection,
.library-card__meta,
.commitment-kicker,
.pipeline-stage-num,
.context-feature-num {
  color: var(--retro-magenta) !important;
  font-family: "Courier New", Courier, monospace !important;
  text-shadow: 0 0 10px rgba(255,79,216,0.32);
}

.hero__sub,
.operator-header span,
.auth-gate__sub {
  color: var(--retro-muted) !important;
}

.op-tab,
.mode-btn,
.queue-btn,
.view-toggle-btn {
  background: rgba(2, 8, 18, 0.86) !important;
  border: 1px solid rgba(109,246,255,0.34) !important;
  color: var(--retro-muted) !important;
  border-radius: 0 !important;
  font-family: "Courier New", Courier, monospace !important;
}

.op-tab.active,
.mode-btn.active,
.view-toggle-btn.active {
  background: rgba(255,79,216,0.22) !important;
  color: var(--retro-amber) !important;
  box-shadow: inset 0 -2px 0 var(--retro-magenta), 0 0 14px rgba(255,79,216,0.24);
}

.notice {
  background: rgba(8,14,30,0.88) !important;
  border: 1px solid rgba(255,209,102,0.42) !important;
  color: var(--retro-ink) !important;
  border-radius: 0 !important;
}

.site-footer,
.concept-footer {
  max-width: none;
  background:
    linear-gradient(180deg, rgba(8,12,28,0.98), rgba(3,5,12,1)) !important;
  border-top: 1px solid rgba(255,79,216,0.46);
  color: var(--retro-muted);
  box-shadow: inset 0 1px 0 rgba(109,246,255,0.22);
}

.footer-symbol,
.footer-pillar-icon {
  color: var(--retro-cyan) !important;
  filter: drop-shadow(0 0 8px rgba(109,246,255,0.35));
}

.concept-footer strong,
.concept-footer small,
.footer-pillar-desc,
.footer-quote,
.footer-id {
  color: var(--retro-muted) !important;
  font-family: "Courier New", Courier, monospace !important;
}

.footer-slip {
  background: rgba(255,209,102,0.08);
  border-color: rgba(255,209,102,0.52);
  color: var(--retro-amber);
  box-shadow: 0 0 18px rgba(255,209,102,0.18);
}

@media (max-width: 900px) {
  .site-nav::before { display: none; }
  .site-nav__inner {
    grid-template-columns: 1fr !important;
    padding: 0.8rem 1rem;
    gap: 0.75rem;
  }
  .site-nav__brand {
    justify-self: start;
    width: auto !important;
  }
  .site-nav__links {
    grid-column: auto !important;
    flex-wrap: wrap;
    justify-content: flex-start;
    gap: 0.75rem;
  }
  .nav-actions {
    grid-column: auto !important;
    width: 100%;
    justify-content: space-between;
    flex-wrap: wrap;
  }
  .nav-search {
    flex: 1 1 220px;
  }
  .section-header,
  .concept-records__header {
    align-items: flex-start;
    flex-direction: column;
    gap: 1rem;
  }
  .section-controls,
  .concept-sort {
    width: 100%;
    flex-wrap: wrap;
  }
  .sort-select,
  .concept-sort select {
    flex: 1 1 210px;
  }
  .concept-hero {
    grid-template-columns: 1fr;
    min-height: 0;
  }
  .concept-hero__copy {
    padding: 2.6rem 1.4rem 2rem;
    background: rgba(3,6,14,0.78);
  }
  .concept-archive-shell {
    grid-template-columns: 1fr;
  }
}

/* ══════════════════════════════════
   WARM WOOD LIBRARY THEME
   Traditional shelves, chunky book blocks, parchment records.
══════════════════════════════════ */
:root {
  --wood-black: #090401;
  --wood-deep: #130903;
  --wood-dark: #231106;
  --wood-mid: #3b1f0c;
  --wood-warm: #5a3115;
  --wood-edge: #875227;
  --paper: #efe0b3;
  --paper-light: #fbf1d4;
  --paper-mid: #dfc795;
  --paper-dark: #b88f4f;
  --ink-brown: #241407;
  --ink-soft: #65431d;
  --brass: #c49a48;
  --brass-light: #efd08a;
  --red-leather: #7d271b;
  --green-leather: #244f36;
  --blue-leather: #213d57;
  --shadow-wood: 0 14px 34px rgba(0,0,0,0.52);
  --hard-book-shadow: 5px 5px 0 rgba(28,14,5,0.62);
}

html {
  background: var(--wood-black) !important;
}

body {
  font-family: Georgia, "Times New Roman", serif !important;
  background:
    linear-gradient(rgba(20,9,2,0.28), rgba(20,9,2,0.5)),
    url("/assets/wood-planks.png") center / 512px 512px repeat !important;
  color: var(--paper-light) !important;
  letter-spacing: 0 !important;
}

body::before {
  display: none !important;
}

body::after {
  content: "" !important;
  position: fixed !important;
  inset: 0 !important;
  z-index: -1 !important;
  pointer-events: none !important;
  background:
    radial-gradient(circle at 50% 0%, rgba(239,208,138,0.14), transparent 34rem),
    linear-gradient(90deg, rgba(0,0,0,0.28), transparent 18%, transparent 82%, rgba(0,0,0,0.28)) !important;
  background-size: auto !important;
  mask-image: none !important;
}

h1, h2, h3, h4,
.entry-title,
.archive-card__title,
.library-card__title,
.about-h2,
.overview-title,
.transcript-title {
  font-family: Georgia, "Times New Roman", serif !important;
  color: var(--paper-light) !important;
  text-shadow: 0 3px 0 rgba(0,0,0,0.35), 0 0 18px rgba(239,208,138,0.16) !important;
}

a {
  color: var(--brass-light);
}

a:hover {
  color: #fff2bd;
}

.site-nav {
  position: sticky;
  background:
    linear-gradient(180deg, rgba(31,14,4,0.98), rgba(14,6,2,0.98)),
    url("/assets/wood-planks.png") center / 512px 512px repeat !important;
  border-bottom: 3px solid #8a5729 !important;
  box-shadow: 0 5px 0 rgba(0,0,0,0.35), 0 14px 28px rgba(0,0,0,0.42) !important;
}

.site-nav::before {
  display: none !important;
}

.site-nav__inner {
  position: relative !important;
  max-width: 1320px !important;
  min-height: 86px !important;
  grid-template-columns: auto 1fr auto !important;
  gap: 1.5rem !important;
  padding: 0 1.25rem !important;
}

.site-nav__brand {
  position: static !important;
  width: auto !important;
  min-width: 0 !important;
  min-height: auto !important;
  padding: 0.62rem 0.9rem !important;
  background:
    linear-gradient(180deg, rgba(90,49,21,0.9), rgba(34,16,6,0.94)),
    url("/assets/wood-planks.png") center / 512px 512px repeat !important;
  border: 2px solid var(--brass) !important;
  border-radius: 2px !important;
  box-shadow: var(--hard-book-shadow), inset 0 0 0 2px rgba(255,241,196,0.06) !important;
  clip-path: none !important;
}

.nav-logo-icon {
  width: 54px !important;
  height: 54px !important;
  filter: drop-shadow(2px 3px 0 rgba(0,0,0,0.45)) !important;
}

.nav-brand-text {
  gap: 0.12rem !important;
}

.nav-brand-top,
.nav-brand-name,
.concept-brand-name {
  display: block !important;
  font-family: Georgia, "Times New Roman", serif !important;
  color: var(--paper-light) !important;
  text-transform: uppercase !important;
  letter-spacing: 0.075em !important;
  text-shadow: 2px 2px 0 rgba(0,0,0,0.45) !important;
}

.nav-brand-top {
  font-size: 0.78rem !important;
  color: var(--brass-light) !important;
}

.nav-brand-name,
.concept-brand-name {
  font-size: 1.35rem !important;
  line-height: 0.92 !important;
}

.nav-brand-tagline {
  color: var(--brass-light) !important;
  font-family: "Courier New", Courier, monospace !important;
  font-size: 0.58rem !important;
  letter-spacing: 0.18em !important;
}

.site-nav__links,
.nav-actions {
  grid-column: auto !important;
}

.site-nav__links {
  justify-content: center !important;
  gap: 0.45rem !important;
}

.site-nav__link {
  font-family: Georgia, "Times New Roman", serif !important;
  color: #d8bd80 !important;
  background: rgba(20,9,2,0.35);
  border: 1px solid transparent !important;
  border-bottom: 3px solid transparent !important;
  border-radius: 2px;
  padding: 0.5rem 0.82rem !important;
  text-shadow: 1px 2px 0 rgba(0,0,0,0.45) !important;
}

.site-nav__link:hover,
.site-nav__link.active {
  color: var(--paper-light) !important;
  border-color: rgba(196,154,72,0.38) !important;
  border-bottom-color: var(--brass) !important;
  background: rgba(73,38,14,0.62);
}

.nav-search,
.translate-control {
  background: rgba(18,8,3,0.78) !important;
  border: 2px solid rgba(196,154,72,0.72) !important;
  border-radius: 2px !important;
  box-shadow: inset 0 0 0 2px rgba(0,0,0,0.17) !important;
}

.nav-search-input,
.translate-select {
  color: var(--paper-light) !important;
  font-family: Georgia, "Times New Roman", serif !important;
}

.nav-search-input::placeholder {
  color: #a77d42 !important;
}

.nav-search-btn,
.translate-btn {
  color: var(--brass-light) !important;
  border-left: 1px solid rgba(196,154,72,0.42) !important;
}

.btn-support,
.btn--primary,
.btn-hero-primary,
.queue-btn--publish {
  background:
    linear-gradient(180deg, #9b3325, #672116) !important;
  border: 2px solid #d6a15a !important;
  color: #ffe8b1 !important;
  border-radius: 2px !important;
  box-shadow: 4px 4px 0 rgba(0,0,0,0.48), inset 0 1px 0 rgba(255,255,255,0.12) !important;
  font-family: Georgia, "Times New Roman", serif !important;
  text-shadow: 1px 2px 0 rgba(0,0,0,0.42) !important;
}

.btn-support:hover,
.btn--primary:hover,
.btn-hero-primary:hover {
  background: linear-gradient(180deg, #aa402d, #76291a) !important;
  color: #fff0c8 !important;
  transform: translateY(-1px);
}

.btn--ghost,
.btn-hero-ghost {
  background:
    linear-gradient(180deg, rgba(83,43,18,0.8), rgba(26,12,5,0.9)) !important;
  border: 2px solid rgba(196,154,72,0.75) !important;
  color: var(--brass-light) !important;
  border-radius: 2px !important;
  box-shadow: 4px 4px 0 rgba(0,0,0,0.42) !important;
  font-family: Georgia, "Times New Roman", serif !important;
}

.concept-page {
  background: transparent !important;
}

.concept-hero {
  max-width: none !important;
  min-height: 580px !important;
  grid-template-columns: minmax(420px, 42%) 1fr !important;
  background:
    linear-gradient(90deg, rgba(11,5,2,0.95) 0%, rgba(17,8,3,0.86) 36%, rgba(17,8,3,0.22) 68%),
    url("/assets/wood-library-hero.png") center / cover no-repeat,
    var(--wood-black) !important;
  border-bottom: 4px solid #7b461e !important;
  box-shadow: inset 0 -72px 70px rgba(10,4,1,0.68), 0 12px 28px rgba(0,0,0,0.38) !important;
}

.concept-hero__copy {
  padding: 5.6rem 2rem 2rem 6rem !important;
  color: var(--paper-light) !important;
}

.concept-hero__copy h1 {
  color: #f7e8bd !important;
  font-family: Georgia, "Times New Roman", serif !important;
  font-size: clamp(3.2rem, 5.6vw, 5.75rem) !important;
  line-height: 0.9 !important;
  letter-spacing: 0.02em !important;
  text-transform: none !important;
  text-shadow: 4px 4px 0 rgba(0,0,0,0.52), 0 0 24px rgba(239,208,138,0.18) !important;
}

.concept-hero__tag {
  color: var(--brass-light) !important;
  font-family: Georgia, "Times New Roman", serif !important;
  font-size: clamp(1.3rem, 2.2vw, 1.65rem) !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  text-shadow: 2px 3px 0 rgba(0,0,0,0.4) !important;
}

.concept-rule {
  width: 245px !important;
  height: 12px !important;
  margin: 0.65rem 0 0.8rem !important;
  border-top: 2px solid var(--brass) !important;
  box-shadow: none !important;
}

.concept-rule::after {
  content: "◆" !important;
  color: var(--brass-light) !important;
  right: -25px !important;
  top: -13px !important;
  font-size: 1rem !important;
  text-shadow: 2px 2px 0 rgba(0,0,0,0.5) !important;
}

.concept-hero__body {
  color: #e5d1a0 !important;
  font-family: Georgia, "Times New Roman", serif !important;
  font-size: 1.03rem !important;
  line-height: 1.5 !important;
  max-width: 500px !important;
}

.concept-stats {
  border-left: 2px solid rgba(196,154,72,0.25) !important;
}

.concept-stats div {
  border-right: 2px solid rgba(196,154,72,0.22) !important;
}

.concept-stats strong,
.concept-stats small,
.stat-symbol {
  color: var(--brass-light) !important;
  font-family: Georgia, "Times New Roman", serif !important;
}

.concept-archive-shell,
.content-area,
#entryWrap,
body > div[style*="max-width:820px"] {
  max-width: none !important;
  background:
    linear-gradient(rgba(75,40,15,0.05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(75,40,15,0.04) 1px, transparent 1px),
    url("/assets/paper-grain.png") center / 512px 512px repeat,
    var(--paper) !important;
  background-size: 54px 54px, 54px 54px, 512px 512px, auto !important;
  color: var(--ink-brown) !important;
}

.concept-archive-shell {
  grid-template-columns: 325px 1fr !important;
  padding: 1.25rem 3rem 2rem !important;
  border-top: 3px solid #8a5729 !important;
}

.concept-filter-card,
.archive-sidebar,
.auth-gate,
.op-panel,
.archive-card,
.library-card,
.link-rot-panel,
.transcript-body,
.source-ref,
.commitment-block,
.meta-grid,
.context-feature,
.pipeline-stage,
.queue-item {
  background:
    url("/assets/paper-grain.png") center / 512px 512px repeat,
    var(--paper-light) !important;
  border: 2px solid #9c6c33 !important;
  border-radius: 3px !important;
  box-shadow: 4px 4px 0 rgba(76,43,15,0.24), 0 10px 24px rgba(47,24,8,0.18) !important;
  color: var(--ink-brown) !important;
  clip-path: none !important;
}

.concept-filter-title,
.sidebar-header,
.section-title,
.concept-records__header h2,
.operator-title,
.auth-gate__title,
.about-h2,
.form-label,
.sidebar-section-title,
.ingest-result__label,
.footer-pillar-title {
  color: var(--ink-brown) !important;
  font-family: Georgia, "Times New Roman", serif !important;
  text-shadow: none !important;
}

.public-good-stamp,
.section-badge {
  background: rgba(125,39,27,0.08) !important;
  border: 2px solid rgba(125,39,27,0.65) !important;
  color: #7d271b !important;
  box-shadow: none !important;
}

.concept-search input,
.form-input,
.form-textarea,
.form-select,
.sort-select,
.search-input,
.concept-sort select {
  background:
    url("/assets/paper-grain.png") center / 512px 512px repeat,
    #f4e5bd !important;
  border: 2px solid #a4763c !important;
  color: var(--ink-brown) !important;
  font-family: Georgia, "Times New Roman", serif !important;
  box-shadow: inset 2px 2px 0 rgba(72,41,14,0.08) !important;
}

.concept-search input::placeholder,
.form-input::placeholder,
.form-textarea::placeholder,
.search-input::placeholder {
  color: #90683a !important;
  font-style: italic !important;
}

.concept-filter-heading,
.concept-filter-group label,
.filter-item label,
.collection-item,
.sidebar-note,
.sort-label,
.concept-sort,
.archive-count,
.about-p,
.pipeline-stage-desc,
.context-feature-desc,
.entry-summary,
.archive-card__summary,
.archive-card__author,
.record-byline,
.record-kinds,
.concept-record-main p,
.meta-key,
.meta-val,
.source-ref__date,
.source-ref__snapshot,
.queue-item__meta,
.form-hint {
  color: var(--ink-soft) !important;
  font-family: Georgia, "Times New Roman", serif !important;
}

input[type="checkbox"] {
  accent-color: #7d271b !important;
}

.concept-record,
.archive-card {
  background:
    url("/assets/paper-grain.png") center / 512px 512px repeat,
    #f0dfb4 !important;
  border: 2px solid #8d642f !important;
  border-radius: 3px !important;
  box-shadow: 4px 4px 0 rgba(76,43,15,0.26), 0 8px 18px rgba(43,23,8,0.17) !important;
}

.concept-record:hover,
.archive-card:hover {
  background:
    url("/assets/paper-grain.png") center / 512px 512px repeat,
    #f9edcb !important;
  box-shadow: 5px 6px 0 rgba(76,43,15,0.3), 0 14px 24px rgba(43,23,8,0.22) !important;
  transform: translateY(-2px) !important;
}

.concept-book,
.archive-card__cover {
  background:
    linear-gradient(90deg, rgba(0,0,0,0.26) 0 14%, transparent 14%),
    linear-gradient(180deg, #7d271b, #42140f) !important;
  border: 3px solid #2a1508 !important;
  color: #f2d48e !important;
  box-shadow: 4px 4px 0 rgba(0,0,0,0.35), inset 0 0 0 2px rgba(239,208,138,0.08) !important;
}

.concept-book.is-paper {
  background:
    linear-gradient(90deg, rgba(0,0,0,0.22) 0 14%, transparent 14%),
    linear-gradient(180deg, #d9bd7d, #b88f4f) !important;
  color: #241407 !important;
  border-color: #7a5123 !important;
}

/* Proper RGB order down the shelf: red (default), then green, then blue. */
.concept-book.rgb-green,
.archive-card__cover.rgb-green {
  background:
    linear-gradient(90deg, rgba(0,0,0,0.25) 0 14%, transparent 14%),
    linear-gradient(180deg, var(--green-leather), #132c1e) !important;
}

.concept-book.rgb-blue,
.archive-card__cover.rgb-blue {
  background:
    linear-gradient(90deg, rgba(0,0,0,0.25) 0 14%, transparent 14%),
    linear-gradient(180deg, var(--blue-leather), #101f2f) !important;
}

.concept-record-main,
.concept-record-meta,
.archive-card__body,
.archive-card__meta {
  border-color: rgba(115,75,31,0.34) !important;
}

.concept-record-main h3,
.archive-card__title,
.library-card__title {
  color: var(--ink-brown) !important;
  text-shadow: none !important;
}

.book-chip,
.badge-preserved,
.context-label,
.operator-badge {
  background: #d8c28a !important;
  border: 1px solid #8d642f !important;
  color: #2b1708 !important;
  border-radius: 2px !important;
  font-family: Georgia, "Times New Roman", serif !important;
}

.verified-stamp,
.concept-record-actions .verified-stamp {
  border-color: #5a3d1a !important;
  color: #5a3d1a !important;
  background: rgba(244,229,189,0.46) !important;
  box-shadow: none !important;
}

.concept-record-actions .view-record-btn,
.view-record-btn {
  background: linear-gradient(180deg, #2c1709, #120803) !important;
  border: 2px solid var(--brass) !important;
  color: var(--brass-light) !important;
  box-shadow: 3px 3px 0 rgba(0,0,0,0.35) !important;
}

.operator-header,
.hero {
  background:
    linear-gradient(90deg, rgba(12,6,2,0.9), rgba(12,6,2,0.62)),
    url("/assets/wood-library-hero.png") center / cover no-repeat,
    var(--wood-black) !important;
  border-bottom: 4px solid #7b461e !important;
  color: var(--paper-light) !important;
}

.hero__kicker,
.entry-collection,
.archive-card__collection,
.library-card__meta,
.commitment-kicker,
.pipeline-stage-num,
.context-feature-num {
  color: #8b281d !important;
  font-family: Georgia, "Times New Roman", serif !important;
  text-shadow: none !important;
}

.hero__sub,
.operator-header span,
.auth-gate__sub {
  color: #ead7a9 !important;
}

.op-tab,
.mode-btn,
.queue-btn,
.view-toggle-btn {
  background: #ead6a4 !important;
  border: 2px solid #9c6c33 !important;
  color: #513211 !important;
  border-radius: 2px !important;
  font-family: Georgia, "Times New Roman", serif !important;
  box-shadow: 2px 2px 0 rgba(75,42,13,0.18) !important;
}

.op-tab.active,
.mode-btn.active,
.view-toggle-btn.active {
  background: linear-gradient(180deg, #7d271b, #55180f) !important;
  color: #ffe6a7 !important;
  box-shadow: 3px 3px 0 rgba(0,0,0,0.34) !important;
}

.notice {
  background:
    url("/assets/paper-grain.png") center / 512px 512px repeat,
    #f3e2b6 !important;
  border: 2px solid #a4763c !important;
  color: var(--ink-brown) !important;
  border-radius: 2px !important;
}

.site-footer,
.concept-footer {
  max-width: none !important;
  background:
    linear-gradient(rgba(18,8,3,0.9), rgba(10,4,1,0.96)),
    url("/assets/wood-planks.png") center / 512px 512px repeat !important;
  border-top: 4px solid #7b461e !important;
  color: #d9bf83 !important;
  box-shadow: inset 0 2px 0 rgba(239,208,138,0.1) !important;
}

.footer-symbol,
.footer-pillar-icon {
  color: var(--brass-light) !important;
  filter: drop-shadow(2px 2px 0 rgba(0,0,0,0.4)) !important;
}

.concept-footer strong,
.concept-footer small,
.footer-pillar-desc,
.footer-quote,
.footer-id {
  color: #d9bf83 !important;
  font-family: Georgia, "Times New Roman", serif !important;
}

.footer-slip {
  background:
    url("/assets/paper-grain.png") center / 512px 512px repeat,
    #ead7a2 !important;
  border-color: #9c6c33 !important;
  color: var(--ink-brown) !important;
  box-shadow: 4px 4px 0 rgba(0,0,0,0.28) !important;
}

@media (max-width: 900px) {
  .site-nav__inner {
    grid-template-columns: 1fr !important;
    align-items: start !important;
    padding: 0.75rem 1rem !important;
    gap: 0.75rem !important;
  }
  .site-nav__brand {
    justify-self: start !important;
  }
  .site-nav__links {
    justify-content: flex-start !important;
    flex-wrap: wrap !important;
    gap: 0.45rem !important;
  }
  .nav-actions {
    width: 100% !important;
    justify-content: flex-start !important;
    flex-wrap: wrap !important;
  }
  .nav-search {
    flex: 1 1 220px !important;
  }
  .concept-hero {
    grid-template-columns: 1fr !important;
    min-height: 0 !important;
  }
  .concept-hero__copy {
    padding: 2.4rem 1.4rem 2rem !important;
    background: rgba(12,6,2,0.68) !important;
  }
  .concept-archive-shell {
    grid-template-columns: 1fr !important;
    padding: 1rem !important;
  }
  .section-header,
  .concept-records__header {
    align-items: flex-start !important;
    flex-direction: column !important;
  }
}

/* Wood texture refinement and safer book-cover typography */
.site-nav,
.site-nav__brand,
.site-footer,
.concept-footer {
  background-image:
    linear-gradient(180deg, rgba(255,224,156,0.06), rgba(0,0,0,0.34)),
    repeating-linear-gradient(92deg, rgba(255,255,255,0.035) 0 1px, transparent 1px 21px),
    url("/assets/wood-planks.png") !important;
  background-size: auto, 128px 128px, 512px 512px !important;
}

.concept-hero,
.operator-header,
.hero {
  background:
    linear-gradient(90deg, rgba(11,5,2,0.93) 0%, rgba(17,8,3,0.78) 38%, rgba(17,8,3,0.16) 68%),
    linear-gradient(180deg, rgba(255,224,156,0.08), rgba(0,0,0,0.34)),
    repeating-linear-gradient(90deg, rgba(255,255,255,0.025) 0 1px, transparent 1px 34px),
    url("/assets/wood-library-hero.png") center / cover no-repeat,
    url("/assets/wood-planks.png") center / 512px 512px repeat,
    var(--wood-black) !important;
}

.concept-hero::before,
.hero::before,
.operator-header::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background:
    repeating-linear-gradient(0deg, rgba(255,235,177,0.028) 0 2px, transparent 2px 9px),
    radial-gradient(circle at 78% 28%, rgba(239,208,138,0.11), transparent 18rem);
  mix-blend-mode: screen;
}

.concept-hero,
.hero,
.operator-header {
  position: relative;
  overflow: hidden;
}

.concept-hero__copy,
.hero > *,
.operator-header > * {
  position: relative;
  z-index: 1;
}

.nav-logo-icon {
  width: 60px !important;
  height: 60px !important;
}

.concept-book,
.archive-card__cover {
  min-width: 0;
  overflow: hidden !important;
}

.concept-book strong,
.cover-title {
  display: -webkit-box !important;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 5;
  overflow: hidden;
  overflow-wrap: normal;
  word-break: normal;
  hyphens: none;
  text-wrap: balance;
  font-size: clamp(0.48rem, 0.72vw, 0.66rem) !important;
  line-height: 1.06 !important;
  max-height: 4.4rem;
  padding: 0 0.12rem;
}

.concept-book span {
  display: -webkit-box !important;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  overflow: hidden;
  overflow-wrap: anywhere;
  line-height: 1.08 !important;
}

.archive-card__cover {
  justify-content: center !important;
  gap: 0.35rem;
}

/* The dark band down the left of a cover is the spine. Centre the title on the
   face by padding past it, otherwise every title reads shifted left. */
.concept-book,
.archive-card__cover {
  padding-left: calc(14% + 0.28rem) !important;
  padding-right: 0.34rem !important;
  text-align: center !important;
}
.concept-book strong,
.concept-book span,
.cover-title,
.cover-type {
  width: 100%;
  text-align: center !important;
  /* This used to say "never split a single word across lines on a spine", with
     overflow-wrap:normal / word-break:keep-all / hyphens:none, all !important.
     The intent was right and the result was the opposite: a word WIDER than the
     spine cannot be placed at all, so it overflowed and the cover's
     overflow:hidden sliced it mid-word. 118 titles were cut across 12 widths —
     19 of 36 at 1440px, 17 at 430px — including "Unwinnabl[e]", "Intellectu[als]"
     and "Nicomachean Ethic[s]".

     break-word keeps the original intent: it breaks ONLY a word that cannot fit
     on a line by itself, so ordinary titles still wrap between words. hyphens:auto
     puts a real hyphen at the break, which needs the lang attribute the pages
     already carry. Measured back to 0 clipped at every width from 320 to 1440.

     These stay !important because a later non-important overflow-wrap:break-word
     rule already existed further down the file and lost to this block — that
     contradiction is what kept the bug alive. */
  overflow-wrap: break-word !important;
  word-break: normal !important;
  hyphens: auto !important;
  /* WebKit reads ONLY the prefixed property. Without this line getComputedStyle
     reported -webkit-hyphens as undefined on every cover title, so hyphens:auto
     above was inert and an unfittable word fell through to break-word's
     emergency break, which carries no hyphen: "Huckleberr/y", "Disobedien/ce",
     "Experimen/ts". Measured on 2026-09-22. The hyphen is the safety net;
     FKL.fitCoverTitles shrinks the type so most titles never reach it. */
  -webkit-hyphens: auto !important;
}

.concept-book.rgb-green, .concept-book.rgb-blue,
.archive-card__cover.rgb-green, .archive-card__cover.rgb-blue {
  color: #f2d48e !important;
}

.cover-line {
  flex: 0 0 auto;
}

.cover-type {
  max-width: calc(100% - 12px);
  overflow: hidden;
  text-overflow: ellipsis;
}

.translate-control {
  min-height: 40px;
  flex: 0 0 auto;
}

.translate-select {
  min-width: 152px !important;
  max-width: 190px !important;
  padding: 0.5rem 0.45rem 0.5rem 0.7rem !important;
  text-transform: none !important;
  letter-spacing: 0.02em !important;
}

.translate-btn {
  min-width: 92px;
  padding: 0 0.7rem !important;
  font-family: Georgia, "Times New Roman", serif !important;
  text-transform: uppercase !important;
  letter-spacing: 0.06em !important;
}

@media (max-width: 900px) {
  .translate-control {
    flex: 1 1 250px;
  }
  .translate-select {
    flex: 1 1 auto;
    min-width: 0 !important;
    max-width: none !important;
  }
}

/* Full-screen cleanup: stable header rows and calmer wood wall */
body {
  background:
    linear-gradient(180deg, rgba(14,6,2,0.08), rgba(9,4,1,0.52)),
    url("/assets/wood-wall-wide.png") center top / cover fixed !important;
}

.site-nav {
  overflow: visible !important;
  background:
    linear-gradient(180deg, rgba(42,20,7,0.9), rgba(15,6,2,0.97)),
    url("/assets/wood-wall-wide.png") center 18% / cover no-repeat !important;
}

.site-nav__inner {
  display: grid !important;
  grid-template-columns: minmax(270px, auto) minmax(0, 1fr) !important;
  grid-template-areas:
    "brand links"
    "actions actions" !important;
  align-items: center !important;
  row-gap: 0.72rem !important;
  column-gap: 1.2rem !important;
  min-height: 0 !important;
  padding: 0.72rem 1.25rem 0.95rem !important;
}

.site-nav__brand {
  grid-area: brand !important;
  justify-self: start !important;
  max-width: min(100%, 390px) !important;
}

.site-nav__links {
  grid-area: links !important;
  justify-self: end !important;
  justify-content: flex-end !important;
  flex-wrap: wrap !important;
  min-width: 0 !important;
  max-width: 100% !important;
  gap: 0.4rem !important;
}

.site-nav__link {
  white-space: nowrap !important;
}

.nav-actions {
  grid-area: actions !important;
  width: 100% !important;
  display: grid !important;
  grid-template-columns: minmax(220px, 1fr) minmax(245px, auto) auto !important;
  align-items: center !important;
  gap: 0.7rem !important;
}

.nav-search,
.translate-control {
  min-width: 0 !important;
  width: 100% !important;
}

.nav-search-input {
  width: 100% !important;
  min-width: 0 !important;
}

.btn-support {
  justify-self: end !important;
  white-space: nowrap !important;
}

.site-footer,
.concept-footer {
  background:
    linear-gradient(180deg, rgba(27,12,4,0.92), rgba(9,4,1,0.98)),
    url("/assets/wood-wall-wide.png") center bottom / cover no-repeat !important;
}

@media (max-width: 980px) {
  .site-nav__inner {
    grid-template-columns: 1fr !important;
    grid-template-areas:
      "brand"
      "links"
      "actions" !important;
    align-items: start !important;
  }
  .site-nav__links {
    justify-self: start !important;
    justify-content: flex-start !important;
  }
  .nav-actions {
    grid-template-columns: 1fr !important;
  }
  .nav-search {
    display: flex !important;
  }
  .btn-support {
    justify-self: start !important;
  }
}

/* Keep the bookshelf hero clean: no plank/grid texture over the books. */
.concept-hero {
  background:
    linear-gradient(90deg, rgba(10,4,1,0.93) 0%, rgba(10,4,1,0.74) 34%, rgba(10,4,1,0.18) 66%, rgba(10,4,1,0.08) 100%),
    linear-gradient(180deg, rgba(0,0,0,0.08), rgba(0,0,0,0.42)),
    url("/assets/wood-library-hero.png") center / cover no-repeat,
    var(--wood-black) !important;
  background-size: auto, auto, max(calc(100% + 120px), 1440px) auto !important;
  background-position: center, center, center center !important;
}

.concept-hero::before {
  display: none !important;
}

.concept-hero::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background:
    linear-gradient(90deg, transparent 0%, transparent 82%, rgba(10,4,1,0.2) 91%, rgba(10,4,1,0.66) 100%);
}

/* Smooth-line cleanup across every page.
   This final layer removes the old scanline/grid overlays and uses softened wood assets. */
body {
  background:
    linear-gradient(180deg, rgba(14,6,2,0.18), rgba(8,3,1,0.72)),
    url("/assets/wood-planks-soft.png") center / 512px 512px repeat !important;
}

.site-nav,
.site-nav__brand,
.site-footer,
.concept-footer {
  background:
    linear-gradient(180deg, rgba(42,20,7,0.88), rgba(12,5,2,0.97)),
    url("/assets/wood-planks-soft.png") center / 512px 512px repeat !important;
  background-size: auto, 512px 512px !important;
}

.site-nav::before,
.site-nav::after,
.concept-hero::before,
.concept-hero::after,
.hero::before,
.hero::after,
.operator-header::before,
.operator-header::after {
  content: none !important;
  display: none !important;
  background: none !important;
}

.concept-hero,
.hero,
.operator-header {
  background:
    linear-gradient(90deg, rgba(9,4,1,0.95) 0%, rgba(12,5,2,0.78) 35%, rgba(12,5,2,0.25) 68%, rgba(9,4,1,0.62) 100%),
    linear-gradient(180deg, rgba(8,3,1,0.5) 0%, rgba(8,3,1,0.12) 38%, rgba(8,3,1,0.64) 100%),
    url("/assets/wood-library-hero-clean.png") center / cover no-repeat,
    var(--wood-black) !important;
  overflow: hidden !important;
}

.concept-hero {
  background-size: auto, auto, max(calc(100% + 120px), 1440px) auto, auto !important;
  background-position: center, center, center center, center !important;
}

.hero,
.operator-header {
  background-position: center, center, center 42%, center !important;
  background-size: auto, auto, cover, auto !important;
}

.concept-archive-shell,
.content-area,
#entryWrap,
body > div[style*="max-width:820px"] {
  background:
    url("/assets/paper-grain.png") center / 512px 512px repeat,
    var(--paper) !important;
  background-size: 512px 512px, auto !important;
}

/* Alpha and donation-era polish */
.site-nav__brand {
  position: relative !important;
  overflow: visible !important;
}

.site-nav__brand::after {
  content: "Alpha";
  position: absolute;
  right: -1.2rem;
  top: 0.78rem;
  z-index: 4;
  transform: rotate(38deg);
  transform-origin: center;
  min-width: 5.8rem;
  padding: 0.22rem 0.7rem 0.28rem;
  text-align: center;
  background: linear-gradient(180deg, #a53727, #68180f);
  border: 2px solid #e2ad63;
  color: #ffe8b6;
  box-shadow: 3px 3px 0 rgba(0,0,0,0.42), inset 0 1px 0 rgba(255,255,255,0.15);
  font-family: Georgia, "Times New Roman", serif;
  font-size: 0.86rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  line-height: 1;
  text-transform: uppercase;
  text-shadow: 1px 2px 0 rgba(0,0,0,0.45);
  pointer-events: none;
}

.classification-guide {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0.85rem;
  margin: 1.4rem 0;
}

.classification-guide__item,
.donate-panel {
  background:
    url("/assets/paper-grain.png") center / 512px 512px repeat,
    #f3e2b6;
  border: 2px solid #9c6c33;
  border-radius: 3px;
  box-shadow: 4px 4px 0 rgba(76,43,15,0.20);
  padding: 1rem;
}

.classification-guide__label {
  margin-bottom: 0.4rem;
  color: #6d2418;
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.classification-guide__item p,
.donate-panel p {
  color: var(--ink-soft);
  font-size: 0.92rem;
  line-height: 1.58;
  margin: 0;
}

.classification-guide__item ul {
  margin: 0;
  padding-left: 1.05rem;
  color: var(--ink-soft);
  font-size: 0.92rem;
  line-height: 1.5;
}

.classification-guide__item li {
  margin: 0.32rem 0;
}

.commitment-quote {
  color: #6d2418 !important;
  font-weight: 700;
  text-shadow: none !important;
}

.commitment-attribution {
  margin: -0.35rem 0 1.15rem;
  color: #4b2b11;
  font-size: 0.8rem;
  font-style: italic;
}

.donate-panel {
  margin: 2rem 0 3rem;
  padding: 1.35rem 1.4rem;
}

.donate-status {
  display: inline-block;
  margin-bottom: 0.75rem;
  border: 2px solid rgba(125,39,27,0.65);
  color: #7d271b;
  padding: 0.22rem 0.55rem;
  font-family: "Courier New", Courier, monospace;
  font-size: 0.76rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  transform: rotate(-1deg);
}

@media (max-width: 720px) {
  .site-nav__brand::after {
    right: -0.6rem;
    top: 0.35rem;
    min-width: 4.8rem;
    font-size: 0.72rem;
  }

  .classification-guide {
    grid-template-columns: 1fr;
  }
}

/* Mobile fit fixes: preserve the look while preventing horizontal clipping. */
html,
body {
  max-width: 100%;
  overflow-x: hidden;
}

@media (max-width: 620px) {
  .concept-hero {
    width: 100% !important;
    max-width: 100% !important;
    overflow: hidden !important;
  }

  .concept-hero__copy {
    width: 100% !important;
    max-width: 100% !important;
    box-sizing: border-box !important;
    padding-left: 1.25rem !important;
    padding-right: 1.25rem !important;
  }

  .concept-hero__copy h1 {
    max-width: 100% !important;
    font-size: clamp(2.35rem, 12vw, 3.05rem) !important;
    overflow-wrap: normal !important;
    word-break: normal !important;
  }

  .concept-hero__tag,
  .concept-hero__body {
    max-width: 100% !important;
  }

  .concept-actions {
    width: 100% !important;
    flex-direction: column !important;
    align-items: stretch !important;
    gap: 0.8rem !important;
  }

  .btn-hero-primary,
  .btn-hero-ghost {
    width: 100% !important;
    min-width: 0 !important;
    box-sizing: border-box !important;
  }

  .concept-stats {
    width: 100% !important;
    max-width: 100% !important;
  }

  .archive-card {
    grid-template-columns: 112px minmax(0, 1fr) !important;
    align-items: start !important;
    gap: 0.9rem !important;
    min-height: 0 !important;
    padding: 0.9rem !important;
  }

  .archive-card__cover {
    display: flex !important;
    width: 92px !important;
    min-width: 92px !important;
    max-width: 92px !important;
    height: 138px !important;
    min-height: 0 !important;
    aspect-ratio: 2 / 3 !important;
    align-self: start !important;
    justify-self: center !important;
    box-sizing: border-box !important;
    padding: 0.72rem 0.46rem 0.56rem !important;
  }

  .archive-card__body {
    min-width: 0 !important;
  }

  .archive-card__title {
    font-size: clamp(1.55rem, 8vw, 2.05rem) !important;
    line-height: 1.08 !important;
    overflow-wrap: anywhere !important;
  }

  .cover-title {
    font-size: clamp(0.56rem, 2.65vw, 0.68rem) !important;
    line-height: 1.08 !important;
    -webkit-line-clamp: 5 !important;
    max-height: 4.1rem !important;
  }

  .cover-type {
    display: none !important;
  }

  .concept-record {
    grid-template-columns: 112px minmax(0, 1fr) !important;
    align-items: start !important;
    min-height: 0 !important;
  }

  .concept-book {
    width: 92px !important;
    min-width: 92px !important;
    max-width: 92px !important;
    height: 138px !important;
    min-height: 0 !important;
    aspect-ratio: 2 / 3 !important;
    box-sizing: border-box !important;
    margin: 0.9rem auto !important;
    padding: 0.72rem 0.46rem 0.56rem !important;
  }

  .concept-book strong {
    font-size: clamp(0.56rem, 2.65vw, 0.68rem) !important;
    line-height: 1.08 !important;
    -webkit-line-clamp: 5 !important;
    max-height: 4.1rem !important;
  }

  .concept-book span {
    font-size: 0.58rem !important;
    -webkit-line-clamp: 3 !important;
  }

  .concept-record-main {
    min-width: 0 !important;
    padding-right: 0.8rem !important;
  }
}

@media (max-width: 380px) {
  .archive-card {
    grid-template-columns: 96px minmax(0, 1fr) !important;
    gap: 0.75rem !important;
    padding: 0.8rem !important;
  }

  .archive-card__cover {
    width: 80px !important;
    min-width: 80px !important;
    max-width: 80px !important;
    height: 120px !important;
  }

  .concept-record {
    grid-template-columns: 96px minmax(0, 1fr) !important;
  }

  .concept-book {
    width: 80px !important;
    min-width: 80px !important;
    max-width: 80px !important;
    height: 120px !important;
  }
}

/* ══════════════════════════════════
   FKL BRAND GUIDE IMPLEMENTATION
   Final cascade: wood, parchment, brass, leather red, and mobile polish.
══════════════════════════════════ */
:root {
  --fkl-wood-black: #090401;
  --fkl-wood-deep: #130903;
  --fkl-wood-dark: #231106;
  --fkl-wood-mid: #3b1f0c;
  --fkl-wood-warm: #5a3115;
  --fkl-wood-edge: #875227;
  --fkl-paper: #efe0b3;
  --fkl-paper-light: #fbf1d4;
  --fkl-paper-card: #f3e2b6;
  --fkl-paper-dark: #b88f4f;
  --fkl-ink: #241407;
  --fkl-ink-soft: #65431d;
  --fkl-ink-muted: #7b5628;
  --fkl-brass: #c49a48;
  --fkl-brass-light: #efd08a;
  --fkl-red: #7d271b;
  --fkl-red-dark: #55180f;
  --fkl-blue: #213d57;
  --fkl-green: #244f36;
  --fkl-card-shadow: 4px 4px 0 rgba(76,43,15,0.22), 0 12px 24px rgba(47,24,8,0.16);
  --fkl-hard-shadow: 4px 4px 0 rgba(0,0,0,0.45);
}

body {
  background:
    linear-gradient(180deg, rgba(19,9,3,0.28), rgba(9,4,1,0.72)),
    url("/assets/wood-planks-soft.png") center / 512px 512px repeat !important;
  color: var(--fkl-ink) !important;
}

h1, h2, h3, h4,
.entry-title,
.archive-card__title,
.library-card__title,
.about-h2,
.overview-title,
.transcript-title,
.section-title,
.concept-records__header h2,
.operator-title,
.auth-gate__title {
  color: var(--fkl-ink) !important;
  font-family: Georgia, "Times New Roman", serif !important;
  letter-spacing: 0 !important;
  text-shadow: none !important;
}

.hero h1,
.hero__title,
.concept-hero__copy h1 {
  color: #f7e8bd !important;
  text-shadow: 4px 4px 0 rgba(0,0,0,0.52), 0 0 24px rgba(239,208,138,0.16) !important;
}

p,
li,
.about-p,
.pipeline-stage-desc,
.context-feature-desc,
.entry-summary,
.archive-card__summary,
.archive-card__author,
.record-byline,
.record-kinds,
.concept-record-main p,
.filter-item label,
.collection-item,
.sidebar-note,
.sort-label,
.concept-sort,
.archive-count,
.meta-key,
.meta-val,
.source-ref__date,
.source-ref__snapshot,
.queue-item__meta,
.form-hint {
  color: var(--fkl-ink-soft) !important;
}

a {
  color: #7d271b;
  text-underline-offset: 0.15em;
}

a:hover {
  color: #9b3325;
}

.site-nav {
  background:
    linear-gradient(180deg, rgba(45,21,7,0.91), rgba(12,5,2,0.98)),
    url("/assets/wood-planks-soft.png") center / 512px 512px repeat !important;
  border-bottom: 3px solid var(--fkl-wood-edge) !important;
  box-shadow: 0 5px 0 rgba(0,0,0,0.35), 0 14px 28px rgba(0,0,0,0.42) !important;
}

.site-nav__inner {
  max-width: 1360px !important;
  padding: 0.9rem 1.35rem 1rem !important;
  gap: 0.85rem 1.25rem !important;
  grid-template-columns: 430px 1fr !important;
}

.site-nav__brand {
  display: block !important;
  width: min(430px, 100%) !important;
  max-width: min(430px, calc(100vw - 2.7rem)) !important;
  aspect-ratio: 2322 / 777 !important;
  padding: 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
  overflow: visible !important;
}

.site-nav__brand::before {
  content: "" !important;
  display: block !important;
  width: 100% !important;
  height: 100% !important;
  /* Codex's corrected logo, 2026-08-30 — the one where the red and green books
     are the same height. The Canva original it replaces is kept beside it as
     fkl-logo-alpha-canva.png so this is one line to roll back. The favicon is
     cut from the same artwork, so the tab icon and the header now agree. */
  background: url("/assets/fkl-logo-corrected.png?v=4") center / contain no-repeat !important;
}

.site-nav__brand::after {
  content: none !important;
  display: none !important;
}

.site-nav__brand > * {
  display: none !important;
}

.site-nav__links {
  align-self: center !important;
}

.site-nav__link {
  color: #d8bd80 !important;
  background: rgba(19,8,3,0.34) !important;
  border: 1px solid transparent !important;
  border-bottom: 3px solid transparent !important;
  border-radius: 2px !important;
  font-size: 0.98rem !important;
  font-weight: 700 !important;
  letter-spacing: 0.08em !important;
  padding: 0.62rem 0.9rem !important;
  text-shadow: 1px 2px 0 rgba(0,0,0,0.45) !important;
}

.site-nav__link:hover,
.site-nav__link.active {
  color: var(--fkl-paper-light) !important;
  background: rgba(73,38,14,0.64) !important;
  border-color: rgba(196,154,72,0.38) !important;
  border-bottom-color: var(--fkl-brass) !important;
}

.nav-search,
.translate-control {
  background: rgba(18,8,3,0.8) !important;
  border: 2px solid rgba(196,154,72,0.74) !important;
  border-radius: 2px !important;
  min-height: 44px !important;
}

.nav-search-input,
.translate-select {
  color: var(--fkl-paper-light) !important;
  font-family: Georgia, "Times New Roman", serif !important;
  font-size: 1rem !important;
}

.nav-search-input::placeholder {
  color: #b08a4d !important;
}

.nav-search-btn,
.translate-btn {
  color: var(--fkl-brass-light) !important;
  font-family: Georgia, "Times New Roman", serif !important;
}

.btn-support,
.btn--primary,
.btn-hero-primary,
.queue-btn--publish {
  background: linear-gradient(180deg, #9b3325, var(--fkl-red-dark)) !important;
  border: 2px solid #d6a15a !important;
  color: #ffe8b1 !important;
  box-shadow: var(--fkl-hard-shadow), inset 0 1px 0 rgba(255,255,255,0.12) !important;
  font-family: Georgia, "Times New Roman", serif !important;
  letter-spacing: 0.08em !important;
  text-shadow: 1px 2px 0 rgba(0,0,0,0.42) !important;
}

.btn-support:hover,
.btn--primary:hover,
.btn-hero-primary:hover {
  color: #fff2c8 !important;
}

.content-area,
.concept-archive-shell,
#entryWrap,
.support-page,
.operator-locked-page,
body > div[style*="max-width:820px"] {
  background:
    url("/assets/paper-grain.png") center / 512px 512px repeat,
    var(--fkl-paper) !important;
  color: var(--fkl-ink) !important;
}

.concept-hero,
.hero,
.operator-header,
.operator-locked-hero,
.support-hero {
  background:
    linear-gradient(90deg, rgba(9,4,1,0.95) 0%, rgba(12,5,2,0.78) 35%, rgba(12,5,2,0.26) 68%, rgba(9,4,1,0.62) 100%),
    linear-gradient(180deg, rgba(8,3,1,0.52) 0%, rgba(8,3,1,0.12) 38%, rgba(8,3,1,0.66) 100%),
    url("/assets/wood-library-hero-clean.png") center / cover no-repeat,
    var(--fkl-wood-black) !important;
  border-bottom: 4px solid var(--fkl-wood-edge) !important;
  overflow: hidden !important;
}

.concept-hero {
  min-height: 590px !important;
  background-size: auto, auto, max(calc(100% + 120px), 1440px) auto, auto !important;
  background-position: center, center, center center, center !important;
}

.concept-hero__copy {
  max-width: 720px !important;
}

.concept-hero__body,
.hero__sub,
.operator-header span,
.auth-gate__sub {
  color: #ead7a9 !important;
}

.hero__kicker,
.entry-collection,
.archive-card__collection,
.library-card__meta,
.commitment-kicker,
.pipeline-stage-num,
.context-feature-num,
.support-story-card > span,
.support-method-card > span,
.support-promise > span,
.operator-preview-grid article > span {
  color: var(--fkl-red) !important;
  font-family: "Courier New", Courier, monospace !important;
  font-weight: 700 !important;
  letter-spacing: 0.12em !important;
  text-transform: uppercase !important;
  text-shadow: none !important;
}

.concept-filter-card,
.archive-sidebar,
.auth-gate,
.op-panel,
.archive-card,
.library-card,
.link-rot-panel,
.transcript-body,
.source-ref,
.commitment-block,
.meta-grid,
.context-feature,
.pipeline-stage,
.queue-item,
.classification-guide__item,
.donate-panel,
.support-give-panel,
.support-method-card,
.support-story-card,
.support-promise,
.operator-vault-card,
.operator-preview-grid article {
  background:
    url("/assets/paper-grain.png") center / 512px 512px repeat,
    var(--fkl-paper-card) !important;
  border: 2px solid #9c6c33 !important;
  border-radius: 3px !important;
  box-shadow: var(--fkl-card-shadow) !important;
  color: var(--fkl-ink) !important;
}

.concept-record,
.archive-card {
  background:
    url("/assets/paper-grain.png") center / 512px 512px repeat,
    #f0dfb4 !important;
}

.concept-record:hover,
.archive-card:hover {
  background:
    url("/assets/paper-grain.png") center / 512px 512px repeat,
    #f9edcb !important;
}

.concept-book,
.archive-card__cover {
  aspect-ratio: 2 / 3 !important;
  background:
    linear-gradient(90deg, rgba(0,0,0,0.26) 0 14%, transparent 14%),
    linear-gradient(180deg, var(--fkl-red), #42140f) !important;
  border: 3px solid #2a1508 !important;
  color: #f2d48e !important;
}

/* RED, GREEN OR BLUE, PER RECORD. This used to be :nth-child(3n+2) and
   :nth-child(3n) — the colour of a card was decided by where it fell on the
   shelf, so the same book was green on the Archive and red on the Library, and
   a book opened from a record page could not possibly match its own card. The
   class now comes from FKL.bookColourFor(entry), which hashes the record id, so
   the shelf still reads red/green/blue down the page and the colour follows the
   record everywhere it appears. Red stays the default. */
.concept-book.rgb-green,
.archive-card__cover.rgb-green {
  background:
    linear-gradient(90deg, rgba(0,0,0,0.25) 0 14%, transparent 14%),
    linear-gradient(180deg, var(--fkl-green), #132c1e) !important;
}

.concept-book.rgb-blue,
.archive-card__cover.rgb-blue {
  background:
    linear-gradient(90deg, rgba(0,0,0,0.25) 0 14%, transparent 14%),
    linear-gradient(180deg, var(--fkl-blue), #101f2f) !important;
}

.cover-title,
.concept-book strong,
.concept-book span {
  color: #f2d48e !important;
}

.concept-record-main h3,
.archive-card__title,
.library-card__title,
.context-feature-title,
.pipeline-stage-title,
.support-method-card h3,
.support-story-card h2,
.support-promise h2,
.operator-vault-card h2,
.operator-preview-grid h3 {
  color: var(--fkl-ink) !important;
}

.public-good-stamp,
.section-badge,
.donate-status {
  background: rgba(125,39,27,0.08) !important;
  border: 2px solid rgba(125,39,27,0.68) !important;
  color: var(--fkl-red) !important;
  box-shadow: none !important;
}

.site-footer,
.concept-footer {
  background:
    linear-gradient(180deg, rgba(24,10,3,0.92), rgba(9,4,1,0.98)),
    url("/assets/wood-planks-soft.png") center / 512px 512px repeat !important;
  border-top: 4px solid var(--fkl-wood-edge) !important;
}

.footer-symbol,
.footer-pillar-icon {
  color: var(--fkl-brass-light) !important;
}

.concept-footer strong,
.concept-footer small,
.footer-pillar-title,
.footer-pillar-desc,
.footer-quote,
.footer-id {
  color: #d9bf83 !important;
  font-family: Georgia, "Times New Roman", serif !important;
}

.support-hero__inner,
.operator-locked-hero__inner {
  max-width: 1040px;
  margin: 0 auto;
  padding: 4.5rem 1.5rem;
}

.operator-locked-hero__inner {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  gap: 1.35rem;
  align-items: center;
}

.operator-lock-mark {
  display: grid;
  place-items: center;
  width: 96px;
  height: 96px;
  background:
    linear-gradient(180deg, rgba(90,49,21,0.9), rgba(34,16,6,0.94)),
    url("/assets/wood-planks-soft.png") center / 512px 512px repeat;
  border: 2px solid var(--fkl-brass);
  box-shadow: var(--fkl-hard-shadow);
}

.support-page,
.operator-locked-page {
  padding: 2.5rem 1.5rem 4rem;
}

.support-page > *,
.operator-locked-page > * {
  max-width: 1120px;
  margin-left: auto;
  margin-right: auto;
}

.support-give-panel {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 220px;
  gap: 1.5rem;
  align-items: center;
  padding: 1.4rem;
  margin-bottom: 1.5rem;
}

.support-give-panel h2,
.support-method-card h3,
.support-story-card h2,
.support-promise h2,
.operator-vault-card h2 {
  margin: 0.35rem 0 0.55rem;
}

.support-qr {
  display: grid;
  gap: 0.55rem;
  justify-items: center;
  color: var(--fkl-red) !important;
  text-align: center;
  text-decoration: none;
  font-weight: 700;
}

.support-qr img {
  display: block;
  width: min(190px, 100%);
  height: auto;
  background: #fff;
  border: 8px solid #fff;
  box-shadow: 3px 3px 0 rgba(76,43,15,0.22);
}

.support-methods {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 1rem;
  margin-bottom: 1.5rem;
}

.support-method-card {
  padding: 1.1rem;
}

.support-method-card a,
.support-email-note a {
  display: inline-block;
  font-weight: 700;
  overflow-wrap: anywhere;
}

.support-method-card address {
  color: var(--fkl-ink);
  font-style: normal;
  font-weight: 700;
  line-height: 1.55;
  margin: 0.75rem 0;
}

.support-email-note {
  font-size: 0.9rem;
}

.support-story-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 1rem;
  margin-bottom: 1.5rem;
}

.support-story-card,
.support-promise,
.operator-vault-card,
.operator-preview-grid article {
  padding: 1.15rem;
}

.support-story-card--wide {
  grid-column: 1 / -1;
}

.support-promise {
  padding: 1.35rem 1.4rem;
  border-color: #7d271b !important;
}

.operator-vault-card {
  margin-bottom: 1.35rem;
}

.operator-preview-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 1rem;
}

.operator-preview-grid article {
  min-height: 190px;
}

@media (max-width: 980px) {
  .site-nav__inner {
    grid-template-columns: 1fr !important;
  }

  .site-nav__brand {
    justify-self: center !important;
    width: min(430px, 100%) !important;
  }

  .site-nav__links {
    width: 100% !important;
    display: grid !important;
    grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
    gap: 0.55rem !important;
  }

  .site-nav__link {
    display: flex !important;
    justify-content: center !important;
    text-align: center !important;
  }

  .nav-actions {
    gap: 0.75rem !important;
  }
}

@media (max-width: 760px) {
  .site-nav__inner {
    padding: 0.85rem 1rem 1rem !important;
  }

  .site-nav__links {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  }

  .nav-actions {
    grid-template-columns: 1fr !important;
  }

  .btn-support {
    width: min(100%, 22rem) !important;
    justify-self: start !important;
    justify-content: center !important;
    min-height: 48px !important;
  }

  .concept-hero {
    min-height: 620px !important;
    background:
      linear-gradient(180deg, rgba(9,4,1,0.78) 0%, rgba(9,4,1,0.46) 34%, rgba(9,4,1,0.82) 100%),
      url("/assets/wood-library-hero-clean.png") center top / auto 100% no-repeat,
      var(--fkl-wood-black) !important;
  }

  .concept-hero__copy {
    padding: 3.3rem 1.25rem 2rem !important;
    background: rgba(9,4,1,0.44) !important;
  }

  .concept-hero__copy h1 {
    font-size: clamp(2.65rem, 13.4vw, 3.65rem) !important;
    line-height: 0.92 !important;
    max-width: 100% !important;
  }

  .concept-hero__tag {
    font-size: clamp(1.15rem, 6vw, 1.5rem) !important;
  }

  .concept-rule {
    width: min(70vw, 245px) !important;
  }

  .concept-stats {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    gap: 0.7rem 0 !important;
  }

  .concept-stats div {
    padding: 0 0.75rem !important;
  }

  .concept-archive-shell,
  .content-area {
    padding-left: 1rem !important;
    padding-right: 1rem !important;
  }

  .content-area > div[style*="max-width:1200px"],
  .content-area > div[style*="max-width:820px"] {
    padding-left: 0.85rem !important;
    padding-right: 0.85rem !important;
  }

  .section-header-left,
  .section-controls {
    width: 100% !important;
    flex-wrap: wrap !important;
  }

  .support-give-panel,
  .support-methods,
  .support-story-grid,
  .operator-preview-grid,
  .operator-locked-hero__inner {
    grid-template-columns: 1fr !important;
  }

  .operator-lock-mark {
    width: 82px;
    height: 82px;
  }
}

@media (max-width: 520px) {
  .site-nav__brand {
    max-width: calc(100vw - 2.5rem) !important;
  }

  .site-nav__link {
    min-height: 54px !important;
    align-items: center !important;
    font-size: 0.92rem !important;
    padding: 0.58rem 0.45rem !important;
  }

  .translate-control {
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) auto !important;
    width: 100% !important;
  }

  .translate-select {
    max-width: none !important;
    width: 100% !important;
  }

  .concept-hero__copy h1 {
    font-size: clamp(2.5rem, 12.2vw, 3.15rem) !important;
  }

  .concept-actions {
    margin-top: 1.2rem !important;
  }

  .concept-record,
  .archive-card {
    grid-template-columns: 104px minmax(0, 1fr) !important;
    gap: 0.75rem !important;
    padding: 0.8rem !important;
  }

  .concept-book,
  .archive-card__cover {
    width: 86px !important;
    min-width: 86px !important;
    max-width: 86px !important;
    height: 129px !important;
  }

  .archive-card__title {
    font-size: clamp(1.15rem, 6.2vw, 1.55rem) !important;
    overflow-wrap: normal !important;
    word-break: normal !important;
  }

  .support-page,
  .operator-locked-page {
    padding: 1.5rem 1rem 3rem;
  }

  .support-hero__inner,
  .operator-locked-hero__inner {
    padding: 3rem 1rem;
  }
}

/* FKL proposal wood + cross-browser first-screen polish */
body {
  color: var(--fkl-ink) !important;
}

.site-nav,
.site-footer,
.concept-footer {
  background:
    linear-gradient(180deg, rgba(51, 23, 7, 0.88) 0%, rgba(24, 10, 3, 0.98) 58%, rgba(7, 3, 1, 0.99) 100%),
    repeating-linear-gradient(0deg, rgba(239, 208, 138, 0.035) 0 1px, transparent 1px 52px),
    repeating-linear-gradient(90deg, rgba(255, 220, 140, 0.025) 0 1px, transparent 1px 246px),
    url("/assets/wood-planks-soft.png") center / 512px 512px repeat !important;
  background-blend-mode: multiply, screen, screen, normal !important;
  box-shadow:
    inset 0 1px 0 rgba(239, 208, 138, 0.1),
    inset 0 -1px 0 rgba(0, 0, 0, 0.55),
    0 18px 38px rgba(0, 0, 0, 0.3) !important;
}

.site-nav {
  border-bottom-color: var(--fkl-wood-edge) !important;
}

.site-nav__link,
.translate-select,
.translate-btn,
.search-shell input,
.search-shell button,
.btn-support {
  color: var(--fkl-brass-light) !important;
}

.site-nav__link[aria-current="page"],
.site-nav__link.active {
  color: var(--fkl-paper-light) !important;
}

.site-nav__link:hover,
.translate-btn:hover,
.search-shell button:hover {
  color: var(--fkl-paper-light) !important;
}

.page-hero__kicker,
.content-block__kicker,
.classification-card h3,
.support-kicker,
.operator-status,
.archive-title .stamp {
  color: var(--fkl-red) !important;
}

@media (min-width: 981px) {
  .concept-hero {
    min-height: 420px !important;
    height: clamp(420px, calc(100vh - 18rem), 520px) !important;
    background-size: auto, auto, max(calc(100% + 80px), 1440px) auto, auto !important;
    background-position: center, center, center 47%, center !important;
  }

  @supports (height: 100dvh) {
    .concept-hero {
      height: clamp(420px, calc(100dvh - 18rem), 520px) !important;
    }
  }

  .concept-hero__copy {
    padding-top: clamp(2rem, 3.3vh, 3.1rem) !important;
    padding-bottom: 1rem !important;
  }

  .concept-hero__copy h1 {
    font-size: clamp(3.25rem, 4.9vw, 5.45rem) !important;
    line-height: 0.87 !important;
  }

  .concept-hero__tag {
    font-size: clamp(1.12rem, 1.62vw, 1.42rem) !important;
  }

  .concept-hero__body {
    max-width: 480px !important;
    margin: 0 0 0.85rem !important;
    font-size: 1rem !important;
    line-height: 1.4 !important;
  }

  .concept-actions {
    margin: 0 0 0.78rem !important;
    gap: 1rem !important;
  }

  .btn-hero-primary,
  .btn-hero-ghost {
    min-height: 2.8rem !important;
    padding: 0.62rem 1rem !important;
  }

  .concept-stats {
    gap: 0.55rem !important;
    max-width: 540px !important;
  }

  .concept-stats div {
    padding: 0 0.65rem !important;
  }
}

@media (max-width: 760px) {
  .site-nav,
  .site-footer,
  .concept-footer {
    background:
      linear-gradient(180deg, rgba(55, 25, 8, 0.9) 0%, rgba(22, 9, 3, 0.98) 62%, rgba(7, 3, 1, 0.99) 100%),
      repeating-linear-gradient(0deg, rgba(239, 208, 138, 0.035) 0 1px, transparent 1px 46px),
      url("/assets/wood-planks-soft.png") center / 420px 420px repeat !important;
  }

  .concept-hero {
    background:
      linear-gradient(180deg, rgba(9, 4, 1, 0.54) 0%, rgba(9, 4, 1, 0.24) 36%, rgba(9, 4, 1, 0.74) 100%),
      radial-gradient(circle at 50% 28%, rgba(239, 208, 138, 0.12), rgba(9, 4, 1, 0) 44%),
      url("/assets/wood-library-hero-clean.png") center top / auto 100% no-repeat,
      var(--fkl-wood-black) !important;
  }

  .concept-hero__copy {
    background: linear-gradient(90deg, rgba(9, 4, 1, 0.42), rgba(9, 4, 1, 0.22) 72%, rgba(9, 4, 1, 0.36)) !important;
  }

  .concept-hero__copy h1,
  .concept-hero__tag,
  .concept-hero__body {
    text-shadow: 0 4px 0 rgba(0, 0, 0, 0.45), 0 0 18px rgba(239, 208, 138, 0.12) !important;
  }
}

/* ============================================================
   FINAL BRAND-GUIDE PASS (2026-07-24)
   Top sections: keep the soft wood planks VISIBLE & warm.
   ============================================================ */
.site-nav {
  background:
    linear-gradient(180deg, rgba(46,24,10,0.55) 0%, rgba(32,16,6,0.66) 60%, rgba(20,10,4,0.74) 100%),
    url("/assets/wood-planks-soft.png") center / 460px 460px repeat !important;
}

/* Home hero — guarantee readable copy over the bookshelf on small screens */
@media (max-width: 900px) {
  .concept-hero__copy {
    background: linear-gradient(180deg, rgba(8,5,3,0.28) 0%, rgba(8,5,3,0.60) 52%, rgba(8,5,3,0.82) 100%) !important;
    border-radius: 4px;
  }
  .concept-hero__body { color: #EFE4C8 !important; text-shadow: 0 1px 3px rgba(0,0,0,0.85) !important; }
}

/* ===== FINAL PASS v2 (2026-07-24): uniform nav + brighter hero ===== */

/* NAV: identical warm-wood tone on every page (flat overlay, not height-based
   gradient) so headers match across all pages regardless of nav height. */
.site-nav,
.site-nav.concept-nav {
  background:
    linear-gradient(rgba(40,21,9,0.53), rgba(40,21,9,0.53)),
    url("/assets/wood-planks-soft.png") center / 460px 460px repeat !important;
}
@media (max-width: 760px) {
  .site-nav {
    background:
      linear-gradient(rgba(40,21,9,0.53), rgba(40,21,9,0.53)),
      url("/assets/wood-planks-soft.png") center / 460px 460px repeat !important;
  }
}

/* HERO (desktop): let the bookshelf read a little brighter */
.concept-hero {
  background:
    linear-gradient(90deg, rgba(9,4,1,0.80) 0%, rgba(12,5,2,0.42) 38%, rgba(12,5,2,0.12) 70%, rgba(9,4,1,0.34) 100%),
    url("/assets/wood-library-hero-clean.png") center / cover no-repeat,
    var(--fkl-wood-black) !important;
  background-size: auto, max(calc(100% + 120px), 1440px) auto, auto !important;
  background-position: center, center center, center !important;
}

/* HERO (mobile): much brighter bookshelf; text stays crisp via shadow, light scrim only */
@media (max-width: 900px) {
  .concept-hero {
    background:
      linear-gradient(180deg, rgba(9,4,1,0.42) 0%, rgba(9,4,1,0.10) 40%, rgba(9,4,1,0.40) 100%),
      url("/assets/wood-library-hero-clean.png") center top / cover no-repeat,
      var(--fkl-wood-black) !important;
  }
  .concept-hero__copy {
    background: linear-gradient(180deg, rgba(8,5,3,0.06) 0%, rgba(8,5,3,0.24) 62%, rgba(8,5,3,0.38) 100%) !important;
    border-radius: 4px;
  }
  .concept-hero__copy h1,
  .concept-hero__tag,
  .concept-hero__body {
    text-shadow: 0 2px 7px rgba(0,0,0,0.92), 0 0 3px rgba(0,0,0,0.85) !important;
  }
  .concept-hero__body { color: #F3E9CE !important; }
}

/* ===== FINAL PASS v3 (2026-07-24): record-page legibility + sort centering ===== */
/* Book-record / entry pages: darken low-contrast mono labels & meta labels */
.link-rot-grid span { color: var(--ink-mid) !important; }
.link-rot-grid > div { color: var(--ink-mid) !important; }
.link-rot-grid strong { color: var(--ink) !important; }
.meta-cell__label { color: var(--ink-mid) !important; }
.entry-collection, .record-ingested, .entry-ingested { color: var(--ink-mid) !important; }

/* Sort-by select: nudge the text toward center */
.concept-sort select,
.sort-select {
  text-align: center !important;
  text-align-last: center !important;
  padding-left: 1.1rem !important;
}

/* Hero divider diamond: center it vertically on the bar (was riding above) */
.concept-rule::after {
  top: 0 !important;
  transform: translateY(-50%) !important;
  line-height: 1 !important;
}

/* Smoother scrolling (Chrome): push fixed overlays + sticky nav onto their own
   GPU compositor layer so they don't repaint on every scroll frame. */
body::after { transform: translateZ(0) !important; will-change: transform !important; backface-visibility: hidden !important; }
.site-nav { will-change: transform; }


/* ===== FINAL PASS v4 (2026-07-24) ===== */
/* Home hero: strong dark fade over the top so the cut top-row books recede
   (no more "books bleeding above the shelf"). */
.concept-hero {
  background:
    linear-gradient(180deg, rgba(9,4,1,0.97) 0%, rgba(9,4,1,0.55) 11%, rgba(9,4,1,0) 28%, rgba(9,4,1,0) 68%, rgba(9,4,1,0.30) 100%),
    linear-gradient(90deg, rgba(9,4,1,0.80) 0%, rgba(12,5,2,0.42) 38%, rgba(12,5,2,0.12) 70%, rgba(9,4,1,0.34) 100%),
    url("/assets/wood-library-hero-clean.png") center / cover no-repeat,
    var(--fkl-wood-black) !important;
  background-size: auto, auto, max(calc(100% + 120px), 1440px) auto, auto !important;
  background-position: center, center, center center, center !important;
}
@media (max-width: 900px) {
  .concept-hero {
    background:
      linear-gradient(180deg, rgba(9,4,1,0.95) 0%, rgba(9,4,1,0.45) 12%, rgba(9,4,1,0.06) 32%, rgba(9,4,1,0.10) 62%, rgba(9,4,1,0.42) 100%),
      url("/assets/wood-library-hero-clean.png") center top / cover no-repeat,
      var(--fkl-wood-black) !important;
  }
}

/* Inner-page heroes (About + Operator): identical height, centered content */
.hero {
  min-height: 360px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  padding: 2rem 1.75rem !important;
}
.operator-locked-hero__inner { padding-top: 0 !important; padding-bottom: 0 !important; }

/* ==========================================================================
   ALPHA-VIEWING PASS v2 (2026-07-24): rebuilt on the Codex / proposal system.
   Paper-grain cards + #9c6c33 hairline + --fkl-card-shadow, Courier kickers,
   maroon buttons, the proposal's RED quote panel, gilt text. --fkl-* tokens only.
   ========================================================================== */

.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;}
.fkl-hp{position:absolute;left:-9999px;height:0;overflow:hidden;}

/* persistent alpha strip — reads like the wood nav */
.fkl-alpha-bar{
  display:flex;align-items:center;justify-content:center;gap:.75rem;flex-wrap:wrap;
  background:var(--fkl-wood-deep);border-bottom:1px solid rgba(200,148,58,0.32);
  color:var(--cream-dim);font-family:var(--font-mono);font-size:.72rem;letter-spacing:.04em;
  padding:.42rem 1rem;text-align:center;
}
.fkl-alpha-bar__tag{
  background:var(--maroon);color:var(--cream);border:1px solid var(--gold);
  padding:.1rem .5rem;font-weight:700;letter-spacing:.16em;font-size:.66rem;
  text-transform:uppercase;transform:rotate(-1deg);
}
.fkl-alpha-bar__link{color:var(--gold-light);text-decoration:underline;text-underline-offset:2px;white-space:nowrap;}
.fkl-alpha-bar__link:hover{color:var(--cream);}

/* email capture — parchment plate (Codex card recipe) on a wood band */
.fkl-signup{background:var(--fkl-wood-deep);border-top:1px solid rgba(200,148,58,0.28);padding:2.6rem 1.25rem;}
.fkl-signup__inner{
  max-width:900px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;
  gap:1.6rem;flex-wrap:wrap;
  background:url("/assets/paper-grain.png") center/512px 512px repeat, var(--fkl-paper-card);
  border:2px solid #9c6c33;border-radius:3px;box-shadow:var(--fkl-card-shadow);
  color:var(--fkl-ink);padding:1.5rem 1.7rem;
}
.fkl-signup__copy{flex:1 1 300px;}
.fkl-signup__copy h2{font-family:var(--font-serif);color:var(--fkl-ink);font-size:1.4rem;font-weight:700;margin:0 0 .3rem;}
.fkl-signup__copy p{color:var(--fkl-ink-soft);font-size:.92rem;margin:0;line-height:1.5;}
.fkl-signup__form{display:flex;gap:.55rem;flex:1 1 330px;flex-wrap:wrap;}
.fkl-signup__input{
  flex:1 1 190px;min-width:0;padding:.7rem .85rem;border:1px solid #9c6c33;border-radius:2px;
  background:var(--fkl-paper-light);color:var(--fkl-ink);font-size:.95rem;font-family:var(--font-serif);
}
.fkl-signup__input:focus{outline:none;border-color:var(--gold);box-shadow:0 0 0 2px var(--gold-faint);}
.fkl-signup__btn{
  padding:.7rem 1.3rem;border:1px solid rgba(255,255,255,0.12);border-radius:2px;cursor:pointer;white-space:nowrap;
  background:var(--maroon);color:var(--cream);font-family:var(--font-sans);font-weight:700;
  letter-spacing:.1em;text-transform:uppercase;font-size:.72rem;
}
.fkl-signup__btn:hover{background:var(--maroon-h);}
.fkl-signup__note{width:100%;margin:.3rem 0 0;color:var(--fkl-red);font-family:var(--font-mono);font-size:.85rem;font-weight:700;}

/* "Preservation is not endorsement" — the proposal's RED quote panel */
.fkl-neutral{padding:2.4rem 1.5rem;}
.fkl-neutral__inner{
  max-width:820px;margin:0 auto;text-align:center;
  background:#862b21;border:2px solid var(--gold);border-radius:3px;box-shadow:var(--fkl-card-shadow);
  padding:1.7rem 2rem;
}
.fkl-neutral__lead{font-family:var(--font-serif);font-style:italic;color:var(--gold-light);font-size:1.55rem;font-weight:700;margin:0 0 .6rem;}
.fkl-neutral__body{font-family:var(--font-serif);color:#f3e2c4;font-size:1.02rem;line-height:1.6;margin:0 auto;max-width:64ch;}

/* how a record is preserved — matches the operator preview cards */
.fkl-pipeline{max-width:1000px;margin:0 auto;padding:2.6rem 1.5rem 1rem;}
.fkl-pipeline__title{font-family:var(--font-serif);text-align:center;font-size:1.4rem;font-weight:700;margin:0 0 1.6rem;color:var(--fkl-ink);}
.fkl-pipeline__flow{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1rem;}
.fkl-pipeline__step{
  background:url("/assets/paper-grain.png") center/512px 512px repeat, var(--fkl-paper-card);
  border:2px solid #9c6c33;border-radius:3px;box-shadow:var(--fkl-card-shadow);
  color:var(--fkl-ink);padding:1.15rem 1.1rem 1.25rem;
}
.fkl-pipeline__num{color:var(--fkl-red);font-family:var(--font-mono);font-weight:700;letter-spacing:.12em;font-size:.82rem;}
.fkl-pipeline__step strong{display:block;font-family:var(--font-serif);color:var(--fkl-ink);font-size:1.08rem;margin:.5rem 0 .35rem;}
.fkl-pipeline__step em{display:block;font-style:normal;color:var(--fkl-ink-soft);font-size:.86rem;line-height:1.45;}
.concept-page .fkl-pipeline__title{color:var(--cream);}
@media (max-width:820px){ .fkl-pipeline__flow{grid-template-columns:1fr 1fr;} }
@media (max-width:520px){ .fkl-pipeline__flow{grid-template-columns:1fr;} }

/* at-risk badge (home record cards) — Courier chip like .donate-status */
.badge-risk{
  display:inline-block;border:2px solid rgba(125,39,27,0.65);color:#7d271b;
  padding:.1rem .5rem;font-family:var(--font-mono);font-size:.72rem;font-weight:700;
  letter-spacing:.08em;text-transform:uppercase;
}

/* proposal link on the support hero */
.support-hero__cta{margin-top:1.4rem;}

/* mobile: legibility plate behind the hero intro over the bookshelf */
@media (max-width:760px){
  .concept-hero__body{background:rgba(19,9,3,0.72);border:1px solid rgba(200,148,58,0.28);border-radius:3px;padding:.9rem 1.05rem;}
}

/* book covers: show the COMPLETE title (no clamp / no ellipsis) */
.concept-book strong,.cover-title{
  -webkit-line-clamp:unset !important;display:block !important;overflow:visible !important;
  /* Word-breaking is settled in the !important block further up; restating it
     non-important here is what made it look handled while doing nothing. */
}
.concept-book{height:auto !important;}
.concept-book strong{font-size:.74rem;}
.archive-card__cover{overflow:visible !important;height:auto;min-height:150px;}
.cover-title{font-size:.68rem;}

/* contrast hardening — win over broad .concept-page paragraph color rules */
.fkl-neutral__inner .fkl-neutral__lead{color:#f4dca0 !important;}
.fkl-neutral__inner .fkl-neutral__body{color:#f7eeda !important;}
.fkl-signup__inner .fkl-signup__copy h2{color:var(--fkl-ink) !important;}
.fkl-signup__inner .fkl-signup__copy p{color:var(--fkl-ink-soft) !important;}
.fkl-pipeline__step strong{color:var(--fkl-ink) !important;}
.fkl-pipeline__step em{color:var(--fkl-ink-soft) !important;}
.fkl-signup__note{color:var(--fkl-red) !important;}

.concept-page .fkl-pipeline__title{color:var(--cream) !important;}

/* ---- refinements (2026-07-24): wood bands, logo-style ribbon, matching button ---- */
/* replace flat dark backgrounds with the site's wood; footer keeps its own bg */
.fkl-alpha-bar{
  background:linear-gradient(rgba(28,15,6,0.55),rgba(28,15,6,0.55)),
    url("/assets/wood-planks-soft.png") center / 512px 512px repeat;
}
.fkl-signup{
  background:linear-gradient(rgba(24,13,5,0.55),rgba(24,13,5,0.55)),
    url("/assets/wood-planks-soft.png") center / 512px 512px repeat;
}
.concept-page .fkl-neutral,
.concept-page .fkl-pipeline{
  background:linear-gradient(rgba(24,13,5,0.5),rgba(24,13,5,0.5)),
    url("/assets/wood-planks-soft.png") center / 512px 512px repeat;
}

/* ALPHA chip → resemble the logo's red-and-gilt ribbon */
.fkl-alpha-bar__tag{
  background:#862b21;color:#f0d188;border:1px solid var(--gold);
  transform:rotate(-2.5deg);box-shadow:0 1px 2px rgba(0,0,0,0.4);text-shadow:0 1px 0 rgba(0,0,0,0.35);
}

/* "Notify me" → match the Support Preservation button exactly */
.fkl-signup__btn{
  border:2px solid #d6a15a;background:linear-gradient(180deg,#9b3325,var(--fkl-red-dark));
  color:var(--fkl-brass-light);
}
.fkl-signup__btn:hover{background:linear-gradient(180deg,#aa402d,#76291a);color:#fff2c8;}

/* pipeline wood should be full-bleed on home (no black side gutters); cards stay centered */
.concept-page .fkl-pipeline{max-width:none !important;padding-bottom:2.6rem;}
.concept-page .fkl-pipeline__flow{max-width:1000px;margin-left:auto;margin-right:auto;}

/* ---- refinements v2 (2026-07-24) ---- */
/* Alpha disclaimer strip: exact same background as the footer at the very bottom */
.fkl-alpha-bar{
  background:
    linear-gradient(180deg, rgba(51,23,7,0.88) 0%, rgba(24,10,3,0.98) 58%, rgba(7,3,1,0.99) 100%),
    repeating-linear-gradient(0deg, rgba(239,208,138,0.035) 0 1px, transparent 1px 52px),
    repeating-linear-gradient(90deg, rgba(255,220,140,0.025) 0 1px, transparent 1px 246px),
    url("/assets/wood-planks-soft.png") center / 512px 512px repeat !important;
  background-blend-mode: multiply, screen, screen, normal !important;
  border-bottom: 1px solid var(--fkl-wood-edge) !important;
}
/* ALPHA ribbon: same red gradient + brass border as the Support Preservation button; keep the tilt */
.fkl-alpha-bar__tag{
  background: linear-gradient(180deg,#9b3325,var(--fkl-red-dark)) !important;
  color: var(--fkl-brass-light) !important;
  border: 2px solid #d6a15a !important;
  transform: rotate(-2.5deg);
}
/* Operator lock box: let the wood show through (was heavy brown) */
.operator-lock-mark{
  background:
    linear-gradient(180deg, rgba(40,21,9,0.42), rgba(24,12,4,0.5)),
    url("/assets/wood-planks-soft.png") center / 512px 512px repeat !important;
}
/* About hero: identical background stack to the Operator/Support heroes */
.about-hero{
  background:
    linear-gradient(90deg, rgba(9,4,1,0.95) 0%, rgba(12,5,2,0.78) 35%, rgba(12,5,2,0.26) 68%, rgba(9,4,1,0.62) 100%),
    linear-gradient(180deg, rgba(8,3,1,0.52) 0%, rgba(8,3,1,0.12) 38%, rgba(8,3,1,0.66) 100%),
    url("/assets/wood-library-hero-clean.png") center / cover no-repeat,
    var(--fkl-wood-black) !important;
  border-bottom: 4px solid var(--fkl-wood-edge) !important;
  overflow: hidden !important;
}
/* Mobile: drop the alpha strip so it doesn't crowd the hero */
@media (max-width: 760px){
  .fkl-alpha-bar{ display: none !important; }
}

/* ---- refinements v3 (2026-07-24) ---- */
/* use the actual ALPHA ribbon graphic from the logo in the disclaimer bar */
.fkl-alpha-bar{ padding-top:0; padding-bottom:0; min-height:44px; }
.fkl-alpha-bar__ribbon{ height:56px; width:auto; display:block; margin:-4px 0; }

/* contain the Library list in its own scroll area (don't grow the whole page) */
#homeArchiveResults{
  max-height:72vh;
  overflow-y:auto;
  padding-right:.6rem;
  scrollbar-width:thin;
  scrollbar-color:var(--gold-dim) rgba(40,21,9,0.25);
}
#homeArchiveResults::-webkit-scrollbar{ width:10px; }
#homeArchiveResults::-webkit-scrollbar-track{ background:rgba(40,21,9,0.25); border-radius:5px; }
#homeArchiveResults::-webkit-scrollbar-thumb{ background:var(--gold-dim); border-radius:5px; border:2px solid rgba(40,21,9,0.3); }
#homeArchiveResults::-webkit-scrollbar-thumb:hover{ background:var(--gold); }

/* ================= refinements v4 (2026-07-24) ================= */
/* Alpha bar: thin strip again with the inline chip placement (user preferred) */
.fkl-alpha-bar{ padding:.4rem 1rem !important; min-height:0 !important; }
.fkl-alpha-bar__ribbon{ display:none !important; }
/* ALPHA chip → resembles the logo ribbon: red field, gilt serif, gold border, tilt */
.fkl-alpha-bar__tag{
  display:inline-block !important;
  background:linear-gradient(180deg,#9b3325,#5a190f) !important;
  color:#f4dca0 !important;
  font-family:var(--font-serif) !important;
  font-weight:700 !important; font-size:.8rem !important;
  letter-spacing:.16em !important; text-transform:uppercase !important;
  padding:.1rem .55rem !important;
  border:2px solid #e0b866 !important;
  box-shadow:inset 0 0 0 1px rgba(90,25,15,0.55), 0 1px 3px rgba(0,0,0,0.45) !important;
  text-shadow:0 1px 1px rgba(0,0,0,0.5) !important;
  transform:rotate(-3deg) !important;
}

/* Clearer frame on the scrollable Library list */
#homeArchiveResults{
  border:2px solid #9c6c33;
  border-radius:4px;
  padding:.85rem;
  box-shadow:inset 0 9px 11px -9px rgba(0,0,0,0.45), inset 0 -9px 11px -9px rgba(0,0,0,0.45);
}

/* Home: push "How a record is preserved" below the initial fold (wood stays visible) */
.concept-page .fkl-pipeline{ padding-top:8rem !important; }

/* About: wood between hero and the red stance panel so it isn't in the first view */
.about-hero + .fkl-neutral{
  background:linear-gradient(rgba(24,13,5,0.5),rgba(24,13,5,0.5)),
    url("/assets/wood-planks-soft.png") center / 512px 512px repeat;
  padding-top:8rem;
}

/* Hero intro paragraph: legibility panel on ALL viewports (was mobile-only) */
.concept-hero__body{
  background:rgba(19,9,3,0.72);
  border:1px solid rgba(200,148,58,0.28);
  border-radius:3px;
  padding:.95rem 1.1rem;
}

/* Notify me → exactly the Support Preservation button (font + aesthetic) */
.fkl-signup__btn{
  font-family:var(--font-sans) !important;
  font-size:.7rem !important; font-weight:700 !important;
  letter-spacing:.1em !important; text-transform:uppercase !important;
  height:38px !important; display:inline-flex !important;
  align-items:center !important; justify-content:center !important;
  padding:0 1.5rem !important;
  border:2px solid #d6a15a !important; border-radius:2px !important;
  background:linear-gradient(180deg,#9b3325,var(--fkl-red-dark)) !important;
  color:var(--fkl-brass-light) !important;
}
.fkl-signup__btn:hover{ background:linear-gradient(180deg,#aa402d,#76291a) !important; color:#fff2c8 !important; }

/* fill the viewport so the next section starts just below the fold (a wood strip shows,
   white text / red panel are a short scroll away) — adapts to screen height */
.concept-hero{ min-height: calc(100vh - 250px) !important; }
.concept-page .fkl-pipeline{ padding-top: 3.5rem !important; }
.about-hero + .fkl-neutral{ padding-top: calc(100vh - 470px) !important; }

/* fix: cards must not shrink inside the scrollable list (was clipping checksum/view-record) */
#homeArchiveResults .concept-record{ flex-shrink:0 !important; }

/* ================= refinements v5 (2026-07-25) ================= */
/* Ellipsis so book-description blocks stay a consistent size */
.concept-record-main > p:not([class]){
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical;
  overflow:hidden; min-height:2.7em;
}
.archive-card__summary{
  display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orient:vertical; overflow:hidden;
}

/* ALPHA chip → match the logo ribbon (sampled colors, serif, embossed gilt text shadow) */
.fkl-alpha-bar__tag{
  background:linear-gradient(180deg,#93301f,#6a1e12) !important;
  color:#f4d891 !important;
  font-family:var(--font-serif) !important; font-weight:700 !important;
  font-size:.82rem !important; letter-spacing:.14em !important; text-transform:uppercase !important;
  padding:.12rem .55rem !important;
  border:2px solid #e7b76c !important;
  box-shadow:inset 0 0 0 1px rgba(255,225,160,0.35), 0 1px 3px rgba(0,0,0,0.5) !important;
  text-shadow:1px 1.5px 1px rgba(48,12,6,0.92), 0 0 1px rgba(48,12,6,0.6) !important;
  transform:rotate(-3deg) !important;
}

/* Expand About + Operator heroes so there's less empty wood before the next section */
.about-hero, .operator-locked-hero{ min-height:calc(100vh - 175px) !important; }
.about-hero + .fkl-neutral{ padding-top:3.5rem !important; }


/* ===== flagship rescue + preserved PDF + archive scroll (2026-07-25) ===== */
.archive-card.is-flagship{ position:relative; border:2px solid var(--gold) !important; box-shadow:0 0 0 2px var(--gold-faint), 2px 3px 7px rgba(55,32,7,0.2) !important; }
.flagship-badge{
  position:absolute; top:0; left:0; z-index:3;
  background:linear-gradient(180deg,#9b3325,var(--fkl-red-dark)); color:var(--fkl-brass-light);
  border:1px solid #d6a15a; border-top-left-radius:4px; border-bottom-right-radius:9px;
  font-family:var(--font-mono); font-weight:700; font-size:.6rem; letter-spacing:.11em; padding:.22rem .55rem;
}
.link-dead{ color:var(--fkl-red); font-weight:700; }

.preserved-pdf{
  background:url("/assets/paper-grain.png") center/512px 512px repeat, var(--fkl-paper-card);
  border:2px solid #9c6c33; border-radius:4px; box-shadow:var(--fkl-card-shadow);
  padding:1rem 1.15rem; margin:1.3rem 0;
}
.preserved-pdf__head{ font-family:var(--font-mono); font-weight:700; color:var(--fkl-red); font-size:.78rem; letter-spacing:.05em; text-transform:uppercase; margin-bottom:.65rem; }
.preserved-pdf__star{ color:var(--gold); }
.preserved-pdf__actions{ display:flex; gap:.7rem; flex-wrap:wrap; align-items:center; }
.preserved-pdf__btn{
  display:inline-block; background:linear-gradient(180deg,#9b3325,var(--fkl-red-dark)); color:var(--fkl-brass-light) !important;
  border:2px solid #d6a15a; border-radius:2px; padding:.55rem 1.15rem; font-family:var(--font-sans); font-weight:700;
  letter-spacing:.06em; text-transform:uppercase; font-size:.74rem; text-decoration:none;
}
.preserved-pdf__btn:hover{ background:linear-gradient(180deg,#aa402d,#76291a); color:#fff2c8 !important; }
.preserved-pdf__dl{ font-family:var(--font-mono); font-weight:700; color:var(--fkl-ink-soft); font-size:.8rem; text-decoration:underline; }
.preserved-pdf__note{ margin-top:.75rem; color:var(--fkl-ink-soft); font-size:.88rem; line-height:1.55; }
.preserved-pdf__note strong{ color:var(--fkl-red); }

.archive-mission{ max-width:70ch; margin:.2rem 0 1.4rem; color:var(--ink-mid); font-size:.95rem; line-height:1.6; }
.archive-mission strong{ color:var(--maroon); }

/* Archive results: same scrollable frame as the home Library */
#archiveResults{
  max-height:72vh; overflow-y:auto; padding:.85rem;
  border:2px solid #9c6c33; border-radius:4px;
  box-shadow:inset 0 9px 11px -9px rgba(0,0,0,0.45), inset 0 -9px 11px -9px rgba(0,0,0,0.45);
  scrollbar-width:thin; scrollbar-color:var(--gold-dim) rgba(40,21,9,0.25);
}
#archiveResults::-webkit-scrollbar{ width:10px; }
#archiveResults::-webkit-scrollbar-track{ background:rgba(40,21,9,0.25); border-radius:5px; }
#archiveResults::-webkit-scrollbar-thumb{ background:var(--gold-dim); border-radius:5px; border:2px solid rgba(40,21,9,0.3); }
#archiveResults::-webkit-scrollbar-thumb:hover{ background:var(--gold); }
#archiveResults .archive-card:last-child{ margin-bottom:0; }

/* alpha chip: exact cream/white from the logo's ALPHA ribbon */
.fkl-alpha-bar__tag{ color:#FFE8B6 !important; }
/* flagship badge must clear the collection text ("POLITICAL...") */
.archive-card.is-flagship .archive-card__body{ padding-top:1.7rem; }

/* ============================================================= */
/* Operator console (live front end) — v=alpha-viewing-9         */
/* ============================================================= */
.operator-console-hero { text-align: center; }
.operator-console-hero__inner { max-width: 860px; margin: 0 auto; padding: 0 1.2rem; }

.op-shell { max-width: 1160px; margin: 0 auto; padding: 2.4rem 1.2rem 3.4rem; }
.op-grid { display: grid; grid-template-columns: 1.55fr 1fr; gap: 1.6rem; align-items: start; }
@media (max-width: 900px) { .op-grid { grid-template-columns: 1fr; } }

.opx-panel {
  background: url('/assets/paper-grain.png') center/512px repeat, var(--fkl-paper-card);
  border: 2px solid #9c6c33;
  border-radius: 3px;
  box-shadow: var(--fkl-card-shadow);
  padding: 1.5rem 1.5rem 1.7rem;
}
.op-side { display: grid; gap: 1.6rem; }
.opx-panel__head { display: flex; align-items: center; gap: 0.7rem; flex-wrap: wrap; margin-bottom: 0.55rem; }
.opx-panel__head h2 { margin: 0; font-size: 1.4rem; color: var(--fkl-ink); }
.op-lead { color: var(--fkl-ink-soft); margin: 0 0 1.1rem; font-size: 0.97rem; }

/* input row */
.op-samples { margin-bottom: 0.9rem; }
.op-chip {
  font-family: 'Courier New', Courier, monospace;
  font-size: 0.82rem; letter-spacing: 0.02em;
  background: var(--fkl-paper-light);
  color: var(--fkl-ink);
  border: 1.5px solid var(--fkl-brass);
  border-radius: 2px; padding: 0.5rem 0.8rem; cursor: pointer;
  transition: background 0.15s, transform 0.05s;
}
.op-chip:hover { background: var(--fkl-brass-light); }
.op-chip:active { transform: translateY(1px); }
.op-input-row {
  display: flex; gap: 0.6rem; margin-bottom: 1.1rem;
  /* WRAP, because body has overflow-x: hidden and therefore CANNOT show that a
     row has outgrown the screen. A fourth button on the review console pushed
     the row to 728px, and between 521 and 767px "Check storage" was clipped
     away — invisible, unclickable, and no scrollbar to hint it was there. The
     usual test does not catch this: scrollWidth equals clientWidth precisely
     because the overflow is being hidden rather than scrolled. Wrapping is the
     fix that does not depend on anyone counting buttons again. */
  flex-wrap: wrap;
}
@media (max-width: 520px) { .op-input-row { flex-direction: column; } }
.op-input {
  flex: 1; min-width: 0;
  font-family: 'Courier New', Courier, monospace; font-size: 0.9rem;
  padding: 0.7rem 0.85rem;
  background: #fbf4df; color: var(--fkl-ink);
  border: 1.5px solid var(--fkl-paper-dark); border-radius: 2px;
}
.op-input:focus { outline: none; border-color: var(--fkl-brass); box-shadow: 0 0 0 2px rgba(196,154,72,0.28); }
.op-run {
  font-family: Georgia, 'Times New Roman', serif; font-weight: 700; font-size: 0.95rem;
  color: #f6ead0; white-space: nowrap;
  background: linear-gradient(180deg, #8a2b1d, #631a10);
  border: 1.5px solid var(--fkl-brass); border-radius: 2px;
  padding: 0.7rem 1.3rem; cursor: pointer;
  box-shadow: 2px 2px 0 rgba(76,43,15,0.3);
  transition: filter 0.15s, transform 0.05s;
}
.op-run:hover { filter: brightness(1.08); }
.op-run:active { transform: translateY(1px); }
.op-run:disabled { opacity: 0.7; cursor: default; }

/* terminal */
.op-terminal {
  background: linear-gradient(180deg, #1c0f05, #130903);
  border: 1.5px solid #6b431d; border-radius: 3px;
  padding: 1rem 1.1rem; min-height: 168px; max-height: 340px; overflow-y: auto;
  font-family: 'Courier New', Courier, monospace; font-size: 0.85rem; line-height: 1.7;
  color: #e7c689; box-shadow: inset 0 2px 14px rgba(0,0,0,0.5);
}
.op-term-idle { color: #a9843f; }
.op-term-line { margin: 0.05rem 0; word-break: break-word; }
.op-term-boot { color: var(--fkl-brass-light); font-weight: 700; letter-spacing: 0.04em; }
.op-term-dim { color: #9c7636; }
.op-term-num { color: #b98a3c; }
.op-term-run::after { content: ' …'; color: #8a6a30; }
.op-term-ok { color: #7fce8f; }
.op-term-ok code, .op-term-line code { color: #e7c689; background: rgba(196,154,72,0.12); padding: 0 3px; border-radius: 2px; }
.op-term-done { color: #8fe0a0; font-weight: 700; }

/* record card */
.op-record { margin-top: 1.2rem; border-top: 1px dashed var(--fkl-paper-dark); padding-top: 1.2rem; animation: opFade 0.4s ease; }
@keyframes opFade { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
.op-record__head { display: flex; align-items: center; justify-content: space-between; gap: 0.6rem; flex-wrap: wrap; }
.op-review-chip {
  font-family: 'Courier New', Courier, monospace; font-size: 0.74rem; letter-spacing: 0.04em;
  color: #1f4a2c; background: #d7ecd2; border: 1px solid #2f7a49; border-radius: 2px; padding: 0.2rem 0.5rem;
}
.op-record__title { margin: 0.7rem 0 0.2rem; font-size: 1.35rem; color: var(--fkl-ink); }
.op-record__by { color: var(--fkl-ink-muted); font-size: 0.88rem; margin-bottom: 0.7rem; }
.op-record__labels { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-bottom: 0.8rem; }
.op-pill {
  font-family: 'Courier New', Courier, monospace; font-size: 0.72rem; letter-spacing: 0.03em;
  color: #55180f; background: #f0d9b6; border: 1px solid var(--fkl-brass); border-radius: 2px; padding: 0.2rem 0.5rem;
}
.op-record__summary { color: var(--fkl-ink); font-size: 0.95rem; line-height: 1.65; margin: 0 0 0.9rem; }
.op-record__tags { display: flex; flex-wrap: wrap; gap: 0.35rem; margin-bottom: 1rem; }
.op-tag { font-family: 'Courier New', Courier, monospace; font-size: 0.72rem; color: var(--fkl-ink-soft); background: var(--fkl-paper-light); border: 1px solid var(--fkl-paper-dark); border-radius: 2px; padding: 0.15rem 0.45rem; }
.op-tag::before { content: '#'; opacity: 0.55; }
.op-record__meta { display: flex; flex-wrap: wrap; gap: 1.4rem; padding-top: 0.7rem; border-top: 1px solid rgba(156,108,51,0.3); }
.op-record__meta > div { font-family: 'Courier New', Courier, monospace; font-size: 0.82rem; color: var(--fkl-ink); }
.op-record__meta span { display: block; font-size: 0.68rem; letter-spacing: 0.05em; text-transform: uppercase; color: var(--fkl-ink-muted); margin-bottom: 0.15rem; }
.op-record__meta code { color: var(--fkl-red); }
.op-record__draftnote { margin: 0.9rem 0 0; font-size: 0.82rem; color: var(--fkl-ink-muted); font-style: italic; }

/* monitor */
.op-stats { display: flex; gap: 1.2rem; margin: 0.4rem 0 0.7rem; }
.op-stat { display: flex; flex-direction: column; }
.op-stat__n { font-family: Georgia, serif; font-size: 2rem; font-weight: 700; line-height: 1; color: var(--fkl-green); }
.op-stat__n--red { color: var(--fkl-red); }
.op-stat__n--brass { color: #a9791f; }
.op-stat__l { font-size: 0.74rem; letter-spacing: 0.03em; text-transform: uppercase; color: var(--fkl-ink-muted); margin-top: 0.3rem; }
.op-scan-note { font-family: 'Courier New', Courier, monospace; font-size: 0.78rem; color: var(--fkl-ink-muted); margin: 0 0 1rem; }
.op-rescue { display: flex; gap: 0.7rem; align-items: flex-start; background: var(--fkl-paper-light); border: 1px solid var(--fkl-brass); border-radius: 2px; padding: 0.75rem 0.85rem; }
.op-rescue__tag { font-family: 'Courier New', Courier, monospace; font-size: 0.66rem; font-weight: 700; letter-spacing: 0.05em; color: #f6ead0; background: linear-gradient(180deg,#8a2b1d,#631a10); border: 1px solid var(--fkl-brass); border-radius: 2px; padding: 0.2rem 0.4rem; white-space: nowrap; }
.op-rescue__title { font-weight: 700; color: var(--fkl-ink); font-size: 0.92rem; }
.op-rescue__desc { font-size: 0.82rem; color: var(--fkl-ink-soft); line-height: 1.5; margin-top: 0.15rem; }
.opx-panel--note p { margin: 0; color: var(--fkl-ink); font-size: 0.92rem; line-height: 1.6; }
.opx-panel--note strong { color: var(--fkl-red-dark); }

/* ---- Operator console: live ingest results (v=alpha-viewing-10) ---- */
.op-samples { display: flex; align-items: center; flex-wrap: wrap; gap: 0.55rem; }
.op-samples__label { font-family: 'Courier New', Courier, monospace; font-size: 0.78rem; color: var(--fkl-ink-muted); letter-spacing: 0.03em; }
.op-term-err { color: #f0857a; font-weight: 700; }
.op-term-warn { color: #e6b95c; }
.op-dim { color: var(--fkl-ink-muted); font-style: italic; }

.op-result {
  margin-top: 1.7rem;
  background: url('/assets/paper-grain.png') center/512px repeat, var(--fkl-paper-card);
  border: 2px solid #9c6c33; border-radius: 3px; box-shadow: var(--fkl-card-shadow);
  padding: 1.7rem 1.8rem 2rem;
  animation: opFade 0.4s ease;
}
.op-result__head { display: flex; align-items: center; justify-content: space-between; gap: 0.6rem; flex-wrap: wrap; }
.op-result__title { margin: 0.7rem 0 0.25rem; font-size: 1.7rem; color: var(--fkl-ink); }
.op-result__by { color: var(--fkl-ink-muted); font-size: 0.9rem; margin-bottom: 0.8rem; }
.op-dots { color: var(--fkl-brass); letter-spacing: 0.1em; }
.op-result__summary { color: var(--fkl-ink); font-size: 1rem; line-height: 1.65; margin: 0 0 0.9rem; }

.op-disclaimer {
  margin: 1.3rem 0 0.6rem; padding: 1rem 1.15rem;
  background: linear-gradient(180deg, #f6ecd0, #f0dfb4);
  border: 1.5px solid var(--fkl-brass); border-left: 4px solid #8a2b1d; border-radius: 2px;
  color: var(--fkl-ink); font-size: 0.92rem; line-height: 1.6;
}
.op-disclaimer strong { color: var(--fkl-red-dark); }

.op-transcript-head { display: flex; align-items: baseline; gap: 0.7rem; flex-wrap: wrap; margin: 1.5rem 0 0.6rem; padding-top: 1.1rem; border-top: 1px dashed var(--fkl-paper-dark); }
.op-transcript {
  max-height: min(70vh, 760px); overflow-y: auto;
  overflow-x: hidden; overflow-wrap: anywhere; word-break: break-word; max-width: 100%;
  background: var(--fkl-paper-light);
  border: 1px solid var(--fkl-paper-dark); border-radius: 2px;
  padding: 1.2rem 1.4rem;
  font-family: Georgia, 'Times New Roman', serif; font-size: 1.02rem; line-height: 1.72; color: #2b1a0b;
}
.op-transcript p { margin: 0 0 1.05rem; text-align: left; }
.op-transcript p:last-child { margin-bottom: 0; }
/* No multi-column transcript at all. `columns: 1` was not enough: any value still
   establishes a multi-column formatting context, and in one with a definite height
   the overflow keeps spilling into fresh columns sideways instead of scrolling.
   The rule is removed rather than set to 1, so no multicol context exists and the
   pane scrolls vertically like the reading surface it is. */
.op-transcript { column-count: auto !important; column-width: auto !important; }

/* Transcript structure inferred from extracted text (see FKL.reflowToHtml). */
.fkl-transcript-head {
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 1.06rem; font-weight: 700; letter-spacing: 0.01em;
  margin: 1.6rem 0 0.55rem; padding-bottom: 0.3rem;
  border-bottom: 1px solid rgba(120, 88, 40, 0.28);
}
.fkl-transcript-head:first-child { margin-top: 0; }
.fkl-contents-line {
  margin: 0 0 0.18rem; padding-left: 1rem;
  font-size: 0.95rem; opacity: 0.88;
}

/* The preserved original, presented as something to open rather than a footnote. */
.fkl-stored-file {
  margin: 1.1rem 0; padding: 0.9rem 1.1rem;
  border: 1px solid var(--fkl-paper-dark, #b88f4f);
  border-left: 3px solid #8a2b1d;
  background: rgba(239, 224, 193, 0.55);
  border-radius: 3px;
}
.fkl-stored-file__link {
  font-family: 'Courier New', Courier, monospace;
  font-size: 0.95rem; font-weight: 700; color: #8a2b1d; text-decoration: none;
  border-bottom: 1px solid rgba(138, 43, 29, 0.4);
}
.fkl-stored-file__link:hover { border-bottom-color: #8a2b1d; }
.fkl-stored-file__note {
  margin-top: 0.35rem; font-family: 'Courier New', Courier, monospace;
  font-size: 0.78rem; opacity: 0.72;
}

/* Review queue: the archivist reads the whole document before deciding. */
.rv-fulltext {
  margin: 0.9rem 0 0; padding: 1rem 1.2rem;
  max-height: min(60vh, 620px); overflow-y: auto;
  overflow-x: hidden; overflow-wrap: anywhere; word-break: break-word;
  background: var(--fkl-paper-light, #fbf1d4);
  border: 1px solid var(--fkl-paper-dark, #b88f4f); border-radius: 2px;
  font-family: Georgia, 'Times New Roman', serif; font-size: 1rem; line-height: 1.7; color: #2b1a0b;
}
.rv-fulltext p { margin: 0 0 0.95rem; }

/* Expanded reading: a rights check on a long document needs the whole screen. */
.rv-fulltext--expanded {
  position: fixed; inset: 3vh 4vw; z-index: 90;
  max-height: none; height: 94vh; width: auto;
  padding: 2rem 2.6rem;
  box-shadow: 0 18px 60px rgba(20, 10, 2, 0.55);
  font-size: 1.06rem; line-height: 1.78;
}
.rv-fulltext--expanded p { max-width: 46rem; margin-left: auto; margin-right: auto; }
.rv-fulltext--expanded .fkl-transcript-head { max-width: 46rem; margin-left: auto; margin-right: auto; }
.op-challenge { margin: 0.9rem 0 0.2rem; }
.op-challenge:empty { display: none; margin: 0; }
.fkl-turnstile { margin-bottom: 0.5rem; }

.rv-backdrop {
  position: fixed; inset: 0; z-index: 85;
  background: rgba(20, 10, 2, 0.62);
}



/* ---- Operator: entry preview framed as a real site record (v=alpha-viewing-11) ---- */
.op-entry-frame {
  max-width: 780px; margin: 1.4rem auto 0; padding: 2.1rem 2.3rem 2.4rem;
  background: var(--fkl-paper-light);
  border: 1px solid var(--fkl-paper-dark); border-radius: 3px;
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.45), 0 12px 34px rgba(47,24,8,0.20);
}
.op-entry-frame .entry-title { margin-top: 0.35rem; }
.op-entry-frame .op-transcript { margin-top: 0.6rem; }
@media (max-width: 640px){
  .op-entry-frame { padding: 1.3rem 1.15rem 1.5rem; }
  .op-result { padding: 1.2rem 1rem 1.4rem; }
}

/* ---- Mobile nav fit across all pages (v=alpha-viewing-11) ---- */
@media (max-width: 860px){
  .nav-search, .translate-control { display: none !important; }
  .site-nav__links { flex-wrap: wrap; }
}
@media (max-width: 520px){
  .nav-brand-top { display: none; }
  .nav-brand-tagline { display: none; }
  .site-nav__inner { flex-wrap: wrap; }
}

/* ---- Reader theme toggle (text-only): Library / Light / Dark (v=alpha-viewing-12) ---- */
.reader-toggle { display:inline-flex; border:1.5px solid var(--fkl-brass, #9c6c33); border-radius:3px; overflow:hidden; margin:0.2rem 0 0.8rem; }
.reader-toggle button {
  font-family:'Courier New',Courier,monospace; font-size:0.74rem; letter-spacing:0.04em;
  padding:0.4rem 0.85rem; background:transparent; color:var(--fkl-ink-soft,#65431d);
  border:0; border-right:1px solid var(--fkl-brass,#9c6c33); cursor:pointer; transition:background .12s,color .12s;
}
.reader-toggle button:last-child { border-right:0; }
.reader-toggle button:hover { background:rgba(196,154,72,0.18); }
.reader-toggle button.is-active { background:linear-gradient(180deg,#8a2b1d,#631a10); color:#f6ead0; }

/* Only the reading pane changes — never the surrounding page. */
.reader-pane { transition: background .15s ease, color .15s ease; }
.reader-pane.reader--site { background: var(--fkl-paper-light, #fbf1d4); border-color: var(--fkl-paper-dark,#b88f4f); }
.reader-pane.reader--site, .reader-pane.reader--site p, .reader-pane.reader--site strong, .reader-pane.reader--site h3, .reader-pane.reader--site h4 { color:#2b1a0b; }
.reader-pane.reader--light { background:#ffffff; border-color:#dcdcdc; }
.reader-pane.reader--light, .reader-pane.reader--light p, .reader-pane.reader--light strong, .reader-pane.reader--light h3, .reader-pane.reader--light h4 { color:#1a1a1a; }
.reader-pane.reader--light a { color:#8a2b1d; }
.reader-pane.reader--dark { background:#141210; border-color:#3a2f22; }
.reader-pane.reader--dark, .reader-pane.reader--dark p, .reader-pane.reader--dark strong, .reader-pane.reader--dark h3, .reader-pane.reader--dark h4 { color:#ece9e1; }
.reader-pane.reader--dark a { color:#e6b95c; }

/* The records pane should reach the bottom of the sidebar filters so the two
   columns line up, which the Library layout already did and the Archive did not. */
.archive-layout,
.concept-archive-shell {
  align-items: stretch !important;
}
.archive-layout > .content-area,
.archive-layout > .archive-results,
.concept-archive-shell > .concept-records {
  display: flex;
  flex-direction: column;
}
.archive-results,
.concept-records {
  min-height: 100%;
}


/* The records pane scrolls internally and must end exactly where the filter
   sidebar ends, so the page finishes at the same line on both sides. The sidebar's
   height depends on how many filters it has, so the pane's max-height is measured
   and set by FKL.syncResultsPane() rather than guessed with a vh value (72vh left
   a ~376px gap, and letting it grow to fit content made the page endless). The
   grid row must not stretch to the taller column, hence align-items: start. */
.archive-layout {
  align-items: start !important;
}
.archive-layout > main {
  display: flex !important;
  flex-direction: column !important;
  min-height: 0;
}
#archiveResults {
  overflow-y: auto !important;
  min-height: 240px;
}

/* Operator buttons copy the Notify Me button (.fkl-signup__btn) exactly. Values
   read off its computed style on the live page: the same gradient and brass edge,
   but flat — no drop shadow, no inset highlights, no text shadow — with system
   sans uppercase lettering. It also sits on the same parchment as these buttons,
   so an exact copy reads correctly here, which the nav button did not. */
.op-run,
a.op-run {
  background: linear-gradient(180deg, #9B3325, #55180F) !important;
  color: #EFD08A !important;
  font-family: -apple-system, system-ui, "Segoe UI", Helvetica, Arial, sans-serif !important;
  font-size: 0.7rem !important;
  font-weight: 700 !important;
  letter-spacing: 0.1em !important;
  text-transform: uppercase !important;
  text-shadow: none !important;
  border: 2px solid #D6A15A !important;
  border-radius: 2px !important;
  box-shadow: none !important;
  padding: 0 24px !important;
  min-height: 38px !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  white-space: nowrap !important;
  text-decoration: none !important;
  filter: none !important;
  transform: none !important;
}
.op-run:hover,
a.op-run:hover {
  background: linear-gradient(180deg, #A93B2B, #611B11) !important;
  color: #F6E0A6 !important;
  text-decoration: none !important;
}
.op-run:disabled {
  background: linear-gradient(180deg, #7C2A1F, #45140C) !important;
  color: rgba(239,208,138,0.62) !important;
  cursor: default !important;
}

/* Status chips on the maroon fill (PENDING, RESCUED, ON SHELF, REMOVED, KEEP THIS
   LINK) carried near-white #f6ead0 lettering. They now use the same gilt #EFD08A
   and the same gradient and brass edge as the operator buttons, so every red
   element on the page reads as one family. */
.op-rescue__tag {
  background: linear-gradient(180deg, #9B3325, #55180F) !important;
  color: #EFD08A !important;
  border: 1px solid #D6A15A !important;
}
/* The draft chip in the entry preview was green-on-mint, the odd one out. */
.op-review-chip {
  background: linear-gradient(180deg, #9B3325, #55180F) !important;
  color: #EFD08A !important;
  border: 1px solid #D6A15A !important;
}

/* Rights finding — the researched copyright basis for holding a document.
   Sits under the provenance grid on an entry page. */
.rights-finding {
  margin-top: 0.9rem; padding: 0.8rem 0.95rem;
  font-family: var(--font-mono, 'Courier New', monospace);
  font-size: 0.78rem; line-height: 1.65; color: var(--ink-mid);
  border-top: 1px solid var(--border-light);
  overflow-wrap: anywhere;
}
.rights-finding strong { color: var(--gold-dim); letter-spacing: 0.04em; }

/* ── Direct-to-storage upload (operator console) ──────────────────────────
   Large scans bypass the function body and go straight to R2, so the console
   needs a file row and a real progress bar: a 200 MB upload with no feedback is
   indistinguishable from a hung page. Tokens follow .op-input above. */
.op-or-divider {
  display: flex; align-items: center; gap: 0.75rem;
  margin: 0 0 1rem; font-family: 'Courier New', Courier, monospace;
  font-size: 0.7rem; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--ink-light, #8a7a5c);
}
.op-or-divider::before, .op-or-divider::after {
  content: ''; flex: 1; height: 1px; background: var(--fkl-paper-dark, #cbb994);
}
.op-input--file {
  padding: 0.55rem 0.6rem; cursor: pointer;
  font-size: 0.8rem;
}
.op-input--file::file-selector-button {
  font-family: 'Courier New', Courier, monospace; font-size: 0.74rem;
  letter-spacing: 0.06em; text-transform: uppercase;
  margin-right: 0.7rem; padding: 0.38rem 0.7rem; cursor: pointer;
  color: var(--fkl-ink, #2e2312);
  background: var(--fkl-paper-dark, #e6d7b4);
  border: 1px solid var(--fkl-paper-dark, #cbb994); border-radius: 2px;
}
.op-progress { margin: -0.4rem 0 1.1rem; }
.op-progress__bar {
  height: 6px; border-radius: 3px; overflow: hidden;
  background: var(--fkl-paper-dark, #e6d7b4);
  border: 1px solid var(--fkl-paper-dark, #cbb994);
}
.op-progress__bar > span {
  display: block; height: 100%; width: 0;
  background: var(--gold-dim, #9d793d);
  transition: width 0.18s linear;
}
.op-progress__label {
  margin-top: 0.4rem;
  font-family: 'Courier New', Courier, monospace; font-size: 0.74rem;
  letter-spacing: 0.05em; color: var(--ink-mid, #5d4d31);
}

/* ── Entry-page transcript typography ────────────────────────────────────────
   The reflowed transcript emits <h4 class="fkl-transcript-head"> and <p>, and
   those needed spacing rules here as well as under .op-transcript — the
   operator preview had them and the public entry page did not, so the same
   text rendered finished in the console and cramped on the site. */
.transcript-body p { margin: 0 0 1.05rem; text-align: left; }
.transcript-body p:last-child { margin-bottom: 0; }
.transcript-body .fkl-contents-line { margin: 0 0 0.18rem; }
.transcript-body .fkl-transcript-head { max-width: 100%; }
/* Reflowed HTML supplies its own block spacing, so the pre-wrap used for raw
   text must not also collapse-protect it. Set inline by the renderer; declared
   here too so a no-JS/failed-reflow fallback still wraps. */
.transcript-body { white-space: pre-wrap; }

/* ── Text withheld: the work is in copyright ─────────────────────────────────
   Shown instead of a transcript on a catalogue-only record. It is an
   explanation, not an error message. */
.rights-withheld { font-family: Georgia, 'Times New Roman', serif; }
.rights-withheld__head {
  font-family: 'Courier New', Courier, monospace;
  font-size: 0.72rem; letter-spacing: 0.13em; text-transform: uppercase;
  color: var(--gold-dim, #9d793d);
  padding-bottom: 0.5rem; margin-bottom: 0.9rem;
  border-bottom: 1px solid var(--border-light, rgba(120,88,40,0.28));
}
.rights-withheld p { margin: 0 0 0.9rem; font-size: 0.95rem; line-height: 1.75; }
.rights-withheld__link { margin-top: 1.1rem; font-family: 'Courier New', Courier, monospace; font-size: 0.85rem; }
.rights-withheld__note {
  font-size: 0.86rem !important; font-style: italic; opacity: 0.82;
  padding-top: 0.8rem; border-top: 1px solid var(--border-light, rgba(120,88,40,0.2));
}

/* ── Reader theme must beat the page skins ───────────────────────────────────
   FOUR separate skin blocks in this file set `background: … !important` on
   .transcript-body (lines ~1842, ~2382, ~3024, ~4255). The reader theme is an
   explicit choice by the reader, so it has to outrank all of them: scoped from
   `html body` to put its specificity above any bare-class skin rule, whichever
   one happens to be last. */
html body .reader-pane.reader--light,
html body .transcript-body.reader--light,
html body .op-transcript.reader--light,
html body .rv-fulltext.reader--light {
  background: #ffffff !important;
  background-image: none !important;
  border-color: #dcdcdc !important;
  box-shadow: none !important;
  color: #1a1a1a !important;
}
html body .reader-pane.reader--light p,
html body .reader-pane.reader--light em,
html body .reader-pane.reader--light strong,
html body .reader-pane.reader--light h3,
html body .reader-pane.reader--light h4,
html body .reader-pane.reader--light .fkl-contents-line { color: #1a1a1a !important; }
html body .reader-pane.reader--light a { color: #8a2b1d !important; }

html body .reader-pane.reader--dark,
html body .transcript-body.reader--dark,
html body .op-transcript.reader--dark,
html body .rv-fulltext.reader--dark {
  background: #141210 !important;
  background-image: none !important;
  border-color: #3a2f22 !important;
  box-shadow: none !important;
  color: #e8dcc6 !important;
}
html body .reader-pane.reader--dark p,
html body .reader-pane.reader--dark em,
html body .reader-pane.reader--dark strong,
html body .reader-pane.reader--dark h3,
html body .reader-pane.reader--dark h4,
html body .reader-pane.reader--dark .fkl-contents-line { color: #e8dcc6 !important; }
html body .reader-pane.reader--dark a { color: #d8a75a !important; }
html body .reader-pane.reader--dark .fkl-transcript-head { border-bottom-color: #4a3c28 !important; }

/* ── Transcript header row + reading-pane button ─────────────────────────────
   The button sits top-right of "Full Transcript" and opens the same
   near-fullscreen reader the review queue and receipts use. */
.transcript-head-row {
  display: flex; align-items: flex-start; justify-content: space-between;
  gap: 1rem; margin-bottom: 1rem;
}
.transcript-head-row .transcript-title { margin-bottom: 0; }
.transcript-expand {
  flex: 0 0 auto; cursor: pointer;
  font-family: 'Courier New', Courier, monospace;
  font-size: 0.72rem; letter-spacing: 0.1em; text-transform: uppercase;
  padding: 0.5rem 0.8rem; margin-top: 0.15rem;
  color: var(--fkl-ink, #2e2312);
  background: var(--fkl-paper-dark, #e6d7b4);
  border: 1.5px solid var(--fkl-brass, #9c6c33); border-radius: 3px;
}
.transcript-expand:hover { background: rgba(196,154,72,0.30); }
@media (max-width: 560px) {
  .transcript-head-row { flex-direction: column; }
  .transcript-expand { align-self: flex-start; }
}

/* While the reading pane is open the page behind it must not scroll — two
   scrollbars fighting is exactly the sideways-reading problem this replaced. */
body.rv-locked { overflow: hidden; }

/* The entry transcript is capped at 600px inline while previewing; expanded it
   must fill the screen, so the height rules have to beat that. */
.transcript-body.rv-fulltext--expanded {
  position: fixed; inset: 3vh 4vw; z-index: 90;
  max-height: none !important; height: 94vh; width: auto;
  padding: 2rem 2.6rem; overflow-y: auto;
  box-shadow: 0 18px 60px rgba(20, 10, 2, 0.55);
  font-size: 1.06rem; line-height: 1.78;
}
.transcript-body.rv-fulltext--expanded p,
.transcript-body.rv-fulltext--expanded .fkl-transcript-head {
  max-width: 46rem; margin-left: auto; margin-right: auto;
}

/* ── Operator composer: write or paste an original work ──────────────────── */
.op-compose { margin-bottom: 1.1rem; }
.op-compose__meta { display: flex; flex-direction: column; gap: 0.5rem; margin-bottom: 0.6rem; }
.op-toolbar {
  display: flex; flex-wrap: wrap; align-items: center; gap: 0.3rem;
  padding: 0.45rem 0.55rem;
  background: var(--fkl-paper-dark, #e6d7b4);
  border: 1.5px solid var(--fkl-brass, #9c6c33);
  border-bottom: 0; border-radius: 3px 3px 0 0;
}
.op-toolbar button, .op-toolbar select {
  font-family: 'Courier New', Courier, monospace; font-size: 0.76rem;
  padding: 0.3rem 0.55rem; cursor: pointer;
  color: var(--fkl-ink, #2e2312);
  background: #fbf4df;
  border: 1px solid var(--fkl-paper-dark, #cbb994); border-radius: 2px;
}
.op-toolbar button:hover { background: rgba(196,154,72,0.28); }
.op-toolbar button:active { background: rgba(196,154,72,0.45); }
.op-toolbar__sep { width: 1px; height: 18px; background: rgba(120,88,40,0.35); margin: 0 0.25rem; }
.op-editor {
  min-height: 260px; max-height: 60vh; overflow-y: auto;
  padding: 1.1rem 1.25rem;
  background: #fbf4df; color: var(--fkl-ink, #2e2312);
  border: 1.5px solid var(--fkl-brass, #9c6c33); border-radius: 0 0 3px 3px;
  font-family: Georgia, 'Times New Roman', serif; font-size: 1rem; line-height: 1.75;
  overflow-wrap: anywhere;
}
.op-editor:focus { outline: 2px solid rgba(156,108,51,0.5); outline-offset: -2px; }
.op-editor:empty::before {
  content: attr(data-placeholder); color: rgba(70,52,26,0.5); font-style: italic;
}
.op-editor p { margin: 0 0 0.95rem; }
.op-editor h2 { font-size: 1.3rem; margin: 1.3rem 0 0.5rem; }
.op-editor h3 { font-size: 1.12rem; margin: 1.1rem 0 0.45rem; }
.op-editor blockquote {
  margin: 0 0 0.95rem; padding-left: 1rem;
  border-left: 3px solid var(--fkl-brass, #9c6c33); font-style: italic;
}
.op-editor ul, .op-editor ol { margin: 0 0 0.95rem 1.4rem; }
.op-compose__foot {
  display: flex; align-items: center; justify-content: space-between;
  gap: 1rem; margin-top: 0.7rem;
}
.op-compose__count {
  font-family: 'Courier New', Courier, monospace; font-size: 0.74rem;
  letter-spacing: 0.06em; color: var(--ink-mid, #5d4d31);
}
.op-compose__count.is-short { color: #9a3412; }

/* Author-chosen text sizes. A fixed set, because the sanitiser only permits
   these four classes — an arbitrary inline style would be dropped. */
.fkl-size-sm { font-size: 0.86em; }
.fkl-size-md { font-size: 1em; }
.fkl-size-lg { font-size: 1.25em; }
.fkl-size-xl { font-size: 1.5em; }

/* An original work keeps its own structure, so the transcript pane styles its
   markup directly rather than the reflowed shape. */
.transcript-body--authored h2 { font-size: 1.3rem; margin: 1.5rem 0 0.6rem; font-weight: 700; }
.transcript-body--authored h3 { font-size: 1.12rem; margin: 1.25rem 0 0.5rem; font-weight: 700; }
.transcript-body--authored blockquote {
  margin: 0 0 1.05rem; padding-left: 1.1rem;
  border-left: 3px solid var(--fkl-brass, #9c6c33); font-style: italic;
}
.transcript-body--authored ul, .transcript-body--authored ol { margin: 0 0 1.05rem 1.5rem; }
.transcript-body--authored li { margin-bottom: 0.4rem; }

/* ── Table plate ─────────────────────────────────────────────────────────────
   De revolutionibus is largely astronomical tables, and the 1543 blackletter
   figures do not survive OCR — 5 reads as $, 6 as £ — so a transcription would
   be a tidy grid of wrong numbers. The preserved page scan is the only form in
   which these tables are actually readable, so the image is the content here,
   not an illustration. */
.fkl-table-plate {
  display: block; margin: 1.6rem 0; padding: 0;
  border: 1px solid var(--fkl-brass, #9c6c33); border-radius: 3px;
  background: rgba(196,154,72,0.08);
  overflow: hidden;
}
.fkl-table-plate__img {
  display: block; width: 100%; height: auto; max-width: 100%;
  background: #fff;
  border-bottom: 1px solid var(--fkl-brass, #9c6c33);
}
.fkl-table-plate a { display: block; }
.fkl-table-plate__cap {
  display: block; padding: 0.75rem 1rem;
  font-family: 'Courier New', Courier, monospace;
  font-size: 0.74rem; line-height: 1.6; color: var(--ink-mid, #5d4d31);
}
.fkl-table-plate__tag {
  display: block; margin-bottom: 0.3rem;
  font-size: 0.68rem; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--gold-dim, #9d793d);
}
/* In the expanded reading pane the plates get the column width the prose has,
   so a table is not stretched across the whole screen. */
.rv-fulltext--expanded .fkl-table-plate,
.transcript-body.rv-fulltext--expanded .fkl-table-plate {
  max-width: 46rem; margin-left: auto; margin-right: auto;
}

/* ── Quality findings ────────────────────────────────────────────────────────
   The archivist's view of what the checks found. Severity is colour-coded so a
   blocker cannot be mistaken for a note at a glance. */
.rv-quality {
  margin: 0.7rem 0; padding: 0.7rem 0.9rem; border-radius: 3px;
  border-left: 3px solid var(--fkl-brass, #9c6c33);
  background: rgba(196,154,72,0.10);
  font-family: 'Courier New', Courier, monospace; font-size: 0.76rem; line-height: 1.6;
}
.rv-quality--clean { border-left-color: #3f7d3f; background: rgba(63,125,63,0.08); }
.rv-quality--note { border-left-color: #9c6c33; }
.rv-quality--serious { border-left-color: #b8651c; background: rgba(184,101,28,0.10); }
.rv-quality--blocker { border-left-color: #8a2b1d; background: rgba(138,43,29,0.12); }
.rv-quality__tag {
  display: block; font-size: 0.68rem; letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--gold-dim, #9d793d); margin-bottom: 0.35rem;
}
.rv-quality__list { margin: 0; padding-left: 1.1rem; }
.rv-quality__item { margin-bottom: 0.25rem; }
.rv-quality__item--blocker { color: #8a2b1d; font-weight: 700; }
.rv-quality__item--serious { color: #8a4a12; }
.rv-quality__item--note { opacity: 0.85; }

/* ── Correcting a record ─────────────────────────────────────────────────────
   Two forms, two trust levels. The contributor may fix how their own document is
   described; the archivist may correct anything the catalogue asserts. Neither
   can edit a measurement — see IMMUTABLE_FIELDS in _records.mjs. */
.sub-edit {
  margin: 1.2rem 0; padding: 1.1rem 1.25rem;
  border: 1.5px solid var(--fkl-brass, #9c6c33); border-radius: 3px;
  background: rgba(196,154,72,0.08);
}
.sub-edit__head { margin-bottom: 0.8rem; }
.sub-edit__head .op-lead { margin: 0.4rem 0 0; font-size: 0.86rem; }
.sub-edit__label {
  display: block; margin: 0.75rem 0 0.3rem;
  font-family: 'Courier New', Courier, monospace;
  font-size: 0.7rem; letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--gold-dim, #9d793d);
}
.sub-edit__label span { text-transform: none; letter-spacing: 0; opacity: 0.75; }
.sub-edit__area { resize: vertical; min-height: 5rem; line-height: 1.6; }
.sub-edit__foot {
  display: flex; align-items: center; justify-content: space-between;
  gap: 1rem; margin-top: 1rem;
}
.sub-edit__msg, .rv-edit__msg {
  font-family: 'Courier New', Courier, monospace; font-size: 0.76rem;
  color: var(--ink-mid, #5d4d31);
}
.sub-edit__msg.is-ok, .rv-edit__msg.is-ok { color: #3f7d3f; }
.sub-edit__msg.is-err, .rv-edit__msg.is-err { color: #8a2b1d; }

.rv-edit { margin: 0.9rem 0; }
.rv-edit > summary {
  cursor: pointer; padding: 0.45rem 0;
  font-family: 'Courier New', Courier, monospace;
  font-size: 0.74rem; letter-spacing: 0.1em; text-transform: uppercase;
  color: var(--gold-dim, #9d793d);
}
.rv-edit__grid {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
  gap: 0.6rem; margin: 0.6rem 0 0.4rem;
}
.rv-edit__field { display: flex; flex-direction: column; gap: 0.25rem; }
.rv-edit__field--wide { grid-column: 1 / -1; }
.rv-edit__field > span {
  font-family: 'Courier New', Courier, monospace;
  font-size: 0.68rem; letter-spacing: 0.1em; text-transform: uppercase;
  color: var(--gold-dim, #9d793d);
}
.rv-edit__field textarea { resize: vertical; line-height: 1.55; }
.rv-edit__trail {
  margin-top: 0.7rem; padding-top: 0.6rem;
  border-top: 1px solid rgba(120,88,40,0.28);
  font-family: 'Courier New', Courier, monospace; font-size: 0.72rem;
}
.rv-edit__trail ul { margin: 0.3rem 0 0; padding-left: 1.1rem; }
.rv-edit__trail li { margin-bottom: 0.2rem; opacity: 0.85; }

/* ── long titles on cover artwork ─────────────────────────────────────────────
   A cover is a fixed 2:3 rectangle and .cover-type is pinned to its bottom edge
   with position:absolute, so a long title in normal flow grows down the cover,
   slides underneath the chip, and then spills past the border because an earlier
   pass set overflow:visible. "Let Us Provide Active Support for the
   Revolutionary Struggle of the Chinese People" took eight lines and printed
   straight through the PRIMARY plate.

   The artwork is the one place a title can safely be cut, because the COMPLETE
   title is already printed immediately beside it — <h3> inside a
   .concept-record, .archive-card__title inside an archive card. So the drawing
   clips and the record stays whole. This re-clamps the artwork that the earlier
   "show the COMPLETE title" pass unclamped: that pass was right that a full
   title must be readable, and it still is, one column to the right. */

/* Back into the flex column, so the chip can never be overlapped again. */
.cover-type{
  position:static !important; bottom:auto; left:auto;
  margin-top:auto; align-self:flex-start;
}

/* The drawing clips. */
.archive-card__cover,.concept-book{overflow:hidden !important;}
.concept-book strong,.cover-title{
  display:-webkit-box !important; -webkit-box-orient:vertical;
  -webkit-line-clamp:6 !important; overflow:hidden !important;
  text-overflow:ellipsis;
}

/* Mobile keeps its own tuning, restated here because this block comes later and
   would otherwise win: fewer lines on a 92px spine, and no chip at all. */
@media (max-width:760px){
  .concept-book strong,.cover-title{
    -webkit-line-clamp:5 !important; max-height:4.1rem !important;
  }
  .cover-type{display:none !important;}
}

/* ── cross-browser and off-fullscreen fixes (v=alpha-viewing-36) ──────────────
   Measured across 320–1440px in every page, in same-origin iframes so the media
   queries genuinely applied. No page overflows horizontally at any width; these
   are the four things that did go wrong.

   1. THE OFF-FULLSCREEN BUG. Between 861px and 980px the header was 461px tall
      on a 900px window, where 1000px gives 232px and 860px gives 349px. Two
      breakpoints disagreed: the nav starts stacking at 980px, but the search box
      and the translate widget were only hidden at 860px, so the stacked band
      kept them and put each on its own row.
   2. iOS Safari zooms the entire page when a focused input has a font-size under
      16px, and does not zoom back out. The search field was 13.3px and the
      newsletter field 15.2px. 16px is the exact threshold, not a rounding.
   3. 100vh on iOS Safari measures the space behind the browser toolbar, so a
      hero sized with it grows and shrinks as the toolbar hides. dvh is the fix,
      behind @supports so an engine without it keeps the old value.
   4. Five nav links in a two-column grid took three rows on a phone. */

/* 1. the stacked band hides what the narrow band hides. */
@media (max-width: 980px){
  .nav-search, .translate-control { display: none !important; }
}

/* 2. 16px on anything you can type into, so iOS never zooms the page. Not
   inside a media query: iPad Safari reports about 1024px and zooms just the same,
   so a width-scoped rule would have missed every iPad. The fields have fixed
   widths, so only the text inside them grows. */
input[type="search"], input[type="text"], input[type="email"],
input[type="url"], input[type="tel"], input[type="password"],
textarea, select, .nav-search-input, .fkl-signup__input {
  font-size: 16px !important;
  max-width: 100%;
}

/* 3. the dynamic viewport, where the engine has it. */
@supports (height: 100dvh){
  .concept-hero { min-height: calc(100dvh - 250px) !important; }
  .about-hero, .operator-locked-hero { min-height: calc(100dvh - 175px) !important; }
  .about-hero + .fkl-neutral { padding-top: calc(100dvh - 470px) !important; }
}

/* 4. Five links: three columns is two rows. Below 400px three columns would
   crowd "Operator", so the narrowest phones keep two. */
@media (min-width: 361px) and (max-width: 760px){
  .site-nav__links { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
}

/* Five links in a four-column grid left "Operator" alone on a second row for
   every window between 761px and 980px. Five columns is one clean row; the
   labels are short enough that even 761px gives each about 150px. */
@media (min-width: 761px) and (max-width: 980px){
  .site-nav__links { grid-template-columns: repeat(5, minmax(0, 1fr)) !important; }
}

/* The search glyph was U+2315, "telephone recorder", standing in for a
   magnifier. Plenty of fonts do not carry it, so it rendered as a box on some
   engines. It is an inline SVG now and draws the same everywhere. */
.nav-search-btn svg { display: block; }

/* The cover title sat 17px from the top of a 165px cover, with about 70px of
   dead space between its rule and the type chip. The chip holds the bottom by
   its auto margin, so the title just needs a small push down to sit better in
   the composition. Small on purpose: a phone spine is 129px tall and has less
   room to give away. */
.concept-book strong, .cover-title { margin-top: 1.1rem; }
@media (max-width: 760px){
  .concept-book strong, .cover-title { margin-top: 0.55rem; }
}

/* ── the cover must not collapse (v=alpha-viewing-40) ─────────────────────────
   Measured cover width by viewport: 93px at 1280 and above, 76px at 1100,
   66px at 900 and 768, then back up to 92px at 600 and 86px at 430. Not
   monotonic — the same shape of bug as the nav header. The mobile rules set an
   explicit width and the desktop layout gives 93px, but the 768-1100 band sets
   none, so the record grid squeezed the cover to 66px. A 66px cover holding
   9.2px type is what sliced twenty of thirty-six titles mid-word at 900px.

   The fix is a floor on the cover, not smaller type: shrinking the font to fit a
   collapsed cover produced 3px text, which is worse than a cut title. The grid's
   first column is 95px at 900 and 105px at 1100, so 86px fits inside it. */
.concept-book, .archive-card__cover {
  /* min() so the floor can never exceed the space available — a flat 86px
     pushed 9px past the viewport at 1100. */
  min-width: min(86px, 100%);
  max-width: 100%;
}

/* The clamp, not the space, was cutting the last two titles: at 1600px the cover
   is 140px tall and six lines of 10.5px type occupy about 78px, so there was room
   for more. Eight lines clears "Slave Narratives: A Folk History of Slavery…" and
   the Musk quotation on a phone-width archive card. */
.concept-book strong, .cover-title { -webkit-line-clamp: 8 !important; }

/* ── CONTRIBUTOR TERMS (v=alpha-viewing-42) ──────────────────────────────────
   The submission paths had no terms at all: nothing stated what a contributor
   was granting, and nothing asked whether they had the right to submit the work.
   Built from the existing card recipe rather than a new one. */
/* The marker is "[ ]" in a monospace face: three characters, about 1.25rem wide
   at 0.7rem. The indent used to be 1.05rem, which is narrower than the marker
   itself, so the closing bracket ran into the first word. The indent has to
   clear the marker AND leave a gap, not merely match it. */
.fkl-terms__list {
  margin: 0 0 0.9rem;
  padding-left: 1.75rem;
  list-style: none;
}
.fkl-terms__list li {
  position: relative;
  margin: 0 0 0.55rem;
  line-height: 1.5;
  color: var(--fkl-ink-soft);
}
.fkl-terms__list li::before {
  content: "[ ]";
  position: absolute;
  left: -1.75rem;
  font-family: var(--font-mono);
  font-size: 0.7rem;
  color: var(--fkl-red);
}
.fkl-terms__list strong { color: var(--fkl-ink); }

.fkl-terms__agree {
  display: flex;
  align-items: flex-start;
  gap: 0.55rem;
  padding: 0.6rem 0.7rem;
  border: 2px solid var(--fkl-brass);
  border-radius: 3px;
  background: rgba(196, 154, 72, 0.10);
  cursor: pointer;
  color: var(--fkl-ink);
  line-height: 1.45;
}
/* 16px minimum, or iOS Safari zooms the page on focus and never zooms back. */
.fkl-terms__agree input[type="checkbox"] {
  margin-top: 0.18rem;
  width: 16px;
  height: 16px;
  flex: 0 0 auto;
  accent-color: var(--fkl-red);
}
.fkl-terms__msg { color: var(--fkl-red) !important; margin-top: 0.5rem; }

/* ── COVER TITLES: clip on a line, never through one (v=alpha-viewing-44) ─────
   -webkit-line-clamp IS DEAD IN CURRENT CHROME on these elements. Measured:
   the rule sets display:-webkit-box !important and the computed value is still
   `flow-root`, and it stays flow-root even when the property is forced inline
   on the element. So the clamp has been doing nothing for a while, and the only
   reason covers looked right is the 38/64-character truncation in JS.

   What was left holding the line was `overflow:hidden` on a box whose height is
   not a whole number of lines: 70px of box against a 10.99px line-height is
   6.37 lines, so the seventh line was half-drawn and then cut through the middle
   of a word — "…Support For The Revolutionar". The brand guide is explicit that
   long words break rather than being cut (page 09), so this is a brand fault as
   well as an ugly one.

   The fix is to stop relying on the clamp: make the box an exact multiple of the
   line-height, so whatever is cut is cut between lines and reads as deliberate.
   --cover-lines is per template because the three covers are different heights.
   Kept as the last word in the file so nothing later can reintroduce a fraction. */
.concept-book strong,
.cover-title {
  --cover-lh: 1.12;
  line-height: var(--cover-lh) !important;
  max-height: calc(var(--cover-lh) * var(--cover-lines, 6) * 1em) !important;
  overflow: hidden !important;
  /* Kept for engines where it still works; harmless where it does not. */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: var(--cover-lines, 6);
}
.archive-card__cover .cover-title { --cover-lines: 6; }
.concept-book strong { --cover-lines: 6; }
@media (max-width: 760px) {
  .concept-book strong,
  .cover-title { --cover-lines: 5; max-height: calc(var(--cover-lh) * 5 * 1em) !important; }
}

/* The classification chip is a stamp, and a stamp does not wrap. "SECONDARY" was
   breaking across two lines as "SECONDA / RY" inside a 67px chip on every
   secondary-source cover. Stamps are uppercase mono by the brand guide (page 07)
   and read as damaged the moment they wrap. Let the chip size to its own text
   and step the tracking down instead of breaking the word. */
.cover-type {
  white-space: nowrap !important;
  width: auto !important;
  max-width: 100% !important;
  letter-spacing: 0.06em;
}

/* Long words on a narrow spine may break — the brand guide asks for break rather
   than cut (page 09) — but an automatic hyphen makes the break read as
   typography instead of damage: "Responsibil-ity", not "Responsibilit y". */
.concept-book strong,
.cover-title { hyphens: auto; -webkit-hyphens: auto; }

/* ── READER ACCOUNTS AND THE FORUM (v=alpha-viewing-45) ──────────────────────
   Built from the system that is already here rather than a new one: the card is
   the established paper-grain + brass-border + offset-shadow recipe, actions are
   .btn-support maroon, kickers are .donate-status Courier chips, and every
   colour is an --fkl-* token. The brand guide's page 10 rule for the operator
   applies just as well to a forum: it is another room in the reading room, not a
   separate app aesthetic. */

/* The nav's account link: a small brass plaque, matching the nav buttons. */
.site-nav__account {
  display: inline-flex; align-items: center; gap: 0.4rem;
  font-family: 'Courier New', Courier, monospace;
  font-size: 0.68rem; letter-spacing: 0.09em; text-transform: uppercase;
  color: var(--fkl-gilt, #f0d188); text-decoration: none;
  padding: 0.45rem 0.7rem; border: 1.5px solid var(--fkl-brass, #c49a48);
  border-radius: 3px; background: rgba(0, 0, 0, 0.22);
  white-space: nowrap;
}
.site-nav__account:hover { background: rgba(196, 154, 72, 0.18); }
.site-nav__account span {
  /* 11ch clipped "My account" to "MY ACCOU…" — Courier is monospace but the
     0.09em tracking is not counted by ch. Room for a long reader name, and the
     ellipsis only bites on one genuinely longer than that. */
  max-width: 16ch; overflow: hidden; text-overflow: ellipsis;
}

/* ── the forum under a reading ─────────────────────────────────────────────── */
.forum-section {
  margin-top: 2rem; padding: 1.4rem 1.5rem 1.6rem;
  background: url('paper-grain.png') center/512px repeat, var(--fkl-paper-card, #f6e8c6);
  border: 2px solid #9c6c33; border-radius: 3px;
  box-shadow: var(--fkl-card-shadow, 4px 4px 0 rgba(36, 20, 7, 0.28));
  color: var(--fkl-ink, #241407);
}
.forum-title {
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 1.25rem; margin: 0.45rem 0 0.5rem; color: var(--fkl-ink, #241407);
}
.forum-count {
  font-family: 'Courier New', Courier, monospace; font-size: 0.7rem;
  vertical-align: middle; padding: 0.1rem 0.4rem; margin-left: 0.3rem;
  border: 1px solid var(--fkl-brass, #c49a48); border-radius: 2px;
  color: var(--fkl-ink-soft, #5a3b1d);
}
.forum-note, .forum-empty, .forum-loading {
  font-size: 0.86rem; line-height: 1.5; color: var(--fkl-ink-soft, #5a3b1d); margin: 0 0 0.6rem;
}
.forum-empty { font-style: italic; }
.forum-list { margin: 1rem 0; display: flex; flex-direction: column; gap: 0.8rem; }

.forum-comment {
  position: relative;
  padding: 0.8rem 0.95rem; background: var(--fkl-paper-light, #fbf1d4);
  border: 1.5px solid rgba(156, 108, 51, 0.55); border-radius: 2px;
}
.forum-comment__head {
  display: flex; justify-content: space-between; align-items: baseline;
  gap: 0.6rem; margin-bottom: 0.35rem; flex-wrap: wrap;
}
.forum-comment__author {
  font-family: 'Courier New', Courier, monospace; font-size: 0.72rem;
  letter-spacing: 0.06em; text-transform: uppercase; color: var(--fkl-red, #862b21);
}
.forum-comment__date {
  font-family: 'Courier New', Courier, monospace; font-size: 0.68rem;
  color: var(--fkl-ink-muted, #7b5628);
}
.forum-comment__body {
  font-family: Georgia, 'Times New Roman', serif; font-size: 0.95rem; line-height: 1.55;
  /* A comment is reader-written and can hold a very long unbroken string. */
  overflow-wrap: break-word; word-break: break-word;
}
.forum-report {
  margin-top: 0.5rem; background: none; border: none; padding: 0; cursor: pointer;
  font-family: 'Courier New', Courier, monospace; font-size: 0.64rem;
  letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--fkl-ink-muted, #7b5628); text-decoration: underline;
}
.forum-report:hover { color: var(--fkl-red, #862b21); }

.forum-composer { margin-top: 1rem; }
.forum-label {
  display: block; margin-bottom: 0.3rem;
  font-family: 'Courier New', Courier, monospace; font-size: 0.7rem;
  letter-spacing: 0.07em; text-transform: uppercase; color: var(--fkl-ink-soft, #5a3b1d);
}
.forum-hint { text-transform: none; letter-spacing: 0; opacity: 0.75; }
.forum-textarea {
  width: 100%; box-sizing: border-box; resize: vertical;
  font-family: Georgia, 'Times New Roman', serif;
  /* 16px exactly: iOS Safari zooms the page for anything smaller and never
     zooms back. Not in a media query on purpose — iPad reports ~1024px. */
  font-size: 16px; line-height: 1.5; padding: 0.7rem 0.8rem;
  background: #fbf4df; color: var(--fkl-ink, #241407);
  border: 1.5px solid var(--fkl-paper-dark, #b88f4f); border-radius: 2px;
}
.forum-textarea:focus {
  outline: none; border-color: var(--fkl-brass, #c49a48);
  box-shadow: 0 0 0 2px rgba(196, 154, 72, 0.28);
}
.forum-composer__row {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
  gap: 0.6rem; margin-top: 0.6rem;
}
.forum-msg { font-size: 0.82rem; color: var(--fkl-red, #862b21); }
.forum-signin {
  margin-top: 1rem; padding: 0.9rem 1rem; text-align: center;
  border: 1.5px dashed rgba(156, 108, 51, 0.6); border-radius: 2px;
}
.forum-signin p { margin: 0 0 0.6rem; color: var(--fkl-ink-soft, #5a3b1d); }

/* ── the bookmark control ──────────────────────────────────────────────────── */
.record-actions { margin-top: 1.2rem; }
.bookmark-btn {
  display: inline-flex; align-items: center; gap: 0.4rem; cursor: pointer;
  font-family: 'Courier New', Courier, monospace; font-size: 0.7rem;
  letter-spacing: 0.08em; text-transform: uppercase;
  padding: 0.5rem 0.85rem; border-radius: 2px;
  border: 1.5px solid var(--fkl-brass, #c49a48);
  background: var(--fkl-paper-light, #fbf1d4); color: var(--fkl-ink, #241407);
}
.bookmark-btn:hover { background: #f3e2b6; }
.bookmark-btn.is-saved {
  background: var(--fkl-red, #862b21); border-color: var(--fkl-red, #862b21); color: #f0d188;
}
.bookmark-btn[disabled] { opacity: 0.6; cursor: default; }

/* ── the account page ──────────────────────────────────────────────────────── */
.acct-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 1.2rem; }
.acct-panel, .acct-section {
  padding: 1.2rem 1.3rem; margin-bottom: 1.2rem;
  background: url('paper-grain.png') center/512px repeat, var(--fkl-paper-card, #f6e8c6);
  border: 2px solid #9c6c33; border-radius: 3px;
  box-shadow: var(--fkl-card-shadow, 4px 4px 0 rgba(36, 20, 7, 0.28));
  /* min-width:0 so a grid child can shrink; without it a long word inside pushes
     the panel past the viewport and body{overflow-x:hidden} deletes the overflow
     with no scrollbar to show anything is missing. */
  min-width: 0;
}
.acct-heading {
  font-family: Georgia, 'Times New Roman', serif; font-size: 1.1rem;
  margin: 0.4rem 0 0.8rem; color: var(--fkl-ink, #241407);
}
.acct-form .op-input { width: 100%; box-sizing: border-box; margin-bottom: 0.7rem; font-size: 16px; }
.acct-privacy {
  font-size: 0.78rem; line-height: 1.5; color: var(--fkl-ink-soft, #5a3b1d);
  border-left: 3px solid var(--fkl-brass, #c49a48); padding-left: 0.7rem; margin: 0.4rem 0 0.8rem;
}
.acct-list { display: flex; flex-direction: column; gap: 0.6rem; margin-top: 0.7rem; }
.acct-item {
  display: block; padding: 0.7rem 0.85rem; text-decoration: none;
  background: var(--fkl-paper-light, #fbf1d4);
  border: 1.5px solid rgba(156, 108, 51, 0.55); border-radius: 2px;
  color: var(--fkl-ink, #241407);
}
.acct-item:hover { border-color: var(--fkl-brass, #c49a48); }
.acct-item__title {
  display: block; font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.98rem; margin-bottom: 0.15rem;
}
.acct-item__body {
  display: block; font-size: 0.85rem; color: var(--fkl-ink-soft, #5a3b1d);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.acct-item__meta {
  display: block; margin-top: 0.25rem;
  font-family: 'Courier New', Courier, monospace; font-size: 0.65rem;
  letter-spacing: 0.07em; text-transform: uppercase; color: var(--fkl-ink-muted, #7b5628);
}

/* The account link sits at the end of the nav's link row, not in .nav-actions,
   because that row had no space for a fourth control and a link placed there
   added a whole extra nav row at EVERY width — 49px on desktop. Measured.

   It still costs a row between 860 and 1100px, which is the band CLAUDE.md
   already warns about: the nav starts stacking at 980 while the search and
   translate controls are only hidden at 860, so the stacked band is the tight
   one. The label goes and the icon stays for the whole of that band, which is
   the same trick the search box uses and keeps the nav height monotonic. */
@media (max-width: 1100px) {
  .site-nav__account span { display: none; }
  .site-nav__account { padding: 0.45rem 0.55rem; }
}

/* MEASURED COST, accepted rather than hidden: between 860 and 1100px the link
   adds one nav row (293px -> 331px). The link row already holds five links and
   .nav-actions still has search, translate and support in that band, so BOTH
   rows are full and a sixth item wraps whatever size it is — a bare borderless
   icon saved 2px of the 38. Nothing is clipped and the height stays monotonic as
   the window narrows. Do not "fix" this by putting the link back in
   .nav-actions: that added a whole row at EVERY width, 49px on desktop. */

/* ── BOOK COVERS, AS THE BRAND GUIDE DRAWS THEM (v=alpha-viewing-47) ─────────
   Page 09 of the guide is a picture, and until now this file had only ever been
   written against the words next to it. The drawing shows something the words do
   not say: every cover carries TWO gilt rules — one below the top edge and one
   above the bottom — with the title and the author centred between them. Ours
   had a single rule under the title, no author, and a classification chip that
   appears nowhere in the guide.

   Layout is top rule / centred text block / bottom rule, so the rules sit at the
   ends however tall the cover is and the text stays optically centred. The
   proportions come from the drawing: rules inset about a sixth from each side,
   text block centred with the title above the author. */

.archive-card__cover,
.concept-book {
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: space-between !important;
  box-sizing: border-box;
  text-align: center;

  /* THE SPINE IS 14% AND THE TEXT IS CENTRED ON WHAT IS LEFT, not on the cover.
     Every cover paints its spine with a hard gradient stop —
     `rgba(0,0,0,.26) 0 14%, transparent 14%` — measured identical on all seven
     variants. A symmetric padding centres the title on the whole cover, which
     puts it 2.4px inside the spine on a 110px cover and reads as a title
     sitting on the binding.

     The face runs 14%..100%, so its centre is 57%.

     THE OFFSET GOES ON THE CHILDREN, NOT ON THE COVER, and that is the whole
     trick. A percentage padding resolves against the CONTAINING BLOCK's inline
     size, not the element's own — on the archive the cover and its parent are
     both 110px so `padding-left: 21%` looked right, while on the home page the
     parent is 122px against a 93px cover and every percentage came out 31% too
     large: 25.6px of padding where 19.5px was wanted, and the title sat off
     centre the other way. A child's percentage DOES resolve against this
     element's content box, so the same numbers on .cover-text and .cover-rule
     are correct on every page and at every size. */
  padding-left: 0 !important;
  padding-right: 0 !important;
  padding-top: 11% !important;
  padding-bottom: 11% !important;
  align-items: flex-start !important;
}

/* 21%..93%: centred on the face's 57%, with equal air either side of it. */
.cover-rule,
.cover-text {
  width: 72% !important;
  margin-left: 21% !important;
}

/* The title carried 1.92px of its own side padding from an older layout, and
   that quarter-pixel decided a word: "Unwinnable" measures 60.4px against a
   content box of 60.16, so it broke as "Unwinnabl / e" while LOOKING like it
   fit. The gutter is .cover-text's job now, so the title gives its padding up
   and gets the full box. */
.concept-book strong,
.cover-title { padding-left: 0 !important; padding-right: 0 !important; }

.cover-rule {
  flex: 0 0 auto;
  height: 1px;
  background: var(--fkl-brass, #c49a48);
  opacity: 0.85;
}

.cover-text {
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  width: 100%;
  min-height: 0;   /* so the title's own clamp still governs its height */
  gap: 0.3em;
}

/* The author is the quieter line: same serif, lighter weight, smaller, and it
   never competes with the title for the clamp. Two lines at most. */
.cover-author {
  font-family: Georgia, 'Times New Roman', serif;
  font-weight: 400;
  font-size: 0.62em;
  line-height: 1.2;
  color: inherit;
  opacity: 0.82;
  max-height: 2.4em;
  overflow: hidden;
  overflow-wrap: break-word;
  margin: 0;
}
.concept-book .cover-author { margin-top: 0 !important; font-size: 0.62em; }
.cover-author:empty { display: none; }
/* The author line is fitted by FKL.fitCoverTitles like the title above it, and
   needs the same permission to break a word it cannot fit rather than overflow,
   plus the prefixed hyphens WebKit actually reads. Without this it split as
   "Congressio nal" under the GAO reports. */
.cover-author {
  overflow-wrap: break-word !important;
  word-break: normal !important;
  hyphens: auto !important;
  -webkit-hyphens: auto !important;
}

/* The old single rule and the classification chip are both gone from the cover.
   The chip was ours, not the guide's — page 09 shows title and author and
   nothing else, and the record's classification is still on the card beside it
   and in the Format filter. */
.cover-line { display: none !important; }
.cover-type { display: none !important; }

/* The FLAGSHIP badge is pinned to the top-left of the card and sat directly on
   the cover's upper rule, so the one record most people look at first was the
   one showing a single rule. The badge is ours, not the guide's, so the cover
   yields to it rather than the other way round: push the flagship cover's
   content down by the badge's height and both rules are visible again. */
.flagship-badge + .archive-card__cover { padding-top: 1.85rem !important; }

/* On a narrow spine the 7% gutter costs more than it is worth: the text box drops
   to 72% of an 86px cover and titles that used to fit start losing their last
   line to the clamp — "The National Bolshevist Manifesto" was 9px over at 375px.
   The gutter comes down to 4% below 760px, which keeps the text centred on the
   face (18%..96% is centred on 57% exactly as 21%..93% is) and gives back the
   room. Centring is preserved, not traded away. */
@media (max-width: 760px) {
  /* 80%/17% is still centred on the face's 57% and buys another 7px of line.
     "Unwinnable" measures about 63px in the cover's bold serif and the box was
     62, so it broke as "Unwinnab / le" — a mid-word break the brand guide
     tolerates but nobody wants to read. */
  .cover-rule,
  .cover-text {
    width: 80% !important;
    margin-left: 17% !important;
  }

  /* One word decided this. "Unwinnable" measures about 65px in the spine's bold
     serif and the phone box is 64, so it broke as "Unwinnabl / e" — one pixel
     short. Widening further would put the text within 2px of the spine, so the
     type gives way instead: a 6% reduction clears the word and the spine stays
     artwork, with the full title set beside it on the card either way.
     hyphens:auto is already on and would have made this a real hyphen, but
     Chrome needs a hyphenation dictionary that is not always present. */
  .concept-book strong,
  .cover-title { font-size: 0.62rem !important; }

  /* The badge is the same size on a phone as on a desktop, but the cover is
     129px instead of 165px. 1.85rem of clearance stole 18px from a cover that
     had none to give: the flagship lost the bottom of its title AND its
     author, and it was the only cover on the page still being cut.

     The choice on a phone is badge-over-rule or title-loses-a-line, so take
     neither: shrink the badge instead. At .48rem it is about 15px tall, 1rem of
     clearance covers it, and the flagship costs the same as every other cover. */
  .flagship-badge {
    font-size: .48rem; padding: .14rem .4rem; letter-spacing: .08em;
  }
  .flagship-badge + .archive-card__cover { padding-top: 1rem !important; }
}

/* ── PAGED READING (v=alpha-viewing-56) ──────────────────────────────────────
   A reading room should read like a book, not like a file. The transcript lays
   into columns one page wide and turns sideways; the brand guide's reading-room
   framing is the whole argument for it.

   Built from what is already here — parchment, brass rules, Courier for the
   furniture, --fkl-* tokens throughout — so it belongs to the same room as the
   Library/Light/Dark themes it sits beside. */

.reader-paged {
  overflow: hidden !important;
  position: relative;
  /* NO measure here any more. The measure moved to .reader-clip, which is one
     page wide and centred inside this box — so the pane itself can be as wide as
     the column it sits in, and the leftover reads as the margin of a page rather
     than as dead space beside a small box. Neal, on the old inline size: "its
     really small block until you open the pane which I don't like." */
  max-width: 100%;
  margin-left: auto;
  margin-right: auto;
  /* A page needs a fixed height to be a page. Taller than it was: the inline
     reader is now a page you can actually read a while in, not a preview. */
  height: clamp(460px, 74vh, 860px);
  max-height: none !important;
  padding-left: 0.2rem; padding-right: 0.2rem;
  cursor: default;
}

/* One page wide, centred, and it CLIPS. This is the element that makes a page a
   page: without it the next column sits in the pane's margin in plain sight. */
.reader-clip {
  overflow: hidden;
  position: relative;
}
.reader-paged .reader-flow {
  column-fill: auto;
  transition: transform 220ms ease;
  will-change: transform;
}
/* Nothing may straddle a page break: a heading stranded at the foot of a page
   with its paragraph on the next one is the tell that this is columns and not a
   book. Images are page scans and must not be split at all. */
.reader-paged .reader-flow h2,
.reader-paged .reader-flow h3,
.reader-paged .reader-flow h4 { break-after: avoid-column; break-inside: avoid-column; }
.reader-paged .reader-flow figure,
.reader-paged .reader-flow img,
.reader-paged .reader-flow blockquote,
.reader-paged .reader-flow table { break-inside: avoid-column; }
.reader-paged .reader-flow img { max-width: 100%; height: auto; }
.reader-paged .reader-flow p { orphans: 2; widows: 2; }

/* The turn zones. Invisible, but the cursor says they are there. */
.reader-paged::before,
.reader-paged::after {
  content: ''; position: absolute; top: 0; bottom: 0; width: 25%;
  pointer-events: none; z-index: 1;
}
.reader-paged { cursor: default; }

/* ── the pager ──────────────────────────────────────────────────────────── */
.reader-pager {
  display: flex; align-items: center; gap: 0.9rem;
  margin-top: 0.7rem; padding: 0.55rem 0.7rem;
  background: var(--fkl-paper-card, #f6e8c6);
  border: 1.5px solid var(--fkl-brass, #c49a48); border-radius: 3px;
}
.reader-pager[hidden] { display: none; }
.reader-pager__btn {
  flex: 0 0 auto; cursor: pointer;
  width: 2.1rem; height: 2.1rem; line-height: 1;
  font-size: 1.15rem; font-family: Georgia, 'Times New Roman', serif;
  color: var(--fkl-gilt, #f0d188);
  background: linear-gradient(180deg, #9b3325, var(--fkl-red-dark, #55180f));
  border: 1px solid #d6a15a; border-radius: 3px;
}
.reader-pager__btn:disabled { opacity: 0.35; cursor: default; }
.reader-pager__mid { flex: 1 1 auto; display: flex; align-items: center; gap: 0.7rem; min-width: 0; }
.reader-pager__slider { flex: 1 1 auto; min-width: 0; accent-color: var(--fkl-red, #862b21); }
.reader-pager__count {
  flex: 0 0 auto; font-family: 'Courier New', Courier, monospace;
  font-size: 0.72rem; letter-spacing: 0.06em; color: var(--fkl-ink-soft, #5a3b1d);
}

/* ── layout and size controls, beside the theme toggle ──────────────────── */
.reader-controls {
  display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem;
  margin: 0.5rem 0 0.2rem;
}
.reader-mode, .reader-size { display: inline-flex; gap: 0.3rem; }
.reader-mode button, .reader-size button {
  cursor: pointer; font-family: 'Courier New', Courier, monospace;
  font-size: 0.66rem; letter-spacing: 0.08em; text-transform: uppercase;
  padding: 0.34rem 0.6rem;
  background: var(--fkl-paper-light, #fbf1d4); color: var(--fkl-ink, #241407);
  border: 1.5px solid var(--fkl-paper-dark, #b88f4f); border-radius: 2px;
}
.reader-mode button.is-active {
  background: var(--fkl-red, #862b21); border-color: var(--fkl-red, #862b21);
  color: var(--fkl-gilt, #f0d188);
}
.reader-mode button:hover, .reader-size button:hover { border-color: var(--fkl-brass, #c49a48); }

/* THE READING PANE IS THE WHOLE SCREEN, and the measure is kept by columns.
   The 38rem cap above is a reading measure for the INLINE pane. Applied to the
   expanded one it made a full-screen reader into a 608px box in a 1440px window
   — a small square with no way to turn a page. The cap is lifted here and the
   line length is held instead by laying the page out in two or three columns,
   which is how a book solves the same problem. */
.rv-fulltext--expanded.reader-paged {
  max-width: min(1500px, 94vw) !important;
  width: min(1500px, 94vw) !important;
  height: calc(100vh - 9.5rem) !important;
  padding: 1.4rem 1.8rem !important;
}

/* THE PAGER HAS TO COME WITH IT. The pane goes position:fixed when it expands
   and the pager stayed in the document flow — measured at y=2028 in a 900px
   window, which is why the next-page button could not be clicked at all. It is
   fixed to the foot of the screen while the pane is open, above the backdrop
   (z-index 85) and the pane (90). body.rv-locked is set by FKL.expandReader and
   cleared by collapseReader, so it is already exactly the right hook. */
body.rv-locked .reader-pager {
  position: fixed;
  left: 50%;
  bottom: 1.1rem;
  transform: translateX(-50%);
  width: min(1500px, 94vw);
  z-index: 95;
  box-shadow: 0 6px 22px rgba(0, 0, 0, 0.45);
}

/* A page is one column now, so there is no spread and no binding rule to draw.
   The gutter is hidden inside the clip instead, which is what gives the turn its
   separation: the old page leaves entirely before the new one arrives. */

@media (max-width: 640px) {
  .reader-paged { height: clamp(380px, 70vh, 620px); }
  .reader-pager__slider { display: none; }   /* thumb is too small to aim at */
}

/* ── PASSWORD FIELDS: reveal, confirm, strength (v=alpha-viewing-57) ─────────
   A password you cannot read is where a typo becomes "that name and password do
   not match" an hour later. The eye is drawn in CSS rather than fetched, and it
   is per field: nothing is ever revealed by default. */

.pw-field { position: relative; }
.pw-field .op-input { width: 100%; box-sizing: border-box; padding-right: 2.6rem; }

.pw-eye {
  position: absolute; top: 50%; right: 0.45rem; transform: translateY(-50%);
  width: 1.8rem; height: 1.8rem; padding: 0; cursor: pointer;
  background: none; border: 1px solid transparent; border-radius: 2px;
  display: flex; align-items: center; justify-content: center;
}
.pw-eye:hover { border-color: var(--fkl-brass, #c49a48); }
/* The eye: an almond with a pupil, drawn from two boxes so no asset is needed
   and it inherits the ink colour of the form around it. */
.pw-eye::before {
  content: ''; width: 1.05rem; height: 0.62rem;
  border: 1.4px solid var(--fkl-ink-soft, #5a3b1d);
  border-radius: 65% 65% 65% 65% / 100% 100% 100% 100%;
}
.pw-eye::after {
  content: ''; position: absolute;
  width: 0.32rem; height: 0.32rem; border-radius: 50%;
  background: var(--fkl-ink-soft, #5a3b1d);
}
/* Revealed: the eye turns leather-red, so the state is obvious at a glance and
   in the one colour this site uses to mean "live". */
.pw-eye.is-on::before { border-color: var(--fkl-red, #862b21); }
.pw-eye.is-on::after  { background: var(--fkl-red, #862b21); }

/* strength, as guidance and never as a gate */
.pw-meter {
  display: flex; align-items: center; gap: 0.5rem;
  margin: -0.3rem 0 0.7rem;
}
.pw-meter span {
  flex: 1 1 auto; height: 4px; border-radius: 2px;
  background: rgba(156, 108, 51, 0.28); position: relative; overflow: hidden;
}
.pw-meter span::after {
  content: ''; position: absolute; inset: 0 100% 0 0;
  background: var(--fkl-brass, #c49a48); transition: right 160ms ease;
}
.pw-meter span.lvl-too-short::after { right: 82%; background: var(--fkl-red, #862b21); }
.pw-meter span.lvl-weak::after   { right: 70%; background: var(--fkl-red, #862b21); }
.pw-meter span.lvl-fair::after   { right: 50%; }
.pw-meter span.lvl-good::after   { right: 25%; }
.pw-meter span.lvl-strong::after { right: 0;   background: #2f6b43; }
.pw-meter em {
  flex: 0 0 auto; font-style: normal;
  font-family: 'Courier New', Courier, monospace; font-size: 0.64rem;
  letter-spacing: 0.07em; text-transform: uppercase; color: var(--fkl-ink-muted, #7b5628);
}

.pw-match {
  margin: -0.35rem 0 0.7rem; font-size: 0.78rem;
  font-family: 'Courier New', Courier, monospace; letter-spacing: 0.03em;
}
.pw-match.is-ok  { color: #2f6b43; }
.pw-match.is-off { color: var(--fkl-ink-muted, #7b5628); }

/* ── CHAPTER JUMPS AND A LIVE TABLE OF CONTENTS (v=alpha-viewing-58) ─────────
   A 243-page work needs a way in that is not flicking. The pager carries the
   document's own chapters, and the contents page the document already prints
   becomes what it always looked like it was: a set of links. */

.reader-pager__chapters {
  flex: 0 1 12rem; min-width: 0;
  font-family: 'Courier New', Courier, monospace;
  font-size: 0.68rem; letter-spacing: 0.04em;
  padding: 0.4rem 0.5rem;
  background: var(--fkl-paper-light, #fbf1d4); color: var(--fkl-ink, #241407);
  border: 1.5px solid var(--fkl-paper-dark, #b88f4f); border-radius: 2px;
}
.reader-pager__chapters:hover { border-color: var(--fkl-brass, #c49a48); }
.reader-pager__chapters[hidden] { display: none; }

/* Scrolling still gets the chapter list; it just has no page turner to show. */
.reader-pager--scroll .reader-pager__btn,
.reader-pager--scroll .reader-pager__mid { display: none; }
.reader-pager--scroll { justify-content: flex-start; }

/* A contents line that found its chapter looks like a link. One that did not is
   left exactly as the document printed it — half a contents page linking and
   half not is honest, and inventing a destination would not be. */
.fkl-contents-line.is-linked { margin: 0; }
a.fkl-contents-link {
  display: block; text-decoration: none; color: inherit;
  padding: 0.1rem 0.3rem; margin: 0 -0.3rem; border-radius: 2px;
  border-bottom: 1px dotted rgba(156, 108, 51, 0.5);
}
a.fkl-contents-link:hover {
  background: rgba(196, 154, 72, 0.16);
  border-bottom-color: var(--fkl-brass, #c49a48);
  color: var(--fkl-red, #862b21);
}
.reader--dark a.fkl-contents-link:hover { color: var(--fkl-gilt, #f0d188); }

/* The heading you were sent to, marked briefly so the eye lands on it. */
.fkl-transcript-head:target,
.fkl-transcript-head.is-jumped {
  animation: fkl-head-flash 1.4s ease-out 1;
}
@keyframes fkl-head-flash {
  0%   { background: rgba(196, 154, 72, 0.45); }
  100% { background: transparent; }
}

@media (max-width: 640px) {
  .reader-pager__chapters { flex: 1 1 auto; }
}

/* A COLUMN SETS THE MEASURE, so nothing inside it may carry its own width.
   The transcript's paragraphs are capped at 736px for the scrolling layout,
   which is right there and wrong here: in a 622px column every paragraph was
   wider than the column holding it, the two-column spread could not resolve,
   the text bunched into the middle of a full-screen pane and the first line was
   sliced by the top edge. Inside the flow the column IS the measure. */
.reader-paged .reader-flow > *,
.reader-paged .reader-flow p,
.reader-paged .reader-flow h2,
.reader-paged .reader-flow h3,
.reader-paged .reader-flow h4,
.reader-paged .reader-flow blockquote,
.reader-paged .reader-flow figure {
  max-width: none !important;
  width: auto !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
}
/* The first thing on a page must not carry a top margin, or the page opens with
   a gap and the last line falls off the bottom. */
.reader-paged .reader-flow > *:first-child { margin-top: 0 !important; }

/* ── The drop zone ────────────────────────────────────────────────────────
   Neal asked for drag-and-drop, 2026-08-31. The file input is still the thing
   that holds the file — a drop writes onto it via DataTransfer — so this is a
   surface laid over that input rather than a replacement for it. The input is
   stretched transparently across the whole zone: that keeps ONE click target,
   makes the whole panel open the dialog, and means no label/for wiring can
   drift out of step with it. */
.op-drop {
  position: relative;
  margin: 0 0 0.85rem;
  border: 1px dashed var(--fkl-paper-dark, #cbb994);
  border-radius: 3px;
  /* color-mix() is Safari 16.2 and Firefox 113. An engine that does not know it
     drops the whole declaration, which left the drop zone with no fill at all,
     so a flat parchment goes first and the mix overrides it where supported. */
  background: #f7efdc;
  background: color-mix(in srgb, var(--fkl-paper, #f5ecd7) 55%, transparent);
  transition: border-color 0.15s ease, background 0.15s ease;
}
.op-drop__inner {
  display: flex; flex-direction: column; align-items: center;
  gap: 0.3rem; padding: 1.6rem 1rem; text-align: center;
  pointer-events: none;  /* the input beneath takes every click */
}
.op-drop__icon {
  width: 26px; height: 26px; margin-bottom: 0.15rem;
  color: var(--gold-dim, #9d793d); opacity: 0.75;
}
.op-drop__lead {
  margin: 0; font-family: 'Courier New', Courier, monospace;
  font-size: 0.82rem; letter-spacing: 0.06em;
  color: var(--fkl-ink, #2e2312);
  /* A long filename must wrap inside the zone rather than widen it. */
  max-width: 100%; overflow-wrap: anywhere;
}
.op-drop__hint {
  margin: 0; font-family: 'Courier New', Courier, monospace;
  font-size: 0.7rem; letter-spacing: 0.04em;
  color: var(--ink-light, #8a7a5c);
  max-width: 100%; overflow-wrap: anywhere;
}
/* The real input, invisible but covering the zone. opacity:0 rather than
   display:none so it stays focusable and keyboard users still reach it. */
.op-drop .op-input--file {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  padding: 0; margin: 0; border: 0;
  opacity: 0; cursor: pointer;
}
.op-drop .op-input--file:focus-visible {
  opacity: 1;  /* show the native control when tabbed to, so focus is visible */
  outline: 2px solid var(--gold-dim, #9d793d); outline-offset: 2px;
}
.op-drop:hover { border-color: var(--gold-dim, #9d793d); }
.op-drop.is-dragging {
  border-color: var(--gold-dim, #9d793d);
  border-style: solid;
  background: #ece0c2;
  background: color-mix(in srgb, var(--gold-dim, #9d793d) 10%, var(--fkl-paper, #f5ecd7));
}
.op-drop.is-loaded {
  border-style: solid;
  border-color: var(--gold-dim, #9d793d);
}
.op-drop.is-loaded .op-drop__icon { opacity: 1; }
.op-drop.is-invalid { border-color: #a33; }
.op-drop.is-invalid .op-drop__lead { color: #a33; }
.op-input-row--upload { justify-content: flex-end; }

/* The human check, when a submission was refused for want of it. */
.op-challenge--wanted {
  outline: 2px solid var(--gold-dim, #9d793d);
  outline-offset: 6px;
  border-radius: 3px;
  animation: op-challenge-pulse 0.9s ease-in-out 2;
}
@keyframes op-challenge-pulse {
  0%, 100% { outline-color: var(--gold-dim, #9d793d); }
  50%      { outline-color: transparent; }
}
@media (prefers-reduced-motion: reduce) {
  .op-challenge--wanted { animation: none; }
}

/* ── The submitter's address ──────────────────────────────────────────────
   Required from 2026-08-31 so a contributor can be told the outcome. It sits at
   the TOP of the console, above all three ways of submitting, because the last
   field anyone reads is the one furthest from the button they are aiming at. */
.op-field { margin: 0 0 1.1rem; }
.op-field__label {
  display: block; margin-bottom: 0.35rem;
  font-family: 'Courier New', Courier, monospace;
  font-size: 0.72rem; letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--ink-mid, #5d4d31);
}
.op-field__req {
  margin-left: 0.4rem; padding: 0.05rem 0.35rem;
  font-size: 0.62rem; letter-spacing: 0.1em;
  color: var(--fkl-paper, #f5ecd7); background: var(--gold-dim, #9d793d);
  border-radius: 2px;
}
.op-field .op-input { width: 100%; }
.op-field__note {
  margin: 0.4rem 0 0;
  font-family: 'Courier New', Courier, monospace;
  font-size: 0.68rem; line-height: 1.5; letter-spacing: 0.02em;
  color: var(--ink-light, #8a7a5c);
}
.op-field__err {
  margin: 0.4rem 0 0;
  font-family: 'Courier New', Courier, monospace;
  font-size: 0.7rem; letter-spacing: 0.03em; color: #a33;
}
.op-input--invalid { border-color: #a33 !important; }

/* The reading-pane button now lives IN the controls row, level with Pages /
   Scroll and A- / A+, where Neal asked for it (2026-08-31). It is pushed to the
   far end so the two grouped controls stay together on the left. Sized to match
   them: it was a title-row button and read a size too large down here. */
.reader-controls .transcript-expand {
  margin-top: 0;
  margin-left: auto;
  font-size: 0.66rem;
  letter-spacing: 0.08em;
  padding: 0.34rem 0.7rem;
}
@media (max-width: 560px) {
  /* Wrapping puts it on its own line; auto margin would strand it mid-row. */
  .reader-controls .transcript-expand { margin-left: 0; }
}

/* ── Record rows must be allowed to shrink (2026-08-31) ───────────────────
   Reported from a volunteer's screen, reproduced at 1040-1119px: the row ran
   past the right edge of the window and the last column was cut off. Because
   `body { overflow-x: hidden }` there is no scrollbar to reveal it — the content
   is simply gone, which is why it reads as a rendering fault rather than as
   overflow.

   CAUSE: a grid item's default `min-width` is `auto`, i.e. its min-content
   width, so the flexible column REFUSES to go narrower than the longest
   unbreakable thing inside it — a long title, a URL in a byline. Below about
   1120px the four tracks then need more room than the row has and the surplus
   goes off the edge. `1fr` never promised to shrink; `minmax(0, 1fr)` does. */
.concept-record { grid-template-columns: 122px minmax(220px, 1fr) minmax(260px, 0.88fr) 180px; }
.concept-record > * { min-width: 0; }
@media (max-width: 1180px) {
  .concept-record { grid-template-columns: 105px minmax(0, 1fr) minmax(0, 260px) 150px; }
}
/* A squeezed column must degrade to wrapped text, never to a row that reaches
   past the window: anything that cannot break is told it may. */
.concept-record-main h3,
.concept-record-main p { overflow-wrap: anywhere; }

/* ── The reading pane must be ABOVE the site header (2026-09-01) ───────────
   Reported on mobile: the text "bleeds out" at the top of every page. It was
   painting underneath the header. The pane is z-index 90 and .site-nav is a
   sticky z-index 200, so the nav sat on top of it — measured at 390x844, the
   nav is 342px tall and covered the top 316px of the pane, better than a third
   of the reading area. On a desktop the nav is short enough that the overlap
   was never obvious.

   The whole reader stack moves above it, backdrop included, so the dimmed
   backdrop covers the header too — which is what a full-screen reading view
   should look like. Only while body.rv-locked is set, so the header behaves
   normally the rest of the time. */
body.rv-locked .rv-backdrop { z-index: 300 !important; }
body.rv-locked .reader-pane.rv-fulltext--expanded { z-index: 310 !important; }
body.rv-locked .reader-pager { z-index: 320 !important; }
/* Belt and braces: a sticky header cannot outrank the pane while it is open. */
body.rv-locked .site-nav { z-index: 80 !important; }

/* ── The pager on a narrow screen ─────────────────────────────────────────
   "Chapters (6)" was taking 204px of 367 and squeezing the page counter into
   27px when it needs 53, so "1 / 140" was cut off mid-number. The counter is
   the one part that must never be clipped — it is how you know where you are —
   so it keeps its width and the chapter menu gives way instead. */
@media (max-width: 640px) {
  .reader-pager { gap: 0.5rem; padding: 0.5rem 0.55rem; }
  .reader-pager__chapters {
    flex: 0 1 auto;
    min-width: 0;
    /* No hard cap. The counter beside it is flex: 0 0 auto, so it can no longer
       be squeezed by this — capping the menu as well only truncated the chapter
       count to "Chapters …" while 83px of the row sat unused. */
    /* Room for the native dropdown arrow, which was sitting on the "(6)". */
    padding-right: 1.5rem;
    text-overflow: ellipsis;
  }
  .reader-pager__mid {
    flex: 0 0 auto;          /* never compress the counter */
    justify-content: center;
  }
  .reader-pager__count {
    white-space: nowrap;
    font-size: 0.78rem;
  }
  .reader-pager__btn { flex: 0 0 auto; }
}

/* ══ MOBILE PASS (2026-09-01) ════════════════════════════════════════════
   Neal, after reading on a phone: the submission page "is all messed up …
   optimize the mobile version across the board".

   The faults are all the same kind — desktop decisions that assume a wide
   viewport and stop making sense on a narrow one. Kept in one block at the end
   so what is mobile-only is obvious, and so none of it can leak to desktop. */
@media (max-width: 760px) {

  /* 1. LEGIBILITY, and the bug that cost the hero its picture.

        THE PICTURE WAS GONE ON EVERY PHONE. Neal, twice: "the hero is not
        showing up on the mobile version"; "the hero is the image of the books."
        Measured: background-image computed to `none` at 375px and to the
        bookshelf at 1280px.

        The cause is one line. This rule listed
        `var(--concept-wood, url("/assets/concept-wood-strip.png"))` as a
        background-image layer — but --concept-wood IS DEFINED, as the colour
        #100904, so the url() fallback never applied and the substitution put a
        colour where an <image> has to be. That makes the whole declaration
        invalid at computed-value time, and an invalid background-image computes
        to its initial value: none. Not a wrong image. No image, and no error.

        A colour is legal as the last term of the `background` SHORTHAND, which
        is why the desktop rule above gets away with `var(--fkl-wood-black)`.
        It is not legal in a background-image list.

        Every hero on the site paints wood-library-hero-clean.png on desktop —
        measured across /about/, /support/, /operator/ and /terms/ — so it is
        named here rather than inferred from a variable, and the flat colour goes
        to background-color where it belongs.

        The veil stays vertical: the desktop veils are `linear-gradient(90deg, …)`,
        dark on the left where a desktop text column sits and nearly clear on the
        right. On a phone the text runs the full width, so its right half would
        sit on the bare photograph. */
  .hero, .about-hero, .concept-hero, .support-hero,
  .operator-locked-hero, .operator-console-hero {
    /* LIGHTER THAN IT WAS, and measured rather than eyeballed. Neal: the hero is
       too dark on a phone. It was 0.82 / 0.58 / 0.86 black over the bookshelf,
       which buys contrast nobody needed — composited against the image and read
       at the 95th percentile of background brightness, the headline had 14.98:1
       and the gold tagline 12.22:1, where WCAG AAA asks for 7.

       0.55 / 0.42 / 0.60 was the first attempt and Neal said it was still dark.
       This is 0.42 / 0.28 / 0.46, and the contrast is bought back with type
       rather than with more black.

       What the veil actually has to protect is only two lines. The mission
       paragraph carries its own panel — rgba(19,9,3,0.72), set further up this
       file — so it is legible whatever happens behind it.

       Measured at the lightest point of the gradient, where the tagline sits:
       headline 7.86:1, tagline 6.41:1. The headline clears AAA for normal text
       and is large type besides. The tagline is 17px, so AAA asks 7 of it and it
       lands under — which is why the shadow below exists. It clears AA (4.5) with
       room, and a shadow does for a phone in sunlight what another 15% of black
       over the photograph cannot: it separates the letter from whatever is
       directly behind THAT letter, instead of dimming the whole shelf.

       A FOURTH STOP, ADDED v=alpha-viewing-90. Neal: "increase the shadow a
       little bit on the hero just at the top, above where it says free knowledge
       library." The band above the headline is the strip where the shelf meets
       the navigation and the two ran together. Taken further on his second look:
       0.58 was not enough. It now starts at 0.74 and is back
       to the old 0.42 by 17% — measured, the headline begins 88px into a 736px
       hero, which is 12%, so the extra black is spent entirely ABOVE the type and
       has returned to its previous value before the first letter. The contrast
       figures below are therefore unchanged where they were measured, and the
       0-14% band can only have got darker, never lighter. */
    background-image:
      linear-gradient(180deg, rgba(9,4,1,0.74) 0%, rgba(9,4,1,0.55) 9%, rgba(9,4,1,0.42) 17%, rgba(9,4,1,0.28) 42%, rgba(9,4,1,0.46) 100%),
      url("/assets/wood-library-hero-clean.png") !important;
    background-size: cover, cover !important;
    background-position: center, center top !important;
    background-repeat: no-repeat, no-repeat !important;
    background-color: #100904 !important;
  }

  /* 1b. And the type carries its own edge, so the picture does not have to be
        dimmed to give it one. Only the two lines that sit on the bare image —
        the mission paragraph has a panel of its own. */
  .concept-hero__copy h1,
  .concept-hero__tag,
  .hero__title,
  .hero__sub {
    text-shadow: 0 1px 2px rgba(9,4,1,0.85), 0 2px 10px rgba(9,4,1,0.55) !important;
  }

  /* 2. HEIGHT. `min-height: calc(100dvh - 175px)` is most of a phone screen
        spent on a background image before a word of content. A hero should
        introduce the page, not replace the first screen of it. */
  .about-hero, .operator-locked-hero, .concept-hero {
    min-height: 0 !important;
    padding-top: 2.2rem !important;
    padding-bottom: 2.2rem !important;
  }

  /* 3. And the padding that COMPENSATED for that tall hero has to go with it —
        `calc(100dvh - 470px)` is 374px of empty wood on an 844px screen, which
        is what put the record itself below two screenfuls of nothing. */
  .about-hero + .fkl-neutral,
  .concept-hero + .fkl-neutral {
    padding-top: 2rem !important;
  }

  /* 4. Long unbroken strings — a receipt token, a storage URL, a DOI — are the
        usual cause of a page that scrolls sideways on a phone. */
  .source-ref, .source-ref a,
  .entry-meta dd, .record-meta dd,
  .submission-receipt, .submission-receipt a,
  .op-receipt-link, code, kbd, samp {
    overflow-wrap: anywhere;
    word-break: break-word;
  }
}

/* ══ FULL-TAB READING VIEW (/read/) ══════════════════════════════════════
   Neal, 2026-09-01: the reading pane stays as a preview, and there is a link
   beside it to open the transcript in its own tab "so that just provides a
   bigger window".

   So this page spends its space on the text. One thin bar instead of the site
   header — the stacked mobile nav is 342px, which would hand back most of what
   opening a tab was for. */
/* html body, and !important, because a later global rule paints every page with
   the wood gradient. On a reading page that is 700px of dark texture around the
   text; parchment is the page here. */
html body.read-page {
  background: var(--fkl-paper, #f5ecd7) !important;
  background-image: none !important;
  margin: 0;
}
.read-bar {
  position: sticky; top: 0; z-index: 20;
  display: flex; align-items: center; gap: 1rem; flex-wrap: wrap;
  padding: 0.55rem 1.1rem;
  background: var(--concept-wood, #2b1608);
  border-bottom: 1.5px solid var(--fkl-brass, #c49a48);
}
.read-bar__back {
  flex: 0 0 auto;
  font-family: 'Courier New', Courier, monospace;
  font-size: 0.72rem; letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--fkl-gilt, #f0d188); text-decoration: none;
  padding: 0.3rem 0.55rem; border: 1px solid rgba(200,148,58,0.45); border-radius: 3px;
}
.read-bar__back:hover { background: rgba(196,154,72,0.18); color: var(--fkl-gilt, #f0d188); }
.read-bar__title {
  flex: 1 1 14rem; min-width: 0;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 0.92rem; color: #ecd8af;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.read-bar__controls { flex: 0 0 auto; }
.read-bar__controls .reader-controls { margin: 0; }

.read-main {
  /* Wider than the pane, and the type grows with it. Neal wanted a full-screen
     reading experience, and 44rem in a 1440px window left most of the screen
     empty. The measure still holds — a bigger page means bigger text, not
     longer lines, so the character count per line barely moves. */
  max-width: 60rem;
  margin: 0 auto;
  padding: 1.6rem 1.3rem 2.4rem;
  font-size: 1.12rem;
}
/* The paged reader takes the window's height here, less the bar and the pager.
   In the preview pane a page is a box on a page; in a tab it is the screen. */
.read-page .reader-paged {
  height: calc(100vh - 11rem) !important;
  max-width: 100% !important;
}
@supports (height: 100dvh) {
  .read-page .reader-paged { height: calc(100dvh - 11rem) !important; }
}
.read-main .transcript-body { background: none !important; border: none !important; }
/* In a tab the pager sits under the text rather than being pinned to the
   viewport: there is no backdrop to float above and nothing else competing. */
.read-page .reader-pager { position: static !important; width: auto; transform: none; }

@media (max-width: 640px) {
  .read-bar { gap: 0.5rem; padding: 0.5rem 0.7rem; }
  .read-bar__title { flex-basis: 100%; order: 3; font-size: 0.82rem; white-space: normal; }
  .read-main { padding: 1.4rem 1rem 2.4rem; }
}

/* The link that opens it, sitting beside the reading-pane button. */
.reader-controls .transcript-newtab {
  margin-left: 0.4rem;
  flex: 0 0 auto; cursor: pointer;
  font-family: 'Courier New', Courier, monospace;
  font-size: 0.66rem; letter-spacing: 0.08em; text-transform: uppercase;
  padding: 0.34rem 0.7rem; text-decoration: none;
  color: var(--fkl-ink, #2e2312);
  background: var(--fkl-paper-dark, #e6d7b4);
  border: 1.5px solid var(--fkl-brass, #9c6c33); border-radius: 3px;
}
.reader-controls .transcript-newtab:hover { background: rgba(196,154,72,0.30); }
@media (max-width: 560px) {
  .reader-controls .transcript-newtab { margin-left: 0; }
}

/* ── BOOK TITLES: THE ELLIPSIS NEVER FIRED (v=alpha-viewing-73) ──────────────
   Neal: titles on the covers were being cut with no "…" to say so.

   MEASURED CAUSE. Two rules capped the title and they disagreed. The clamp said
   8 lines; max-height said 5 on a phone and 6 above it — 55.552px at a 11.11px
   line, 61.93px at 10.32px, 69.67px at 11.61px, all exact multiples. max-height
   is the smaller of the two, so IT is what cuts, and a max-height cut draws no
   ellipsis: it slices the line through the middle of the glyphs. The clamp,
   which is the only thing that draws the "…", could never be reached. Raising
   the clamp from 6 to 8 — the fix in v36 — could not have worked for the same
   reason, because max-height was left at 6.

   THE FIX is to let ONE number decide, in a unit that cannot drift from the type.
   line-height is 1.12 at every breakpoint (11.1104/9.92, 8.6016/7.68,
   10.3219/9.216), so N lines is exactly N × 1.12em. The clamp and the height are
   both derived from --title-lines, and cannot disagree again.

   Line budget is unchanged — 6 lines, 5 on a phone — so no title loses a word.
   The only difference is that a title too long for the cover now ENDS in an
   ellipsis instead of being sliced.

   Last in the file on purpose: three earlier blocks set these properties with
   !important, one of them inside a max-width:760px media query that a later
   !important rule outside the query was overriding. Specificity ties break on
   order, so this has to be the final word. */
.concept-book strong,
.cover-title {
  --title-lines: 6;
  display: -webkit-box !important;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: var(--title-lines) !important;
  line-clamp: var(--title-lines);
  max-height: calc(var(--title-lines) * 1.12em) !important;
  overflow: hidden !important;
  /* Long words still break rather than being cut, and hyphens:auto puts a real
     hyphen at the break. -webkit- prefix restated with !important because Safari
     reads only the prefixed property and the earlier block marked just the
     unprefixed one. */
  overflow-wrap: break-word !important;
  word-break: normal !important;
  hyphens: auto !important;
  -webkit-hyphens: auto !important;
}
/* The home page's covers are 108px where the shelves' are 159px, so the title
   there gets between 4.6 and 5.0 lines of room however wide the window is. Six
   would be squeezed by the flex layout and sliced again — the same cut arriving
   by a different route, since a shrunken flex item clips with its own overflow
   and never reaches the clamp. Four fits the space that exists. */
body[data-collection] .concept-book strong,
body[data-collection] .cover-title { --title-lines: 4; }

/* Four on a phone, not five. The cover is 123px tall there and the lines above
   and below the title take the rest, so the title box gets about 50px — less
   than the 55.6px five lines need. The flex item then shrinks and its own
   overflow slices the fifth line, which is the same slice by another route.
   Four lines is 44.4px and fits inside the space that actually exists. */
@media (max-width: 760px) {
  .concept-book strong,
  .cover-title { --title-lines: 4; }
}

/* ── THE RECORD CARD'S META COLUMN (v=alpha-viewing-74) ──────────────────────
   Neal: the verified date has to be readable on a wide screen, and the source,
   the copy and the hash should be links.

   The values were nowrap + ellipsis at every width, so "Mar 17, 2026" was cut to
   "Mar 17, 20…" on a 1600px display with room to spare — the stamp beside it
   already showed the date in full, which is how the truncation went unnoticed.
   The label column is a fixed 130px, so the value column is what the card gives
   it; letting the date wrap costs nothing and letting the rest keep the ellipsis
   protects the layout from a long hostname. */
.concept-record-meta dd.meta-date {
  white-space: normal;
  overflow: visible;
  text-overflow: clip;
}
.concept-record-meta .meta-link {
  color: var(--fkl-red);
  text-decoration: underline;
  text-underline-offset: 2px;
}
.concept-record-meta .meta-link:hover { color: #a8341f; }
/* A hash is a fingerprint, not prose: monospace, and it may break anywhere. */
.concept-record-meta .meta-hash {
  font-family: var(--font-mono);
  font-size: 0.94em;
  word-break: break-all;
}
/* What is absent is said quietly. It is still said. */
.concept-record-meta .meta-none { color: #6d5a3d; font-style: italic; }

/* The card is an <article> that behaves like a link now, so the pointer and the
   focus ring the anchor gave it for free have to be stated. */
.concept-record[role="link"] { cursor: pointer; }
.concept-record[role="link"]:focus-visible {
  outline: 2px solid var(--fkl-red);
  outline-offset: 2px;
}
a.view-record-btn { text-decoration: none; }

/* ── THE UNDO TOAST IN THE REVIEW QUEUE (v=alpha-viewing-74) ─────────────────
   A removal used to be silent: the card vanished, the list reflowed, and the
   archivist was looking at a different submission without being told. This says
   what happened, names the record so there is no doubt which one went, and
   counts down the thirty seconds in which it can be taken back. */
.rv-toasts {
  position: fixed; left: 50%; bottom: 1.4rem; transform: translateX(-50%);
  z-index: 400; display: flex; flex-direction: column-reverse; gap: 0.6rem;
  width: min(560px, calc(100vw - 2rem));
}
.rv-toast {
  position: relative; overflow: hidden;
  display: flex; align-items: center; gap: 1rem;
  padding: 0.85rem 1rem 1rem;
  background: #1a0f06;
  border: 1px solid var(--fkl-brass);
  border-radius: 4px;
  box-shadow: 0 8px 26px rgba(20, 10, 2, 0.5);
  color: #f3e3c0;
  opacity: 0; transform: translateY(10px);
  transition: opacity .2s ease, transform .2s ease;
}
.rv-toast.is-in { opacity: 1; transform: translateY(0); }
.rv-toast__body { flex: 1 1 auto; min-width: 0; }
.rv-toast__head {
  font-family: var(--font-mono); font-size: 0.66rem; letter-spacing: 0.16em;
  text-transform: uppercase; color: var(--gold); margin-bottom: 0.2rem;
}
.rv-toast__title {
  font-family: var(--font-serif, Georgia, serif); font-size: 0.95rem; font-weight: 700;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.rv-toast__note { font-size: 0.7rem; color: #b9a37c; margin-top: 0.15rem; }
.rv-toast__undo {
  flex: 0 0 auto; cursor: pointer;
  font-family: var(--font-mono); font-size: 0.72rem; font-weight: 700;
  letter-spacing: 0.1em; text-transform: uppercase;
  color: #fff2c8; background: linear-gradient(180deg, #9c3a28, #6d2617);
  border: 1px solid var(--fkl-brass); border-radius: 3px;
  padding: 0.5rem 0.8rem;
}
.rv-toast__undo:hover { background: linear-gradient(180deg, #aa402d, #76291a); }
/* The seconds are a number the eye can check, and the bar is the same fact for
   the eye that is not reading. */
.rv-toast__secs {
  display: inline-block; margin-left: 0.45rem; padding: 0 0.3rem;
  border-radius: 2px; background: rgba(0,0,0,0.28); font-variant-numeric: tabular-nums;
}
.rv-toast__bar { position: absolute; left: 0; right: 0; bottom: 0; height: 3px; background: rgba(196,154,72,0.22); }
.rv-toast__bar i { display: block; height: 100%; width: 100%; background: var(--gold); transform-origin: left center; animation: rvDrain 30s linear forwards; }
@keyframes rvDrain { from { transform: scaleX(1); } to { transform: scaleX(0); } }
@media (prefers-reduced-motion: reduce) {
  .rv-toast { transition: none; }
  .rv-toast__bar i { animation-duration: 30s; }
}

/* A transcript that cannot be trusted says so before it is read (v=alpha-viewing-75).
   Neal's decision on Copernicus, 2026-09-05: keep the uncorrected 1543 Latin OCR
   and label it, rather than repair what cannot be repaired or quietly delete it.
   The notice reads as a caution, not as the ordinary "this is extracted text"
   line it replaces, because the two say very different things. */
.transcript-notice--warn {
  border-left: 3px solid var(--fkl-red);
  padding-left: 0.85rem;
  color: var(--fkl-ink);
}

/* ── A FOOTNOTE INSIDE THE TRANSCRIPT (v=alpha-viewing-75) ───────────────────
   Scanning a printed critical edition drops the notes from the foot of the page
   into the flow of the text. Around 300 of them survive across the transcripts
   and they must not be deleted: they are real text, and an archive does not
   discard part of a document because it landed in the wrong place. So they are
   shown as what they are and the eye can skip them.

   Set in and smaller rather than hidden, because a reader who wants the note
   should still be able to read it. The rule at the left is the same maroon the
   site uses for apparatus elsewhere. */
.transcript-body .fkl-transcript-note {
  margin-left: 1.6rem;
  padding-left: 0.9rem;
  border-left: 2px solid rgba(138, 43, 29, 0.32);
  font-size: 0.88em;
  line-height: 1.55;
  color: var(--fkl-ink-soft, #5b4a30);
}
@media (max-width: 560px) {
  .transcript-body .fkl-transcript-note { margin-left: 0.5rem; padding-left: 0.7rem; }
}

/* ── THE MOBILE MASTHEAD WAS EATING THE SCREEN (v=alpha-viewing-76) ──────────
   Neal: "the hero is not showing up on the mobile version."
   It was rendering — 736px of it — but it began 337px down an 812px phone,
   because the navigation was 337px tall. Forty-one per cent of the first screen
   was chrome: an oversized brand block at 112px, five links wrapping onto three
   rows at 117px, and a search field and a Support button under those. What a
   reader met on opening the site was a logo and a menu, and they had to scroll
   to find out what the site is.

   Measured, not guessed: brand 112 + links 117 + actions 48, plus padding.

   This is one block at the end of the stylesheet on purpose. Six earlier blocks
   set .site-nav__inner and .site-nav__brand at overlapping breakpoints and were
   partly cancelling each other out; untangling them risks the desktop nav for no
   gain, while a single authoritative block at the end cannot be overridden by
   any of them. */
@media (max-width: 760px) {
  .site-nav__inner {
    grid-template-columns: 1fr !important;
    padding: 0.55rem 0.9rem !important;
    gap: 0.5rem !important;
    min-height: 0 !important;
  }

  /* THE BRAND IS AN IMAGE, not the markup it looks like. The <svg> logo and the
     .nav-brand-text beside it are display:none; the warm-wood theme paints
     Codex's logo as a background on ::before instead. So shrinking the type and
     the icon does nothing at all — the height comes from
     width: min(430px, 100%) and aspect-ratio: 2322/777, which on a 375px phone
     is 375 wide and therefore 125 tall.
     Capping the WIDTH is what shrinks it, and the aspect ratio carries the
     height down with it. The logo is never distorted; it is only smaller. */
  /* GROWN FROM 260 TO 300 (v=alpha-viewing-90). Neal asked for a bigger logo on
     the phone. The cap exists because the brand is a background image on ::before
     sized by width and an aspect-ratio of 2322/777, so width is the only handle
     on its height — at 430px it was 125px tall and the nav ate 337px, 41% of the
     first screen. Measured after this change on a 375px phone: the nav goes from
     163px to 180px, 22% of an 812px screen, which leaves the hero its picture. */
  .site-nav__brand {
    width: min(300px, 100%) !important;
    max-width: min(300px, calc(100vw - 2rem)) !important;
    margin: 0 auto !important;
  }

  /* One row that scrolls sideways rather than three rows that push the page
     down. The scrollbar is hidden because the row is short enough to take in at
     a glance and a visible bar under five words reads as damage. */
  .site-nav__links {
    display: flex !important;
    flex-wrap: nowrap !important;
    overflow-x: auto !important;
    gap: 1.05rem !important;
    padding-bottom: 0.15rem !important;
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
  }
  .site-nav__links::-webkit-scrollbar { display: none; }
  /* A scrolling row with no scrollbar has to say so some other way, or Operator
     and My Account are simply invisible to anyone who does not think to swipe.
     The fade is the affordance: the last link is cut by it rather than ending
     cleanly, which reads as "there is more this way". */
  .site-nav__links-wrap { position: relative; }
  .site-nav__inner > .site-nav__links {
    -webkit-mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 2.2rem), transparent 100%);
    mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 2.2rem), transparent 100%);
  }
  .site-nav__link { font-size: 0.72rem !important; white-space: nowrap !important; flex: 0 0 auto !important; }

  .nav-actions { gap: 0.5rem !important; }
  /* 16px keeps iOS Safari from zooming the page on focus and never zooming back. */
  .nav-search-input { font-size: 16px !important; padding: 0.42rem 0.6rem !important; }
  .btn-support { font-size: 0.66rem !important; padding: 0.42rem 0.7rem !important; white-space: nowrap; }
}

/* On the smallest phones the Support button and the search field cannot share a
   row without the field becoming unusable, so the button goes and the Support
   link in the footer carries it. */
@media (max-width: 400px) {
  .site-nav__brand {
    width: min(260px, 100%) !important;
    max-width: min(260px, calc(100vw - 1.6rem)) !important;
  }
  .nav-actions .btn-support { display: none !important; }
}

/* ── EVERY RECORD CARD THE SAME HEIGHT (v=alpha-viewing-78) ──────────────────
   Neal: "there's extra white space bleeding out on this book... we gotta fix
   this on all titles so everything matches."

   Measured at 1440px across the 40 cards on the home page: exactly four heights
   — 167, 193, 226 and 259 — and the only thing that varied was how many lines
   the title took. 24 titles fit one line, 12 took two, 3 took three, and Dewey's
   "Individualism Old And New : John Dewey..." took four. The summary was already
   clamped to two lines and the meta column is fixed, so a long title stretched
   the card while the columns beside it kept their content and left the gap.

   Two lines, always. Not one, which would cut "Let Us Achieve the Great Unity
   of Our Nation" in half; not as-many-as-it-takes, which is the bug. The height
   is RESERVED rather than merely capped, so a one-line title holds the second
   line open and its card matches its neighbours instead of sitting shorter.

   line-height is restated here rather than inherited, because the height
   calculation has to be exact: 2 lines is 2 x 1.7em only if the line-height is
   1.7em, and leaving that to another rule is how this drifts back apart. */
.concept-record .concept-record-main h3 {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  line-height: 1.7;
  height: calc(2 * 1.7em);
  overflow: hidden;
  text-overflow: ellipsis;
  /* A long unbroken title must not widen the column it sits in. */
  overflow-wrap: break-word;
}

/* ── AND THE TWO THINGS THAT STILL MADE CARDS DIFFER ─────────────────────────

   1. THE FORMAT LINE WRAPPED. "WEB PDF, Political Extremes" fits one line on
      most records and two on a few, which is the last 16px of difference at
      1280px once the titles are equal. One line, ellipsised.

   2. BELOW 1240px THE TEXT COLUMN COLLAPSED. Measured across the card, which is
      far narrower than the window because the shelf has a sidebar: the text
      track is 348px at a 1440px window, 220 at 1240, 182 at 1180, 102 at 1100,
      26 at 1024 and ZERO at 960. At 1024 the byline was wrapping one character
      per line and the card stood 1301px tall.

      The cause was a previous repair. `minmax(0, 1fr)` was given to the text
      column to stop the row overflowing the window, and it worked — a column
      that may shrink to zero cannot push anything off the edge. It may also
      shrink to zero.

      Below 900px the meta and the actions are already hidden, but the grid still
      declared their two tracks, so every card carried 410px of empty columns —
      which is the white space in Neal's screenshot, arriving by a second route.

      So: four columns only while there is room for all four. Below that, two
      columns and the text gets the width the hidden columns were holding. */
/* The byline goes with it. Exactly one record wraps: the Declaration, whose
   author line is "by Thomas Jefferson, Benjamin Franklin, ..." — five signers,
   two lines, and the last 16px of difference at 1280 and 1360. */
.concept-record-main .record-kinds,
.concept-record-main .record-byline {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 1;
  line-clamp: 1;
  overflow: hidden;
}

@media (max-width: 1240px) {
  .concept-record { grid-template-columns: 105px minmax(0, 1fr) !important; }
  .concept-record-meta,
  .concept-record-actions { display: none !important; }
}

/* ── THE SAME, FOR THE LIBRARY AND ARCHIVE CARDS ─────────────────────────────
   "We gotta fix this on all titles so everything matches." The shelves use a
   different card from the home page — .archive-card, not .concept-record — and
   it had the same fault from the same cause: the summary was clamped, the cover
   is a fixed 165px, and the title was left to run to as many lines as it wanted.
   23 of the 27 Library titles fit one line and 4 took two, which is the whole of
   the 19px spread.

   Ratios measured and identical at 700, 1024 and 1440, so em arithmetic is safe
   here: title 1.2, author 1.7, collection 1.7. */
.archive-card .archive-card__title {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  line-height: 1.2;
  height: calc(2 * 1.2em);
  overflow: hidden;
  overflow-wrap: break-word;
}
.archive-card .archive-card__author,
.archive-card .archive-card__collection {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 1;
  line-clamp: 1;
  overflow: hidden;
}

/* THE LAST 11px ON THE ARCHIVE IS NOT A BUG, and this rule is not what fixed it.
   I assumed a meta value was wrapping on Paetel's card and wrote this to stop it.
   Walking the two cards element by element says otherwise: that card carries
   `is-flagship` and a `★ FLAGSHIP` badge — a gold border, extra body padding, and
   pinned to the top of the shelf. The badge is the 11px. It is the Paetel rescue,
   deliberately marked, and flattening it would delete the emphasis on the record
   the Archive exists to show off.

   The rule stays anyway, on its own merits: a hash or a URL was never meant to be
   read in full on a card, the home card's meta already ends its values with an
   ellipsis, and this stops the shelves disagreeing with it the first time a long
   value appears. */
.archive-card .meta-val {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  min-width: 0;
}

/* ── A SUMMARY WAS CAPPED BUT NEVER RESERVED ─────────────────────────────────
   The last difference, and only visible once everything above it was equal. The
   summaries were clamped — three lines on the shelves, two on the home card — so
   a long one could not push a card taller. Nothing held the space open when a
   summary was SHORT.

   Live, "The Philosophy of Illumination" has a one-line summary: 19px where
   every other card has 58px, and its card stands 19px shorter than the row. It
   did not show on the local mirror, which has no database records, which is why
   this needed measuring against the deployed site.

   Reserved now, the same way the titles are. Ratios measured: the shelf summary
   is 1.5 over three lines, the home summary 1.3 over two. The home card happens
   to be uniform today because every one of its summaries runs long — that is
   luck, not design, and the next short one would have reopened this. */
.archive-card .archive-card__summary {
  line-height: 1.5;
  height: calc(3 * 1.5em);
  overflow: hidden;
}
.concept-record .concept-record-main > p:not(.record-byline):not(.record-kinds) {
  line-height: 1.3;
  height: calc(2 * 1.3em);
  overflow: hidden;
}

/* A record the Library catalogues but does not hold (v=alpha-viewing-83).
   Thirteen works were added on 2026-09-08 whose facsimiles live at the Internet
   Archive — FKL links them, it has not mirrored them. "Preserved" would claim a
   custody it does not have, so they carry their own badge: the brass of the
   preserved badge drained of its confidence, distinct from the maroon of At Risk
   because catalogued is not a warning, it is a smaller promise. */
.badge-catalogued {
  display: inline-block;
  font-family: var(--font-mono);
  font-size: 0.62rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 0.24rem 0.55rem;
  border-radius: 2px;
  background: rgba(196, 168, 112, 0.18);
  border: 1px solid rgba(139, 101, 32, 0.55);
  color: var(--gold-dim);
  white-space: nowrap;
}


/* ── THE DIAGONAL BAND ACROSS THE LIBRARY AND ARCHIVE (v=alpha-viewing-87) ───
   Neal: "there's a weird UI glitch here" — a bright shaft running up the page
   and a dark wedge swallowing the right-hand half of the shelf, over the cards
   and the sidebar alike. It read like a lighting effect nobody wrote.

   It is the book-cover sheen, escaped. `.cover-aged::after` (line ~504) is
   `position: absolute; inset: 0` with a 135deg gradient — white at 0%, clear at
   50%, rgba(0,0,0,0.15) at 100% — and it is meant to sit on a 92x138 cover.
   But an absolutely-positioned box resolves `inset` against its nearest
   POSITIONED ancestor, and `.concept-book` sets no position in any of its five
   rule blocks. So each sheen stretched to the nearest positioned ancestor
   instead: measured at 553x863 where the cover is 92x138. The host's
   `overflow: hidden` cannot claw it back, because clipping only reaches boxes
   whose containing block is the host or below it — this one's is an ancestor.

   Forty records are on the shelf, so forty of those gradients stacked, which is
   why the right-hand side went nearly black and why the effect faded down the
   page: it is anchored to the containing block's top, not to the cards.

   The class is only added on the Library and the Archive — library/index.html
   and archive/index.html append 'cover-aged' — which is exactly where the band
   appeared and why the home page was clean.

   One property fixes it, and it is the property whose absence caused it.
   `.cover-type` (line ~499) is absolute inside the same cover and was escaping
   the same way, so this is set on the cover itself rather than on .cover-aged.
   Verified: the sheen measures 86x132 inside its 92x138 cover, and the band is
   gone at every width. */
.concept-book {
  position: relative;
}

/* The archived snapshot sits under the source reference, in the same voice as
   the ingest date beside it: a fact about the citation, not a second document.
   It is deliberately quieter than the "Read the full PDF" call — a capture of a
   sales page or a paywalled essay is not the work, and must not read like one.
   Colour and face come from the theme groups above, which it now joins; only
   the spacing and the link treatment are set here. */
.source-ref__snapshot {
  font-size: 0.78rem;
  margin-top: 0.3rem;
}
.source-ref__snapshot a { color: inherit; text-decoration: underline; text-underline-offset: 2px; }
.source-ref__snapshot a:hover { color: var(--fkl-red, #7d271b); }


/* ── THE FLAGSHIP BADGE HAD NOTHING TO HANG ON (v=alpha-viewing-92) ──────────
   Neal: "the flagship banner goes into the top left instead of on the manifesto."
   Measured on /archive/: the badge sat at viewport (0,0) with offsetParent BODY.

   Same fault as the book-cover sheen, one layer up. `.flagship-badge` is
   `position: absolute; top:0; left:0`, and every rule that gave it something to
   be absolute INSIDE was written against `.archive-card`:

     .archive-card.is-flagship            { position: relative; + gold border }
     .archive-card.is-flagship .archive-card__body { padding-top: 1.7rem }
     .flagship-badge + .archive-card__cover        { padding-top: 1.85rem }

   When the three shelves were unified on FKL.recordCard the card became
   `.concept-record.is-flagship` and the cover became `.concept-book`. There are
   now ZERO `.archive-card` elements on the site, so all three rules match
   nothing: no positioned ancestor, so the badge resolved against the initial
   containing block and flew to the corner of the page.

   IT LOST MORE THAN ITS POSITION. The same dead rule carried the gold border and
   the ring that mark the Paetel rescue as the flagship — the card was rendering
   with the ordinary brown border of every other record, so the emphasis was gone
   too and only the loose badge made it noticeable.

   Restored here against the selector that actually exists. The padding is what
   keeps the badge off the cover it overlaps: the badge is about 20px tall and
   the card's own top padding is 12.8px, which is why the content has to start
   lower. The flagship is a little taller than its neighbours as a result, which
   is what it was before and is deliberate — see the note on the 11px above. */
.concept-record.is-flagship {
  position: relative;
  padding-top: 1.9rem !important;
  border-color: var(--gold) !important;
  box-shadow: 0 0 0 2px var(--gold-faint), 2px 3px 7px rgba(55,32,7,0.2) !important;
}

/* Every mirrored copy, listed. A record that holds thirty-four files and links
   one has not published the other thirty-three. Page counts are shown because
   these are clippings — one or two pages each — and a reader who sees only a
   file size will assume otherwise, which is the mistake this list exists to
   correct. */
.held-copies {
  margin: 1.3rem 0;
  padding: 1rem 1.15rem;
  border: 2px solid #9c6c33;
  border-radius: 4px;
  background: var(--fkl-paper-card, #f6e8c6);
  box-shadow: var(--fkl-card-shadow);
}
.held-copies__head {
  font-family: var(--font-mono);
  font-weight: 700;
  font-size: 0.78rem;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--fkl-red, #7d271b);
  margin-bottom: 0.4rem;
}
.held-copies__note { margin: 0 0 0.7rem; font-size: 0.82rem; line-height: 1.5; }
.held-copies__list {
  list-style: none; margin: 0; padding: 0;
  display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 0.3rem 1.1rem;
}
.held-copies__list li { font-size: 0.8rem; line-height: 1.45; }
.held-copies__list a { color: var(--fkl-red, #7d271b); text-decoration: underline; text-underline-offset: 2px; }
.held-copies__list span { opacity: 0.72; font-family: var(--font-mono); font-size: 0.72rem; }

/* ── THE SUBSTACK LINK, BESIDE THE ACCOUNT ONE (v=alpha-viewing-99) ──────────
   Neal wanted a small link to the newsletter at the top, in the same shape as
   the account pill, without disturbing the signup panel at the foot of every
   page. It reuses .site-nav__account wholesale rather than inventing a second
   pill, so the two cannot drift apart: same Courier, same brass border, same
   uppercase tracking, same hover.

   IT GOES IN THE LINK ROW, NOT .nav-actions. The note further up this file
   records what happens otherwise: a sixth item in .nav-actions adds a whole
   nav row at EVERY width, 49px on desktop. Sitting next to the account link it
   shares that row's existing slack, and the label drops out at the same
   breakpoint the account label does, leaving two small icons side by side. */
.site-nav__substack { gap: 0.35rem; padding: 0.45rem 0.55rem; }
.site-nav__substack svg { flex: none; }

/* THE LABEL APPEARS ONLY WHERE IT FITS. With the word "Substack" the pill is
   101px against the icon's 31px, and the link row already carries five links
   and the account pill. Measured by walking the width down: at 1320 the pill
   wraps onto its own line UNDER the account one, at 1350 it sits beside it with
   a 6px gap. So the word is hidden by default and restored above 1400.

   1400 rather than 1350, deliberately. The account pill is not a fixed width:
   it shows the reader's name once somebody signs in, up to 16ch, so the row is
   wider for a logged-in reader than for the anonymous one these numbers were
   measured with. The extra 50px is that margin. Getting this wrong costs a
   second row of pills on a laptop, which is what the icon-only version was for.

   Below the breakpoint the span is hidden rather than removed, so the link
   still announces itself to a screen reader at every width. */
.site-nav__substack span {
  position: absolute; width: 1px; height: 1px; padding: 0;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}
@media (min-width: 1400px) {
  .site-nav__substack { padding: 0.45rem 0.7rem; }
  .site-nav__substack span {
    position: static; width: auto; height: auto;
    overflow: visible; clip: auto; border: 0;
  }
}


/* ── show more ──────────────────────────────────────────────────────────────
   The shelves draw 60 cards at a time. Before this the Archive built every
   match on every keystroke, which at 711 records froze the page. */
.shelf-more { display: flex; justify-content: center; padding: 1.4rem 0 0.6rem; }
.shelf-more__btn {
  font-family: 'Courier New', Courier, monospace;
  font-size: 0.74rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ink, #2b1a08);
  background: #f0e4c6;
  border: 1px solid rgba(90, 60, 20, 0.38);
  border-radius: 2px;
  padding: 0.6rem 1.3rem;
  cursor: pointer;
  box-shadow: 1px 2px 0 rgba(70, 45, 12, 0.18);
}
.shelf-more__btn:hover { background: #e7d9b5; }
.shelf-more__btn:active { transform: translateY(1px); box-shadow: none; }

/* The Minecraft book lives in assets/book-reader.css now. The .mc-book rules
   that stood here dressed the old paged reader in boards; the reader was
   rebuilt as an actual book object, so they described nothing. */

/* THE PAGE MEASURES ITSELF INSTEAD OF BEING TOLD. The book's height was
   calc(100dvh - 12.5rem), a guess at the height of the bar and the pager. Add
   the paper toggle to the bar, the bar wraps to two rows, and the guess is wrong
   by exactly one row: the pager went off the bottom of the screen. A flex column
   takes the bar and the pager at their real heights and gives the rest to the
   book, which is right whatever ends up in the bar. */
html body.read-page {
  display: flex;
  flex-direction: column;
  min-height: 100dvh;
}
body.read-page > .read-bar { flex: 0 0 auto; }
body.read-page > .read-main {
  flex: 1 1 auto;
  min-height: 0;
  display: flex;
  flex-direction: column;
}
body.read-page > #readPagerHost,
body.read-page .reader-pager { flex: 0 0 auto; }
.read-page .read-main > .mc-book {
  flex: 1 1 auto;
  min-height: 0;
  display: flex;
  flex-direction: column;
}
/* height now comes from the flex parent, not from a guess */
.read-page .mc-book__paper,
.read-page .mc-book__paper { height: auto; flex: 1 1 auto; min-height: 0; }
.read-page .mc-book__paper > .reader-paged { height: 100% !important; }
.read-bar__controls { flex-wrap: wrap; justify-content: flex-end; gap: 0.4rem; }

/* .read-main carries `margin: 0 auto` for centring. In a column flex container
   auto side-margins suppress the stretch that would otherwise give it the full
   width, so it shrank to its content and the book became a single narrow
   column. The centring still comes from the margins; the width has to be said. */
body.read-page > .read-main { width: 100%; box-sizing: border-box; }
.read-page .read-main > .mc-book { width: 100%; }

/* min-height does not bound a flex child. With `min-height: 100dvh` on the body
   the book was free to grow to its content, the pane's height became the height
   of the whole essay — 16,526px — and one "page" was the entire document, which
   is why the pager read 1 / 1. A page is a page because something stops it. */
html body.read-page { height: 100dvh; min-height: 0; overflow: hidden; }
@supports not (height: 100dvh) { html body.read-page { height: 100vh; } }

/* Whether a record is watched, and what the last check found. */
.source-ref__watch {
  margin-top: 0.35rem;
  font-family: 'Courier New', Courier, monospace;
  font-size: 0.72rem;
  letter-spacing: 0.02em;
  color: var(--gold-dim, #8a7a5c);
}
.source-ref__watch:empty { display: none; }
.source-ref__watch.is-dead { color: #8a2b1d; }
.source-ref__watch.is-dead strong { color: #8a2b1d; }
.source-ref__watch.is-blocked { color: #7a6636; }

/* The book reader owns the whole page; the old read-page chrome is gone. */
html body.bk-body {
  display: block;
  height: auto;
  min-height: 100dvh;
  overflow-y: auto;
}
