/*
Theme Name: Field Notes
Theme URI: https://fieldnotes.mx
Description: Field Notes from a Very Cool World — stories, interviews, and more from Stephen Casimiro. Subsumes Wild Words, Wild Books, and Wild Journals.
Version: 6.31.29
Author: Stephen Casimiro
Author URI: https://fieldnotes.mx
Text Domain: field-notes
*/

/* ════════════════════════════════════
   RESET & VARIABLES
   ════════════════════════════════════ */
:root {
  /* Shared — paper family shifted to "oat" (v3.0.0): blue pulled down ~7,
     same rosy-warm character as before, less pink, no green. */
  --bg: #DEDACB;
  --bg-warm: #D6D2C0;
  --text: #272320;
  --text-light: #5C544A;
  --text-faint: #8C8273;
  --text-lighter: #A89C88;
  --dark: #1C1A17;
  --rule: #C6C1AE;
  --cream: #DEDACB;
  /* Field Notes additions */
  --ink: #272320;
  --panel: #D3CFBD;
  --accent: #2F4655;
  --accent-deep: #24363F;
  --accent-soft: rgba(47,70,85,0.12);
  --cinnabar: #C4422A;
  --cinnabar-deep: #A2341F;
  --serif: 'Literata', Georgia, serif;
  --display: 'Newsreader', 'Literata', Georgia, serif;
  --sans: 'DM Sans', system-ui, sans-serif;
  --mono: 'DM Mono', ui-monospace, monospace;
  --jt: url("data:image/png;base64,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");
  /* Words palette */
  --yellow: #2F4655;
  --yellow-soft: rgba(47,70,85,0.15);
  /* Books palette */
  --green: #2F4655;
  --green-light: #3C5666;
  --green-dark: #24363F;
  --green-hover: rgba(47,70,85,0.12);
  --green-faint: rgba(47,70,85,0.07);
  --green-soft: rgba(47,70,85,0.12);
  /* Journals palette */
  --lichen: #2F4655;
  --lichen-soft: rgba(47,70,85,0.12);
}

/* Section accent overrides */
.section-words { --accent: var(--yellow); --accent-soft: var(--yellow-soft); }
.section-books { --accent: var(--green); --accent-soft: var(--green-soft); }
.section-journals { --accent: var(--lichen); --accent-soft: var(--lichen-soft); }

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

body {
  background: var(--bg);
  color: var(--text);
  -webkit-font-smoothing: antialiased;
  min-height: 100vh;
  font-family: 'Literata', Georgia, serif;
}

a { color: inherit; text-decoration: none; }

@keyframes fadeUp {
  from { opacity: 0; transform: translateY(16px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* ════════════════════════════════════
   NAV
   ════════════════════════════════════ */
.site-nav {
  background: var(--bg);
  padding: 0 32px;
  height: 64px;
  display: flex;
  align-items: center;
  justify-content: center;
  position: sticky;
  top: 0;
  z-index: 100;
}
.nav-inner {
  display: flex; align-items: center; justify-content: space-between;
  width: 100%; max-width: 1120px;
}
.nav-logo { display: flex; align-items: center; gap: 11px; text-decoration: none; }
.nav-bug {
  width: 21.6px; height: 27px; flex: none;
  background: var(--ink);
  -webkit-mask: var(--jt) center/contain no-repeat;
          mask: var(--jt) center/contain no-repeat;
}
.nav-wordmark { font-family: var(--display); color: var(--ink); font-size: 20px; font-weight: 500; line-height: 1; }
.nav-wordmark span { display: block; font-family: var(--sans); font-size: 9.5px; letter-spacing: .22em; text-transform: uppercase; color: var(--text-faint); margin-top: 4px; font-weight: 500; }
.nav-accent { color: var(--accent); }
.nav-right { display: flex; align-items: center; gap: 24px; }
.nav-link {
  font-family: var(--sans); color: var(--text-light);
  font-size: 12px; font-weight: 500; letter-spacing: .09em;
  text-transform: uppercase; text-decoration: none; transition: color .2s;
}
.nav-link:hover { color: var(--ink); }
.nav-search-btn {
  background: none; border: 1px solid var(--rule); color: var(--text-light);
  width: 32px; height: 32px; border-radius: 50%; cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  transition: border-color .2s, color .2s; text-decoration: none;
}
.nav-search-btn:hover { border-color: var(--accent); color: var(--accent); }
.nav-search-btn svg { width: 14px; height: 14px; }
@media (max-width: 840px) { .nav-link { display: none; } }

/* ════════════════════════════════════
   FOOTER
   ════════════════════════════════════ */
.site-footer { background: var(--dark); padding: 88px 24px; text-align: center; }
.footer-bug {
  width: 34px; height: 42px; margin: 0 auto 14px;
  background: var(--accent);
  -webkit-mask: var(--jt) center/contain no-repeat;
          mask: var(--jt) center/contain no-repeat;
}
.footer-bug-link { text-decoration: none; display: inline-block; transition: opacity 0.2s; }
.footer-bug-link:hover { opacity: 0.7; }
.footer-links { font-family: var(--sans); font-size: 12px; color: rgba(244,238,225,0.3); }
.footer-links a { color: rgba(244,238,225,0.5); text-decoration: none; transition: color 0.15s; }
.footer-links a:hover { color: var(--bg); }
.footer-siblings { font-family: var(--sans); font-size: 12px; color: rgba(244,238,225,0.3); margin-top: 12px; }
.footer-siblings a { color: rgba(244,238,225,0.4); text-decoration: none; transition: color 0.15s; }
.footer-siblings a:hover { color: var(--bg); }

/* ════════════════════════════════════
   SHARED COMPONENTS
   ════════════════════════════════════ */
.random-btn {
  display: block;
  margin: 0 auto 64px;
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--text);
  background: transparent;
  border: 1.5px solid var(--rule);
  border-radius: 6px;
  padding: 12px 28px;
  cursor: pointer;
  transition: all 0.25s;
  text-decoration: none;
  text-align: center;
}
.random-btn:hover {
  border-color: var(--accent);
  background: var(--accent-soft);
}

/* ════════════════════════════════════
   WILD WORDS: HOMEPAGE
   ════════════════════════════════════ */
.manifesto {
  max-width: 640px;
  margin: 0 auto;
  padding: 80px 24px 0;
  text-align: center;
}
.manifesto-line {
  font-family: 'Newsreader', Georgia, serif;
  font-size: 26px;
  line-height: 1.3;
  color: var(--text);
  margin-bottom: 0;
  font-weight: normal;
}
.manifesto-line span { color: var(--yellow); }
@media (min-width: 480px) { .manifesto-line { font-size: 30px; } }

.featured-word {
  max-width: 640px;
  margin: 0 auto;
  padding: 120px 24px 120px;
  text-align: center;
  min-height: 400px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.featured-word-link { text-decoration: none; display: block; transition: opacity 0.2s; }
.featured-word-link:hover { opacity: 0.8; }
.featured-headword {
  font-family: 'Newsreader', Georgia, serif;
  font-size: 72px;
  line-height: 1.0;
  color: var(--text);
  margin-bottom: 12px;
}
@media (min-width: 480px) { .featured-headword { font-size: 96px; } }
.featured-pronunciation {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 16px;
  color: var(--text-faint);
  letter-spacing: 0.06em;
  margin-bottom: 24px;
}
.featured-definition {
  font-family: 'Literata', Georgia, serif;
  font-size: 18px;
  line-height: 1.7;
  color: var(--text-light);
  max-width: 480px;
  margin: 0 auto 20px;
}
.featured-readmore {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 13px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--yellow);
}
.featured-loading {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 14px;
  color: var(--text-faint);
  padding: 40px 0;
}

.home-buttons { text-align: center; padding: 56px 24px 0; }
.home-buttons .random-btn { display: inline-block; margin: 0 6px; }

.home-search { max-width: 480px; margin: 0 auto; padding: 28px 24px 80px; }
.home-search-books { padding-top: 6px; }
.home-search input[type="text"] {
  width: 100%;
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 15px;
  padding: 14px 18px;
  background: var(--bg-warm);
  border: 1.5px solid var(--rule);
  border-radius: 6px;
  color: var(--text);
  outline: none;
  transition: border-color 0.2s;
  text-align: center;
}
.home-search input[type="text"]:focus { border-color: var(--yellow); }
.home-search input[type="text"]::placeholder { color: var(--text-faint); }

/* ════════════════════════════════════
   WILD WORDS: SINGLE ENTRY
   ════════════════════════════════════ */
.post {
  max-width: 640px;
  margin: 0 auto;
  padding: 0 24px;
}
.headword-block { padding: 90px 0 0; }
.headword {
  font-family: 'Newsreader', Georgia, serif;
  font-size: 56px;
  line-height: 1.0;
  color: var(--text);
  margin-bottom: 12px;
}
@media (min-width: 480px) { .headword { font-size: 72px; } }
.pronunciation {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 15px;
  color: var(--text-faint);
  letter-spacing: 0.06em;
  margin-top: 16px;
  margin-bottom: 0;
}
.tags {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  justify-content: center;
  margin-top: 0;
  margin-bottom: 48px;
}
.tags span, .tags a {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 10px;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  padding: 4px 10px;
  border-radius: 3px;
  background: var(--yellow-soft);
  color: var(--text-light);
  text-decoration: none;
  transition: background 0.2s;
}
.tags a:hover { background: rgba(184,155,47,0.28); }

.accent-rule {
  width: 48px;
  height: 3px;
  background: var(--yellow);
  border: none;
  border-radius: 2px;
  margin: 36px 0 48px;
}

.definition {
  font-family: 'Literata', Georgia, serif;
  font-size: 18px;
  line-height: 1.8;
  color: var(--text);
  margin-bottom: 56px;
}
@media (min-width: 480px) { .definition { font-size: 19px; } }
.definition em { font-style: italic; }

.etym-label, .notes-label {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  margin-bottom: 12px;
}
.etym-label { color: var(--yellow); }
.notes-label { color: var(--text-faint); }

.etymology {
  font-family: 'Literata', Georgia, serif;
  font-size: 16px;
  line-height: 1.75;
  color: var(--text-light);
  padding-left: 18px;
  border-left: 2.5px solid var(--yellow);
  margin-bottom: 56px;
}
.etymology em { font-style: italic; }

.notes {
  font-family: 'Literata', Georgia, serif;
  font-size: 16px;
  font-style: italic;
  line-height: 1.75;
  color: var(--text-light);
  margin-bottom: 56px;
}

.reading-label {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: var(--green);
  margin-bottom: 12px;
}
.reading {
  font-family: 'Literata', Georgia, serif;
  font-size: 15px;
  line-height: 1.75;
  color: var(--text-light);
  margin-bottom: 56px;
}

.definition a, .etymology a, .notes a, .reading a {
  color: var(--yellow);
  text-decoration: underline;
  text-decoration-color: rgba(47,70,85,0.4);
  text-underline-offset: 2px;
  transition: text-decoration-color 0.2s;
}
.definition a:hover, .etymology a:hover, .notes a:hover, .reading a:hover {
  text-decoration-color: var(--yellow);
}
a.book-autolink {
  color: var(--green);
  text-decoration-color: rgba(47,70,85,0.4);
}
a.book-autolink:hover {
  text-decoration-color: var(--green);
}
a.word-autolink {
  color: var(--yellow);
  text-decoration: underline;
  text-decoration-color: rgba(47,70,85,0.4);
  text-underline-offset: 2px;
}
a.word-autolink:hover {
  text-decoration-color: var(--yellow);
}

/* Words end bug */
.section-words .end-bug {
  font-size: 94px;
  color: var(--yellow);
  letter-spacing: 0;
  line-height: 1;
}
.section-words .bottom-rule { margin: 0 0 40px; }

/* Word nav */
.word-nav {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  padding-bottom: 56px;
}
.word-nav a { text-decoration: none; transition: opacity 0.2s; }
.word-nav a:hover { opacity: 0.7; }
.word-nav .label {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 10px;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: var(--text-faint);
  display: block;
  margin-bottom: 4px;
}
.word-nav .adjacent-word {
  font-family: 'Newsreader', Georgia, serif;
  font-size: 22px;
  color: var(--text);
  display: block;
}
.word-nav .next { text-align: right; }

/* Letter navigation */
.letter-nav {
  max-width: 640px;
  margin: 0 auto;
  padding: 0 24px 16px;
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
}
.letter-nav a {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 13px;
  font-weight: 600;
  color: var(--text);
  text-decoration: none;
  padding: 2px 4px;
}
.letter-nav a:hover { color: var(--yellow); }

.letter-group { margin-bottom: 16px; }
.letter-heading {
  font-family: 'Newsreader', Georgia, serif;
  font-size: 28px;
  color: var(--text);
  border-bottom: 2px solid var(--yellow);
  padding-bottom: 4px;
  margin-bottom: 8px;
  display: inline-block;
}

/* Related books on word page */
.word-books-section { padding: 32px 0; border-top: 1px solid var(--rule); }
.word-books-label {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 2px;
  text-transform: uppercase;
  color: var(--text-faint);
  margin-bottom: 16px;
}
.word-books-grid { display: flex; gap: 16px; flex-wrap: wrap; }
.word-book-item { text-decoration: none; width: 100px; text-align: center; }
.word-book-item img { width: 100px; height: auto; border-radius: 2px; box-shadow: 2px 3px 10px rgba(0,0,0,0.12); margin-bottom: 8px; }
.word-book-title { font-family: 'Newsreader', serif; font-size: 12px; color: var(--text); line-height: 1.2; margin-bottom: 2px; }
.word-book-author { font-family: 'DM Sans', sans-serif; font-size: 11px; color: var(--text-faint); }

/* ════════════════════════════════════
   WILD WORDS: ARCHIVES
   ════════════════════════════════════ */
.archive-header {
  max-width: 640px;
  margin: 0 auto;
  padding: 56px 24px 16px;
}
.archive-header h1 {
  font-family: 'Newsreader', Georgia, serif;
  font-size: 36px;
  line-height: 1.1;
  color: var(--text);
  margin-bottom: 8px;
}
.archive-header h1 span { color: var(--accent); }
.archive-header p {
  font-family: 'Literata', Georgia, serif;
  font-size: 17px;
  color: var(--text-light);
  line-height: 1.5;
}

.search-form {
  max-width: 640px;
  margin: 0 auto;
  padding: 0 24px 24px;
}
.search-form input[type="text"] {
  width: 100%;
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 15px;
  padding: 12px 16px;
  background: var(--bg-warm);
  border: 1.5px solid var(--rule);
  border-radius: 6px;
  color: var(--text);
  outline: none;
  transition: border-color 0.2s;
}
.search-form input[type="text"]:focus { border-color: var(--accent); }
.search-form input[type="text"]::placeholder { color: var(--text-faint); }

.fn-search-list { max-width:640px; margin:0 auto; padding:0 24px 48px; }
.fn-search-item { padding:20px 0; border-bottom:1px solid var(--rule); }
.fn-search-item:first-child { border-top:1px solid var(--rule); }
.fn-search-item a { text-decoration:none; display:block; }
.fn-search-kicker { font-family:var(--mono); font-size:10px; letter-spacing:.13em; text-transform:uppercase; color:var(--text-faint); margin-bottom:7px; }
.fn-search-title { font-family:'Newsreader',Georgia,serif; font-size:22px; color:var(--text); margin-bottom:6px; }
.fn-search-ex { font-family:'Literata',Georgia,serif; font-size:15px; color:var(--text-light); line-height:1.6; display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orient:vertical; overflow:hidden; }

.word-list {
  max-width: 640px;
  margin: 0 auto;
  padding: 0 24px 48px;
}
.word-item {
  padding: 20px 0;
  border-bottom: 1px solid var(--rule);
}
.word-item:first-child { border-top: 1px solid var(--rule); }
.word-item a { text-decoration: none; display: block; }
.word-title {
  font-family: 'Newsreader', Georgia, serif;
  font-size: 22px;
  color: var(--text);
  margin-bottom: 6px;
}
.word-preview {
  font-family: 'Literata', Georgia, serif;
  font-size: 15px;
  color: var(--text-light);
  line-height: 1.6;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* Single Word */
.word-entry {
  max-width: 640px;
  margin: 0 auto;
  padding: 56px 24px 0;
}
.word-entry h1 {
  font-family: 'Newsreader', Georgia, serif;
  font-size: 48px;
  line-height: 1.05;
  color: var(--text);
  margin-bottom: 8px;
}
.word-pronunciation {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 15px;
  color: var(--text-faint);
  margin-bottom: 28px;
}
.word-definition {
  font-family: 'Literata', Georgia, serif;
  font-size: 17px;
  line-height: 1.8;
  color: var(--text);
  margin-bottom: 32px;
}
.word-section-label {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 2px;
  text-transform: uppercase;
  color: var(--text-faint);
  margin-bottom: 8px;
  padding-top: 16px;
  border-top: 2px solid var(--yellow);
  display: inline-block;
}
.word-section-text {
  font-family: 'Literata', Georgia, serif;
  font-size: 15px;
  color: var(--text-light);
  line-height: 1.7;
  margin-bottom: 24px;
}
.word-tags { padding: 20px 0 32px; display: flex; flex-wrap: wrap; gap: 8px; }
.word-tag {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 12px;
  font-weight: 500;
  color: var(--text-light);
  border: 1px solid var(--rule);
  padding: 4px 10px;
  border-radius: 3px;
  text-decoration: none;
  transition: all 0.2s;
}
.word-tag:hover { border-color: var(--yellow); background: var(--yellow-soft); }
.word-nav {
  display: flex;
  justify-content: space-between;
  padding: 32px 0;
  border-top: 1px solid var(--rule);
}
.word-nav a { text-decoration: none; }
.word-nav .label {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--text-faint);
  display: block;
  margin-bottom: 2px;
}
.word-nav .adjacent-word {
  font-family: 'Newsreader', Georgia, serif;
  font-size: 18px;
  color: var(--text);
}
.word-nav .next { text-align: right; }

/* Related books on word page */
.word-books-section { padding: 32px 0; border-top: 1px solid var(--rule); }
.word-books-label {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 2px;
  text-transform: uppercase;
  color: var(--text-faint);
  margin-bottom: 16px;
}
.word-books-grid { display: flex; gap: 16px; flex-wrap: wrap; }
.word-book-item { text-decoration: none; width: 100px; text-align: center; }
.word-book-item img { width: 100px; height: auto; border-radius: 2px; box-shadow: 2px 3px 10px rgba(0,0,0,0.12); margin-bottom: 8px; }
.word-book-title { font-family: 'Newsreader', serif; font-size: 12px; color: var(--text); line-height: 1.2; margin-bottom: 2px; }
.word-book-author { font-family: 'DM Sans', sans-serif; font-size: 11px; color: var(--text-faint); }

/* ════════════════════════════════════
   WILD BOOKS: HOMEPAGE
   ════════════════════════════════════ */
.hero {
  min-height: 56vh;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  padding: 60px 40px 40px;
  position: relative;
}
.hero-label {
  font-family: 'DM Sans', sans-serif;
  font-weight: 700;
  font-size: 13px;
  letter-spacing: 3px;
  text-transform: uppercase;
  color: var(--text-lighter);
  margin-bottom: 40px;
  opacity: 0;
  animation: fadeUp 0.6s ease 0.2s forwards;
}
.hero-compact {
  min-height: 50vh;
  padding-top: 40px;
  padding-bottom: 24px;
}
.sentence {
  text-align: center;
  max-width: 820px;
  line-height: 1.6;
  opacity: 0;
  animation: fadeUp 0.8s ease 0.4s forwards;
}
.s-text {
  font-family: 'Newsreader', serif;
  font-size: clamp(22px, 2.8vw, 32px);
  color: var(--text);
}
.s-dd-wrap {
  display: inline-block;
  position: relative;
  vertical-align: baseline;
}
.s-dd {
  font-family: 'Newsreader', serif;
  font-size: clamp(18px, 2.2vw, 24px);
  color: var(--green);
  background: none;
  border: none;
  border-bottom: 2px solid var(--green);
  padding: 0 28px 2px 4px;
  cursor: pointer;
  appearance: none;
  -webkit-appearance: none;
  outline: none;
  line-height: 1.6;
  transition: border-color 0.2s;
  width: auto;
  max-width: 90vw;
  text-overflow: clip;
  overflow: visible;
}
.s-dd:hover { border-bottom-color: var(--green-dark); }
.s-dd option {
  font-family: 'Literata', Georgia, serif;
  font-size: 16px;
  color: var(--text);
  background: var(--cream);
}
.dd-arrow {
  position: absolute;
  right: 4px;
  top: 50%;
  transform: translateY(-50%);
  pointer-events: none;
  color: var(--green);
  font-size: clamp(9px, 1.2vw, 12px);
}
.hero-count {
  margin-top: 32px;
  font-family: 'DM Sans', sans-serif;
  font-size: 14px;
  color: var(--text-light);
  opacity: 0;
  animation: fadeUp 0.6s ease 0.6s forwards;
}
.hero-count strong {
  color: var(--green);
  font-weight: 700;
}

/* Discover Shelf */
.discover {
  padding: 40px 0 40px;
  overflow: hidden;
  opacity: 0;
  animation: fadeUp 0.6s ease 0.8s forwards;
}
.discover-label {
  font-family: 'DM Sans', sans-serif;
  font-weight: 700;
  font-size: 13px;
  letter-spacing: 3px;
  text-transform: uppercase;
  color: var(--text-lighter);
  text-align: center;
  margin-bottom: 28px;
}
.shelf {
  display: flex;
  justify-content: center;
  gap: 20px;
  padding: 0 48px;
  flex-wrap: wrap;
  max-width: 1100px;
  margin: 0 auto;
}
.shelf-book {
  display: block;
  width: 140px;
  flex-shrink: 0;
  position: relative;
  transition: transform 0.2s;
}
.shelf-book:hover { transform: translateY(-4px); }
.shelf-book img { width: 100%; height: auto; border-radius: 2px; box-shadow: 2px 3px 10px rgba(0,0,0,0.12); }
.shelf-book-info { display: none; }

.section-rule { max-width: 740px; margin: 48px auto 0; border: none; border-top: 1px solid var(--rule); }

/* Browse Themes & Places */
.themes, .places {
  max-width: 740px;
  margin: 0 auto;
  padding: 40px 40px 16px;
  text-align: center;
}
.themes-label, .places-label {
  font-family: 'DM Sans', sans-serif;
  font-weight: 700;
  font-size: 13px;
  letter-spacing: 3px;
  text-transform: uppercase;
  color: var(--text-lighter);
  margin-bottom: 20px;
}
.themes-list, .places-list { line-height: 2.4; }
.theme-link {
  font-family: 'Newsreader', serif;
  font-size: 26px;
  color: var(--text);
  text-decoration: none;
  transition: color 0.15s;
}
.theme-link:hover { color: var(--green); }
.place-link {
  font-family: 'Literata', serif;
  font-size: 20px;
  color: var(--text-lighter);
  text-decoration: none;
  transition: color 0.15s;
  font-style: italic;
}
.place-link:hover { color: var(--text); }
.theme-sep { padding: 0 10px; color: var(--rule); font-size: 14px; }

/* Results */
.results-section { max-width: 860px; margin: 0 auto; padding: 0 40px; }
.results-header { padding: 16px 0 8px; border-bottom: 1px solid var(--rule); margin-bottom: 16px; }
.results-title-bar { display: flex; justify-content: space-between; align-items: baseline; }
.results-title { font-family: 'Newsreader', serif; font-size: 24px; color: var(--text); }
.results-clear { font-family: 'DM Sans', sans-serif; font-size: 13px; color: var(--text-faint); text-decoration: none; }
.results-clear:hover { color: var(--text); }
.results-count-label { font-family: 'DM Sans', sans-serif; font-size: 13px; color: var(--text-faint); }

.no-results { padding: 48px 0; text-align: center; }
.no-results-text { font-family: 'Newsreader', serif; font-size: 22px; color: var(--text); margin-bottom: 8px; }
.no-results-sub { font-family: 'Literata', serif; font-size: 15px; color: var(--text-light); font-style: italic; }

/* Book List (results + taxonomy archives) */
.book-list {
  max-width: 860px;
  margin: 0 auto;
  padding: 0 40px 48px;
}
.book-list-item { display: flex; gap: 32px; padding: 32px 0; border-bottom: 1px solid var(--rule); align-items: center; }
.book-list-cover { flex-shrink: 0; width: 160px; }
.book-list-cover img { width: 160px; height: auto; border-radius: 2px; box-shadow: 2px 4px 12px rgba(0,0,0,0.15); }
.book-list-info { flex: 1; }
.book-list-title { font-family: 'Newsreader', serif; font-size: 20px; color: var(--text); text-decoration: none; display: block; margin-bottom: 2px; }
.book-list-author { font-family: 'Literata', serif; font-size: 15px; color: var(--text-light); font-style: italic; margin-bottom: 0; }
.book-list-desc { font-family: 'Literata', serif; font-size: 14px; color: var(--text-light); line-height: 1.6; margin-top: 20px; margin-bottom: 20px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.book-list-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 0; margin-bottom: 6px; }
.result-tag { font-family: 'DM Sans', sans-serif; font-size: 11px; font-weight: 500; color: var(--text-light); border: 1px solid var(--rule); padding: 2px 8px; border-radius: 3px; text-transform: uppercase; letter-spacing: 0.04em; }
.result-bookshop { font-family: 'DM Sans', sans-serif; font-size: 12px; font-weight: 600; color: var(--green); text-decoration: none; }
.result-bookshop:hover { color: var(--green-hover); }

/* ════════════════════════════════════
   WILD BOOKS: SINGLE BOOK
   ════════════════════════════════════ */
.breadcrumb {
  max-width: 860px; margin: 0 auto; padding: 16px 40px;
  font-family: 'DM Sans', sans-serif; font-size: 13px; color: var(--text-faint);
}
.breadcrumb a { color: var(--green); text-decoration: none; }
.breadcrumb span { padding: 0 6px; color: var(--text-lighter); }

.book-header {
  max-width: 860px; margin: 0 auto; padding: 64px 40px 32px 16px;
  display: flex; gap: 40px; align-items: flex-start;
  opacity: 0; animation: fadeUp 0.5s ease 0.15s forwards;
}
.book-cover { position: relative; flex-shrink: 0; }
.book-cover img {
  width: 240px; height: auto; display: block;
  box-shadow: 4px 6px 20px rgba(0,0,0,0.18), 0 2px 6px rgba(0,0,0,0.1);
  border-radius: 2px;
}
.book-info { flex: 1; padding-top: 0; }
.book-title { font-family: 'Newsreader', serif; font-size: 38px; line-height: 1.15; color: var(--text); margin-bottom: 8px; }
.book-author { font-family: 'Literata', serif; font-size: 20px; font-style: italic; color: var(--text-light); margin-bottom: 28px; }
.book-author a { color: var(--text-light); text-decoration: none; }
.book-author a:hover { color: var(--green); }
.book-description { font-family: 'Literata', serif; font-size: 16px; line-height: 1.7; color: var(--text-light); margin-bottom: 24px; }
.book-tags { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 24px; }
.book-tag {
  font-family: 'DM Sans', sans-serif; font-size: 12px; font-weight: 500;
  color: var(--text-light); border: 1px solid var(--rule); padding: 4px 12px;
  border-radius: 3px; text-decoration: none; text-transform: uppercase;
  letter-spacing: 0.04em; transition: all 0.2s;
}
.book-tag:hover { border-color: var(--green); background: var(--green-soft); }
.book-cta {
  display: inline-flex; align-items: center; gap: 10px;
  font-family: 'DM Sans', sans-serif; font-size: 14px; font-weight: 600;
  color: var(--cream); background: var(--green);
  padding: 14px 28px; border-radius: 6px; text-decoration: none;
  text-transform: uppercase; letter-spacing: 0.06em; transition: background 0.2s;
}
.book-cta:hover { background: var(--green-hover); }
.book-cta svg { width: 20px; height: 20px; }
.book-review-link {
  display: block; width: fit-content; margin-top: 16px;
  font-family: 'DM Sans', sans-serif; font-size: 13px; font-weight: 600;
  text-transform: uppercase; letter-spacing: 0.06em;
  color: var(--yellow); text-decoration: none;
}
.book-review-link:hover { text-decoration: underline; }

/* Meta Bar */
.book-meta-section { max-width: 860px; margin: 0 auto; padding: 72px 40px 0; opacity: 0; animation: fadeUp 0.5s ease 0.35s forwards; }
.book-meta-bar { display: flex; justify-content: center; gap: 40px; padding: 24px 0; border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule); }
.book-meta-item { display: flex; flex-direction: column; align-items: center; gap: 4px; }
.book-meta-label { font-family: 'DM Sans', sans-serif; font-size: 11px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; color: var(--text-lighter); }
.book-meta-value { font-family: 'Literata', serif; font-size: 15px; color: var(--text); }
.book-meta-value a { color: var(--text); text-decoration: none; }
.book-meta-value a:hover { color: var(--green); }

/* Key Quotes */
.book-quotes-section { max-width: 860px; margin: 0 auto; padding: 48px 40px 0; }
.book-quotes-header { font-family: 'DM Sans', sans-serif; font-size: 13px; font-weight: 700; letter-spacing: 3px; text-transform: uppercase; color: var(--text-lighter); margin-bottom: 32px; text-align: center; }
.book-quotes-inner { max-width: 600px; margin: 0 auto; }
.book-quote { margin: 0 0 32px 0; padding: 0 0 32px 0; border-bottom: 1px solid var(--rule); }
.book-quote:last-child { border-bottom: none; padding-bottom: 0; }
.book-quote-text { font-family: 'Literata', serif; font-size: 18px; line-height: 1.75; color: var(--text); font-style: italic; margin: 0 0 10px 0; }
.book-quote-ref { font-family: 'DM Sans', sans-serif; font-size: 12px; font-weight: 500; letter-spacing: 0.04em; text-transform: uppercase; color: var(--text-lighter); font-style: normal; }

/* Wild Words on book page */
.wild-words-section { max-width: 860px; margin: 0 auto; padding: 80px 40px 0; }
.section-label { font-family: 'DM Sans', sans-serif; font-size: 13px; font-weight: 700; letter-spacing: 3px; text-transform: uppercase; color: var(--text-lighter); margin-bottom: 32px; text-align: center; }
.wild-words-list { display: flex; flex-wrap: wrap; gap: 12px; justify-content: center; }
.wild-word-link {
  font-family: 'Newsreader', serif; font-size: 18px;
  color: var(--text); text-decoration: none; padding: 8px 20px;
  border: 1px solid var(--rule); border-radius: 4px; transition: all 0.2s;
}
.wild-word-link:hover { border-color: var(--yellow); background: var(--yellow-soft); }
.wild-word-pron { font-family: 'DM Sans', sans-serif; font-size: 12px; color: var(--text-faint); margin-left: 8px; }

/* Related Books on the word page — the same bordered, text-only chip as the word
   chips, but the title stacks OVER the author rather than sitting inline. Book
   titles and author names are long enough that an inline layout wraps awkwardly;
   stacking keeps every chip clean regardless of length. Lives inside .post (640px
   column); the 48px top margin collapses with the tags' 48px bottom margin. */
.related-books-block { margin: 48px 0; }
.related-books-inline { display: flex; flex-wrap: wrap; gap: 14px; justify-content: center; }
.related-book-chip {
  display: flex; flex-direction: column; align-items: flex-start;
  width: min(272px, 100%); box-sizing: border-box;
  text-decoration: none; padding: 16px 18px;
  border: 1px solid var(--rule); border-radius: 10px;
  transition: border-color .2s, background .2s;
}
.related-book-chip:hover { border-color: var(--yellow); background: var(--yellow-soft); }
.related-book-chip-title { font-family: 'Newsreader', serif; font-weight: 600; font-size: 17px; line-height: 1.2; color: var(--ink); }
.related-book-chip-author { font-family: 'DM Sans', sans-serif; font-size: 12px; color: var(--text-faint); margin-top: 6px; }

/* Related Books */
.related-section { max-width: 860px; margin: 0 auto; padding: 80px 40px 0; }
.related-grid { display: flex; gap: 24px; justify-content: center; flex-wrap: wrap; }
.related-book { width: 140px; text-align: center; text-decoration: none; transition: transform 0.2s; }
.related-book:hover { transform: translateY(-4px); }
.related-book img { width: 140px; height: auto; border-radius: 2px; box-shadow: 2px 3px 10px rgba(0,0,0,0.12); margin-bottom: 10px; }
.related-book-title { font-family: 'Newsreader', serif; font-size: 14px; color: var(--text); line-height: 1.2; margin-bottom: 4px; }
.related-book-author { font-family: 'DM Sans', sans-serif; font-size: 12px; color: var(--text-faint); }

.end-bug { text-align: center; font-family: 'DM Sans', sans-serif; font-weight: 700; font-size: 24px; letter-spacing: 5px; color: var(--green); padding: 80px 0 16px; }
.bottom-rule { border: none; border-top: 1px solid var(--rule); }

/* ════════════════════════════════════
   RESPONSIVE
   ════════════════════════════════════ */
@media (max-width: 700px) {
  .book-header { flex-direction: column; align-items: center; text-align: center; padding: 24px 24px 32px; }
  .book-cover img { width: 180px; }
  .book-tags { justify-content: center; }
  .book-meta-bar { flex-wrap: wrap; gap: 20px; }
  .hero { padding: 40px 24px 32px; }
  .s-text, .s-dd { font-size: 24px; }
  .shelf-book { width: 110px; }
  .themes, .places { padding: 32px 24px 16px; }
  .theme-link { font-size: 20px; }
  .place-link { font-size: 17px; }
  .results-section { padding: 0 24px; }
}

/* ════════════════════════════════════
   WILD JOURNALS: PALETTE
   ════════════════════════════════════ */
/* Note: --lichen and --lichen-soft are defined in :root above */

/* ════════════════════════════════════
   WILD JOURNALS: HOMEPAGE
   ════════════════════════════════════ */
.journal-landing {
  max-width: 1100px;
  margin: 0 auto;
  min-height: calc(100vh - 52px);
}
.journal-hero {
  text-align: center;
  padding: 4rem 2rem 0;
}
.journal-tagline {
  font-family: 'Newsreader', Georgia, serif;
  font-size: 26px;
  font-weight: normal;
  line-height: 1.3;
}
.journal-tagline-dark { color: var(--text); }
.journal-tagline-accent { color: var(--lichen); }
@media (min-width: 480px) { .journal-tagline { font-size: 30px; } }

.journal-featured {
  padding: 2.5rem 1.5rem 0;
  text-align: center;
}
.journal-featured img {
  width: 100%;
  height: auto;
  display: block;
  border-radius: 3px;
}
.journal-featured-caption {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 13px;
  color: var(--text-faint);
  text-align: center;
  padding: 14px 0 0;
}
.journal-featured-caption strong { color: var(--text-light); font-weight: 500; }
.journal-featured-caption em {
  font-family: 'Literata', Georgia, serif;
  font-style: italic;
}
.journal-featured-loading {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 14px;
  color: var(--text-faint);
  padding: 120px 0;
  text-align: center;
}

.journal-home-buttons { text-align: center; padding: 2.5rem 2rem 5rem; }
.journal-home-buttons .random-btn { display: inline-block; margin: 0 6px; }

.journal-home-subnav {
  text-align: center;
  padding: 1.5rem 2rem 0;
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 13px;
  color: var(--text-lighter);
}
.journal-home-subnav a {
  color: var(--text-lighter);
  text-decoration: none;
  transition: color 0.2s;
}
.journal-home-subnav a:hover { color: var(--text); }

/* ════════════════════════════════════
   WILD JOURNALS: SINGLE JOURNAL
   ════════════════════════════════════ */
.journal-header {
  max-width: 800px;
  margin: 0 auto;
  padding: 80px 24px 0;
  text-align: center;
}
.journal-title {
  font-family: 'Newsreader', Georgia, serif;
  font-size: 42px;
  font-weight: 400;
  color: var(--text);
  line-height: 1.15;
  margin-bottom: 12px;
}
.journal-single-meta {
  font-family: 'Literata', Georgia, serif;
  font-size: 17px;
  font-style: italic;
  color: var(--text-faint);
  margin-bottom: 8px;
}
.journal-single-meta a {
  color: var(--text-light);
  text-decoration: none;
  font-style: normal;
}
.journal-single-meta a:hover { color: var(--lichen); }
.journal-themes-list {
  display: flex;
  justify-content: center;
  gap: 8px;
  flex-wrap: wrap;
  padding: 16px 0 0;
}
.journal-theme-tag {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 10px;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  padding: 4px 10px;
  border-radius: 3px;
  background: var(--lichen-soft);
  color: var(--text-light);
  text-decoration: none;
  transition: background 0.2s;
}
.journal-theme-tag:hover { background: rgba(196,188,0,0.24); }

.journal-desc {
  max-width: 640px;
  margin: 0 auto;
  padding: 32px 24px 0;
  font-family: 'Literata', Georgia, serif;
  font-size: 16px;
  line-height: 1.75;
  color: var(--text-light);
  text-align: center;
}

.section-journals .accent-rule { background: var(--lichen); margin: 48px auto 56px; }

.journal-gallery {
  max-width: 1100px;
  margin: 0 auto;
  padding: 0 1.5rem;
}
.journal-gallery-image { margin-bottom: 2.5rem; }
.journal-gallery-image img {
  width: 100%;
  height: auto;
  display: block;
  border-radius: 3px;
}
.journal-gallery-caption {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 12px;
  color: var(--text-lighter);
  text-align: center;
  padding: 10px 0 0;
  font-style: italic;
}

/* Contributor card */
.contributor-card {
  max-width: 640px;
  margin: 0 auto;
  padding: 56px 24px 80px;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 16px;
  border-top: 1px solid var(--rule);
}
.contributor-photo {
  width: 72px;
  height: 72px;
  border-radius: 50%;
  object-fit: cover;
  flex-shrink: 0;
}
.contributor-info { flex: 1; text-align: center; }
.contributor-name {
  font-family: 'Newsreader', Georgia, serif;
  font-size: 20px;
  color: var(--text);
  margin-bottom: 4px;
}
.contributor-name a { color: var(--text); text-decoration: none; }
.contributor-name a:hover { color: var(--lichen); }
.contributor-bio {
  font-family: 'Literata', Georgia, serif;
  font-size: 14px;
  line-height: 1.65;
  color: var(--text-light);
  margin-bottom: 8px;
}
.contributor-links a {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 12px;
  font-weight: 500;
  color: var(--lichen);
  text-decoration: none;
  margin-right: 12px;
}
.contributor-links a:hover { text-decoration: underline; }

/* Journal nav */
.journal-nav {
  max-width: 640px;
  margin: 40px auto 0;
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  padding: 40px 24px 56px;
  border-top: 1px solid var(--rule);
}
.journal-nav a { text-decoration: none; transition: opacity 0.2s; }
.journal-nav a:hover { opacity: 0.7; }
.journal-nav .label {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 10px;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: var(--text-faint);
  display: block;
  margin-bottom: 4px;
}
.journal-nav .adjacent-journal {
  font-family: 'Newsreader', Georgia, serif;
  font-size: 18px;
  color: var(--text);
  display: block;
}
.journal-nav .next { text-align: right; }

/* Journals end bug + bottom rule */
.section-journals .end-bug {
  font-size: 94px;
  color: var(--lichen);
  letter-spacing: 0;
  line-height: 1;
}
.section-journals .bottom-rule { margin: 0 0 40px; }

/* ════════════════════════════════════
   WILD JOURNALS: ARCHIVE
   ════════════════════════════════════ */
.journal-archive-header {
  max-width: 800px;
  margin: 0 auto;
  padding: 56px 24px 32px;
  text-align: center;
}
.journal-archive-header h1 {
  font-family: 'Newsreader', Georgia, serif;
  font-size: 36px;
  color: var(--text);
  margin-bottom: 8px;
}
.journal-archive-header h1 span { color: var(--lichen); }
.journal-archive-header p {
  font-family: 'Literata', Georgia, serif;
  font-size: 15px;
  color: var(--text-light);
}

.journal-grid {
  max-width: 1100px;
  margin: 0 auto;
  padding: 0 24px 48px;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 32px;
}
.journal-card {
  text-decoration: none;
  display: block;
  transition: transform 0.2s;
}
.journal-card:hover { transform: translateY(-3px); }
.journal-card img {
  width: 100%;
  height: auto;
  display: block;
  border-radius: 3px;
  margin-bottom: 12px;
}
.journal-card-title {
  font-family: 'Newsreader', Georgia, serif;
  font-size: 18px;
  color: var(--text);
  margin-bottom: 4px;
}
.journal-card-meta {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 13px;
  color: var(--text-faint);
}

/* ════════════════════════════════════
   WILD JOURNALS: CONTRIBUTOR PAGE
   ════════════════════════════════════ */
.contributor-header {
  max-width: 640px;
  margin: 0 auto;
  padding: 56px 24px 32px;
  text-align: center;
}
.contributor-header-photo {
  width: 120px;
  height: 120px;
  border-radius: 50%;
  object-fit: cover;
  margin: 0 auto 20px;
  display: block;
}
.contributor-header h1 {
  font-family: 'Newsreader', Georgia, serif;
  font-size: 36px;
  color: var(--text);
  margin-bottom: 12px;
}
.contributor-header-bio {
  font-family: 'Literata', Georgia, serif;
  font-size: 16px;
  line-height: 1.75;
  color: var(--text-light);
  margin-bottom: 16px;
}
.contributor-header-links a {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 13px;
  font-weight: 500;
  color: var(--lichen);
  text-decoration: none;
  margin: 0 8px;
}
.contributor-header-links a:hover { text-decoration: underline; }

@media (max-width: 700px) {
  .journal-title { font-size: 32px; }
  .journal-grid { grid-template-columns: 1fr; }
}

/* ════════════════════════════════════
   PEOPLE I'VE MET (PIM) — single entry
   Mirrors field-notes-pim-entry-v0.8.html, with three hero
   orientation variants driven by .lead-landscape / .lead-square /
   .lead-vertical classes on the lead wrapper. The .pim-entry-inner
   block keeps the text column at 720px; the lead can break out of
   that column for landscape (full bleed) but stays within it for
   square (column width) and vertical (narrower, centered).
   ════════════════════════════════════ */

.pim-entry { display: block; }
.pim-entry-inner { max-width: 720px; margin: 0 auto; padding: 0 28px; }

.pim-breadcrumb {
  font-family: var(--sans);
  font-size: 12px;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--text-faint);
  text-decoration: none;
  display: inline-block;
  margin: 30px 0 0;
}
.pim-breadcrumb:hover { color: var(--accent-deep); }

/* Entry header block */
.pim-entry-head { padding: 34px 0 18px; }
.pim-entry-kicker {
  font-family: var(--sans);
  font-size: 12px;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--accent-deep);
  margin-bottom: 16px;
}
.pim-entry-title {
  font-family: var(--display);
  font-weight: 500;
  font-size: clamp(38px, 6vw, 62px);
  line-height: 1.02;
  letter-spacing: -.015em;
  color: var(--ink);
}
.pim-entry-sub {
  font-family: var(--display);
  font-weight: 300;
  font-style: italic;
  font-size: clamp(19px, 2.4vw, 24px);
  line-height: 1.32;
  color: var(--text-light);
  margin-top: 16px;
  max-width: 30ch;
}
.pim-entry-meta {
  font-family: var(--sans);
  font-size: 12.5px;
  letter-spacing: .04em;
  color: var(--text-faint);
  margin-top: 22px;
  padding-top: 18px;
  border-top: 1px solid var(--rule);
  display: flex;
  gap: 18px;
  flex-wrap: wrap;
}
.pim-entry-meta b { color: var(--text-light); font-weight: 500; }

/* Lead image — orientation variants */
.lead { margin: 30px auto 8px; }
.lead img { width: 100%; border-radius: 2px; display: block; }
.lead .pim-cap,
.pim-cap {
  font-family: var(--sans);
  font-size: 12px;
  color: var(--text-faint);
  margin-top: 9px;
  line-height: 1.45;
}
.pim-cap b { color: var(--text-light); font-weight: 500; }

/* Landscape — wider than the text column but no longer full-bleed.
   Centered at 1080px max with comfortable cream margins on viewports
   wider than that. Bleed becomes a future opt-in (.lead.bleed) for
   images that genuinely earn it; the default treatment lets press
   shots and chest-up portraits sit without dominating the page. */
.lead-landscape {
  max-width: 1080px;
  margin-left: auto;
  margin-right: auto;
  padding: 0 28px;
}
.lead-landscape .pim-cap {
  max-width: 720px;
  margin-left: auto;
  margin-right: auto;
}

/* Square — sits inside the 720px text column */
.lead-square {
  max-width: 720px;
  padding: 0 28px;
}

/* Vertical — narrower, centered; balances tall image against text */
.lead-vertical {
  max-width: 480px;
  padding: 0 28px;
}

/* Body prose */
.pim-prose { padding: 14px 0 0; max-width: 720px; margin: 0 auto; }
.pim-prose p {
  font-size: 19px;
  line-height: 1.68;
  color: var(--ink);
  margin: 0 0 26px;
}
.pim-prose p.lead-para::first-letter {
  font-family: var(--display);
  font-weight: 500;
  float: left;
  font-size: 64px;
  line-height: .82;
  padding: 6px 10px 0 0;
  color: var(--accent-deep);
}
.pim-prose h2 {
  font-family: var(--display);
  font-weight: 500;
  font-size: 27px;
  line-height: 1.2;
  margin: 40px 0 16px;
  color: var(--ink);
}
.pim-prose blockquote {
  margin: 34px 0;
  padding: 0 0 0 24px;
  border-left: 2px solid var(--accent);
}
.pim-prose blockquote p {
  font-family: var(--display);
  font-weight: 300;
  font-style: italic;
  font-size: 25px;
  line-height: 1.4;
  color: var(--ink);
}
.pim-prose a {
  color: var(--accent-deep);
  text-decoration: underline;
  text-underline-offset: 2px;
  text-decoration-thickness: 1px;
}

/* Inline figures inside prose (editor wraps these as needed) */
.pim-prose figure { margin: 34px 0; }
.pim-prose figure.wide {
  max-width: 1080px;
  margin-left: 50%;
  transform: translateX(-50%);
  width: min(1080px, 100vw);
}
.pim-prose figure img { width: 100%; border-radius: 2px; }
.pim-prose .duo {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
  margin: 34px 0;
}
.pim-prose .duo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 2px;
}

/* Footer block under the prose */
.pim-entry-end {
  margin: 46px 0 0;
  padding: 30px 0 0;
  border-top: 1px solid var(--rule);
  font-family: var(--sans);
  font-size: 13px;
  color: var(--text-faint);
  display: flex;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 14px;
}
.pim-entry-end a {
  color: var(--accent-deep);
  text-decoration: none;
}
.pim-entry-end a:hover { text-decoration: underline; }

/* More people grid */
.pim-more {
  background: var(--bg-warm);
  margin-top: 48px;
  padding: 44px 0 50px;
}
.pim-more-in {
  max-width: 1180px;
  margin: 0 auto;
  padding: 0 32px;
}
.pim-more h3 {
  font-family: var(--display);
  font-size: 22px;
  font-weight: 500;
  margin-bottom: 20px;
}
.pim-more-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 12px;
}
.pim-more-grid a {
  position: relative;
  aspect-ratio: 3 / 4;
  overflow: hidden;
  border-radius: 2px;
  background: var(--panel);
  display: block;
  text-decoration: none;
}
.pim-more-grid img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.pim-more-grid .pim-nm {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  padding: 30px 12px 11px;
  color: #F6F1E7;
  font-family: var(--display);
  font-size: 18px;
  font-weight: 500;
  background: linear-gradient(to top, rgba(20,16,12,.8), transparent);
}

@media (max-width: 680px) {
  .pim-more-grid { grid-template-columns: repeat(2, 1fr); }
  .pim-prose .duo { grid-template-columns: 1fr; }
}

/* ════════════════════════════════════
   STORIES — single entry
   Mirrors field-notes-story-v0.4.html. Essay-style: full-bleed hero,
   centered title block, prose with drop cap, inline figures at three
   scales (colw / wide / bleed), pullquote, standalone italic line,
   ornament divider. Hero is always full-bleed by design — Stories
   open with the cinematic establishing shot.
   ════════════════════════════════════ */

/* Hero — full bleed up to 1080px */
.story-hero {
  width: 100vw;
  max-width: min(1080px, 100vw);
  margin-left: 50%;
  transform: translateX(-50%);
  background: var(--panel);
}
.story-hero img {
  width: 100%;
  height: auto;
  display: block;
}

/* Column container shared by head and prose */
.story-col {
  max-width: 720px;
  margin-left: auto;
  margin-right: auto;
  padding-left: 28px;
  padding-right: 28px;
}

/* Story head — centered essay title block */
.story-head {
  text-align: center;
  padding: 48px 0 14px;
}
.story-head .kicker {
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: .22em;
  text-transform: uppercase;
  color: var(--accent-deep);
  margin-bottom: 22px;
}
.story-head .title {
  font-family: var(--display);
  font-weight: 500;
  font-size: clamp(40px, 6.4vw, 66px);
  line-height: 1.0;
  letter-spacing: -.02em;
  color: var(--ink);
}
.story-head .deck {
  font-family: var(--display);
  font-weight: 300;
  font-style: italic;
  font-size: clamp(20px, 2.5vw, 25px);
  line-height: 1.34;
  color: var(--text-light);
  margin: 18px auto 0;
  max-width: 30ch;
}
.story-head .byline {
  font-family: var(--sans);
  font-size: 12px;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--text-faint);
  margin-top: 26px;
}
.story-head .byline b {
  color: var(--text-light);
  font-weight: 500;
}
.story-head .head-rule {
  width: 54px;
  height: 1px;
  background: var(--rule);
  margin: 30px auto 0;
}

/* Prose */
.story-prose {
  padding-top: 30px;
}
.story-prose p {
  font-size: 19px;
  line-height: 1.74;
  color: var(--ink);
  margin: 0 0 26px;
}
.story-prose p.story-lead::first-letter {
  font-family: var(--display);
  font-weight: 500;
  float: left;
  font-size: 74px;
  line-height: .78;
  padding: 7px 12px 0 0;
  color: var(--accent-deep);
}
.story-prose p.standalone {
  font-family: var(--display);
  font-weight: 400;
  font-style: italic;
  font-size: 23px;
  color: var(--ink);
  text-align: center;
  margin: 30px 0;
}
.story-prose blockquote {
  margin: 30px 0;
  padding: 2px 0 2px 22px;
  border-left: 2px solid var(--rule);
}
.story-prose blockquote p {
  font-size: 17.5px;
  line-height: 1.6;
  color: var(--text-light);
  font-style: italic;
  margin: 0 0 10px;
}
.story-prose blockquote cite {
  font-family: var(--sans);
  font-style: normal;
  font-size: 12.5px;
  letter-spacing: .04em;
  color: var(--text-faint);
}

/* Inline figures — three scales */
.story-prose .fig {
  margin: 38px auto;
}
.story-prose .fig img {
  width: 100%;
  border-radius: 2px;
}
.story-prose .fig.colw {
  max-width: 680px;
}
.story-prose .fig.wide {
  width: min(1080px, 94vw);
  margin-left: 50%;
  transform: translateX(-50%);
}
.story-prose .fig.bleed {
  width: min(1080px, 100vw);
  margin-left: 50%;
  transform: translateX(-50%);
}
.story-prose .fig.bleed img,
.story-prose .fig.wide img {
  border-radius: 0;
}
.story-prose .cap {
  font-family: var(--sans);
  font-size: 12px;
  color: var(--text-faint);
  margin-top: 9px;
  line-height: 1.45;
}
.story-prose .cap b {
  color: var(--text-light);
  font-weight: 500;
}
.story-prose .fig.wide .cap,
.story-prose .fig.bleed .cap {
  max-width: 680px;
  margin-left: auto;
  margin-right: auto;
  padding: 0 28px;
}

/* Pullquote */
.story-prose .pull {
  margin: 42px auto;
  max-width: 620px;
  text-align: center;
}
.story-prose .pull p {
  font-family: var(--display);
  font-weight: 400;
  font-style: italic;
  font-size: clamp(26px, 3.6vw, 34px);
  line-height: 1.28;
  color: var(--ink);
  margin: 0;
  letter-spacing: -.01em;
}

/* Ornament divider — joshua tree bug, uses the same --jt mask as the nav */
.story-prose .orn {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 14px;
  margin: 50px 0;
  color: var(--accent);
}
.story-prose .orn::before,
.story-prose .orn::after {
  content: "";
  height: 1px;
  width: 46px;
  background: var(--rule);
}
.story-prose .orn .bug {
  display: inline-block;
  width: 17px;
  height: 21px;
  background: var(--accent);
  -webkit-mask: var(--jt) center/contain no-repeat;
  mask: var(--jt) center/contain no-repeat;
}

/* Byline-end footer (under the prose) */
.story-prose .byline-end {
  margin: 50px auto 0;
  padding: 28px 0 0;
  border-top: 1px solid var(--rule);
  font-family: var(--sans);
  font-size: 13px;
  color: var(--text-faint);
  display: flex;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 14px;
}
.story-prose .byline-end a {
  color: var(--accent-deep);
  text-decoration: none;
}
.story-prose .byline-end a:hover {
  text-decoration: underline;
}

/* More section — mixed Stories + Dispatches, 3-up grid */
.story-more {
  background: var(--bg-warm);
  margin-top: 54px;
  padding: 46px 0 52px;
}
.story-more-in {
  max-width: 1180px;
  margin: 0 auto;
  padding: 0 32px;
}
.story-more h3 {
  font-family: var(--display);
  font-size: 22px;
  font-weight: 500;
  margin-bottom: 18px;
}
.story-more-row {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}
.story-more-row a {
  text-decoration: none;
}
.story-more-row .ph {
  aspect-ratio: 3 / 2;
  background: var(--panel);
  border-radius: 2px;
  overflow: hidden;
  margin-bottom: 11px;
}
.story-more-row .ph img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.story-more-row .k {
  font-family: var(--sans);
  font-size: 11px;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--accent-deep);
}
.story-more-row .t {
  font-family: var(--display);
  font-size: 20px;
  font-weight: 500;
  color: var(--ink);
  line-height: 1.12;
  margin-top: 4px;
}

@media (max-width: 680px) {
  .story-more-row { grid-template-columns: 1fr; }
}

/* ════════════════════════════════════
   FIELD NOTES HOMEPAGE
   Ported from field-notes-home-mockup-v0_7.html (v1.4.2).
   All selectors scoped under .fn-home.
   ════════════════════════════════════ */

/* --- Hero (title + flanking-rule byline) --- */
.fn-home .hero {
  text-align: center;
  padding: 100px 32px 80px;
  max-width: 760px;
  margin: 0 auto;
}
.fn-home .hero h1 {
  font-family: var(--display);
  font-weight: 400;
  font-size: clamp(48px, 6.5vw, 76px);
  line-height: 1.0;
  letter-spacing: -.025em;
  color: var(--ink);
  margin: 0 0 22px;
}
.fn-home .hero h1 em {
  font-style: italic;
  font-weight: 400;            /* v4.9.5: was 300 */
  color: var(--ink);           /* v4.9.5: emphasis is the italic alone, no accent color */
}
.fn-home .hero .byline {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 18px;
  margin-top: 34px;
}
.fn-home .hero .byline .line {
  display: block;
  width: 52px;
  height: 1px;
  background: var(--accent-deep);
  opacity: .45;
}
.fn-home .hero .byline .name {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: 26px;
  letter-spacing: -.005em;
  color: var(--accent-deep);
}

/* --- Section opener (bug + label, centered) --- */
.fn-home .section-opener {
  text-align: center;
  padding: 90px 32px 44px;
  max-width: 720px;
  margin: 0 auto;
}
.fn-home .section-opener .jt-bug {
  width: 34px;
  height: 40px;
  margin: 0 auto 22px;
  display: block;
  -webkit-mask: var(--jt) center/contain no-repeat;
          mask: var(--jt) center/contain no-repeat;
  background-color: var(--ink);
}
.fn-home .section-opener h2 {
  font-family: var(--display);
  font-weight: 500;
  font-size: 38px;
  line-height: 1.05;
  letter-spacing: -.018em;
  color: var(--ink);
  margin: 0;
}

/* --- People I've Met — 4-col mosaic --- */
.fn-home .mosaic {
  max-width: 1280px;
  margin: 0 auto;
  padding: 0 24px 30px;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-auto-rows: 200px;
  gap: 10px;
}
.fn-home .tile {
  position: relative;
  overflow: hidden;
  background: var(--panel);
  border-radius: 2px;
  text-decoration: none;
}
.fn-home .tile.big  { grid-column: span 2; grid-row: span 2; }
.fn-home .tile.tall { grid-row: span 2; }
.fn-home .tile.wide { grid-column: span 2; }
.fn-home .tile img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.fn-home .tile .ovl {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  padding: 14px 14px 11px;
  color: #F6F1E7;
  background: linear-gradient(to top, rgba(28,26,23,.78) 0%, rgba(28,26,23,.4) 60%, transparent 100%);
}
.fn-home .tile .who {
  font-family: var(--display);
  font-weight: 500;
  font-size: 16px;
  letter-spacing: -.005em;
  line-height: 1.15;
}
.fn-home .tile.big  .who { font-size: 22px; }
.fn-home .tile.tall .who { font-size: 17px; }
.fn-home .tile.wide .who { font-size: 19px; }
.fn-home .tile .what {
  font-family: var(--sans);
  font-size: 10.5px;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: rgba(255,255,255,.78);
  margin-top: 3px;
}
@media (min-width: 841px) {
  .fn-home .tile img { transition: transform .4s ease; }
  .fn-home .tile:hover img { transform: scale(1.04); }
}

/* --- Dispatches list (numbered, no thumbnail) --- */
.fn-home .disp-list {
  max-width: 720px;
  margin: 0 auto;
  padding: 0 32px;
}
.fn-home .dispatch {
  display: grid;
  grid-template-columns: 56px 1fr auto;
  gap: 22px;
  align-items: start;
  padding: 26px 0;
  border-bottom: 1px solid var(--rule);
  color: inherit;
  text-decoration: none;
}
.fn-home .dispatch:first-child {
  border-top: 1px solid var(--rule);
}
.fn-home .dispatch .play-ic {
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 1px solid var(--rule);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--accent-deep);
  background: var(--bg);
  transition: background .2s;
}
.fn-home .dispatch:hover .play-ic {
  background: var(--bg-warm);
}
.fn-home .dispatch .play-ic svg {
  width: 13px;
  height: 13px;
}
.fn-home .dispatch .body .kicker {
  font-family: var(--sans);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: .22em;
  color: var(--accent-deep);
  text-transform: uppercase;
  font-variant-numeric: tabular-nums;
  margin-bottom: 6px;
}
.fn-home .dispatch h3 {
  font-family: var(--display);
  font-weight: 500;
  font-size: 22px;
  line-height: 1.18;
  letter-spacing: -.012em;
  color: var(--ink);
  margin: 0 0 6px;
}
.fn-home .dispatch:hover h3 {
  color: var(--accent-deep);
}
.fn-home .dispatch .meta {
  font-family: var(--sans);
  font-size: 12px;
  color: var(--text-faint);
  letter-spacing: .02em;
}
.fn-home .dispatch .dur {
  font-family: var(--sans);
  font-size: 12px;
  color: var(--text-faint);
  font-variant-numeric: tabular-nums;
  padding-top: 14px;
  white-space: nowrap;
}

/* --- Newsletter (dark, CTA — no section opener around it) --- */
.fn-home .news {
  background: var(--dark);
  color: var(--bg);
  margin-top: 80px;
}
.fn-home .news-in {
  max-width: 680px;
  margin: 0 auto;
  padding: 62px 32px 66px;
  text-align: center;
}
.fn-home .news .eyebrow {
  font-family: var(--sans);
  font-size: 12px;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--accent);
  margin-bottom: 16px;
}
.fn-home .news h3 {
  font-family: var(--display);
  font-weight: 300;
  font-size: clamp(25px, 3vw, 33px);
  line-height: 1.24;
  margin-bottom: 14px;
}
.fn-home .news p {
  font-size: 17px;
  font-weight: 300;
  color: #D7CDBB;
  line-height: 1.6;
  max-width: 44ch;
  margin: 0 auto 26px;
}
.fn-home .signup {
  display: flex;
  gap: 10px;
  justify-content: center;
  flex-wrap: wrap;
}
.fn-home .signup input {
  font-family: var(--serif);
  font-size: 16px;
  padding: 13px 16px;
  width: min(320px, 80vw);
  border: 1px solid #45403a;
  border-radius: 3px;
  background: #2b2723;
  color: var(--bg);
}
.fn-home .signup input::placeholder {
  color: #938a7d;
}
.fn-home .signup button {
  font-family: var(--sans);
  font-size: 13px;
  letter-spacing: .06em;
  text-transform: uppercase;
  font-weight: 500;
  padding: 13px 22px;
  border: 0;
  border-radius: 3px;
  cursor: pointer;
  background: var(--accent);
  color: #fff;
}
.fn-home .signup button:hover {
  background: var(--accent-deep);
}
.fn-home .news .fine {
  margin-top: 16px;
  font-family: var(--sans);
  font-size: 12px;
  color: #8c8275;
}

/* --- Stories feature wrap (lead + 2 cards) --- */
.fn-home .feat-wrap {
  max-width: 1180px;
  margin: 0 auto;
  padding: 6px 32px 14px;
}
.fn-home .feat-lead {
  display: grid;
  grid-template-columns: 1.15fr 1fr;
  gap: 36px;
  align-items: center;
  text-decoration: none;
  color: inherit;
  padding-bottom: 32px;
  border-bottom: 1px solid var(--rule);
}
.fn-home .feat-lead .img {
  aspect-ratio: 3 / 2;
  border-radius: 2px;
  overflow: hidden;
  background: var(--panel);
}
.fn-home .feat-lead .img img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform .5s ease;
}
.fn-home .feat-lead:hover .img img {
  transform: scale(1.03);
}
.fn-home .feat-lead .kicker {
  font-family: var(--sans);
  font-size: 11px;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--accent-deep);
  margin-bottom: 13px;
}
.fn-home .feat-lead h3 {
  font-family: var(--display);
  font-weight: 500;
  font-size: clamp(29px, 3.4vw, 42px);
  line-height: 1.02;
  letter-spacing: -.015em;
  color: var(--ink);
}
.fn-home .feat-lead .deck {
  font-family: var(--display);
  font-weight: 300;
  font-style: italic;
  font-size: 19px;
  line-height: 1.36;
  color: var(--text-light);
  margin-top: 13px;
  max-width: 34ch;
}
.fn-home .feat-lead .m {
  font-family: var(--sans);
  font-size: 12px;
  letter-spacing: .03em;
  color: var(--text-faint);
  margin-top: 20px;
}
.fn-home .feat-lead:hover h3 {
  color: var(--accent-deep);
}

.fn-home .feat-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 32px;
  padding-top: 30px;
}
.fn-home .feat-card {
  text-decoration: none;
  color: inherit;
}
.fn-home .feat-card .img {
  aspect-ratio: 16 / 9;
  border-radius: 2px;
  overflow: hidden;
  background: var(--panel);
  margin-bottom: 15px;
}
.fn-home .feat-card .img img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform .5s ease;
}
.fn-home .feat-card:hover .img img {
  transform: scale(1.03);
}
.fn-home .feat-card .kicker {
  font-family: var(--sans);
  font-size: 11px;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--accent-deep);
  margin-bottom: 8px;
}
.fn-home .feat-card h3 {
  font-family: var(--display);
  font-weight: 500;
  font-size: 23px;
  line-height: 1.12;
  color: var(--ink);
}
.fn-home .feat-card .deck {
  font-size: 14.5px;
  font-weight: 300;
  color: var(--text-light);
  line-height: 1.5;
  margin-top: 8px;
  max-width: 46ch;
}
.fn-home .feat-card:hover h3 {
  color: var(--accent-deep);
}

/* --- Responsive --- */
@media (max-width: 840px) {
  .fn-home .hero { padding: 70px 28px 70px; }
  .fn-home .section-opener { padding: 70px 28px 36px; }
  .fn-home .section-opener h2 { font-size: 30px; }
  .fn-home .mosaic { grid-template-columns: repeat(2, 1fr); }
  .fn-home .tile.big  { grid-column: span 2; grid-row: span 2; }
  .fn-home .tile.tall { grid-row: span 2; grid-column: span 1; }
  .fn-home .tile.wide { grid-column: span 2; }
  .fn-home .feat-lead { grid-template-columns: 1fr; gap: 18px; }
  .fn-home .feat-row { grid-template-columns: 1fr; gap: 28px; }
}

@media (max-width: 680px) {
  .fn-home .dispatch { grid-template-columns: 44px 1fr; }
  .fn-home .dispatch .dur { display: none; }
}

/* ════════════════════════════════════
   MAP PAGE
   Ported from AJ's historical-badass.css (.map-* and .hb-* prefixes
   renamed to .fn-map-* / .fn-* for Field Notes). One pin type only
   (Place); category color rules omitted in v1 — chips use --accent
   when active. Per-category color theming can be added later by
   defining --place-{slug} CSS variables and rules below.
   ════════════════════════════════════ */

.fn-map-page {
  background: var(--bg);
  color: var(--ink);
  padding-top: 24px;
}

.fn-map-controls {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 12px;
  max-width: 1400px;
  margin: 0 auto;
  padding: 0 32px 16px;
}

.fn-map-filters {
  flex: 1;
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  align-items: center;
  justify-content: center;
}

.fn-map-filters .filter-label {
  font-family: var(--sans);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--text-faint);
  margin-right: 4px;
}

.fn-map-chip {
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  padding: 8px 14px;
  border: 1px solid var(--rule);
  background: var(--bg-warm);
  color: var(--text-light);
  cursor: pointer;
  transition: all 0.18s ease;
  outline: none;
  line-height: 1;
}

.fn-map-chip:focus,
.fn-map-chip:focus-visible { outline: none; }

.fn-map-chip:hover {
  border-color: var(--accent-deep);
  color: var(--accent-deep);
}

.fn-map-chip.is-active {
  background: var(--accent-deep);
  border-color: var(--accent-deep);
  color: var(--bg);
}

/* Fullscreen toggle */
.fn-fullscreen-toggle {
  flex-shrink: 0;
  width: 32px;
  height: 32px;
  display: flex !important;
  align-items: center;
  justify-content: center;
  background: var(--bg);
  border: 1.5px solid var(--text-light);
  color: var(--text-light);
  cursor: pointer;
  transition: all 0.18s ease;
  margin-left: 4px;
  padding: 0;
  position: relative;
  z-index: 10;
  gap: 6px;
}
.fn-fullscreen-toggle svg {
  display: block !important;
  width: 16px;
  height: 16px;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.75;
  stroke-linecap: round;
  stroke-linejoin: round;
  pointer-events: none;
}
.fn-fullscreen-toggle svg path {
  stroke: currentColor !important;
  fill: none !important;
}
.fn-fullscreen-toggle .fs-icon-close,
.fn-fullscreen-toggle .fs-label { display: none !important; }
.fn-fullscreen-toggle:hover {
  background: var(--accent-deep);
  border-color: var(--accent-deep);
  color: var(--bg);
}

/* Fullscreen mode — hide chrome, float close button at top right */
body.fn-fullscreen-map .site-nav,
body.fn-fullscreen-map .site-footer,
body.fn-fullscreen-map footer,
body.fn-fullscreen-map nav { display: none !important; }

body.fn-fullscreen-map .fn-map-page { position: relative; }
body.fn-fullscreen-map .fn-map-controls {
  position: static !important;
  height: 0 !important;
  min-height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  overflow: visible !important;
  background: transparent !important;
}
body.fn-fullscreen-map .fn-map-controls .filter-label,
body.fn-fullscreen-map .fn-map-controls .fn-map-chip { display: none !important; }
body.fn-fullscreen-map .fn-map-filters {
  display: block !important;
  height: 0 !important;
  min-height: 0 !important;
  padding: 0 !important;
  margin: 0 !important;
  border: 0 !important;
  background: none !important;
}
body.fn-fullscreen-map .fn-fullscreen-toggle {
  display: inline-flex !important;
  position: absolute !important;
  top: 12px;
  right: 12px;
  z-index: 9999;
  width: auto;
  height: 40px;
  padding: 0 16px 0 12px;
  background: var(--accent-deep);
  border-color: var(--accent-deep);
  color: var(--bg);
  border-radius: 999px;
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.22);
}
body.fn-fullscreen-map .fn-fullscreen-toggle:hover {
  background: var(--accent);
  border-color: var(--accent);
}
body.fn-fullscreen-map .fn-fullscreen-toggle .fs-icon-expand { display: none !important; }
body.fn-fullscreen-map .fn-fullscreen-toggle .fs-icon-close { display: block !important; }
body.fn-fullscreen-map .fn-fullscreen-toggle .fs-label {
  display: inline-block !important;
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  line-height: 1;
}
body.fn-fullscreen-map #fn-map { height: 100vh; }
body.fn-fullscreen-map { overflow: hidden; }

/* Map container */
#fn-map {
  width: 100%;
  height: calc(100vh - 120px);
  min-height: 480px;
  background: var(--bg);
  margin: 0;
  display: block;
}

/* Markers */
.fn-marker { background: transparent; border: none; }
.fn-marker .fn-marker-dot {
  display: block;
  width: 100%;
  height: 100%;
  border-radius: 50%;
  background: var(--accent);
  border: 2px solid var(--bg);
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.25);
  transition: transform 0.15s ease;
}
.fn-marker:hover .fn-marker-dot { transform: scale(1.25); }

/* Cluster bubble */
.fn-cluster-wrap { background: transparent; border: none; }
.fn-cluster {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: var(--accent);
  color: var(--bg);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--sans);
  font-weight: 500;
  font-size: 13px;
  letter-spacing: 0.04em;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.25);
}

/* Popover (floats above the map; same instance reused for every pin) */
.fn-map-popover {
  position: absolute;
  z-index: 9100;
  width: 340px;
  background: var(--bg);
  color: var(--ink);
  box-shadow: 0 12px 32px rgba(0, 0, 0, 0.22);
  font-family: var(--serif);
  pointer-events: auto;
  overflow: hidden;
}
.fn-map-popover .pop-thumb {
  display: block;
  width: 100%;
  height: auto;
}
.fn-map-popover .pop-body { padding: 18px 20px 18px; }
.fn-map-popover .pop-eyebrow {
  font-family: var(--sans);
  font-weight: 500;
  font-size: 11px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--accent-deep);
  margin-bottom: 10px;
}
.fn-map-popover .pop-title {
  font-family: var(--display);
  font-weight: 500;
  font-size: 22px;
  letter-spacing: -.01em;
  line-height: 1.12;
  color: var(--ink);
  margin: 0 0 8px;
}
.fn-map-popover .pop-desc {
  font-family: var(--serif);
  font-size: 14px;
  line-height: 1.5;
  color: var(--text-light);
  margin-bottom: 0;
}
.fn-map-popover .pop-link {
  display: inline-block;
  font-family: var(--sans);
  font-weight: 500;
  font-size: 12px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--accent-deep);
  text-decoration: none;
  margin-top: 12px;
  padding: 4px 0;
}
.fn-map-popover .pop-link:hover { color: var(--accent); }

@media (max-width: 600px) {
  .fn-map-popover { width: calc(100vw - 24px); }
}

/* ════════════════════════════════════════════════════════════════════════
   FIELD NOTES REDESIGN — v1.6.0
   The river homepage, slim-nav lens toggle, squat Dispatch single, and
   full-page field-survey map. New class names; the older .mosaic / .disp-list
   / .feat-wrap rules above are now dead (their markup is gone) and harmless.
   All rules use the existing :root tokens.
   ════════════════════════════════════════════════════════════════════════ */

/* ── Nav: Latest / Map lens toggle ── */
.nav-toggle { display: flex; border: 1px solid var(--rule); border-radius: 22px; overflow: hidden; }
.nav-toggle-btn {
  font-family: var(--sans); font-size: 11px; font-weight: 500; letter-spacing: .08em;
  text-transform: uppercase; color: var(--text-light); text-decoration: none;
  padding: 8px 16px; transition: background .2s, color .2s;
}
.nav-toggle-btn.is-active { background: var(--ink); color: var(--bg); }
.nav-toggle-btn:hover:not(.is-active) { color: var(--ink); }

/* ── Option C: two lens pills (magazine · library) + mobile menu ── */
/* The two desktop pills sit close together so they read as a pair of pills,
   set apart from the search/join controls by the wider .nav-right gap. */
.nav-lenses { display: flex; align-items: center; gap: 10px; }

.nav-hamburger {
  display: none; align-items: center; justify-content: center;
  background: none; border: none; padding: 6px; margin: 0; cursor: pointer; color: var(--ink);
}
.nav-hamburger svg { width: 22px; height: 22px; display: block; }
.nav-hamburger .ic-close { display: none; }
.nav-hamburger.is-open .ic-menu { display: none; }
.nav-hamburger.is-open .ic-close { display: block; }

/* Dropdown panel. Positioned against the sticky .site-nav; left/right sit inside
   the 32px nav gutter, but the panel bg matches the page so the edges are seamless —
   the hairline and soft shadow give it definition. */
.nav-mobile {
  display: none;
  position: absolute; top: 100%; left: 0; right: 0; z-index: 99;
  background: var(--bg);
  border-top: 1px solid var(--rule);
  box-shadow: 0 10px 20px rgba(34,29,23,.08);
  padding: 16px 32px 22px;
}
.nav-mobile.is-open { display: block; }
.nav-mobile-search { margin: 0 0 16px; }
.nav-mobile-search input {
  width: 100%; box-sizing: border-box;
  font-family: var(--sans); font-size: 14px; color: var(--ink);
  background: var(--bg-warm); border: 1px solid var(--rule); border-radius: 10px;
  padding: 12px 14px;
}
.nav-mobile-search input::placeholder { color: var(--text-faint); }
.nav-mobile-search input:focus { outline: none; border-color: var(--accent); }
.nav-mobile-pills .nav-toggle { display: flex; width: 100%; border-radius: 999px; }
.nav-mobile-pills .nav-toggle-btn { flex: 1; text-align: center; padding: 11px 0; }
.nav-mobile-rule { border: none; border-top: 1px solid var(--rule); margin: 12px 2px; }

@media (max-width: 767px) {
  .nav-lenses,
  .nav-right > .nav-search-btn { display: none; }
  .nav-hamburger { display: inline-flex; }
  .nav-right { gap: 14px; }
}

/* ── River filter (typographic, hairline + ochre active underline) ── */
/* v5.9.2 — river filter menu: left-aligned, mono, per-item underline (was centered/cinnabar-slide) */
.fn-home-river .fn-filter {
  position: relative;
  max-width: 1500px; margin: 6px auto 0; padding: 0 34px 15px;
  display: flex; align-items: center; justify-content: flex-start; gap: 22px;
  border-bottom: 1px solid var(--rule);
}
.fn-filter-chip {
  font-family: var(--mono); font-size: 11px; font-weight: 400; letter-spacing: .05em;
  text-transform: uppercase; color: var(--muted); background: none; border: none;
  cursor: pointer; padding: 0 0 2px; position: relative; transition: color .18s;
  border-bottom: 1px solid transparent;
}
.fn-filter-chip:hover { color: var(--ink); }
.fn-filter-chip.is-active { color: var(--ink); border-bottom-color: var(--ink); }
.fn-filter-chip.fn-filter-link { text-decoration: none; }
.fn-filter-arrow { margin-left: 5px; font-weight: 400; opacity: .55; }
.fn-filter-link:hover .fn-filter-arrow { opacity: 1; }
/* sliding-ink hook retired; kept hidden so any stray markup can't show a stray bar */
.fn-filter-ink { display: none; }

/* ── The river (variable-size randomized mosaic — v1.8.17) ──
   CSS grid masonry: cards vary in width as well as height. Column spans and
   row spans are assigned client-side in front-page-root.php (re-rolled every
   visit, on resize, after each infinite-scroll batch, and on the dice).
   row-gap is 0 by design — vertical rhythm is baked into each tile's row
   span via the +30 gutter in the layout math. */
.fn-river {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-rows: 10px;
  row-gap: 0;
  column-gap: 30px;
  grid-auto-flow: row dense;
  align-items: start;
  max-width: 1500px;
  margin: 0 auto;
  padding: 30px 34px 0;
}
@media (max-width: 1100px) { .fn-river { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 760px) {
  /* Below the mosaic breakpoint: a plain stacked grid. Auto rows + a real
     row-gap mean no JS packing and nothing shifts on scroll. */
  .fn-river { grid-template-columns: repeat(2, 1fr); grid-auto-rows: auto; grid-auto-flow: row; row-gap: 30px; column-gap: 18px; padding: 24px 18px 0; }
  .fn-river .fn-tile { grid-column: auto !important; grid-row: auto !important; margin: 0 !important; }
  .fn-river .fn-news-tile { grid-column: 1 / -1 !important; }
}
@media (max-width: 460px)  { .fn-river { grid-template-columns: 1fr; } }
.fn-tile { display: block; text-decoration: none; color: inherit; }
.fn-tile-img { display: block; position: relative; margin-bottom: 12px; overflow: hidden; border-radius: 3px; }
.fn-tile-img::after { content: ""; position: absolute; inset: 0; border: 1px solid rgba(39, 35, 32, .06); border-radius: inherit; pointer-events: none; }
.fn-tile-img img { display: block; width: 100%; height: auto; transition: transform .4s ease; }
.fn-tile:hover .fn-tile-img img { transform: scale(1.03); }
.fn-tile-kicker {
  display: flex; align-items: center; gap: 6px; font-family: var(--sans); font-size: 10.5px; font-weight: 700;
  letter-spacing: .15em; text-transform: uppercase; color: var(--accent); margin-bottom: 7px;
}
.fn-tile-kicker .gl { flex: none; width: 14px; height: 14px; display: inline-flex; align-items: center; justify-content: center; }
.fn-tile-kicker .gl svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
.fn-tile-title {
  display: block; font-family: var(--display); font-weight: 500; font-size: 21px;
  line-height: 1.14; letter-spacing: -.01em; color: var(--ink);
}
.fn-tile:hover .fn-tile-title { color: var(--accent-deep); }
.fn-tile-sub { display: block; font-family: var(--sans); font-size: 14px; color: var(--text-faint); margin-top: 6px; line-height: 1.45; }

/* v4.9.5 — Tile plate (C): editorial image tiles framed to match the word card.
   Hairline rule + warm tint around the whole tile, image inset so the tint
   frames all four sides, text below on the tint. Applied via .fn-tile-plate
   (added in fn_render_river_tile) so .fn-tile-word / .fn-tile-rough keep their
   own framing. */
.fn-tile-plate {
  background: var(--bg-warm);
  border: 1px solid var(--rule);
  border-radius: 3px;
  overflow: hidden;
  padding: 14px 0 16px;
  transition: border-color .25s ease, transform .25s ease, box-shadow .25s ease;
}
.fn-tile-plate:hover {
  border-color: var(--accent);
  transform: translateY(-2px);
  box-shadow: 0 6px 20px rgba(39, 35, 32, .07);
}
.fn-tile-plate .fn-tile-img { margin: 0 14px 12px; border-radius: 2px; }
.fn-tile-plate .fn-tile-kicker,
.fn-tile-plate .fn-tile-title,
.fn-tile-plate .fn-tile-sub { padding: 0 14px; }

/* Newsletter card woven into the river */
.fn-news-tile { background: var(--panel); border-radius: 3px; padding: 24px 22px; }
.fn-news-tile .fn-tile-title { font-size: 19px; }
.fn-news-copy { font-family: var(--serif); font-size: 14px; line-height: 1.55; color: var(--text-light); margin: 10px 0 14px; }
.fn-news-form { display: flex; gap: 8px; flex-wrap: wrap; }
.fn-news-form input {
  flex: 1; min-width: 140px; font-family: var(--sans); font-size: 13px; padding: 9px 12px;
  border: 1px solid var(--rule); border-radius: 3px; background: var(--bg); color: var(--ink);
}
.fn-news-form button {
  font-family: var(--sans); font-size: 12px; font-weight: 600; letter-spacing: .06em;
  text-transform: uppercase; color: #fff; background: var(--accent); border: none;
  border-radius: 3px; padding: 9px 16px; cursor: pointer; transition: background .2s;
}
.fn-news-form button:hover { background: var(--accent-deep); }

/* Empty state + bounded pager */
.fn-river-empty { font-family: var(--serif); font-style: italic; color: var(--text-faint); text-align: center; padding: 40px 0; }
.fn-pager {
  max-width: 1340px; margin: 8px auto 0; padding: 26px 34px 6px; border-top: 1px solid var(--rule);
  display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 10px;
}
.fn-pager-now { font-family: var(--sans); font-size: 11px; letter-spacing: .12em; text-transform: uppercase; color: var(--text-faint); }
.fn-pager-more { font-family: var(--sans); font-size: 12px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--accent); text-decoration: none; }
.fn-pager-more:hover { color: var(--accent-deep); }

/* ── Dispatch single: squat landscape "opened card" ── */
.fn-disp-page { max-width: 1000px; margin: 0 auto; padding: 48px 26px 8px; }
.fn-disp { display: grid; grid-template-columns: 1fr 1fr; gap: 40px; align-items: center; max-width: 980px; margin: 0 auto; }
.fn-disp.text { grid-template-columns: 1fr; max-width: 580px; }
.fn-disp-media { display: flex; align-items: center; justify-content: center; }
.fn-disp-media img { display: block; width: 100%; aspect-ratio: 1 / 1; object-fit: cover; border-radius: 3px; }
.fn-disp-kicker { font-family: var(--sans); font-size: 10px; font-weight: 700; letter-spacing: .16em; text-transform: uppercase; color: var(--accent); }
.fn-disp-title { font-family: var(--display); font-weight: 500; font-size: clamp(24px, 3vw, 33px); line-height: 1.08; letter-spacing: -.015em; color: var(--ink); margin: 9px 0 11px; }
.fn-disp-meta { font-family: var(--sans); font-size: 12px; color: var(--text-faint); padding-bottom: 15px; border-bottom: 1px solid var(--rule); margin-bottom: 18px; }
.fn-disp-content { font-family: var(--serif); font-size: 16px; line-height: 1.66; color: var(--ink); }
.fn-disp-content p { margin: 0 0 14px; }
.fn-disp-content p:last-child { margin-bottom: 0; }
.fn-disp-content blockquote {
  font-family: var(--display); font-weight: 500; font-style: italic; font-size: 22px; line-height: 1.32;
  color: var(--ink); margin: 4px 0 0; padding-left: 16px; border-left: 3px solid var(--accent);
}
.fn-disp-player { display: inline-flex; align-items: center; gap: 12px; border: 1px solid var(--rule); border-radius: 4px; padding: 12px 16px; margin-top: 18px; text-decoration: none; color: var(--ink); }
.fn-disp-play svg { width: 26px; height: 26px; fill: var(--accent); display: block; }
.fn-disp-play-label { font-family: var(--sans); font-size: 13px; }
.fn-disp-play-label span { display: block; font-size: 11px; color: var(--text-faint); margin-top: 2px; }
@media (max-width: 720px) { .fn-disp { grid-template-columns: 1fr; gap: 20px; max-width: 560px; } }

/* Dispatch onward tail */
.fn-dmore { max-width: 980px; margin: 88px auto 0; }
.fn-dmore::before { content: ""; display: block; width: 60px; height: 1px; background: var(--rule); margin: 0 auto 30px; }
.fn-dmore-head { font-family: var(--mono); font-size: 10px; font-weight: 400; letter-spacing: .22em; text-transform: uppercase; color: var(--text-lighter); text-align: center; margin: 0 0 26px; }
.fn-dmore-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
@media (max-width: 620px) { .fn-dmore-row { grid-template-columns: 1fr; max-width: 360px; margin: 0 auto; } }
.fn-dmore-card { display: block; text-decoration: none; color: inherit; }
.fn-dmore-img { display: block; overflow: hidden; border-radius: 2px; margin-bottom: 9px; }
.fn-dmore-img img { display: block; width: 100%; aspect-ratio: 5 / 4; object-fit: cover; }
.fn-dmore-kicker { display: block; font-family: var(--sans); font-size: 9px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; color: var(--accent); margin-bottom: 3px; }
.fn-dmore-title { display: block; font-family: var(--display); font-weight: 500; font-size: 15px; line-height: 1.18; color: var(--ink); }
.fn-dmore-card:hover .fn-dmore-title { color: var(--accent-deep); }
.fn-dmore-back { text-align: center; margin-top: 30px; }
.fn-dmore-back a { font-family: var(--sans); font-size: 12px; letter-spacing: .1em; text-transform: uppercase; color: var(--accent); text-decoration: none; }

/* ── Map: full-page field-survey ── */
.fn-map-page { padding-top: 0; position: relative; }
.fn-map-controls { position: absolute; top: 18px; left: 0; right: 0; z-index: 1000; max-width: none; margin: 0; padding: 0 18px; pointer-events: none; display: block; text-align: center; }
.fn-map-filters {
  pointer-events: auto; display: inline-flex; flex-wrap: wrap; gap: 8px; justify-content: center;
  background: rgba(244, 238, 225, .92); -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px);
  border: 1px solid var(--rule); border-radius: 30px; padding: 8px 12px; box-shadow: 0 4px 18px rgba(40, 36, 32, .12);
}
.fn-map-chip { border-radius: 18px; }
#fn-map { height: calc(100vh - 64px); min-height: 0; }
/* map footer shown (hidden only in fullscreen) */
/* (legacy tile treatment removed — see .fn-survey #fn-map .leaflet-tile-pane) */
/* photo-bloom marker */
.fn-marker.is-photo .fn-marker-photo {
  display: block; width: 100%; height: 100%; border-radius: 50%;
  background-size: cover; background-position: center; border: 2px solid var(--bg);
  box-shadow: 0 1px 5px rgba(0, 0, 0, .3); transition: transform .15s ease;
}
.fn-marker.is-photo:hover .fn-marker-photo { transform: scale(1.2); }

/* ════════════════════════════════════════════════════════════════════════
   STORY SINGLE + HERO DIAL-DOWN — v1.7.0
   ════════════════════════════════════════════════════════════════════════ */

/* ── Story single: no hero, measure text, frame-width photos ── */
.fn-story { max-width: 950px; margin: 0 auto; padding: 72px 32px 8px; }
.fn-story-head { font-family: var(--display); font-weight: 400; font-size: clamp(30px, 3.6vw, 42px); line-height: 1.05; letter-spacing: -.015em; color: var(--ink); margin: 0; white-space: nowrap; }
.fn-story-deck { font-family: var(--serif); font-size: 19px; line-height: 1.5; color: var(--text-light); max-width: 600px; margin: 18px 0 0; }
.fn-story-byline { font-family: var(--sans); font-size: 12px; letter-spacing: .04em; color: var(--text-faint); margin: 24px 0 0; padding-bottom: 30px; border-bottom: 1px solid var(--rule); }

.fn-story-body { max-width: 640px; margin: 34px auto 0; }
.fn-story-body p { font-family: var(--serif); font-size: 18px; line-height: 1.72; color: var(--ink); margin: 0 0 20px; }
.fn-story-body > p:first-child::first-letter { font-family: var(--display); font-weight: 500; font-size: 58px; line-height: .8; float: left; padding: 7px 10px 0 0; color: var(--accent-deep); }
.fn-story-body h2, .fn-story-body h3 { font-family: var(--display); font-weight: 500; color: var(--ink); margin: 34px 0 10px; line-height: 1.15; }
.fn-story-body h2 { font-size: 25px; }
.fn-story-body h3 { font-size: 20px; }
.fn-story-body a { color: var(--accent-deep); text-decoration: underline; text-underline-offset: 2px; }
.fn-story-body ul, .fn-story-body ol { font-family: var(--serif); font-size: 18px; line-height: 1.7; color: var(--ink); margin: 0 0 20px; padding-left: 22px; }

/* photographs break out to the frame; text holds the measure */
/* (Superseded by the v2.10.4 image block below — default is now text-width,
   breakout is opt-in via .alignwide/.alignfull. Kept as caption/figure base.) */
.fn-story-body figure img, .fn-story-body .wp-block-image img { display: block; width: 100%; height: auto; border-radius: 2px; }
.fn-story-body figcaption, .fn-story-body .wp-block-image figcaption { font-family: var(--serif); font-style: italic; font-size: 13.5px; color: var(--text-faint); text-align: left; max-width: 640px; margin: 9px auto 0; }

/* Float-and-wrap, for book covers and small inline images. Add .alignright or
   .alignleft to a bare <img> or a [caption]/figure wrapper and the body text
   wraps around it. Sized for a cover (~220px); the image keeps its own height.
   On narrow screens the float is dropped so it stacks cleanly. */
.fn-story-body img.alignright,
.fn-story-body figure.alignright,
.fn-story-body .wp-caption.alignright,
.fn-story-body .wp-block-image.alignright {
  float: right; width: 220px; max-width: 42%;
  margin: 6px 0 18px 28px; clear: right;
}
.fn-story-body img.alignleft,
.fn-story-body figure.alignleft,
.fn-story-body .wp-caption.alignleft,
.fn-story-body .wp-block-image.alignleft {
  float: left; width: 220px; max-width: 42%;
  margin: 6px 28px 18px 0; clear: left;
}
.fn-story-body .alignright img,
.fn-story-body .alignleft img { width: 100%; height: auto; }
.fn-story-body .alignright figcaption,
.fn-story-body .alignleft figcaption { max-width: 100%; text-align: left; }
@media (max-width: 700px) {
  .fn-story-body img.alignright, .fn-story-body figure.alignright,
  .fn-story-body .wp-caption.alignright, .fn-story-body .wp-block-image.alignright,
  .fn-story-body img.alignleft, .fn-story-body figure.alignleft,
  .fn-story-body .wp-caption.alignleft, .fn-story-body .wp-block-image.alignleft {
    float: none; width: 200px; max-width: 60%; margin: 6px auto 18px;
  }
}

.fn-story-body blockquote, .fn-story-body .wp-block-quote, .fn-story-body .wp-block-pullquote {
  font-family: var(--display); font-style: italic; font-weight: 400; font-size: 25px; line-height: 1.36; color: var(--ink);
  text-align: center; max-width: 600px; margin: 36px auto; padding: 24px 0;
  border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule); border-left: none;
}
.fn-story-body blockquote p { font-family: inherit; font-size: inherit; line-height: inherit; margin: 0; color: inherit; }

.fn-story-end { max-width: 640px; margin: 40px auto 0; text-align: center; }
.fn-story-end .end-bug { display: inline-block; width: 26px; height: 32px; background: var(--accent); -webkit-mask: var(--jt) center/contain no-repeat; mask: var(--jt) center/contain no-repeat; opacity: .85; }

.fn-story-foot { max-width: 950px; margin: 54px auto 0; padding: 0 32px 88px; }
.fn-smore { max-width: 640px; margin: 0 auto; padding-top: 30px; border-top: 1px solid var(--rule); }
.fn-smore-label { font-family: var(--sans); font-size: 10.5px; font-weight: 700; letter-spacing: .16em; text-transform: uppercase; color: var(--accent); margin-bottom: 14px; text-align: center; }
.fn-story-locus{ display:flex; justify-content:center; margin:44px 0 8px; }
.fn-story-locus a{ text-decoration:none; display:inline-flex; align-items:center; gap:15px; border:1px solid var(--rule); border-radius:8px; padding:12px 19px; transition:border-color .15s ease, background .15s ease; }
.fn-story-locus a:hover{ border-color:var(--accent); background:var(--accent-soft); }
.fn-story-locus .mk{ width:30px; height:30px; border-radius:8px; background:var(--accent); flex:none; display:flex; align-items:center; justify-content:center; }
.fn-story-locus .mk svg{ width:17px; height:17px; stroke:#DEDACB; fill:none; stroke-width:1.7; }
.fn-story-locus .txt{ display:flex; flex-direction:column; gap:3px; }
.fn-story-locus .lab{ font-family:var(--mono); font-size:10.5px; letter-spacing:.15em; text-transform:uppercase; color:var(--accent); font-weight:700; }
.fn-story-locus .coord{ font-family:var(--mono); font-size:12px; letter-spacing:.02em; color:var(--text-faint); }
.fn-smore-item { display: block; text-align: center; text-decoration: none; color: inherit; padding: 16px 0; border-top: 1px solid var(--rule); }
.fn-smore-item:last-child { border-bottom: 1px solid var(--rule); }
.fn-smore-title { display: block; font-family: var(--display); font-weight: 500; font-size: 18px; line-height: 1.2; color: var(--ink); }
.fn-smore-meta { display: block; margin-top: 5px; font-family: var(--sans); font-size: 12.5px; line-height: 1.4; color: var(--text-light); }
.fn-smore-item:hover .fn-smore-title { color: var(--accent-deep); }
.fn-story-tail { text-align: center; padding: 46px 0 80px; }
.fn-story-tail a { font-family: var(--sans); font-size: 12px; letter-spacing: .1em; text-transform: uppercase; color: var(--accent); text-decoration: none; }
@media (max-width: 740px) { .fn-story { padding: 48px 20px 8px; } .fn-story-head { white-space: normal; } .fn-story-foot, .fn-story-tail { padding-left: 20px; padding-right: 20px; } }

/* ── Homepage hero: dialed down + de-centered (kills the inherited .hero 70vh min-height gap) ── */
.fn-home .hero { padding: 96px 32px 80px; min-height: 0; display: block; }
.fn-home .fn-filter { margin-top: 0; }
.fn-home .hero h1 { font-size: clamp(30px, 3.6vw, 44px); line-height: 1.06; margin: 0 0 14px; }
.fn-home .hero .byline { margin-top: 24px; gap: 14px; }
.fn-home .hero .byline .name { font-size: 18px; }
.fn-home .hero .byline .line { width: 42px; }

/* ════════════════════════════════════════════════════════════════════════
   v1.7.2 — Story photo-led + centered head, mobile nav, footer bug,
   dispatch landscape variant, Words polish
   ════════════════════════════════════════════════════════════════════════ */

/* Story / PIM: photo leads, centered Title-Case head */
.fn-story--photo-led { padding-top: 44px; }
.fn-story-lead { width: 950px; max-width: 100%; margin: 0 auto 30px; }
.fn-story-lead img { display: block; width: 100%; height: auto; border-radius: 2px; }
.fn-story-lead figcaption { font-family: var(--serif); font-style: italic; font-size: 13.5px; color: var(--text-faint); text-align: center; margin: 9px auto 0; max-width: 640px; }
.fn-story-head-wrap { text-align: center; max-width: 760px; margin: 0 auto; }
.fn-story-kicker { font-family: var(--sans); font-size: 10.5px; font-weight: 700; letter-spacing: .16em; text-transform: uppercase; color: var(--accent); margin-bottom: 10px; }
.fn-story--photo-led .fn-story-head { white-space: normal; text-transform: capitalize; text-align: center; max-width: none; margin: 0 auto; }
.fn-story--photo-led .fn-story-deck { text-align: center; margin: 16px auto 0; }
.fn-story-personmeta { font-family: var(--serif); font-size: 17px; line-height: 1.45; letter-spacing: .01em; color: var(--text-light); margin: 16px 0 0; }
.fn-story--photo-led .fn-story-byline { text-align: center; border-bottom: none; padding-bottom: 0; margin-top: 18px; }
.fn-story--photo-led .fn-story-body { border-top: 1px solid var(--rule); padding-top: 34px; margin-top: 34px; }
.fn-story-audio { margin-top: 26px; }
.fn-story-audio a { font-family: var(--sans); font-size: 13px; letter-spacing: .04em; color: var(--accent); text-decoration: none; }
.fn-story-audio a:hover { color: var(--accent-deep); }

/* Mobile nav: drop the wordmark text, keep the bug */
@media (max-width: 600px) {
  .nav-wordmark { display: none; }
  .nav-logo { gap: 0; }
}

/* Footer: faint oversized joshua-tree bug behind the links */
.site-footer { position: relative; overflow: hidden; }
.footer-ghost { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); width: 190px; height: 230px; background-color: var(--bg); -webkit-mask: var(--jt) center/contain no-repeat; mask: var(--jt) center/contain no-repeat; opacity: .055; pointer-events: none; z-index: 0; }
.site-footer > *:not(.footer-ghost) { position: relative; z-index: 1; }

/* Words: back-to-top on the browse page */
.word-backtop { text-align: center; padding: 30px 0 60px; }
.word-backtop a { font-family: var(--sans); font-size: 12px; letter-spacing: .1em; text-transform: uppercase; color: var(--accent); text-decoration: none; }
.word-backtop a:hover { color: var(--accent-deep); }

/* ════════════════════════════════════════════════════════════════════════
   FIELD SURVEY MAP — v1.8.0
   Replaces the OSM/grayscale chip map. Left index (conventional-signs key),
   ink glyph markers in thin rings, count-only cluster tokens, and a floating
   specimen card. Palette is scoped to .fn-survey / map elements so it does
   not touch the rest of the theme. Overrides the older .fn-map-* rules above.
   ════════════════════════════════════════════════════════════════════════ */

.fn-survey{
  --fs-paper:#DEDACB; --fs-paper2:#D6D2C0; --fs-ink:#2A251F; --fs-inksoft:#6A6051; --fs-faint:#9C927E;
  --fs-rule:#C8C3B0; --fs-accent:#2F4655; --fs-accentdeep:#24363F; --fs-glyph:#F7F1E4;
  --fs-mono:'DM Mono', ui-monospace, monospace;
  /* conventional signs — category colors */
  --c-art:#B07D22; --c-dispatch:#C4422A; --c-dope:#E26A98; --c-pics:#3F6A9E;
  --c-people:#C0397B; --c-place:#56564A; --c-stories:#6E7A34; --c-music:#D2691E; --c-architecture:#1AA1C4; --c-coffee:#4E342E;
  --c-phenomenon:#7CB82F;
  --c-neighborhoods:#C77DB0;
  --c-swimming:#2AA9B8;
  --c-scout:#5B4B8A;
  --c-book:#CBA31E;
  /* v6.31.8 — Events. A deep green, the one saturated hue the sign set didn't
     already use: dispatch has the vermilion, music the orange, people and dope
     the pinks, phenomenon the yellow-green, stories the olive. Dark enough to
     carry a white glyph and to hold its own against the hillshade. */
  --c-events:#217A57;
}
.fn-map-page.fn-survey{ padding:0; position:relative; background:var(--fs-paper); }
.fn-survey #fn-map{ height:calc(100vh - 64px); min-height:0; background:#ECE1C9; isolation:isolate; margin:0; }
/* map footer shown (hidden only in fullscreen) */
/* warm the gray tiles into aged paper (overrides the prior grayscale filter) */
.fn-survey #fn-map .leaflet-tile-pane{ filter:grayscale(.93) sepia(.07) brightness(1.025) contrast(.98); }
/* Fallback basemap (CARTO Positron) ships far paler than MapTiler, with light-gray
   labels. The tuning above — brightness up, contrast down — was dialed for
   MapTiler's denser tiles, and over CARTO it pushes place names to invisible.
   On the fallback: keep the warm grayscale so the map still reads as Field Notes,
   but drop the brightness lift and push contrast UP so labels come back. */
.fn-survey.fn-fallback #fn-map .leaflet-tile-pane{ filter:grayscale(.9) sepia(.08) brightness(.985) contrast(1.22); }
.fn-survey .leaflet-control-zoom{ border:1px solid var(--fs-rule)!important; border-radius:3px!important; overflow:hidden; box-shadow:0 2px 8px rgba(42,37,31,.1)!important; }
.fn-survey .leaflet-control-zoom a{ background:var(--fs-paper)!important; color:var(--fs-ink)!important; border-bottom:1px solid var(--fs-rule)!important; }
.fn-survey .fn-map-controls{ display:none!important; }

/* left index */
.fn-survey-index{ position:absolute; top:24px; left:24px; z-index:1000; width:252px; background:var(--fs-paper); border:1px solid var(--fs-rule); border-radius:4px; box-shadow:0 10px 30px rgba(42,37,31,.13); font-family:var(--sans); }
.fn-survey-index .fn-si-head{ display:flex; align-items:flex-start; gap:8px; padding:13px 15px 11px; border-bottom:1px solid var(--fs-rule); cursor:pointer; }
.fn-survey-index .fn-si-head .tt{ flex:1; }
.fn-survey-index .fn-si-head .t{ font-family:var(--display); font-weight:500; font-size:18px; line-height:1; color:var(--fs-ink); }
.fn-survey-index .fn-si-head .meta{ font-family:var(--fs-mono); font-size:9px; letter-spacing:.14em; text-transform:uppercase; color:var(--fs-faint); margin-top:5px; }
.fn-survey-index .fn-si-head .car{ font-family:var(--display); font-weight:600; font-size:22px; line-height:1; color:var(--fs-ink); margin-top:-2px; }
.fn-survey-index .fn-si-scroll{ max-height:62vh; overflow:auto; }
.fn-survey-index .fn-si-row{ display:flex; align-items:center; gap:11px; padding:7px 15px; cursor:pointer; }
.fn-survey-index .fn-si-row + .fn-si-row{ border-top:1px dotted var(--fs-rule); }
.fn-survey-index .fn-si-row:hover{ background:var(--fs-paper2); }
.fn-survey-index .fn-si-row .gly{ width:24px; height:24px; flex:none; display:flex; align-items:center; justify-content:center; color:var(--fs-glyph); background:var(--mk,var(--c-place)); border:1px solid color-mix(in srgb, var(--mk,var(--c-place)) 72%, #000 20%); border-radius:6px; }
.fn-survey-index .fn-si-row .gly svg{ width:14px; height:14px; fill:none; stroke:currentColor; stroke-width:1.5; stroke-linecap:round; stroke-linejoin:round; }
.fn-survey-index .fn-si-row .nm{ font-family:var(--display); font-size:15px; color:var(--fs-ink); }
.fn-survey-index .fn-si-row .ct{ margin-left:auto; font-family:var(--fs-mono); font-size:11px; color:var(--fs-faint); }
.fn-survey-index .fn-si-row.off{ opacity:.34; }
.fn-survey-index .fn-si-row.off .gly{ filter:grayscale(.55); }
.fn-survey-index .fn-si-row.allrow{ border-bottom:1px solid var(--fs-rule); }
.fn-survey-index .fn-si-row.allrow .nm{ font-style:italic; color:var(--fs-accentdeep); }
.fn-survey-index .fn-si-row.allrow .gly{ background:var(--fs-accent); border-color:color-mix(in srgb, var(--fs-accent) 72%, #000 20%); color:var(--fs-glyph); }
.fn-survey-index .fn-si-row.allrow .gly .ring{ width:9px; height:9px; border-radius:50%; border:1.5px solid var(--fs-glyph); }
.fn-survey-index .fn-si-row.savedrow{ border-top:none; border-bottom:1px solid var(--fs-rule); }
.fn-survey-index .fn-si-row.savedrow .nm{ font-style:italic; color:var(--fs-accentdeep); }
.fn-survey-index .fn-si-row.savedrow .gly{ background:var(--fs-accent); border:1px solid color-mix(in srgb, var(--fs-accent) 72%, #000 20%); color:var(--fs-glyph); }
.fn-survey-index .fn-si-row.savedrow .gly svg{ width:13px; height:13px; fill:currentColor; stroke:none; }
.fn-survey-index .fn-si-row.savedrow.active{ background:var(--fs-paper2); }
.fn-survey-index .fn-si-foot{ padding:8px 15px; border-top:1px solid var(--fs-rule); font-family:var(--fs-mono); font-size:8.5px; letter-spacing:.13em; text-transform:uppercase; color:var(--fs-faint); display:flex; justify-content:space-between; }
.fn-survey-index .fn-si-cluster{ display:flex; align-items:center; justify-content:space-between; padding:9px 15px; border-top:1px solid var(--fs-rule); }
.fn-survey-index .fn-si-cluster .lab{ font-family:var(--fs-mono); font-size:8.5px; letter-spacing:.13em; text-transform:uppercase; color:var(--fs-faint); }
.fn-survey-index .fn-si-seg{ display:flex; border:1px solid var(--fs-rule); border-radius:5px; overflow:hidden; }
.fn-survey-index .fn-si-seg button{ font-family:var(--fs-mono); font-size:8.5px; letter-spacing:.1em; text-transform:uppercase; color:var(--fs-faint); background:none; border:none; padding:4px 10px; cursor:pointer; line-height:1.6; }
.fn-survey-index .fn-si-seg button + button{ border-left:1px solid var(--fs-rule); }
.fn-survey-index .fn-si-seg button.on{ background:var(--fs-accent); color:var(--fs-glyph); }
.fn-survey-index.collapsed .fn-si-scroll, .fn-survey-index.collapsed .fn-si-cluster, .fn-survey-index.collapsed .fn-si-foot{ display:none; }

/* fullscreen toggle — small floating control, top-right under the zoom */
.fn-survey .fn-fullscreen-toggle{ position:absolute; top:24px; right:74px; z-index:1000; display:inline-flex; align-items:center; justify-content:center; width:34px; height:34px; background:var(--fs-paper); border:1px solid var(--fs-rule); border-radius:3px; box-shadow:0 2px 8px rgba(42,37,31,.1); cursor:pointer; }
.fn-survey .fn-fullscreen-toggle svg{ width:15px; height:15px; }
.fn-survey .fn-fullscreen-toggle svg path{ fill:none; stroke:var(--fs-ink); stroke-width:1.6; }
.fn-survey .fn-fullscreen-toggle .fs-icon-close, .fn-survey .fn-fullscreen-toggle .fs-label{ display:none; }
body.fn-fullscreen-map .fn-survey .fn-fullscreen-toggle .fs-icon-expand{ display:none; }
body.fn-fullscreen-map .fn-survey .fn-fullscreen-toggle .fs-icon-close{ display:block; }
body.fn-fullscreen-map .fn-survey #fn-map{ height:100vh; }

/* markers */
.fn-mk{ background:none; border:none; }
.fn-mk .fn-mk-disc{ display:flex; align-items:center; justify-content:center; width:30px; height:30px; border-radius:8px; background:var(--mk,var(--c-place)); border:1px solid color-mix(in srgb, var(--mk,var(--c-place)) 72%, #000 20%); box-shadow:0 2px 6px rgba(34,29,23,.22); color:var(--fs-glyph); transition:transform .12s ease, box-shadow .12s ease; }
.fn-mk .fn-mk-disc svg{ width:17px; height:17px; fill:none; stroke:currentColor; stroke-width:1.5; stroke-linecap:round; stroke-linejoin:round; }
/* Music glyph is a filled silhouette (traced acoustic guitar), not a stroked
   outline like the other signs. Re-assert fill + kill the stroke wherever a
   marker SVG is styled, so it renders solid on the pin, legend key, and stamp. */
.fn-mk .fn-mk-disc svg.fn-gtr,
.fn-survey-index .fn-si-row .gly svg.fn-gtr,
.fn-spec .fn-spec-stamp svg.fn-gtr,
.fn-spec .fn-spec-plate svg.fn-gtr{ fill:currentColor; stroke:none; }
.fn-mk:hover .fn-mk-disc{ transform:translateY(-2px) scale(1.1); box-shadow:0 6px 16px rgba(34,29,23,.28); z-index:9999; }
.fn-cl{ display:flex; align-items:center; justify-content:center; border-radius:8px; background:var(--fs-paper); border:1px solid var(--fs-rule); box-shadow:0 2px 8px rgba(34,29,23,.22); font-family:var(--fs-mono); font-weight:500; color:var(--fs-ink); transition:border-color .12s, color .12s; }
.fn-mk:hover .fn-cl{ border-color:var(--fs-accent); color:var(--fs-accent); }

/* floating specimen card */
#fn-fcard{ position:absolute; right:9%; top:50%; transform:translateY(-50%) scale(.98); z-index:1100; display:none; opacity:0; transition:opacity .14s ease, transform .14s ease; pointer-events:none; }
#fn-fcard.pinned{ pointer-events:auto; }
#fn-fcard.show{ display:block; opacity:1; transform:translateY(-50%) scale(1); }
#fn-fcard.fn-fcard-anchored{ top:auto; right:auto; }
#fn-fcard.fn-fcard-anchored, #fn-fcard.fn-fcard-anchored.show{ transform:none; }
.fn-spec{ --rail:clamp(320px, 30vw, 404px); --bayw:min(520px, calc(100vw - var(--rail) - 580px)); --bayh:min(460px, calc(100vh - 260px));
  position:relative; width:max-content; max-width:calc(100vw - 48px); background:var(--fs-paper); border:1px solid var(--fs-rule);
  border-radius:10px; box-shadow:0 28px 70px rgba(34,29,23,.34); overflow:hidden; font-family:var(--sans);
  display:grid; grid-template-rows:46px auto 40px; }
.fn-spec .fn-spec-top{ flex:none; display:flex; justify-content:space-between; align-items:center; padding:9px 40px 9px 16px; background:var(--fs-paper); border-bottom:1px solid var(--fs-rule); font-family:var(--fs-mono); font-size:9.5px; letter-spacing:.14em; text-transform:uppercase; color:var(--fs-inksoft); }
.fn-spec .fn-spec-top .no{ color:var(--fs-faint); }
.fn-spec .fn-spec-x{ position:absolute; top:7px; right:10px; z-index:4; width:20px; height:20px; border:none; background:none; color:var(--fs-inksoft); font-size:18px; line-height:1; cursor:pointer; }
.fn-spec .fn-spec-photo{ display:block; width:100%; height:auto; max-height:56vh; object-fit:contain; background:var(--fs-paper2); border-bottom:1px solid var(--fs-rule); }
.fn-spec .fn-spec-plate{ height:168px; border-bottom:1px solid var(--fs-rule); display:flex; align-items:center; justify-content:center; background:color-mix(in srgb, var(--mk,var(--c-place)) 12%, var(--fs-paper2)); color:var(--mk,var(--c-place)); }
.fn-spec .fn-spec-plate svg{ width:46px; height:46px; fill:none; stroke:currentColor; stroke-width:1.2; stroke-linecap:round; stroke-linejoin:round; opacity:.7; }
.fn-spec .fn-spec-split{ display:flex; min-height:0; }
.fn-spec .fn-spec-left{ flex:0 0 auto; width:calc(var(--bayw) + 36px); height:var(--bayh); }
.fn-spec.fn-por .fn-spec-left{ width:calc(var(--bayh) * 0.72 + 36px); }
.fn-spec .fn-spec-left{ position:relative; min-height:0; border-right:1px solid var(--fs-rule); background:var(--fs-paper2);
  display:flex; align-items:center; justify-content:center; padding:18px; }
.fn-spec .fn-spec-left .fn-spec-photo{ position:static; display:block; max-width:100%; max-height:100%; width:auto; height:auto;
  object-fit:contain; border-bottom:none; border:1px solid rgba(35,32,27,.26); box-shadow:0 2px 5px rgba(28,22,12,.14),0 12px 30px rgba(28,22,12,.18); }
.fn-spec .fn-spec-left .fn-spec-gallery{ position:relative; max-width:100%; max-height:100%; width:auto; height:auto; border-bottom:none;
  border:1px solid rgba(35,32,27,.26); box-shadow:0 2px 5px rgba(28,22,12,.14),0 12px 30px rgba(28,22,12,.18); }
.fn-spec .fn-spec-left .fn-spec-slide img,.fn-spec .fn-spec-left .fn-spec-slide video{ width:100%; height:100%; object-fit:cover; }
.fn-spec .fn-spec-left .fn-spec-slide img, .fn-spec .fn-spec-left .fn-spec-slide video{ width:100%; height:100%; object-fit:cover; }
.fn-spec .fn-spec-typanel{ height:100%; display:flex; flex-direction:column; justify-content:center; padding:30px 28px; }
.fn-spec .fn-spec-typanel .fn-spec-stamp{ margin-bottom:16px; }
.fn-spec .fn-spec-typanel .fn-spec-nm{ font-size:40px; line-height:1.02; margin-bottom:0; }
.fn-spec .fn-spec-body{ flex:0 0 var(--rail); width:var(--rail); display:flex; flex-direction:column; min-height:0; height:var(--bayh); }
.fn-spec .fn-spec-rhead{ flex:none; padding:24px 28px 14px; }
.fn-spec .fn-spec-rscroll{ flex:1 1 auto; overflow-y:auto; padding:0 28px 16px; min-height:0; }
.fn-spec .fn-spec-rscroll::-webkit-scrollbar{ width:8px; }
.fn-spec .fn-spec-rscroll::-webkit-scrollbar-thumb{ background:rgba(35,32,27,.18); border-radius:8px; border:2.5px solid var(--fs-paper); }
.fn-spec .fn-spec-rdata{ flex:none; border-top:1px solid rgba(35,32,27,.30); padding:0; }
.fn-spec .fn-spec-coord{ display:flex; align-items:baseline; font-family:var(--fs-mono); font-size:12px; font-variant-numeric:tabular-nums; color:var(--fs-ink); margin:0; padding:12px 28px; border-bottom:1px solid rgba(35,32,27,.30); }
.fn-spec .fn-spec-coord .pl{ flex:none; }
.fn-spec .fn-spec-coord .sp{ flex:1 1 auto; min-width:34px; }
.fn-spec .fn-spec-coord .co{ flex:none; color:var(--fs-inksoft); }
.fn-spec .fn-spec-share{ border:none; background:none; padding:0; cursor:pointer; color:var(--fs-faint); display:inline-flex; }
.fn-spec .fn-spec-share svg{ width:14px; height:14px; fill:none; stroke:currentColor; stroke-width:1.7; }
.fn-spec .fn-spec-share:hover{ color:var(--fs-accent); }
.fn-spec .fn-spec-share.ok{ color:var(--fs-accent); }
.fn-spec .fn-spec-acts{ display:inline-flex; align-items:center; gap:14px; margin-left:auto; margin-right:14px; }
.fn-spec .fn-spec-stamp{ display:inline-flex; align-items:center; gap:8px; font-family:var(--fs-mono); font-size:10px; letter-spacing:.12em; text-transform:uppercase; color:var(--fs-inksoft); margin-bottom:11px; }
.fn-spec .fn-spec-stamp svg{ width:16px; height:16px; padding:2px; border-radius:5px; background:var(--mk,var(--c-place)); color:var(--fs-glyph); fill:none; stroke:currentColor; stroke-width:1.5; box-sizing:content-box; }
.fn-spec .fn-spec-nm{ font-family:var(--display); font-weight:400; font-size:27px; line-height:1.12; color:var(--fs-ink); margin-bottom:13px; }
.fn-spec .fn-spec-sub{ font-family:var(--serif); font-size:15px; line-height:1.3; color:var(--fs-inksoft); margin:-7px 0 14px; }
.fn-spec .fn-spec-grid{ display:grid; grid-template-columns:auto 1fr; gap:5px 16px; font-family:var(--fs-mono); font-size:12px; color:var(--fs-inksoft); border-top:1px solid var(--fs-rule); border-bottom:1px solid var(--fs-rule); padding:11px 0; margin-bottom:13px; }
.fn-spec .fn-spec-grid .k{ color:var(--fs-faint); letter-spacing:.06em; text-transform:uppercase; font-size:9.5px; align-self:center; }
.fn-spec .fn-spec-note{ font-family:var(--serif); font-style:italic; font-size:17px; line-height:1.45; color:var(--fs-inksoft); margin-bottom:15px; }
.fn-spec .fn-spec-note p{ margin:0 0 .6em; }
.fn-spec .fn-spec-note p:last-child{ margin-bottom:0; }
.fn-spec .fn-spec-note strong, .fn-spec .fn-spec-note b{ font-weight:700; font-style:italic; color:var(--fs-ink); }
.fn-spec .fn-spec-note em, .fn-spec .fn-spec-note i{ font-style:normal; }
.fn-spec .fn-spec-note a{ color:var(--fs-accent); text-decoration:underline; text-underline-offset:2px; text-decoration-thickness:1px; }
.fn-spec .fn-spec-note a:hover{ color:var(--fs-accentdeep); }
/* Scout card body copy — the note itself. Roman, not italic (it's prose, not a
   caption), and links are allowed. */
.fn-spec .fn-spec-prose{ font-family:var(--serif); font-size:15px; line-height:1.5; color:var(--fs-inksoft); margin-bottom:15px; }
.fn-spec .fn-spec-prose p{ margin:0 0 .7em; }
.fn-spec .fn-spec-prose p:last-child{ margin-bottom:0; }
.fn-spec .fn-spec-prose a{ color:var(--mk,var(--c-place)); text-decoration:underline; text-underline-offset:2px; }
.fn-spec .fn-spec-prose ul,.fn-spec .fn-spec-prose ol{ margin:0 0 .7em 1.1em; padding:0; }
.fn-spec .fn-spec-prose li{ margin:0 0 .25em; }
.fn-spec .fn-spec-quote{ margin:0 0 16px; font-family:var(--serif); font-style:italic; font-size:19px; line-height:1.4; color:var(--fs-ink); }
.fn-spec .fn-spec-quote::before{ content:'\201C'; }
.fn-spec .fn-spec-quote::after{ content:'\201D'; }
.fn-spec .fn-spec-foot{ display:flex; justify-content:space-between; align-items:center; padding:0 24px; border-top:1px solid var(--fs-rule); font-family:var(--fs-mono); font-size:9px; letter-spacing:.12em; text-transform:uppercase; color:var(--fs-faint); }
.fn-spec .fn-spec-go{ color:var(--fs-accent); text-decoration:none; font-weight:700; }
.fn-spec .fn-spec-go:hover{ color:var(--fs-accentdeep); }
.fn-spec .fn-spec-act{ padding:0; margin:16px 0 0; border-bottom:none; }
.fn-spec .fn-spec-act .fn-spec-go{ display:inline-flex; align-items:center; gap:8px; font-family:var(--fs-mono); font-size:12px; letter-spacing:.12em; text-transform:uppercase; }
.fn-spec .fn-spec-save{ display:inline-flex; align-items:center; gap:5px; border:none; background:none; padding:0; cursor:pointer; color:var(--fs-faint); font-family:var(--fs-mono); font-size:9.5px; letter-spacing:.13em; text-transform:uppercase; }
.fn-spec .fn-spec-save svg.bk{ width:13px; height:15px; fill:none; stroke:currentColor; stroke-width:1.6; stroke-linejoin:round; }
.fn-spec .fn-spec-save .lb{ display:none; }
.fn-spec .fn-spec-save:hover{ color:var(--fs-inksoft); }
.fn-spec .fn-spec-save.is-saved{ color:var(--fs-accent); }
.fn-spec .fn-spec-save.is-saved svg.bk{ fill:currentColor; }
.fn-spec .fn-spec-save.is-saved .lb{ display:inline; }
.fn-spec .fn-spec-near{ margin:0; padding:18px 28px; min-height:150px; display:flex; flex-direction:column; justify-content:center; }
.fn-spec .fn-spec-near-l{ font-family:var(--fs-mono); font-size:9.5px; letter-spacing:.14em; text-transform:uppercase; color:var(--fs-faint); margin-bottom:6px; }
.fn-spec .fn-spec-nrst{ display:grid; grid-template-columns:15px 1fr 76px; column-gap:11px; align-items:baseline; text-decoration:none; padding:3px 0; cursor:pointer; }
.fn-spec .fn-spec-nrst .i{ font-family:var(--fs-mono); font-size:10px; color:var(--fs-faint); font-variant-numeric:tabular-nums; }
.fn-spec .fn-spec-nrst em{ font-family:var(--fs-mono); font-size:8.5px; font-style:normal; letter-spacing:.1em; text-transform:uppercase; margin-left:8px; }

.fn-spec .fn-spec-nrst .lead{ flex:1; border-bottom:1px dotted var(--fs-rule); transform:translateY(-4px); min-width:14px; }
.fn-spec .fn-spec-nrst .tail{ display:flex; gap:11px; align-items:baseline; flex:none; }
.fn-spec .fn-spec-nrst:last-child{ border-bottom:none; }
.fn-spec .fn-spec-nrst .ar{ color:var(--fs-accent); font-family:var(--fs-mono); font-size:12px; flex:none; }
.fn-spec .fn-spec-nrst .nm{ font-family:var(--display); font-size:15.5px; line-height:1.22; color:var(--fs-ink); }
.fn-spec .fn-spec-nrst:hover .nm{ color:var(--fs-accent); text-decoration:underline; }
.fn-spec .fn-spec-nrst .tg{ font-family:var(--fs-mono); font-size:8.5px; letter-spacing:.11em; text-transform:uppercase; flex:none; }
.fn-spec .fn-spec-nrst .ds{ font-family:var(--fs-mono); font-size:11px; color:var(--fs-inksoft); text-align:right; white-space:nowrap; font-variant-numeric:tabular-nums; }
.fn-pulse-ic{ background:none!important; border:none!important; }
.fn-pulse{ display:block; width:26px; height:26px; border-radius:50%; background:var(--fs-accent,#2F4655); opacity:.55; animation:fnpulse 1.15s ease-out forwards; }
@keyframes fnpulse{ 0%{ transform:scale(.3); opacity:.6; } 70%{ opacity:.22; } 100%{ transform:scale(2.5); opacity:0; } }

/* Place card photo carousel */
#fn-fcard{ position:absolute; z-index:1200; }
#fn-fcard.show{ left:auto; right:44px; top:50%; transform:translateY(-50%); }

@media (max-width:760px){
  #fn-fcard.show{ left:0; right:0; top:auto; bottom:0; transform:none; }
  .fn-spec{ width:100%; max-width:100%; height:auto; max-height:88vh; }
  .fn-spec .fn-spec-split{ display:block; flex:1 1 auto; min-height:0; overflow-y:auto; }
  .fn-spec .fn-spec-left{ border-right:none; border-bottom:1px solid var(--fs-rule); height:auto; }
  .fn-spec .fn-spec-left .fn-spec-photo,.fn-spec .fn-spec-left .fn-spec-gallery{ height:auto; aspect-ratio:4/3; }
  .fn-spec .fn-spec-typanel{ height:auto; padding:22px 20px; }
  .fn-spec .fn-spec-typanel .fn-spec-nm{ font-size:30px; }
  .fn-spec .fn-spec-body{ overflow:visible; }
}
.fn-spec .fn-spec-gallery{ position:relative; width:100%; aspect-ratio:4/3; max-height:56vh; overflow:hidden; background:var(--fs-paper2); border-bottom:1px solid var(--fs-rule); touch-action:pan-y; }
.fn-spec .fn-spec-gallery.fn-gal-portrait{ aspect-ratio:4/5; }
.fn-spec .fn-spec-gallery.fn-gal-square{ aspect-ratio:1/1; }
.fn-spec .fn-spec-gallery.fn-gal-land{ aspect-ratio:3/2; }
.fn-spec .fn-spec-left .fn-spec-track{ height:100%; }
.fn-spec .fn-spec-track{ display:flex; height:100%; transition:transform .32s cubic-bezier(.2,.8,.3,1); will-change:transform; }
.fn-spec .fn-spec-track.drag{ transition:none; }
.fn-spec .fn-spec-slide{ min-width:100%; height:100%; position:relative; }
.fn-spec .fn-spec-slide img{ width:100%; height:100%; object-fit:cover; display:block; }
.fn-spec .fn-spec-slide.whole img{ object-fit:contain; }
.fn-spec .fn-spec-slide video{ width:100%; height:100%; object-fit:contain; display:block; }
.fn-spec .fn-spec-vid{ pointer-events:none; }
.fn-spec .fn-spec-scap{ position:absolute; left:10px; bottom:10px; font-family:var(--fs-mono); font-size:10px; letter-spacing:.1em; text-transform:uppercase; color:#fff; background:rgba(20,16,12,.46); padding:3px 8px; border-radius:5px; }
.fn-spec .fn-spec-gnav{ position:absolute; top:50%; transform:translateY(-50%); width:30px; height:30px; padding:0; border-radius:50%; background:rgba(247,241,228,.92); border:1px solid rgba(34,29,23,.08); display:grid; place-items:center; cursor:pointer; box-shadow:0 2px 8px rgba(34,29,23,.18); opacity:0; transition:opacity .15s; z-index:3; }
.fn-spec .fn-spec-gallery:hover .fn-spec-gnav{ opacity:1; }
.fn-spec .fn-spec-gnav:focus-visible{ opacity:1; outline:2px solid var(--cinnabar); outline-offset:2px; }
.fn-spec .fn-spec-gnav.prev{ left:9px; }
.fn-spec .fn-spec-gnav.next{ right:9px; }
.fn-spec .fn-spec-gnav svg{ width:15px; height:15px; color:#221d17; }
.fn-spec .fn-spec-gnav[disabled]{ opacity:0!important; pointer-events:none; }
.fn-spec .fn-spec-gcount{ position:absolute; top:10px; right:10px; font-family:var(--fs-mono); font-size:10px; color:#fff; background:rgba(20,16,12,.46); padding:2px 8px; border-radius:999px; letter-spacing:.06em; z-index:3; }
.fn-spec .fn-spec-gdots{ position:absolute; bottom:10px; left:50%; transform:translateX(-50%); display:flex; gap:5px; z-index:3; }
.fn-spec .fn-spec-gdots i{ width:6px; height:6px; border-radius:50%; background:rgba(255,255,255,.5); cursor:pointer; transition:width .15s, background .15s; }
.fn-spec .fn-spec-gdots i.on{ background:#fff; width:16px; border-radius:3px; }

@media (hover: none){ .fn-spec .fn-spec-gnav{ opacity:1; } }

@media (max-width:760px){
  .fn-survey-index{ width:212px; left:14px; top:14px; }
  .fn-survey .fn-fullscreen-toggle{ top:14px; right:64px; }
  #fn-fcard{ right:10px; left:10px; top:auto; bottom:10px; transform:translateY(12px); }
  #fn-fcard.show{ transform:translateY(0); }
  #fn-fcard.fn-fcard-anchored{ left:10px; right:10px; }
  .fn-spec{ width:100%; max-width:none; max-height:calc(100dvh - 84px); overflow-y:auto; -webkit-overflow-scrolling:touch; }
  .fn-spec .fn-spec-photo{ max-height:40vh; }
  .fn-spec .fn-spec-gallery{ max-height:40vh; }
  .fn-spec .fn-spec-gnav{ opacity:1; }
}

/* ── Dispatch: always-on inline audio player (v1.8.1) ── */
.fn-disp-audio { display: flex; align-items: center; gap: 14px; margin: 22px 0 0; padding: 13px 16px; border: 1px solid var(--rule); border-radius: 8px; background: #FBF6EA; }
.fn-disp-audio-btn { flex: none; display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; padding: 0; border: 1px solid var(--rule); border-radius: 50%; background: var(--bg); color: var(--accent); cursor: pointer; -webkit-appearance: none; appearance: none; }
.fn-disp-audio-btn svg { width: 16px; height: 16px; fill: currentColor; display: block; }
.fn-disp-audio-btn .ico-play { margin-left: 2px; }
.fn-disp-audio-btn .ico-pause { display: none; margin-left: 0; }
.fn-disp-audio.is-playing .fn-disp-audio-btn .ico-play { display: none; }
.fn-disp-audio.is-playing .fn-disp-audio-btn .ico-pause { display: block; }
.fn-disp-audio-text { flex: none; min-width: 0; }
.fn-disp-audio-title { font-family: var(--sans); font-size: 13px; font-weight: 600; line-height: 1.2; color: var(--ink); }
.fn-disp-audio-sub { font-family: var(--mono); font-size: 11px; line-height: 1.3; color: var(--text-faint); margin-top: 2px; font-variant-numeric: tabular-nums; }
.fn-disp-audio-track { position: relative; flex: 1; height: 3px; border-radius: 2px; background: var(--rule); overflow: hidden; }
.fn-disp-audio-fill { position: absolute; left: 0; top: 0; bottom: 0; width: 0; background: var(--accent); border-radius: 2px; transition: width .12s linear; }
.fn-disp-audio-el { display: none; }


/* ── Portrait featured image lives inside the story, never as a top hero (v1.8.6) ── */
.fn-story-inset { float: right; width: 42%; max-width: 340px; margin: 4px 0 20px 30px; }
.fn-story-inset img { display: block; width: 100%; height: auto; border-radius: 2px; }
.fn-story-inset figcaption { font-family: var(--sans); font-size: 12px; color: var(--text-faint); margin-top: 7px; }
@media (max-width: 640px) { .fn-story-inset { float: none; width: 100%; max-width: none; margin: 0 0 20px; } }


/* ===== Story footnotes (bottom notes) — v1.8.7 ===== */
.fn-story-body .fn-ref { font-family: var(--mono); font-weight: 500; font-size: .62em; line-height: 0; vertical-align: super; color: var(--accent); text-decoration: none; padding: 0 1px; scroll-margin-top: 80px; }
.fn-story-body .fn-ref:hover { color: var(--accent-deep); }
.fn-story-body .fn-ref:focus-visible { outline: 2px solid var(--accent-deep); outline-offset: 2px; border-radius: 2px; }
.story-footnotes { max-width: 640px; margin: 54px auto 0; padding-top: 26px; border-top: 1px solid var(--rule); }
.story-footnotes h2 { font-family: var(--sans); font-size: 12px; font-weight: 600; letter-spacing: .22em; text-transform: uppercase; color: var(--text-faint); margin: 0 0 20px; }
.story-footnotes ol { list-style: none; margin: 0; padding: 0; }
.story-footnotes li { display: flex; gap: 13px; font-family: var(--serif); font-size: 15px; line-height: 1.6; color: var(--text-light); margin: 0 0 16px; scroll-margin-top: 80px; }
.story-footnotes li:target { background: var(--accent-soft); border-radius: 3px; box-shadow: 0 0 0 8px var(--accent-soft); }
.story-footnotes .fn-num { font-family: var(--mono); font-size: 13px; font-weight: 500; color: var(--accent-deep); flex: 0 0 auto; padding-top: 2px; }
.story-footnotes li div { flex: 1; }
.story-footnotes .fn-back { color: var(--accent); text-decoration: none; margin-left: 6px; }
.story-footnotes .fn-back:hover { color: var(--accent-deep); }


/* ===== Rough Notes tile + homepage audio marker — v1.8.8 ===== */
.fn-tile-rough { background: var(--bg-warm); border: 1px solid var(--rule); border-radius: 3px; padding: 24px 24px 26px; }

/* Wild Word card — Variant C: a vocabulary entry woven into the river.
   Warm-panel ground like the intro/rough cards; headword, pronunciation,
   accent rule, definition excerpt, and etymology. Eyebrow is "VOCABULARY" —
   markless, and all-caps like every other kicker. */
.fn-tile-word { display: block; background: var(--bg-warm); border: 1px solid var(--rule); border-radius: 3px; padding: 22px 24px 24px; text-decoration: none; color: inherit; transition: border-color .25s ease, transform .25s ease, box-shadow .25s ease; }
.fn-tile-word:hover { border-color: var(--accent); transform: translateY(-2px); box-shadow: 0 6px 20px rgba(39,35,32,.07); }
.fn-word-term { display: block; font-family: var(--display); font-weight: 500; font-size: 30px; line-height: 1.05; letter-spacing: -.01em; color: var(--ink); margin-top: 6px; }
.fn-tile-word:hover .fn-word-term { color: var(--accent-deep); }
.fn-word-say { display: block; font-family: var(--mono); font-size: 11.5px; letter-spacing: .05em; color: var(--text-faint); margin-top: 7px; }
.fn-word-rule { display: block; width: 44px; height: 2px; background: var(--accent); opacity: .55; border-radius: 2px; margin: 14px 0 0; }
.fn-word-def { font-family: var(--serif); font-size: 15px; line-height: 1.6; color: var(--text-light); margin: 14px 0 0; display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; }
.fn-word-def em { font-style: italic; }
.fn-word-etym-label { display: block; font-family: var(--sans); font-size: 10px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; color: var(--accent); margin-top: 16px; margin-bottom: 6px; }
.fn-word-etym { font-family: var(--serif); font-size: 13.5px; line-height: 1.55; color: var(--text-light); padding-left: 14px; border-left: 2px solid var(--accent); }
.fn-word-etym em { font-style: italic; }
.fn-rough-body { font-family: var(--serif); font-size: 17px; line-height: 1.52; color: var(--text-light); margin-top: 0; }
.fn-rough-body p { margin: 0 0 10px; }
.fn-rough-body p:last-child { margin-bottom: 0; }



.fn-tile-audio { display: inline-block; width: 16px; height: 16px; vertical-align: middle; margin-right: 6px; color: var(--accent); }


/* ===== River foot — infinite scroll + finished end-cap (v1.8.13) ===== */
.fn-river-foot { max-width: 1340px; margin: 0 auto; padding: 56px 34px 92px; text-align: center; }
.fn-river-sentinel { height: 1px; }
.fn-river-loading { display: flex; justify-content: center; gap: 7px; }
.fn-river-loading[hidden] { display: none; }
.fn-river-loading span { width: 6px; height: 6px; border-radius: 50%; background: var(--text-lighter); animation: fn-river-bounce 1.1s infinite ease-in-out both; }
.fn-river-loading span:nth-child(2) { animation-delay: .15s; }
.fn-river-loading span:nth-child(3) { animation-delay: .30s; }
@keyframes fn-river-bounce { 0%, 80%, 100% { transform: scale(.6); opacity: .3; } 40% { transform: scale(1); opacity: .8; } }
.fn-river-end { display: flex; flex-direction: column; align-items: center; gap: 16px; }
.fn-river-end[hidden] { display: none; }
.fn-river-end::before,
.fn-river-end::after { content: ""; width: 180px; height: 1px; background: var(--rule); }
.fn-river-end-label { font-family: var(--sans); font-size: 16px; font-weight: 700; letter-spacing: 0; color: var(--cinnabar); }
@media (max-width: 760px) { .fn-river-foot { padding: 44px 18px 72px; } }

/* ===== Dice — below the filter bar; tumble to re-roll the mosaic (v2.2.0) =====
   Always visible. Click reshuffles the river beneath, where the change shows. */
#fn-dice { display: flex; justify-content: center; margin: 0 0 0 18px; align-self: center; }
#fn-dice[hidden] { display: none; }
#fn-dice button { position: relative; background: none; border: 0; padding: 0 0 2px; cursor: pointer; display: inline-flex; align-items: center; gap: 5px; color: var(--ink); opacity: .34; transition: opacity .3s, color .3s; }
#fn-dice button:hover { opacity: .95; color: var(--accent-deep); }
#fn-dice .die { transition: transform .55s cubic-bezier(.2, .8, .2, 1); }
#fn-dice .die1 { transform: rotate(-15deg); }
#fn-dice .die2 { transform: rotate(9deg); }
#fn-dice button.rolling .die1 { transform: rotate(-375deg); }
#fn-dice button.rolling .die2 { transform: rotate(369deg); }
#fn-dice .hint { position: absolute; left: 100%; top: 50%; transform: translateY(-50%); margin-left: 6px; white-space: nowrap; font-family: var(--mono); font-size: 8.5px; letter-spacing: .18em; text-transform: uppercase; color: var(--text-lighter); opacity: 0; transition: opacity .3s; }
#fn-dice button:hover .hint { opacity: .85; }

/* ════════════════════════════════════
   BOOKS MODULE — homepage, under the river
   ════════════════════════════════════ */
.fn-books { padding: 0 24px 96px; }
.fn-books-inner { max-width: 1080px; margin: 60px auto 0; padding: 64px 0 0; border-top: 1px solid var(--rule); }
.fn-bk-eyebrow { font-family: var(--display); font-weight: 600; font-size: clamp(28px, 3.4vw, 42px); line-height: 1.08; letter-spacing: -.015em; color: var(--ink); text-align: center; margin: 0 0 26px; }

.fn-bk-finder { font-family: var(--display); font-weight: 400; font-size: clamp(22px, 2.7vw, 33px); line-height: 1.5; text-align: center; color: var(--ink); }
.fn-bk-line { display: block; }
.fn-bk-pick { position: relative; display: inline-block; color: var(--accent); white-space: nowrap; cursor: pointer; }
.fn-bk-val { border-bottom: 2px solid var(--accent); padding-bottom: 2px; }
.fn-bk-pick.is-set .fn-bk-val { color: var(--accent-deep); border-color: var(--accent-deep); }
.fn-bk-car { font-size: .55em; vertical-align: middle; margin-left: 6px; }
.fn-bk-sel { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer; border: 0; font-size: 16px; }

.fn-bk-count { text-align: center; font-family: var(--sans); font-size: 16px; color: var(--text-faint); margin: 32px 0 0; min-height: 1.4em; }
.fn-bk-count b { color: var(--accent-deep); font-weight: 700; }


.fn-bk-covers { display: grid; grid-template-columns: repeat(6, 1fr); gap: 26px; margin-top: 44px; }
.fn-bk-cover { position: relative; aspect-ratio: 2 / 3; border-radius: 2px; overflow: hidden; box-shadow: 0 4px 14px rgba(34,29,23,.16); background: var(--panel) center / cover no-repeat; display: flex; align-items: flex-end; padding: 12px; text-decoration: none; transition: transform .18s ease, box-shadow .18s ease; }
.fn-bk-cover:hover { transform: translateY(-3px); box-shadow: 0 9px 22px rgba(34,29,23,.24); }
.fn-bk-ctitle { font-family: var(--display); font-weight: 500; font-size: 13px; line-height: 1.12; color: #fff; text-shadow: 0 1px 4px rgba(0,0,0,.45); }
.fn-bk-buy { position: absolute; top: 8px; right: 8px; font-family: var(--mono); font-size: 8px; letter-spacing: .1em; text-transform: uppercase; color: #fff; background: rgba(20,16,12,.5); border-radius: 3px; padding: 2px 6px; }
.fn-bk-cover.c1 { background-image: linear-gradient(160deg,#caa86f,#7a5a36); }
.fn-bk-cover.c2 { background-image: linear-gradient(160deg,#3f6a9e,#2a4566); }
.fn-bk-cover.c3 { background-image: linear-gradient(160deg,#8a8a86,#54544a); }
.fn-bk-cover.c4 { background-image: linear-gradient(160deg,#b07d22,#7a4f14); }
.fn-bk-cover.c5 { background-image: linear-gradient(160deg,#6e7a34,#3e4420); }
.fn-bk-cover.c6 { background-image: linear-gradient(160deg,#5f7488,#33424f); }

@media (max-width: 900px) { .fn-bk-covers { grid-template-columns: repeat(4, 1fr); gap: 18px; } }
@media (max-width: 600px) { .fn-bk-covers { grid-template-columns: repeat(3, 1fr); gap: 14px; } .fn-books-inner { padding-top: 48px; margin-top: 44px; } .fn-bk-finder { line-height: 1.42; } }

/* ════════════════════════════════════════════════════════════════════════
   v2.10.0 — Story head: editorial upgrade (additive only)
   Hero matches header chrome (1120px box, 32px gutters — same as .nav-inner
   inside .site-nav). Title not forced title-case (respects the actual
   headline casing). Dek in Newsreader italic, voiced not muted. Byline rendered
   (template change) in tracked DM Sans. The existing rule above body copy on
   .fn-story-body is preserved by intent.
   ════════════════════════════════════════════════════════════════════════ */
.fn-story--photo-led { padding-left: 32px; padding-right: 32px; max-width: 1184px; }
.fn-story--photo-led .fn-story-lead { width: 100%; max-width: 1120px; margin-left: auto; margin-right: auto; }
.fn-story--photo-led .fn-story-head-wrap { max-width: 720px; margin: 56px auto 0; }
.fn-story--photo-led .fn-story-head {
  text-transform: none;
  font-weight: 500;
  font-size: clamp(36px, 4.4vw, 54px);
  line-height: 1.06;
  letter-spacing: -.012em;
  color: var(--text-light);
  margin: 0 0 24px;
}
.fn-story--photo-led .fn-story-deck {
  font-family: var(--display);
  font-style: italic;
  font-weight: 300;
  font-size: 22px;
  line-height: 1.4;
  color: var(--text-light);
  max-width: 540px;
  margin: 0 auto 28px;
}
.fn-story--photo-led .fn-story-byline {
  font-family: var(--sans);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: .2em;
  text-transform: uppercase;
  color: var(--text-faint);
  margin: 0;
}
.fn-story--photo-led .fn-story-byline a { color: var(--text-light); text-decoration: none; }

/* Intro eyebrow — Intro • Publication • NN, above the headline. Same DM Sans
   small-caps vocabulary as the intro card's series label; centered by the
   head-wrap. Only intros render it. */
.fn-story-eyebrow {
  font-family: var(--sans);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .15em;
  text-transform: uppercase;
  color: var(--text-faint);
  margin: 0 0 18px;
}
@media (max-width: 740px) {
  .fn-story-eyebrow { font-size: 10.5px; letter-spacing: .12em; margin-bottom: 14px; }
}

@media (max-width: 740px) {
  .fn-story--photo-led { padding-left: 20px; padding-right: 20px; }
  .fn-story--photo-led .fn-story-head { font-size: clamp(28px, 7vw, 38px); }
  .fn-story--photo-led .fn-story-deck { font-size: 19px; max-width: none; }
}

/* ════════════════════════════════════════════════════════════════════════
   v2.10.4 — Classic-editor image widths (no Gutenberg)
   Default = 640px text measure. Breakout is opt-in by adding .alignwide
   (950px) or .alignfull (1120px chrome) to the [caption] wrapper or the bare
   <img>. The [caption] shortcode's inline width:NNNpx is overridden. Tighter
   pre-body hairline retained.
   ════════════════════════════════════════════════════════════════════════ */
/* Tighten the gap around the rule above body copy (was 34+34 stacking) */
.fn-story--photo-led .fn-story-body { padding-top: 26px; margin-top: 30px; }

/* DEFAULT: inline images hold the 640px text measure. Covers Classic-editor
   raw <img>, [caption] shortcode wrappers (.wp-caption), and the rare block. */
.fn-story-body figure:not(.fn-story-inset),
.fn-story-body .wp-block-image,
.fn-story-body .wp-caption,
.fn-story-body img.size-large,
.fn-story-body img.size-full {
  width: 100% !important; max-width: 100%;
  margin-left: 0; transform: none;
  margin-top: 32px; margin-bottom: 32px;
}
.fn-story-body img { height: auto; }
/* Belt-and-suspenders for stacked images: drop any empty paragraph or caption
   the editor leaves between blocks so it can't add to the image margins. */
.fn-story-body p:empty,
.fn-story-body figcaption:empty,
.fn-story-body .wp-caption-text:empty { display: none; margin: 0; }
/* [caption] shortcode: kill the inline width:NNNpx it injects, style the text */
.fn-story-body .wp-caption { display: block; }
.fn-story-body .wp-caption img { display: block; width: 100%; height: auto; border-radius: 2px; margin: 0; }
.fn-story-body .wp-caption-text {
  font-family: var(--serif); font-style: italic; font-size: 13.5px;
  color: var(--text-faint); text-align: left; margin: 9px 0 0; padding: 0;
}

/* OPT-IN breakout. Add the class on the [caption] wrapper or the <img>:
     alignwide  → 950px frame
     alignfull  → 1120px chrome
   On a [caption], the class rides on the .wp-caption div; on a bare image it
   rides on the <img> itself — both are handled. Inline width is overridden. */
.fn-story-body .alignwide,
.fn-story-body figure.alignwide,
.fn-story-body .wp-block-image.alignwide,
.fn-story-body .wp-caption.alignwide,
.fn-story-body img.alignwide {
  width: 950px !important; max-width: calc(100vw - 64px);
  margin-left: 50%; transform: translateX(-50%);
  margin-top: 40px; margin-bottom: 40px;
}
.fn-story-body .alignfull,
.fn-story-body figure.alignfull,
.fn-story-body .wp-block-image.alignfull,
.fn-story-body .wp-caption.alignfull,
.fn-story-body img.alignfull {
  width: 1120px !important; max-width: calc(100vw - 64px);
  margin-left: 50%; transform: translateX(-50%);
  margin-top: 44px; margin-bottom: 44px;
}
/* A bare aligned <img> that carries an inline width attribute/style */
.fn-story-body img.alignwide,
.fn-story-body img.alignfull { height: auto; }

/* ---- DIPTYCH (classic [gallery columns="2"]) ────────────────────────────
   Ported from Adventure Journal's article diptych: two images locked in a
   row, 6px gutter, both cropped to a matched 2:3 portrait frame (equal
   height, object-fit: cover), breaking out wide like alignwide. Author it
   with the Classic-editor Gallery: pick two images, set Columns to 2. The
   gallery's caption sits beneath, flush left, in the caption style. WordPress
   emits .gallery.gallery-columns-2 with .gallery-item > .gallery-icon > img. */
.fn-story-body .gallery.gallery-columns-2 {
  display: flex !important;
  gap: 12px;
  width: 950px !important; max-width: calc(100vw - 64px);
  margin-left: 50%; transform: translateX(-50%);
  margin-top: 40px; margin-bottom: 32px;
}
.fn-story-body .gallery.gallery-columns-2 .gallery-item {
  flex: 1 !important; margin: 0 !important; width: auto !important;
}
.fn-story-body .gallery.gallery-columns-2 .gallery-icon {
  aspect-ratio: 2 / 3; overflow: hidden; margin: 0 !important;
}
.fn-story-body .gallery.gallery-columns-2 .gallery-icon img {
  width: 100% !important; height: 100% !important;
  max-width: none !important; object-fit: cover !important;
  border-radius: 2px; margin: 0 !important;
}
/* When a caption follows, tuck it close to the images (the 40px below the
   caption carries the space to the next paragraph). */
.fn-story-body .gallery.gallery-columns-2:has(+ p.fn-diptych-cap) { margin-bottom: 14px; }
/* Per-item WordPress captions inside the gallery are hidden; use one shared
   caption by adding class="fn-diptych-cap" to the paragraph right after the
   gallery. (Not auto-applied to the next paragraph — that would swallow body
   copy.) */
.fn-story-body .gallery.gallery-columns-2 .gallery-caption { display: none !important; }
.fn-story-body .gallery.gallery-columns-2 + p.fn-diptych-cap,
.fn-story-body p.fn-diptych-cap {
  width: 950px !important; max-width: calc(100vw - 64px);
  margin-left: 50%; transform: translateX(-50%);
  margin-top: 0; margin-bottom: 40px;
  font-family: var(--serif); font-style: italic; font-size: 13.5px;
  color: var(--text-faint); text-align: left; line-height: 1.45;
}
@media (max-width: 700px) {
  .fn-story-body .gallery.gallery-columns-2,
  .fn-story-body p.fn-diptych-cap {
    width: 100% !important; margin-left: 0; transform: none;
  }
}

/* ════════════════════════════════════════════════════════════════════════
   v2.10.3 — Story section break (dinkus) + source line
   The existing .orn divider was scoped to .story-prose and never reached the
   story template (.fn-story-body). Add the chosen hairline+diamond dinkus in
   the right scope, plus the end-of-piece source line. Additive only.
   ════════════════════════════════════════════════════════════════════════ */

/* Dinkus: hairline with a centered sienna diamond. Drop <div class="orn"></div>
   between sections in the editor's HTML view (empty div is fine). */
.fn-story-body .orn {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 46px 0;
  height: 8px;
}
/* Two hairlines, offset from center to leave room for the diamond */
.fn-story-body .orn::before {
  content: "";
  height: 1px;
  width: 70px;
  background: var(--rule);
  margin-right: 24px;
}
.fn-story-body .orn::after {
  content: "";
  height: 1px;
  width: 70px;
  background: var(--rule);
  margin-left: 24px;
}
/* The diamond, dead center, a rotated square. Requires the inner <span>:
   write the divider as <div class="orn"><span></span></div>. */
.fn-story-body .orn > span {
  position: absolute;
  left: 50%; top: 50%;
  width: 7px; height: 7px;
  background: var(--accent);
  transform: translate(-50%, -50%) rotate(45deg);
}

/* Source line: end of the piece, before the end bug. Italic, faint, centered,
   set off by a short space. Printed from the _fn_story_source meta field. */
.fn-story-source {
  font-family: var(--display);
  font-style: italic;
  font-weight: 400;
  font-size: 15px;
  line-height: 1.5;
  color: var(--text-faint);
  text-align: center;
  max-width: 640px;
  margin: 60px auto 0;
  padding-top: 40px;
  border-top: 1px solid var(--rule);
}

/* Backmatter — one line of body copy at the end of a book review, reading left
   to right like the prose. Write it in the post body as the last thing before
   the ornament. It's just a normal paragraph with a class:
     <p class="fn-backmatter"><em>Discontent</em> by Beatriz Serrano. Harper
     Perennial, 2025. 208 pages, $18.99. <a href="https://bookshop.org/a/1358/..."
     target="_blank" rel="noopener">Buy at Bookshop.org</a></p> */
.fn-story-body .fn-backmatter {
  font-family: var(--serif);
  font-size: 16px;
  line-height: 1.6;
  color: var(--text-faint);
  margin: 34px 0 0;
}
.fn-story-body .fn-backmatter a {
  color: var(--accent-deep);
  text-decoration: underline;
  text-underline-offset: 2px;
}
.fn-story-body .fn-backmatter a:hover { color: var(--accent); }

/* ════════════════════════════════════════════════════════════════════════
   v2.10.6 — Survey card/index contrast against the basemap
   Card + index used --fs-paper, identical to the map land tone, so they blended
   in (badly on small screens). Lift them off the map: deeper shadow, stronger
   border, and a faint ring. Additive overrides.
   ════════════════════════════════════════════════════════════════════════ */

/* Specimen card */
.fn-survey .fn-spec{
  border:1px solid var(--fs-inksoft);
  box-shadow:0 24px 60px rgba(20,16,12,.42), 0 5px 16px rgba(20,16,12,.28);
}
/* Index panel */
.fn-survey .fn-survey-index{
  border:1px solid var(--fs-inksoft);
  box-shadow:0 18px 48px rgba(20,16,12,.36), 0 3px 10px rgba(20,16,12,.24);
}
/* Cluster bubbles + controls — a touch more lift so they read on either map */
.fn-survey .fn-cl{ box-shadow:0 3px 10px rgba(20,16,12,.34); border-color:var(--fs-inksoft); }
.fn-survey .leaflet-control-zoom,
.fn-survey .fn-fullscreen-toggle{ box-shadow:0 3px 10px rgba(20,16,12,.30)!important; }

/* On narrow screens the blend is worst — push contrast further */
@media (max-width: 820px){
  .fn-survey .fn-spec,
  .fn-survey .fn-survey-index{ border-width:1.5px; }
}

/* ════════════════════════════════════════════════════════════════════════
   v3.10.30 — People I've Met: drop cap follows the interview, not the intro
   The story body drop-caps its first paragraph (.fn-story-body > p:first-child
   ::first-letter). On a PIM piece the first paragraph is the italic scene-set
   intro, so the cap was landing on the italic lede. Move it: the intro carries
   .fn-intro (no cap, smaller italic), and the first answer carries .fn-first,
   which takes the cap. Additive; only affects bodies that use these classes.
   ════════════════════════════════════════════════════════════════════════ */

/* Italic scene-setter: no drop cap, set smaller than body, lighter ink */
.fn-story-body > p.fn-intro:first-child::first-letter {
  font: inherit; color: inherit; float: none; padding: 0;
}
.fn-story-body p.fn-intro {
  font-family: var(--serif); font-style: italic; font-size: 18px;
  line-height: 1.6; color: var(--text-light); margin: 0 0 20px;
}

/* The drop cap rides on the first answer instead */
.fn-story-body .fn-first::first-letter {
  font-family: var(--display); font-weight: 500; font-size: 58px;
  line-height: .8; float: left; padding: 7px 10px 0 0; color: var(--accent-deep);
}

/* ════════════════════════════════════════════════════════════════════════
   v3.10.31 — Rough Notes inner text: centered pulled quote + hairline credit
   The card frame, border, and "Rough Notes + Curious Fragments" kicker are
   unchanged. Only the text inside is restyled: the kicker gets more air below
   it, the body becomes a centered 21px Newsreader display quote, and an optional
   credit (from the _fn_rough_attr / _fn_rough_source fields) sits centered
   under a hairline — name in sans, source in italic serif, no dash. The credit
   block and its rule render only when an attribution exists, so unattributed
   facts and fragments show the body alone.
   ════════════════════════════════════════════════════════════════════════ */

/* more breathing room beneath the kicker */
.fn-tile-rough .fn-tile-kicker { margin-bottom: 20px; text-align: center; justify-content: center; }

/* body: centered display serif, a touch larger and darker than before */
.fn-rough-body { font-family: var(--display); font-weight: 500; font-size: 21px; line-height: 1.32; letter-spacing: -.005em; color: var(--ink); text-align: center; }
.fn-rough-body p { margin: 0 0 10px; }
.fn-rough-body p:last-child { margin-bottom: 0; }

/* credit: hairline above, centered; name sans, source italic serif, no dash */
.fn-rough-credit {
  font-family: var(--sans); font-size: 12px; line-height: 1.45; color: var(--text-faint);
  text-align: center; margin: 18px 0 0; padding-top: 13px; border-top: 1px solid var(--rule);
}
.fn-rough-credit cite { font-style: normal; font-weight: 500; color: var(--text-light); }
.fn-rough-credit .src { font-family: var(--serif); font-style: italic; }

/* ════════════════════════════════════
   INTROS — typographic featured-image fallback + collection pages
   (Powder Magazine intros, Adventure Journal intros)
   ════════════════════════════════════ */

/* The fallback card: type, not stock photos. Reads as an archive entry —
   the issue NUMBER is the hero, since these are a numbered run. */
.fn-intro-card {
  display: flex;
  flex-direction: column;
  /* 3:2 is the baseline poster shape, treated as a floor, not a cap. A two-line
     title needs a hair more height than 3:2 gives at narrow card widths, so the
     card must be free to grow. overflow:visible is load-bearing here: a grid
     item whose overflow isn't visible has its automatic minimum size forced to
     0, which pins the card to the aspect-ratio height and lets a long title
     spill off the bottom to be clipped. With overflow:visible, min-height:auto
     resolves to min-content and the card expands to fit; align-items:stretch on
     the grid then keeps every card in the row level (see .fn-intro-grid). */
  aspect-ratio: 3 / 2;
  background: var(--bg-warm);
  border: 1px solid var(--rule);
  border-radius: 3px;
  padding: 24px 24px 22px;
  text-decoration: none;
  color: inherit;
  overflow: visible;
  transition: border-color .25s ease, transform .25s ease, box-shadow .25s ease;
}
.fn-intro-card:hover {
  border-color: var(--cinnabar);
  transform: translateY(-2px);
  box-shadow: 0 6px 20px rgba(39, 35, 32, .07);
}
.fn-intro-card:focus-visible {
  outline: 2px solid var(--cinnabar);
  outline-offset: 3px;
}

.fn-intro-card-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}
.fn-intro-card-series {
  font-family: var(--sans);
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: .15em;
  text-transform: uppercase;
  color: var(--text-faint);
}
.fn-intro-card-mark {
  flex: none;
  width: 20px;
  height: 20px;
  color: var(--text-faint);
}
.fn-intro-card-mark svg { width: 20px; height: 20px; display: block; }

/* The numeral — Newsreader italic, cinnabar, pushed to the bottom of the card
   with a short accent rule beneath it. */
.fn-intro-card-num {
  margin-top: auto;
  font-family: var(--display);
  font-style: italic;
  font-weight: 500;
  color: var(--cinnabar);
  font-size: clamp(34px, 6vw, 50px);
  line-height: 1;
  letter-spacing: -.01em;
}
.fn-intro-card-num::after {
  content: "";
  display: block;
  width: 44px;
  height: 2px;
  background: var(--cinnabar);
  opacity: .5;
  margin: 13px 0 0;
}
/* When a card has no numeral, the title still sits at the bottom. */
.fn-intro-card-title {
  margin-top: 10px;
  font-family: var(--display);
  font-weight: 500;
  font-size: 22px;
  line-height: 1.2;
  letter-spacing: -.005em;
  color: var(--ink);
  max-width: 16ch;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  padding-bottom: 6px;
}
.fn-intro-card:not(:has(.fn-intro-card-num)) .fn-intro-card-title { margin-top: auto; }
.fn-intro-card:hover .fn-intro-card-title { color: var(--accent-deep); }

/* Collection index page (one per series, reached from the footer) */

/* The shared .archive-header is a 640px centered column — right for the
   single-column archives, but here the cards live in the 1120px .fn-intro-index
   below, so a 640px header floats indented with its left edge aligned to
   nothing. Widen the header to the same column so the eyebrow and headline sit
   directly above card 01 and share the grid's left margin. Scoped to the intros
   page via .fn-intro-head; other archive headers are unaffected. */
.fn-intro-head {
  max-width: 1120px;
  padding-left: 24px;
  padding-right: 24px;
}

.fn-intro-index {
  max-width: 1120px;
  margin: 0 auto;
  padding: 8px 24px 96px;
}
.fn-intro-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  gap: 20px;
  align-items: stretch;
}
.fn-intro-empty {
  font-family: var(--sans);
  color: var(--text-faint);
  text-align: center;
  padding: 48px 0;
}

/* Archive header eyebrow + count (shared with the book taxonomy header) */
.archive-tax-label {
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--text-faint);
  margin-bottom: 12px;
}
.archive-count {
  font-family: var(--sans);
  font-size: 13px;
  color: var(--text-faint);
  margin-top: 10px;
}

/* Footer: intro archive links, quiet — matches .footer-links on the dark bar */
.footer-intros {
  font-family: var(--sans);
  font-size: 12px;
  color: rgba(244, 238, 225, 0.3);
  margin-top: 10px;
}
.footer-intros a {
  color: rgba(244, 238, 225, 0.5);
  text-decoration: none;
  transition: color 0.15s;
}
.footer-intros a:hover { color: var(--bg); }

@media (max-width: 560px) {
  .fn-intro-grid { grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); }
}


/* ============================================================
   SPECIMEN CARD — authoritative sizing (overrides earlier rules)
   ============================================================ */
.fn-spec{
  --rail:clamp(320px, 28vw, 400px);
  --bayw:min(560px, calc(100vw - var(--rail) - 560px));
  --bayh:min(560px, calc(100vh - 210px));
}
.fn-spec .fn-spec-split{ display:flex; min-height:0; }
.fn-spec .fn-spec-left{
  flex:0 0 auto;
  width:calc(var(--bayw) + 36px);
  height:var(--bayh);
  padding:18px; box-sizing:border-box;
  display:flex; align-items:center; justify-content:center;
  background:var(--fs-paper2); border-right:1px solid var(--fs-rule);
}
.fn-spec.fn-por .fn-spec-left{ width:calc(var(--bayh) * 0.70 + 36px); }
.fn-spec .fn-spec-left .fn-spec-photo,
.fn-spec .fn-spec-left .fn-spec-gallery{
  width:100%; height:100%; max-width:100%; max-height:100%;
  aspect-ratio:auto; object-fit:contain;
  background:var(--fs-paper2);
  border:1px solid rgba(35,32,27,.24);
  box-shadow:0 2px 5px rgba(28,22,12,.13), 0 12px 30px rgba(28,22,12,.16);
  overflow:hidden;
}
.fn-spec .fn-spec-left .fn-spec-track{ height:100%; }
.fn-spec .fn-spec-left .fn-spec-slide{ min-width:100%; height:100%; }
.fn-spec .fn-spec-left .fn-spec-slide img,
.fn-spec .fn-spec-left .fn-spec-slide video{
  width:100%; height:100%; object-fit:contain; background:var(--fs-paper2);
}
.fn-spec .fn-spec-body{ flex:0 0 var(--rail); width:var(--rail); height:var(--bayh);
  display:flex; flex-direction:column; min-height:0; }
.fn-spec .fn-spec-rhead{ flex:none; padding:22px 26px 10px; }
.fn-spec .fn-spec-rscroll{ flex:1 1 auto; min-height:0; overflow-y:auto; padding:0 26px 14px; }
.fn-spec .fn-spec-rdata{ flex:none; padding:0; border-top:1px solid rgba(35,32,27,.30); }
.fn-spec .fn-spec-coord{ padding:11px 26px; border-bottom:1px solid rgba(35,32,27,.30); }
.fn-spec .fn-spec-near{ padding:12px 26px; min-height:112px;
  display:flex; flex-direction:column; justify-content:center; }

@media (max-width:760px){
  .fn-spec .fn-spec-left{ width:100%; height:auto; border-right:none;
    border-bottom:1px solid var(--fs-rule); padding:14px; }
  .fn-spec.fn-por .fn-spec-left{ width:100%; }
  .fn-spec .fn-spec-left .fn-spec-photo,
  .fn-spec .fn-spec-left .fn-spec-gallery{ height:auto; aspect-ratio:4/3; }
  .fn-spec .fn-spec-body{ flex:1 1 auto; width:100%; height:auto; }
  .fn-spec .fn-spec-rscroll{ overflow:visible; }
}


/* ---- full-frame bay: the bay takes the image's aspect, image fills it ---- */
.fn-spec{ --ar: 1.5; }
.fn-spec .fn-spec-left{
  padding:0; border-right:1px solid var(--fs-rule);
  height:min(var(--bayh), calc(var(--bayw) / var(--ar)));
  width:calc(min(var(--bayh), calc(var(--bayw) / var(--ar))) * var(--ar));
  overflow:hidden;
}
.fn-spec.fn-por .fn-spec-left{
  height:var(--bayh);
  width:calc(var(--bayh) * var(--ar));
}
.fn-spec .fn-spec-left .fn-spec-photo,
.fn-spec .fn-spec-left .fn-spec-gallery{
  width:100%; height:100%; max-width:none; max-height:none;
  border:none; box-shadow:none; border-radius:0;
  object-fit:cover; background:var(--fs-paper2);
}
.fn-spec .fn-spec-left .fn-spec-slide img,
.fn-spec .fn-spec-left .fn-spec-slide video{ width:100%; height:100%; object-fit:cover; }

/* rail height follows the bay */
.fn-spec .fn-spec-body{ height:min(var(--bayh), calc(var(--bayw) / var(--ar))); }
.fn-spec.fn-por .fn-spec-body{ height:var(--bayh); }

/* ---- foot bar carries the grounding data ---- */
.fn-spec .fn-spec-foot{ padding:0 22px; gap:18px; }
.fn-spec .fn-spec-foot .fn-spec-coord{
  border-bottom:none; padding:0; margin:0; flex:1 1 auto;
  font-size:10px; letter-spacing:.06em; color:var(--fs-faint); text-transform:none;
}
.fn-spec .fn-spec-foot .fn-spec-coord .pl{ color:var(--fs-faint); }
.fn-spec .fn-spec-foot .fn-spec-coord .co{ color:var(--fs-faint); }
.fn-spec .fn-spec-foot .fn-spec-coord .sp{ min-width:20px; }
.fn-spec .fn-spec-foot .fig{ flex:none; }

/* ---- nearest gets the whole data zone ---- */
.fn-spec .fn-spec-rdata{ border-top:1px solid rgba(35,32,27,.30); }
.fn-spec .fn-spec-near{ padding:14px 26px; min-height:0; }

@media (max-width:760px){
  .fn-spec .fn-spec-left,.fn-spec.fn-por .fn-spec-left{ width:100%; height:auto; aspect-ratio:var(--ar); }
  .fn-spec .fn-spec-body,.fn-spec.fn-por .fn-spec-body{ height:auto; }
}


/* ============================================================
   CARD v5.3.1 — fixed rail height, matted image, aspect honored
   ============================================================ */
.fn-spec{
  --railh:clamp(400px, 58vh, 540px);   /* card body height — constant */
  --matpad:18px;
  --ar:1.5;                            /* replaced at runtime from the real image */
  --bayw:min(620px, calc(100vw - var(--rail) - 540px));
}
/* bay: height locked to the rail, width from the image's aspect, mat around it */
.fn-spec .fn-spec-left{
  height:var(--railh);
  width:min( calc((var(--railh) - (2 * var(--matpad))) * var(--ar) + (2 * var(--matpad))), var(--bayw) );
  padding:var(--matpad); box-sizing:border-box;
  display:flex; align-items:center; justify-content:center;
  background:var(--fs-paper2); border-right:1px solid var(--fs-rule); overflow:hidden;
}
.fn-spec.fn-por .fn-spec-left{
  width:calc((var(--railh) - (2 * var(--matpad))) * var(--ar) + (2 * var(--matpad)));
}
.fn-spec .fn-spec-left .fn-spec-photo,
.fn-spec .fn-spec-left .fn-spec-gallery{
  width:100%; height:100%; max-width:100%; max-height:100%;
  object-fit:contain; background:var(--fs-paper2);
  border:none; box-shadow:0 2px 6px rgba(28,22,12,.16);
}
.fn-spec .fn-spec-left .fn-spec-slide img,
.fn-spec .fn-spec-left .fn-spec-slide video{ width:100%; height:100%; object-fit:contain; }

/* rail: same height for every card — blurb window is therefore fixed */
.fn-spec .fn-spec-body,
.fn-spec.fn-por .fn-spec-body{ height:var(--railh); }
.fn-spec .fn-spec-rscroll{ flex:1 1 auto; min-height:0; overflow-y:auto; }

/* foot: tagline left · location + coords centred · fig right */
.fn-spec .fn-spec-foot{ display:flex; align-items:center; gap:16px; padding:0 22px; }
.fn-spec .fn-spec-foot .lft{ flex:0 0 auto; }
.fn-spec .fn-spec-foot .fig{ flex:0 0 auto; margin-left:auto; }
.fn-spec .fn-spec-foot .fn-spec-coord{
  position:absolute; left:50%; transform:translateX(-50%);
  border:none; padding:0; margin:0; display:flex; gap:14px;
  font-size:10px; letter-spacing:.05em; text-transform:none; color:var(--fs-faint);
  white-space:nowrap;
}
.fn-spec .fn-spec-foot{ position:relative; }
.fn-spec .fn-spec-foot .fn-spec-coord .sp{ display:none; }
.fn-spec .fn-spec-foot .fn-spec-coord .pl,
.fn-spec .fn-spec-foot .fn-spec-coord .co{ color:var(--fs-faint); flex:none; }

@media (max-width:900px){ .fn-spec .fn-spec-foot .fn-spec-coord{ display:none; } }
@media (max-width:760px){
  .fn-spec .fn-spec-left,.fn-spec.fn-por .fn-spec-left{ width:100%; height:auto; padding:12px; }
  .fn-spec .fn-spec-left .fn-spec-photo,
  .fn-spec .fn-spec-left .fn-spec-gallery{ height:auto; max-height:46vh; }
  .fn-spec .fn-spec-body,.fn-spec.fn-por .fn-spec-body{ height:auto; }
}


/* ============================================================
   CARD v5.3.2 — card height flexes to content; well hugs the image
   ============================================================ */
.fn-spec{
  --minh:300px;
  --maxh:clamp(380px, 56vh, 540px);
  --matpad:20px;
}
.fn-spec .fn-spec-split{ display:flex; align-items:stretch; min-height:0; }

/* rail sizes to its content, within bounds */
.fn-spec .fn-spec-body,
.fn-spec.fn-por .fn-spec-body{
  height:auto; min-height:var(--minh); max-height:var(--maxh);
  flex:0 0 var(--rail); width:var(--rail);
  display:flex; flex-direction:column;
}
.fn-spec .fn-spec-rscroll{ flex:0 1 auto; min-height:0; overflow-y:auto; }
.fn-spec .fn-spec-rdata{ margin-top:auto; }

/* the well: no box, no border — the image simply floats, with the mat around it.
   height comes from the row; width is derived from the image's own aspect. */
.fn-spec .fn-spec-left,
.fn-spec.fn-por .fn-spec-left{
  flex:0 0 auto; width:auto; height:auto;
  padding:var(--matpad); box-sizing:border-box;
  display:flex; align-items:center; justify-content:center;
  background:var(--fs-paper2); border-right:1px solid var(--fs-rule); overflow:hidden;
}
.fn-spec .fn-spec-left .fn-spec-photo,
.fn-spec .fn-spec-left .fn-spec-gallery{
  height:100%; width:auto;
  aspect-ratio:var(--ar);
  max-width:min(620px, calc(100vw - var(--rail) - 520px));
  max-height:100%;
  object-fit:cover;
  border:none !important; border-radius:0;
  box-shadow:0 3px 10px rgba(28,22,12,.15);
  background:transparent;
}
.fn-spec .fn-spec-left .fn-spec-gallery{ overflow:hidden; }
.fn-spec .fn-spec-left .fn-spec-slide img,
.fn-spec .fn-spec-left .fn-spec-slide video{
  width:100%; height:100%; object-fit:cover; border:none; box-shadow:none;
}

@media (max-width:760px){
  .fn-spec .fn-spec-left,.fn-spec.fn-por .fn-spec-left{ width:100%; padding:14px; }
  .fn-spec .fn-spec-left .fn-spec-photo,
  .fn-spec .fn-spec-left .fn-spec-gallery{ width:100%; height:auto; max-width:100%; }
  .fn-spec .fn-spec-body,.fn-spec.fn-por .fn-spec-body{ height:auto; max-height:none; width:100%; }
}


/* ============================================================
   CARD v5.3.3 — rail defines the height; nearest pinned to bottom
   ============================================================ */
.fn-spec .fn-spec-split{ display:flex; align-items:stretch; }

/* the rail's own content sets the card height (no cap on the column) */
.fn-spec .fn-spec-body,
.fn-spec.fn-por .fn-spec-body{
  height:auto; max-height:none; min-height:var(--minh);
  display:flex; flex-direction:column;
}
/* the blurb window is what's capped */
.fn-spec .fn-spec-rscroll{
  flex:0 1 auto; min-height:0;
  max-height:clamp(200px, 34vh, 330px);
  overflow-y:auto;
}
/* nearest sits hard on the bottom, always */
.fn-spec .fn-spec-rdata{ margin-top:auto; flex:none; }

/* the photo well stretches to the rail's height; width follows the image */
.fn-spec .fn-spec-left,
.fn-spec.fn-por .fn-spec-left{ align-self:stretch; height:auto; }
.fn-spec .fn-spec-left .fn-spec-photo,
.fn-spec .fn-spec-left .fn-spec-gallery{
  height:100%; width:auto; aspect-ratio:var(--ar);
  max-height:100%; max-width:min(620px, calc(100vw - var(--rail) - 520px));
  object-fit:cover; border:none !important; box-shadow:none;
}

@media (max-width:760px){
  .fn-spec .fn-spec-rscroll{ max-height:none; }
  .fn-spec .fn-spec-left .fn-spec-photo,
  .fn-spec .fn-spec-left .fn-spec-gallery{ width:100%; height:auto; max-width:100%; }
}


/* link matches the credit line: serif, regular weight, no caps */
.fn-spec .fn-spec-act .fn-spec-go,
.fn-spec .fn-spec-go{
  font-family:var(--serif); font-size:15px; line-height:1.3;
  font-weight:400; letter-spacing:0; text-transform:none;
  color:var(--fs-accent); text-decoration:none;
  border-bottom:1px solid transparent; padding-bottom:1px;
}
.fn-spec .fn-spec-go:hover{ color:var(--fs-accentdeep); border-bottom-color:currentColor; }


/* no rule between the blurb and nearest */
.fn-spec .fn-spec-rdata{ border-top:none; }
.fn-spec .fn-spec-rscroll{ border-bottom:none; }


/* v5.3.6 — rule restored; blurb shows in full (capped at 100 words, no clipping) */
.fn-spec .fn-spec-rdata{ border-top:1px solid rgba(35,32,27,.30); }
.fn-spec .fn-spec-rscroll{ max-height:none; overflow:visible; flex:0 0 auto; }
.fn-spec .fn-spec-body,
.fn-spec.fn-por .fn-spec-body{ height:auto; max-height:none; }


/* v5.3.7 — no word cap in the card. blurb shows in full; scrolls only if it would
   outgrow the viewport, so a very long entry can never overflow the screen. */
.fn-spec .fn-spec-rscroll{
  flex:0 1 auto; min-height:0;
  max-height:calc(100vh - 330px);
  overflow-y:auto;
}


/* v5.3.8 — the whole card must fit the window with breathing room */
.fn-spec{ --cardmax:calc(100vh - 150px); max-height:var(--cardmax); overflow:hidden; }
.fn-spec .fn-spec-split{ min-height:0; max-height:calc(var(--cardmax) - 86px); }
.fn-spec .fn-spec-body,
.fn-spec.fn-por .fn-spec-body{ max-height:calc(var(--cardmax) - 86px); }
.fn-spec .fn-spec-left,
.fn-spec.fn-por .fn-spec-left{ max-height:calc(var(--cardmax) - 86px); }
.fn-spec .fn-spec-left .fn-spec-photo,
.fn-spec .fn-spec-left .fn-spec-gallery{
  max-height:calc(var(--cardmax) - 86px - (2 * var(--matpad)));
}
/* if the blurb no longer fits, it scrolls inside the fixed card */
.fn-spec .fn-spec-rscroll{ flex:0 1 auto; min-height:0; max-height:none; overflow-y:auto; }

@media (max-width:760px){
  .fn-spec{ max-height:88vh; }
  .fn-spec .fn-spec-split,
  .fn-spec .fn-spec-body,
  .fn-spec .fn-spec-left{ max-height:none; }
}


/* ============================================================
   WORDS — lexicon spread (two column)
   ============================================================ */
.lex-spread{ max-width:1080px; margin:0 auto; padding:54px 32px 90px;
  display:grid; grid-template-columns:1fr 232px; gap:56px; align-items:start; }
.lex-running{ display:flex; justify-content:space-between; align-items:baseline;
  border-bottom:1px solid var(--rule); padding-bottom:12px; margin-bottom:34px; }
.lex-running .l{ font-family:var(--serif); font-variant:small-caps; text-transform:lowercase;
  letter-spacing:.06em; font-size:16px; color:var(--accent); }
.lex-running .r{ font-family:var(--mono); font-size:10px; letter-spacing:.16em;
  text-transform:uppercase; color:var(--text-faint); }

.lex-entry .lex-cat{ font-family:var(--mono); font-size:10.5px; letter-spacing:.15em;
  text-transform:uppercase; color:var(--text-faint); margin-bottom:12px; }
.featured-headword{ font-family:var(--display); font-weight:500; font-size:clamp(46px,7vw,74px);
  line-height:.95; letter-spacing:-.015em; color:var(--ink); margin:0; }
.featured-headword a{ color:inherit; text-decoration:none; }
.featured-pronunciation{ font-family:var(--mono); font-size:14px; color:var(--text-light);
  margin-top:12px; letter-spacing:.02em; }
.lex-rule{ width:46px; height:2px; background:var(--accent); margin:26px 0; }
.featured-definition{ font-family:var(--serif); font-size:20px; line-height:1.6;
  color:var(--ink); max-width:33em; }
.lex-ety{ margin-top:30px; max-width:33em; }
.lex-ety-l{ font-family:var(--serif); font-variant:small-caps; text-transform:lowercase;
  letter-spacing:.08em; font-weight:600; font-size:15px; color:var(--accent); }
.lex-ety p{ font-family:var(--serif); font-size:16px; line-height:1.6; color:var(--text-light);
  border-left:2px solid var(--rule); padding-left:16px; margin-top:9px; }
.featured-readmore{ display:inline-block; margin-top:28px; font-family:var(--serif);
  font-size:15px; color:var(--accent); text-decoration:none;
  border-bottom:1px solid transparent; }
.featured-readmore:hover{ border-bottom-color:currentColor; }
.featured-loading{ font-family:var(--mono); font-size:11px; letter-spacing:.14em;
  text-transform:uppercase; color:var(--text-faint); padding:40px 0; }

.lex-acts{ margin-top:38px; font-family:var(--mono); font-size:12px; letter-spacing:.05em; }
.lex-acts a{ color:var(--accent); text-decoration:none; border-bottom:1px solid transparent; }
.lex-acts a:hover{ border-bottom-color:currentColor; }
.lex-acts .sep{ color:var(--text-faint); margin:0 12px; }

.lex-index{ border-left:1px solid var(--rule); padding-left:26px; }
.lex-index-h{ font-family:var(--serif); font-variant:small-caps; text-transform:lowercase;
  letter-spacing:.07em; font-size:14px; color:var(--text-light); margin-bottom:16px; }
.lex-index ul{ list-style:none; margin:0; padding:0; }
.lex-index li{ border-bottom:1px dotted var(--rule); line-height:2.05; }
.lex-index li a{ font-family:var(--serif); font-size:17px; color:var(--ink); text-decoration:none; }
.lex-index li a:hover{ color:var(--accent); }
.lex-index li .p{ font-family:var(--mono); font-size:10px; color:var(--text-faint); float:right; }
.lex-search{ margin-top:22px; }
.lex-search input{ width:100%; background:transparent; border:none;
  border-bottom:1px solid var(--rule); padding:7px 0; font-family:var(--mono); font-size:12px;
  color:var(--ink); }
.lex-search input:focus{ outline:none; border-bottom-color:var(--accent); }

@media (max-width:860px){
  .lex-spread{ grid-template-columns:1fr; gap:38px; padding:36px 22px 70px; }
  .lex-index{ border-left:none; border-top:1px solid var(--rule); padding-left:0; padding-top:24px; }
}

/* ============================================================
   BOOKS — call-slip spread (two column)
   ============================================================ */
.slip-spread{ max-width:1140px; margin:0 auto; padding:48px 32px 80px;
  display:grid; grid-template-columns:minmax(0,1fr) 400px; gap:52px; align-items:start; }
.slip-spread .hero{ padding:0; text-align:left; min-height:0; }
.slip-head{ display:flex; justify-content:space-between; align-items:baseline;
  border-bottom:1px solid var(--rule); padding-bottom:11px; margin-bottom:22px; }
.slip-head .t{ font-family:var(--serif); font-variant:small-caps; text-transform:lowercase;
  letter-spacing:.07em; font-weight:600; font-size:16px; color:var(--accent); }
.slip-head .n{ font-family:var(--mono); font-size:10px; letter-spacing:.14em;
  text-transform:uppercase; color:var(--text-faint); }
.slip-spread .hero-label{ font-family:var(--mono); font-size:10px; letter-spacing:.16em;
  text-transform:uppercase; color:var(--text-faint); margin-bottom:26px; text-align:left; }
.slip-spread .sentence{ text-align:left; }
.slip-spread .discover{ padding:0; }
.slip-spread .discover-label{ font-family:var(--serif); font-variant:small-caps;
  text-transform:lowercase; letter-spacing:.07em; font-size:14px; color:var(--text-light);
  margin-bottom:16px; text-align:left; }
.slip-spread .shelf{ display:grid; grid-template-columns:repeat(3,1fr); gap:14px; }
.slip-spread .shelf img{ width:100%; height:auto; display:block; }

@media (max-width:900px){
  .slip-spread{ grid-template-columns:1fr; gap:40px; padding:32px 22px 64px; }
}


/* v5.4.1 — legacy centered hero must not apply inside the lexicon spread */
.lex-main .featured-word{
  max-width:none; margin:0; padding:0; text-align:left;
  min-height:0; display:block;
}
.lex-main .featured-word-link{ display:block; }
.lex-spread .lex-main{ min-width:0; }
@media (min-width:480px){ .lex-main .featured-headword{ font-size:clamp(46px,7vw,74px); } }


/* ════════════════════════════════════════════════════════════════════════
   v5.5.0 — Conversation: the interviewer's turn
   Display italic, iron-gall, a step larger than the answer. Flush left —
   no rule, no indent, so the exchange keeps flowing.
   ════════════════════════════════════════════════════════════════════════ */
.fn-story-body p.fn-q{
  font-family:var(--display);
  font-style:italic;
  font-weight:400;
  font-size:21px;
  line-height:1.44;
  color:var(--accent);
  margin:34px 0 14px;
}
.fn-story-body p.fn-q strong,
.fn-story-body p.fn-q b{ font-weight:400; }
.fn-story-body p.fn-q + p{ margin-top:0; }
.fn-story-body p.fn-q:first-child{ margin-top:0; }

@media (max-width:700px){
  .fn-story-body p.fn-q{ font-size:19px; margin:28px 0 12px; }
}


/* ════════════════════════════════════════════════════════════════════════
   v5.6.0 — People I've Met: the long conversation
   A reading column with apparatus in the margin. Prose measure is untouched;
   everything added lives outside it.
   ════════════════════════════════════════════════════════════════════════ */

/* reading progress */
.fn-read-prog{ position:fixed; top:0; left:0; right:0; height:2px; z-index:70; pointer-events:none; }
.fn-read-prog span{ display:block; height:100%; width:0; background:var(--accent); transition:width .1s linear; }

/* sticky orientation bar — appears once the body starts */
.fn-orient{ position:fixed; top:0; left:0; right:0; z-index:60;
  background:color-mix(in srgb, var(--bg) 94%, transparent);
  backdrop-filter:blur(7px); border-bottom:1px solid var(--rule);
  transform:translateY(-100%); transition:transform .18s ease; }
.fn-orient.show{ transform:translateY(0); }
.fn-orient .in{ max-width:1180px; margin:0 auto; padding:9px 40px;
  display:flex; align-items:baseline; gap:14px; }
.fn-orient .nm{ font-family:var(--display); font-size:15px; color:var(--ink); }
.fn-orient .role,.fn-orient .sec{ font-family:var(--mono); font-size:9.5px;
  letter-spacing:.13em; text-transform:uppercase; color:var(--text-faint); }
.fn-orient .sec{ margin-left:auto; color:var(--accent); font-style:normal;
  max-width:42%; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; }

/* shell puts the rail beside the existing measure */
.fn-story--long .fn-story-shell{ max-width:1180px; margin:0 auto; padding:0 40px;
  display:grid; grid-template-columns:170px minmax(0,1fr); gap:58px; align-items:start; }
.fn-story--long .fn-story-shell .fn-story-body{ margin-left:0; margin-right:0; }

.fn-rail{ position:sticky; top:76px; }
.fn-rail-stamp{ display:inline-flex; align-items:center; gap:7px;
  font-family:var(--display); font-variant:small-caps; text-transform:lowercase;
  letter-spacing:.08em; font-weight:600; font-size:14px; color:var(--c-people,#C0397B); }
.fn-rail-stamp .g{ width:18px; height:18px; border-radius:5px; background:var(--c-people,#C0397B);
  display:inline-flex; align-items:center; justify-content:center; }
.fn-rail-stamp .g svg{ width:10px; height:10px; stroke:#EDEAE0; fill:none; stroke-width:1.8; }
.fn-rail dl{ margin-top:18px; font-family:var(--mono); font-size:10.5px; line-height:1.5; color:var(--text-faint); }
.fn-rail dt{ text-transform:uppercase; letter-spacing:.14em; font-size:9px; margin-top:12px; }
.fn-rail dd{ color:var(--text-light); font-variant-numeric:tabular-nums; }
.fn-rail-locus{ display:block; margin-top:20px; padding-top:12px; border-top:1px solid var(--rule);
  font-family:var(--mono); font-size:9.5px; letter-spacing:.1em; text-transform:uppercase;
  color:var(--accent); text-decoration:none; line-height:1.5; }
.fn-rail-locus:hover{ color:var(--accent-deep); }
.fn-rail-toc{ margin-top:24px; border-top:1px solid var(--rule); padding-top:13px; }
.fn-rail-toc .h{ font-family:var(--mono); font-size:9px; letter-spacing:.14em;
  text-transform:uppercase; color:var(--text-faint); margin-bottom:9px; }
.fn-rail-toc a{ display:block; font-family:var(--display); font-size:13px; line-height:1.34;
  color:var(--text-light); text-decoration:none; padding:5px 0; border-bottom:1px dotted var(--rule); }
.fn-rail-toc a:hover{ color:var(--accent); }
.fn-rail-toc a.on{ color:var(--ink); }
.fn-rail-toc a.on::before{ content:"\2014\00a0"; color:var(--accent); }

@media (max-width:1080px){
  .fn-story--long .fn-story-shell{ grid-template-columns:1fr; gap:0; padding:0; }
  .fn-rail{ display:none; }
  .fn-orient .role{ display:none; }
}


/* v5.6.2 — lexicon index: flex rows so pronunciations sit on their own line */
.lex-index li{ border-bottom:1px dotted var(--rule); line-height:1.4; padding:7px 0; }
.lex-index li a{ display:flex; align-items:baseline; justify-content:space-between; gap:14px;
  font-family:var(--display); font-size:16px; color:var(--ink); text-decoration:none; }
.lex-index li a:hover .w{ color:var(--accent); }
.lex-index li .w{ min-width:0; }
.lex-index li .p{ float:none; flex:none; font-family:var(--mono); font-size:9.5px;
  letter-spacing:.02em; color:var(--text-faint); white-space:nowrap; }


/* v5.7.0 — single word entry uses the lexicon spread, not a centred hero */
.lex-single{ padding-top:54px; }
.lex-single .lex-main .definition{ font-family:var(--serif); font-size:20px; line-height:1.6;
  color:var(--ink); max-width:33em; }
.lex-single .lex-main .definition p{ margin-bottom:.8em; }
.lex-single .etymology,.lex-single .notes,.lex-single .reading{ font-family:var(--serif);
  font-size:16px; line-height:1.6; color:var(--text-light);
  border-left:2px solid var(--rule); padding-left:16px; }
.lex-single .tags{ margin-top:28px; display:flex; flex-wrap:wrap; gap:9px; }
.lex-single .tags a{ font-family:var(--mono); font-size:10px; letter-spacing:.1em;
  text-transform:uppercase; color:var(--accent); border:1px solid var(--rule);
  border-radius:4px; padding:4px 9px; text-decoration:none; }
.lex-single .tags a:hover{ border-color:var(--accent); }
.lex-single .related-books-block{ margin-top:30px; }
.lex-single .section-label{ font-family:var(--serif); font-variant:small-caps;
  text-transform:lowercase; letter-spacing:.07em; font-weight:600; font-size:14px;
  color:var(--text-light); margin-bottom:12px; }

/* the nav/browse row spans full width under the spread */
.lex-single .lex-foot{ grid-column:1 / -1; margin-top:40px; padding-top:24px;
  border-top:1px solid var(--rule); }
.lex-single .word-nav{ display:flex; justify-content:space-between; gap:20px; }
.lex-single .word-nav a{ text-decoration:none; }
.lex-single .word-nav .label{ display:block; font-family:var(--mono); font-size:9.5px;
  letter-spacing:.13em; text-transform:uppercase; color:var(--text-faint); margin-bottom:4px; }
.lex-single .word-nav .adjacent-word{ font-family:var(--display); font-size:19px; color:var(--ink); }
.lex-single .word-nav .next{ text-align:right; }
.lex-single .home-buttons{ text-align:left; padding:32px 0 0; }
.lex-single .home-search{ max-width:none; margin:0; padding:20px 0 0; }


/* v5.7.1 — hairline before each question; the rule sits above the interviewer's turn */
.fn-story-body p.fn-q{
  border-top:1px solid var(--rule);
  padding-top:22px;
  margin-top:38px;
}
.fn-story-body p.fn-q:first-child{ border-top:none; padding-top:0; margin-top:0; }


/* ════════════════════════════════════════════════════════════════════════
   v5.8.0 — Single word entry: masthead lexicon page
   Word large and flush-left; pronunciation + part of speech beneath it.
   Definition leads, etymology a distinct register (italic), notes secondary.
   ════════════════════════════════════════════════════════════════════════ */
.wl-entry{ max-width:1040px; margin:0 auto; padding:46px 44px 80px; }

.wl-running{ display:flex; justify-content:space-between; align-items:baseline;
  border-bottom:1px solid var(--rule); padding-bottom:13px; margin-bottom:40px; }
.wl-running .l{ font-family:var(--display); font-variant:small-caps; text-transform:lowercase;
  letter-spacing:.06em; font-size:16px; color:var(--accent); }
.wl-running .r{ font-family:var(--mono); font-size:10px; letter-spacing:.16em;
  text-transform:uppercase; color:var(--text-faint); }

.wl-head{ border-bottom:1px solid var(--rule); padding-bottom:22px; margin-bottom:34px; }
.wl-word{ font-family:var(--display); font-weight:500; font-size:clamp(44px,6vw,72px);
  line-height:.9; letter-spacing:-.025em; color:var(--ink); margin:0; }
.wl-meta{ display:flex; gap:20px; align-items:baseline; margin-top:16px; }
.wl-meta .pron{ font-family:var(--mono); font-size:13px; color:var(--text-light); letter-spacing:.02em; }
.wl-meta .pos{ font-family:var(--display); font-style:italic; font-size:18px; color:var(--text-faint); }

.wl-body{ display:grid; grid-template-columns:minmax(0,1fr) 244px; gap:56px; align-items:start; }
.wl-main{ min-width:0; }

/* three tiers: definition leads, etymology a different register, notes secondary */
.wl-def{ font-family:var(--display); font-weight:400; font-size:25px; line-height:1.44;
  color:var(--ink); margin-bottom:38px; max-width:34em; }
.wl-def p{ margin-bottom:.7em; } .wl-def p:last-child{ margin-bottom:0; }
.wl-label{ font-family:var(--display); font-variant:small-caps; text-transform:lowercase;
  letter-spacing:.05em; font-weight:600; font-size:15px; color:var(--text-light); margin:0 0 10px; }
.wl-ety{ font-family:var(--display); font-style:italic; font-weight:400; font-size:21px;
  line-height:1.5; color:var(--body); margin-bottom:38px; max-width:34em; }
.wl-ety i,.wl-ety em{ font-style:normal; }
.wl-ety p{ margin-bottom:.6em; } .wl-ety p:last-child{ margin-bottom:0; }
.wl-notes{ font-family:var(--serif); font-size:16.5px; line-height:1.66; color:var(--text-light);
  margin-bottom:38px; max-width:34em; }
.wl-notes p{ margin-bottom:.7em; } .wl-notes p:last-child{ margin-bottom:0; }

.wl-tags{ display:flex; flex-wrap:wrap; gap:8px; margin-top:4px; }
.wl-tags a{ font-family:var(--mono); font-size:10px; letter-spacing:.1em; text-transform:uppercase;
  color:var(--accent); border:1px solid var(--rule); border-radius:4px; padding:4px 9px; text-decoration:none; }
.wl-tags a:hover{ border-color:var(--accent); }

/* rail: related words, big gap, related books */
.wl-rail{ min-width:0; }
.wl-block + .wl-block{ margin-top:44px; padding-top:36px; border-top:1px solid var(--rule); }
.wl-rail-h{ font-family:var(--mono); font-size:9.5px; letter-spacing:.14em; text-transform:uppercase;
  color:var(--text-faint); margin-bottom:12px; }
.wl-words a{ display:flex; justify-content:space-between; align-items:baseline; gap:12px;
  font-family:var(--display); font-size:17px; color:var(--ink); text-decoration:none;
  padding:6px 0; border-bottom:1px dotted var(--rule); }
.wl-words a:hover .w{ color:var(--accent); }
.wl-words a .p{ font-family:var(--mono); font-size:9.5px; color:var(--text-faint); white-space:nowrap; }
.wl-books a{ display:block; text-decoration:none; padding:8px 0; border-bottom:1px dotted var(--rule); }
.wl-books a .t{ display:block; font-family:var(--display); font-size:15.5px; line-height:1.2; color:var(--ink); }
.wl-books a .au{ display:block; font-family:var(--mono); font-size:10px; color:var(--text-faint); margin-top:2px; }
.wl-books a:hover .t{ color:var(--accent); }

/* footer spans full width */
.wl-foot{ grid-column:1 / -1; margin-top:46px; border-top:1px solid var(--rule); padding-top:24px; }
.wl-nav{ display:flex; justify-content:space-between; gap:20px; margin-bottom:26px; }
.wl-nav a{ text-decoration:none; }
.wl-nav .l{ display:block; font-family:var(--mono); font-size:9.5px; letter-spacing:.13em;
  text-transform:uppercase; color:var(--text-faint); margin-bottom:4px; }
.wl-nav .aw{ font-family:var(--display); font-size:19px; color:var(--ink); }
.wl-nav .next{ text-align:right; }
.wl-actions{ display:flex; align-items:center; gap:20px; flex-wrap:wrap; }
.wl-actions a{ font-family:var(--mono); font-size:12px; letter-spacing:.04em; color:var(--accent);
  text-decoration:none; border-bottom:1px solid transparent; padding-bottom:1px; }
.wl-actions a:hover{ border-bottom-color:currentColor; }
.wl-actions .sep{ color:var(--text-faint); }

@media (max-width:860px){
  .wl-entry{ padding:34px 22px 64px; }
  .wl-body{ grid-template-columns:1fr; gap:0; }
  .wl-rail{ margin-top:44px; padding-top:34px; border-top:1px solid var(--rule); }
}


/* ════════════════════════════════════════════════════════════════════════
   v5.9.0 — Wild Words landing (hero + drawers) and browse (left spine)
   ════════════════════════════════════════════════════════════════════════ */

/* ── LANDING ──
   v6.31.26: the hero is inverted. Today's word was 36px in a 300px sidebar,
   cut off mid-sentence, while an abstract headline held the wide column — the
   most attractive thing on the page was the smallest. The word now takes the
   main column at full size with the definition entire, and the rail carries
   the statement, the newest entries, and the two ways in. Drawer picks carry
   their glosses, because a bare word is a locked door. */
.lex-land{ max-width:1100px; margin:0 auto; padding:12px 44px 80px; }
.lex-hero{ display:grid; grid-template-columns:minmax(0,1fr) 268px; gap:64px; align-items:start;
  border-bottom:2px solid var(--ink); padding:14px 0 44px; margin-bottom:6px; }

/* the word */
.lex-hero .feat .k{ font-family:var(--mono); font-size:10px; letter-spacing:.18em;
  text-transform:uppercase; color:var(--text-faint); margin-bottom:16px; }
.lex-hero .feat .w{ display:block; font-family:var(--display); font-weight:500;
  font-size:clamp(52px,7.4vw,96px); line-height:.95; letter-spacing:-.02em;
  color:var(--ink); text-decoration:none; margin-bottom:6px; }
.lex-hero .feat .w:hover{ color:var(--accent); }
.lex-hero .feat .p{ font-family:var(--mono); font-size:11.5px; letter-spacing:.08em;
  color:var(--text-faint); margin:0 0 22px; }
.lex-hero .feat .d{ font-family:var(--serif); font-size:20px; line-height:1.6;
  color:var(--text); max-width:46ch; }
.lex-hero .feat .d p{ margin:0 0 14px; }
.lex-hero .feat .d p:last-child{ margin-bottom:0; }
.lex-hero .feat .more{ display:inline-block; margin-top:22px; font-family:var(--mono);
  font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; color:var(--accent);
  border-bottom:1px solid var(--rule); padding-bottom:3px; text-decoration:none; }
.lex-hero .feat .more:hover{ border-bottom-color:var(--accent); }
.lex-hero .feat .featured-loading{ font-family:var(--mono); font-size:11px; color:var(--text-faint); }

/* the rail */
.lex-hero .lead{ border-left:1px solid var(--rule); padding-left:28px; }
.lex-hero .lead .stmt{ font-family:var(--display); font-style:italic; font-size:17px;
  line-height:1.4; color:var(--text-light); margin:0 0 26px; padding-bottom:22px;
  border-bottom:1px solid var(--rule); }
.lex-hero .lead .h{ font-family:var(--mono); font-size:9.5px; letter-spacing:.16em;
  text-transform:uppercase; color:var(--text-faint); margin-bottom:12px; }
.lex-hero .lead a.n{ display:block; font-family:var(--display); font-size:17px;
  line-height:1.3; color:var(--ink); text-decoration:none; padding:6px 0; }
.lex-hero .lead a.n:hover{ color:var(--accent); }
.lex-hero .lead .find{ margin-top:26px; padding-top:20px; border-top:1px solid var(--rule); }
.lex-hero .lead .srch{ display:flex; align-items:center; border-bottom:1.5px solid var(--ink); }
.lex-hero .lead .srch input{ flex:1; background:transparent; border:none;
  font-family:var(--mono); font-size:12.5px; padding:7px 0; color:var(--ink); }
.lex-hero .lead .srch input:focus{ outline:none; }
.lex-hero .lead .srch input::placeholder{ color:var(--text-faint); }
.lex-hero .lead .links{ display:flex; align-items:baseline; gap:12px; margin-top:14px; }
.lex-hero .lead .links a{ font-family:var(--mono); font-size:10.5px; letter-spacing:.12em;
  text-transform:uppercase; color:var(--accent); text-decoration:none;
  border-bottom:1px solid transparent; padding-bottom:1px; }
.lex-hero .lead .links a:hover{ border-bottom-color:currentColor; }
.lex-hero .lead .links .sep{ color:var(--text-faint); }

/* the drawers */
/* v6.31.29 — the drawer is no longer one anchor. Each word links to itself;
   the category label and the count link to the category. The row-wide hover
   shift went with it: a whole row sliding when four different links live in
   it was promising one destination. */
.lex-drawers .drawer{ display:grid; grid-template-columns:150px 1fr auto; gap:24px;
  align-items:baseline; padding:22px 0; border-bottom:1px solid var(--rule); }
.lex-drawers .drawer .cat{ font-family:var(--mono); font-size:10px; letter-spacing:.14em;
  text-transform:uppercase; color:var(--accent); padding-top:5px;
  text-decoration:none; align-self:start; }
.lex-drawers .drawer .cat:hover{ color:var(--accent-deep); text-decoration:underline;
  text-underline-offset:3px; }
.lex-drawers .drawer .words{ display:flex; flex-direction:column; gap:10px; }
.lex-drawers .drawer .pick{ display:block; line-height:1.45; text-decoration:none;
  transition:padding-left .14s; }
.lex-drawers .drawer .pick:hover{ padding-left:6px; }
.lex-drawers .drawer .pick b{ font-family:var(--display); font-weight:500; font-size:21px;
  color:var(--ink); }
.lex-drawers .drawer .pick:hover b{ color:var(--accent); }
.lex-drawers .drawer .pick .g{ font-family:var(--serif); font-size:15px; color:var(--text-light); }
.lex-drawers .drawer .pick .g::before{ content:"\00a0\2014\00a0"; color:var(--text-faint); }
.lex-drawers .drawer .go{ font-family:var(--mono); font-size:11px; color:var(--text-faint);
  white-space:nowrap; padding-top:8px; text-decoration:none; }
.lex-drawers .drawer .go:hover{ color:var(--accent); }
.lex-drawers .drawer.is-az{ border-bottom:0; }

@media (max-width:860px){
  .lex-land{ padding:12px 20px 64px; }
  .lex-hero{ grid-template-columns:1fr; gap:32px; padding-bottom:34px; }
  .lex-hero .lead{ border-left:0; padding-left:0; border-top:1px solid var(--rule); padding-top:24px; }
  .lex-hero .feat .d{ font-size:18px; }
  .lex-drawers .drawer{ grid-template-columns:1fr; gap:12px; }
  .lex-drawers .drawer .go{ padding-top:0; }
}

/* ── BROWSE ── */
.wb{ max-width:1200px; margin:0 auto; padding:12px 44px 80px; }
.wb-top{ display:flex; align-items:baseline; gap:40px; border-bottom:2px solid var(--ink);
  padding-bottom:18px; margin-bottom:36px; }
.wb-top h2{ font-family:var(--display); font-weight:500; font-size:34px; letter-spacing:-.015em; flex:none; }
.wb-top .srch{ margin-left:auto; display:flex; align-items:center; border-bottom:1.5px solid var(--ink);
  width:280px; flex:none; }
.wb-top .srch input{ flex:1; background:transparent; border:none; font-family:var(--mono);
  font-size:13px; padding:8px 0; color:var(--ink); }
.wb-top .srch input:focus{ outline:none; }
.wb-top .srch input::placeholder{ color:var(--text-faint); }
.wb-body{ display:grid; grid-template-columns:64px 1fr; gap:44px; align-items:start; }
.wb-spine{ position:sticky; top:24px; display:flex; flex-direction:column; gap:1px; }
.wb-spine a{ font-family:var(--mono); font-size:13px; color:var(--text-light); padding:2px 0; letter-spacing:.05em; text-decoration:none; }
.wb-spine a:hover{ color:var(--accent); }
.wb-spine span{ font-family:var(--mono); font-size:13px; color:var(--rule); padding:2px 0; letter-spacing:.05em; }
.wb-band{ margin-bottom:36px; scroll-margin-top:20px; }
.wb-ltr{ font-family:var(--display); font-weight:500; font-size:30px; color:var(--ink);
  border-bottom:1px solid var(--rule); padding-bottom:6px; margin-bottom:14px; }
.wb-grid{ columns:2; column-gap:52px; }
.wb-grid a{ display:flex; justify-content:space-between; align-items:baseline; gap:12px;
  break-inside:avoid; padding:6px 0; border-bottom:1px dotted var(--rule); text-decoration:none; }
.wb-grid a .w{ font-family:var(--display); font-size:18px; color:var(--ink); }
.wb-grid a:hover .w{ color:var(--accent); }
.wb-grid a .p{ font-family:var(--mono); font-size:9.5px; color:var(--text-faint); white-space:nowrap; }

/* ── MOBILE ── */
@media (max-width:760px){
  .lex-land,.wb{ padding:12px 22px 60px; }
  .lex-hero{ grid-template-columns:1fr; gap:30px; padding-bottom:26px; }
  .lex-hero .feat{ border-left:none; border-top:1px solid var(--rule); padding-left:0; padding-top:22px; }
  .lex-drawers .drawer{ grid-template-columns:1fr; gap:6px; padding:16px 0; }
  .lex-drawers .drawer .cat{ padding-top:0; }
  .lex-drawers .drawer .go{ padding-top:2px; }
  .wb-top{ flex-direction:column; gap:16px; align-items:stretch; }
  .wb-top .srch{ width:100%; margin-left:0; }
  .wb-body{ grid-template-columns:1fr; gap:20px; }
  .wb-spine{ position:static; flex-direction:row; flex-wrap:wrap; gap:2px 12px;
    border-bottom:1px solid var(--rule); padding-bottom:14px; margin-bottom:8px; }
  .wb-grid{ columns:1; }
}


/* v5.9.1 — browse note + flat (newest) listing */
.wb-note{ font-family:var(--display); font-style:italic; font-size:18px; color:var(--text-light);
  margin:-20px 0 30px; }
.wb-flat .wb-grid{ columns:2; column-gap:52px; }
@media (max-width:760px){ .wb-flat .wb-grid{ columns:1; } }


/* ════════════════════════════════════════════════════════════════════════
   v6.0.0 — Home chrome: full-title wordmark, plain-text nav, no hero,
   filter aligned to the wordmark, two upright dice.
   ════════════════════════════════════════════════════════════════════════ */

/* wordmark now carries the whole title on one line */
.nav-wordmark{ font-family:var(--display); color:var(--ink); font-size:20px; font-weight:500;
  line-height:1.1; white-space:nowrap; position:relative; top:2px; }

/* nav: plain text links, no pills */
.nav-links{ display:flex; align-items:center; gap:24px; }
.nav-link{ font-family:var(--mono); font-size:11px; letter-spacing:.09em; text-transform:uppercase;
  color:var(--text-light); text-decoration:none; white-space:nowrap; transition:color .18s; }
.nav-link:hover{ color:var(--ink); }
.nav-link.is-active{ color:var(--ink); }


/* "All" lines up with "Field": clear the 24px bug + 11px logo gap */

/* dice: two, upright, no label */
#fn-dice .die{ width:21px; height:21px; }
#fn-dice .die1,#fn-dice .die2{ transform:none; }
#fn-dice button{ gap:6px; opacity:.5; }
#fn-dice button:hover{ opacity:1; }
#fn-dice button.rolling .die1{ transform:rotate(-360deg); }
#fn-dice button.rolling .die2{ transform:rotate(360deg); }

@media (max-width:900px){
  .nav-links{ display:none; }
  .nav-wordmark{ font-size:17px; white-space:normal; }
}


/* ── v6.0.1 — chrome corrections ── */

/* the nav needs its hairline back */
.site-nav{ border-bottom:1px solid var(--rule); }

/* Align "All" with "Field".
   .site-nav is padded 0 32px and centres a 1120 .nav-inner; "Field" then starts
   a further 35px in (24px bug + 11px logo gap). Mirror that exactly: an 1184 box
   (1120 + the 32px gutters) with 67px of left padding = 32 + 35. */
.fn-home-river .fn-filter{
  max-width:1184px;
  margin:0 auto;
  padding:15px 32px;
  justify-content:center;
  border-bottom:1px solid var(--rule);
}

/* active section underlined */
.nav-link.is-active{ color:var(--ink); font-weight:500; }

/* dice in iron-gall, not ink */
#fn-dice button{ color:var(--accent); opacity:1; }
#fn-dice button:hover{ color:var(--accent-deep); }




/* ════════════════════════════════════════════════════════════════════════
   v6.1.0 — River tiles: picture on a captioned tint panel.
   No kicker, no category chip. One line under each image: headline + deck.
   Words get an origin plate in the picture slot and "Read the Entry" below.
   ════════════════════════════════════════════════════════════════════════ */

/* image sits flush on its caption box */
.fn-river .fn-tile-img{ margin-bottom:0; border-radius:0; }
.fn-river .fn-tile-img::after{ border:0; }
.fn-river .fn-tile-img img{ border-radius:0; }

/* the caption panel */
.fn-tile-cap{
  display:block;
  background:var(--panel, #D3CFBD);
  border-top:1px solid var(--rule);
  padding:12px 14px;
  font-family:var(--mono); font-size:10.5px; letter-spacing:.09em;
  text-transform:uppercase; color:var(--text-light); line-height:1.55;
}
.fn-tile-cap b{ font-weight:500; color:var(--ink); letter-spacing:.08em; }
.fn-tile:hover .fn-tile-cap b{ color:var(--accent-deep); }
.fn-tile-cap .fn-tile-audio{ width:13px; height:13px; vertical-align:-2px; margin-right:6px; }
.fn-river .fn-tile[data-orient="landscape"] .fn-tile-cap,
.fn-river .fn-tile.is-wide .fn-tile-cap{ font-size:11.5px; }

/* word tile — the plate stands in for a photograph */
.fn-word-plate{
  display:flex; flex-direction:column; justify-content:center;
  background:var(--panel, #D3CFBD);
  padding:22px 24px; min-height:210px;
}
.fn-word-term{ display:block; font-family:var(--display); font-weight:500;
  font-size:clamp(26px,2.6vw,38px); letter-spacing:-.02em; line-height:1; color:var(--ink); }
.fn-word-say{ display:block; font-family:var(--mono); font-size:9.5px; letter-spacing:.08em;
  color:var(--text-light); margin-top:7px; }
.fn-word-from{ display:block; font-family:var(--display); font-style:italic; font-size:15.5px;
  line-height:1.35; color:var(--text-light); margin-top:14px;
  border-top:1px solid var(--rule); padding-top:12px; }
.fn-word-from b,.fn-word-from strong{ font-style:normal; font-weight:500; color:var(--ink); }
.fn-cap-read{ color:var(--accent); }
.fn-tile:hover .fn-cap-read{ color:var(--accent-deep); }

/* retire the old tile furniture */
.fn-river .fn-tile-kicker,
.fn-river .fn-tile-title,
.fn-river .fn-tile-sub,
.fn-word-rule,.fn-word-def,.fn-word-etym-label,.fn-word-etym{ display:none; }

@media (max-width:760px){
  .fn-word-plate{ min-height:170px; padding:18px 18px; }
  .fn-tile-cap{ font-size:10px; padding:11px 12px; }
}


/* v6.1.1 — the old .fn-tile-plate card (padding, border, radius, inset image)
   was still holding the photo off the edge. Strip it: the picture now runs
   full-bleed to the tile edge and meets its caption panel directly. */
.fn-river .fn-tile-plate{
  background:none; border:0; border-radius:0; padding:0;
  overflow:hidden; box-shadow:none;
}
.fn-river .fn-tile-plate:hover{
  border-color:transparent; transform:none; box-shadow:none;
}
.fn-river .fn-tile-plate .fn-tile-img{ margin:0; border-radius:0; }
.fn-river .fn-tile-plate .fn-tile-cap{ padding:12px 14px; }


/* v6.1.2 — polish */

/* Words landing: let the hero segment breathe above and below */
.lex-land{ padding-top:34px; }
.lex-hero{ padding-top:14px; padding-bottom:52px; margin-bottom:26px; }

/* Map card: the place and coordinates in the foot bar read iron-gall */
.fn-spec .fn-spec-foot .fn-spec-coord .pl,
.fn-spec .fn-spec-foot .fn-spec-coord .co{ color:var(--accent); }


/* ════════════════════════════════════════════════════════════════════════
   v6.1.3 — Map card photo: never crop.
   The last block in the cascade set object-fit:cover together with a
   max-width cap, so any image wider than the cap was squeezed into a
   squarer box and cropped (Charapotó). Restore the matted print: the
   picture scales to fit inside the mat at its true ratio, whole frame
   visible, mat taking up whatever is left over.
   ════════════════════════════════════════════════════════════════════════ */
/* ════════════════════════════════════════════════════════════════════════
   v6.1.7 — Map card photo: equal mat, no letterboxing.
   The bay must hug the picture exactly. If it stretches to the row height
   while the picture is capped by width, the surplus shows as letterboxing.
   So: the picture scales to fit inside its caps at its own natural ratio,
   the bay shrink-wraps it with an even --matpad on all four sides, and the
   bay does NOT stretch. The divider moves to the rail so it still runs the
   full height of the card.
   ════════════════════════════════════════════════════════════════════════ */
.fn-spec .fn-spec-split{ align-items:stretch; }

.fn-spec .fn-spec-left,
.fn-spec.fn-por .fn-spec-left{
  flex:0 0 auto;
  align-self:center;          /* never stretch — that is what letterboxes */
  width:auto; height:auto;
  padding:var(--matpad);
  box-sizing:content-box;     /* padding stays a true even margin */
  display:block;
  border-right:none;
  overflow:visible;
}
.fn-spec .fn-spec-left .fn-spec-photo,
.fn-spec .fn-spec-left .fn-spec-gallery{
  display:block;
  width:auto; height:auto;
  max-width:var(--bayw);
  max-height:calc(var(--railh) - (2 * var(--matpad)));
  aspect-ratio:auto;
  object-fit:contain;
}
.fn-spec .fn-spec-left .fn-spec-slide img,
.fn-spec .fn-spec-left .fn-spec-slide video{
  width:100%; height:100%; object-fit:contain;
}
/* divider now belongs to the rail so it spans the whole card */
.fn-spec .fn-spec-body{ border-left:1px solid var(--fs-rule); }

/* ════════════════════════════════════════════════════════════════════════
   v6.1.11 — Map card: even mat on all four sides.
   6.1.7 already mats the picture evenly, but the row height came from the
   data rail, so the bay floated inside a taller column and the leftover
   ground read as extra margin above and below. Take the rail out of flow:
   it now spans exactly the bay's height and its blurb scrolls if it
   overruns. Then raise the two picture caps, which were sized for the old
   rail-driven card, so the card keeps the footprint it had before.
   Card height stays under --cardmax at every viewport, so the map still
   reads above and below.
   ════════════════════════════════════════════════════════════════════════ */
.fn-spec .fn-spec-split{ position:relative; }
.fn-spec .fn-spec-left,
.fn-spec.fn-por .fn-spec-left{ align-self:flex-start; margin-right:var(--rail); }
.fn-spec .fn-spec-body{
  position:absolute; top:0; right:0; bottom:0;
  width:var(--rail); height:auto; max-height:none;
  overflow:hidden;
}
.fn-spec .fn-spec-rscroll{ flex:0 1 auto; min-height:0; overflow-y:auto; }

.fn-spec .fn-spec-left .fn-spec-photo,
.fn-spec .fn-spec-left .fn-spec-gallery{
  max-width:min(820px, calc(100vw - var(--rail) - 344px));
  max-height:min(600px, calc(100vh - 300px));
}

@media (max-width:760px){
  .fn-spec .fn-spec-left,
  .fn-spec.fn-por .fn-spec-left{ margin-right:0; }
  .fn-spec .fn-spec-body{
    position:static; width:100%; height:auto; overflow:visible;
  }
  .fn-spec .fn-spec-rscroll{ overflow:visible; }
  .fn-spec .fn-spec-left .fn-spec-photo,
  .fn-spec .fn-spec-left .fn-spec-gallery{ max-width:100%; max-height:52vh; }
}

/* ════════════════════════════════════════════════════════════════════════
   v6.1.14 — Map card: the nearest-pins block never flexes.
   The rail is position:absolute with overflow:hidden, so its height comes
   from the picture bay. Nearest-pins sized to its own content: a long title
   wrapped to two or three lines, the block grew, and on a short wide photo
   the last row ran past the bottom of the card and was clipped mid-line.
   Lock it. The label and the three rows get fixed heights, titles truncate
   rather than wrap, and the block holds one constant height whether it
   carries one pin or three. The blurb above it stays the only region that
   flexes — it already scrolls inside the capped card.
   ════════════════════════════════════════════════════════════════════════ */
.fn-spec{
  --near-row:26px;
  --near-pad:14px;
  --near-lab:18px;
  --nearh:calc((2 * var(--near-pad)) + var(--near-lab) + (3 * var(--near-row)));
}
.fn-spec .fn-spec-near{
  flex:none;
  height:var(--nearh);
  box-sizing:border-box;
  padding:var(--near-pad) 26px;
  justify-content:flex-start;
  overflow:hidden;
}
.fn-spec .fn-spec-near-l{ height:var(--near-lab); line-height:var(--near-lab); margin-bottom:0; }
.fn-spec .fn-spec-nrst{
  height:var(--near-row);
  padding:0;
  align-items:center;
  overflow:hidden;
}
/* title truncates; the category tag and the distance always stay visible */
.fn-spec .fn-spec-nrst .nm{
  display:flex; align-items:baseline; gap:8px; min-width:0;
  white-space:nowrap; overflow:hidden;
}
.fn-spec .fn-spec-nrst .nm .t{
  min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.fn-spec .fn-spec-nrst em{ margin-left:0; flex:none; }
.fn-spec .fn-spec-nrst .ds{ white-space:nowrap; }

@media (max-width:760px){
  .fn-spec .fn-spec-near{ height:auto; overflow:visible; }
  .fn-spec .fn-spec-nrst{ height:auto; padding:3px 0; }
}

/* ════════════════════════════════════════════════════════════════════════
   v6.1.15 — Map card: centred on the open map, +5% wide, +20% tall.
   The card was docked to the right edge at right:44px, which left it
   hanging off the side of the map. Centre it instead in the band the
   index does not occupy: left edge of the band at the index's right
   edge, right edge at the viewport, card centred between them. Vertical
   centring is unchanged (top:50% / translateY(-50%)).
   Picture caps raised in the 6.1.11 block above: 540 -> 590 wide,
   560 -> 670 tall, so the rail gets more room before the blurb scrolls.
   ════════════════════════════════════════════════════════════════════════ */
@media (min-width:761px){
  #fn-fcard{ --fn-band-l:276px; }   /* index: left 24 + width 252 */
  #fn-fcard.show{
    left:var(--fn-band-l);
    right:0;
    display:flex;
    justify-content:center;
    align-items:center;
  }
}

/* ════════════════════════════════════════════════════════════════════════
   v6.1.18 — Map card: optical lift.
   The card is centred by measurement — top:50% inside a .fn-map-page that
   is exactly 100vh - 64px tall — but it reads low. The shadow is offset
   28px downward with a 70px blur, so there is visual mass under the card
   and none above it, and a heavy object centred by measurement always sits
   low to the eye. Raise it by --fn-card-lift. That token is the dial.
   ════════════════════════════════════════════════════════════════════════ */
@media (min-width:761px){
  #fn-fcard{ --fn-card-lift:16px; }
  #fn-fcard.show{ transform:translateY(calc(-50% - var(--fn-card-lift))); }
}

/* ════════════════════════════════════════════════════════════════════════
   v6.1.19 — Nearest pins: category tag reads at pin strength.
   The tag already carries the pin's exact colour (inline from pinColor(),
   the same value that feeds --mk on the marker). It looked weaker because
   8.5px mono letterforms on paper carry far less ink than the same hex as
   a solid 30px block. Hue is untouched; weight and size do the work.
   ════════════════════════════════════════════════════════════════════════ */
.fn-spec .fn-spec-nrst em,
.fn-spec .fn-spec-nrst .tg{
  font-size:9.5px;
  font-weight:500;
  letter-spacing:.09em;
}

/* ════════════════════════════════════════════════════════════════════════
   v6.1.20 — Nearest pins: category tag darkened for readability.
   Readability wins over an exact match to the pin. The pin colour now
   arrives as --tag (set inline in fn-places.php) and is mixed toward the
   ink, so small type carries enough contrast on paper while keeping the
   category's hue. --tag-ink is the dial: 0% is the raw pin colour.
   ════════════════════════════════════════════════════════════════════════ */
.fn-spec .fn-spec-nrst em,
.fn-spec .fn-spec-nrst .tg{
  --tag-ink:34%;
  color:color-mix(in srgb, var(--tag, #5C544A) calc(100% - var(--tag-ink)), #221D17 var(--tag-ink));
}

/* ════════════════════════════════════════════════════════════════════════
   v6.2.0 — MY BOOKSHELF. The books landing becomes a reading register and
   the single book becomes an entry, both in the site's own voice —
   Newsreader / Literata / DM Mono, left-aligned ledger structure, hairline
   rules, no DM Sans, nothing on a centre axis. Namespaced .fnbk- so the
   retired book styles above stay inert rather than fighting these.
   ════════════════════════════════════════════════════════════════════════ */
.fnbk-page{ max-width:1120px; margin:0 auto; padding:64px 40px 96px; color:var(--fs-ink,#272320); font-family:var(--serif); }
/* v6.31.29 — three groups. My bookshelf + Index on the left, the two lists in
   their own group, the count on the right edge. The sorts are NOT here; they
   order the register and live directly above it. */
.fnbk-eyebrow{ display:grid; grid-template-columns:auto 1fr auto; align-items:baseline; gap:30px; font-family:var(--fs-mono); font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:var(--fs-inksoft,#5C544A); padding-bottom:12px; border-bottom:1px solid var(--fs-rule,#C6C1AE); }
.fnbk-lists{ justify-self:end; display:inline-flex; align-items:baseline; gap:10px; white-space:nowrap; }
.fnbk-lists a{ color:var(--fs-inksoft,#5C544A); text-decoration:none; }
.fnbk-lists a:hover{ color:var(--fs-ink,#272320); }
.fnbk-lists a.on{ color:var(--fs-ink,#272320); border-bottom:1px solid var(--fs-accent,#2F4655); }
.fnbk-lists b{ font-weight:400; color:var(--fs-faint,#9C927E); }
.fnbk-eyebrow .r{ color:var(--fs-faint,#8A8272); }

/* the slip */
.fnbk-slip{ padding:48px 0 42px; border-bottom:1px solid var(--fs-rule,#C6C1AE); }
.fnbk-slip-lab{ display:flex; justify-content:space-between; font-family:var(--fs-mono); font-size:10px; letter-spacing:.16em; text-transform:uppercase; color:var(--fs-faint,#8A8272); margin-bottom:14px; }
.fnbk-clear{ color:var(--fs-accent,#2F4655); text-decoration:none; }
.fnbk-sentence{ font-family:var(--display); font-weight:400; font-size:clamp(24px, 2.6vw, 33px); line-height:1.4; max-width:800px; }
.fnbk-sentence .t{ color:var(--fs-ink,#272320); }
.fnbk-sentence .ddw{ display:inline-block; position:relative; border-bottom:2px solid var(--fs-accent,#2F4655); }
.fnbk-dd{ -webkit-appearance:none; appearance:none; border:none; background:none; font-family:var(--display); font-style:italic; font-size:inherit; color:var(--fs-accent,#2F4655); padding:0 18px 0 3px; cursor:pointer; }
.fnbk-dd:focus{ outline:none; }
.fnbk-sentence .ar{ position:absolute; right:2px; top:50%; transform:translateY(-42%); font-size:14px; color:var(--fs-faint,#8A8272); pointer-events:none; }
.fnbk-found{ margin-top:16px; font-family:var(--fs-mono); font-size:11px; letter-spacing:.13em; text-transform:uppercase; color:var(--fs-inksoft,#5C544A); }

/* register columns */
.fnbk-cols{ display:grid; grid-template-columns:minmax(0,1fr) 264px; gap:80px; padding-top:12px; }
.fnbk-entry{ padding:44px 0 48px; border-bottom:1px solid var(--fs-rule,#C6C1AE); }
.fnbk-app{ display:flex; justify-content:space-between; gap:16px; font-family:var(--fs-mono); font-size:10px; letter-spacing:.13em; text-transform:uppercase; color:var(--fs-faint,#8A8272); margin-bottom:20px; }
.fnbk-body{ display:flex; gap:36px; align-items:flex-start; }
.fnbk-m{ flex:1; min-width:0; }
.fnbk-title{ font-family:var(--display); font-weight:500; font-size:29px; line-height:1.16; margin:0 0 5px; }
.fnbk-title a{ color:var(--fs-ink,#272320); text-decoration:none; }
.fnbk-title a:hover{ color:var(--fs-accent,#2F4655); }
.fnbk-by{ font-family:var(--serif); font-size:15px; color:var(--fs-inksoft,#5C544A); margin:0 0 22px; }
.fnbk-take{ font-family:var(--serif); font-size:16.5px; line-height:1.7; color:var(--fs-ink,#272320); margin:0 0 22px; max-width:64ch; }
.fnbk-foot{ font-family:var(--fs-mono); font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; }
.fnbk-foot a{ color:var(--fs-accent,#2F4655); text-decoration:none; font-weight:500; }
.fnbk-cover{ flex:none; width:86px; display:block; border:1px solid rgba(35,32,27,.28); box-shadow:0 2px 5px rgba(28,22,12,.14),0 8px 18px rgba(28,22,12,.14); }
.fnbk-cover img{ display:block; width:100%; height:auto; }
.fnbk-more{ padding:30px 0; font-family:var(--serif); font-style:italic; font-size:15px; color:var(--fs-inksoft,#5C544A); }
.fnbk-none{ padding:44px 0; }
.fnbk-none .t{ font-family:var(--display); font-size:22px; margin-bottom:6px; }
.fnbk-none .s{ font-family:var(--serif); font-style:italic; font-size:15px; color:var(--fs-inksoft,#5C544A); }

/* rail */
.fnbk-rail{ border-left:1px solid var(--fs-rule,#C6C1AE); padding-left:32px; min-width:0; overflow-wrap:anywhere; }
.fnbk-rsec{ margin-bottom:48px; }
.fnbk-rlab{ font-family:var(--fs-mono); font-size:10px; letter-spacing:.16em; text-transform:uppercase; color:var(--fs-faint,#8A8272); margin-bottom:14px; }
/* v6.31.29 — the book ENTRY page's title block. These sat inside the range of
   landing-only rail rules removed here and were collateral damage in v6.31.27;
   restored verbatim from 6.31.26. */
.fnbk-head{ padding:48px 0 0; }
.fnbk-h1{ font-family:var(--display); font-weight:400; font-size:clamp(32px, 3.6vw, 48px); line-height:1.12; margin:0 0 20px; letter-spacing:-.005em; max-width:26ch; }
.fnbk-h1app{ font-family:var(--fs-mono); font-size:12px; letter-spacing:.1em; color:var(--fs-inksoft,#5C544A); padding-bottom:28px; border-bottom:1px solid var(--fs-rule,#C6C1AE); }
.fnbk-h1app .dot{ color:var(--fs-faint,#8A8272); padding:0 8px; }
.fnbk-cols-single{ padding-top:52px; }
.fnbk-review p{ font-family:var(--serif); font-size:18px; line-height:1.72; margin:0 0 1.1em; max-width:64ch; }
.fnbk-review > p:first-child::first-letter{ font-family:var(--display); font-size:52px; line-height:.9; float:left; padding:5px 10px 0 0; }
.fnbk-review img{ max-width:220px; height:auto; }
.fnbk-cp{ margin-top:52px; }
.fnbk-cp-lab{ font-family:var(--fs-mono); font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:var(--fs-inksoft,#5C544A); margin-bottom:20px; }
.fnbk-q{ border-left:2px solid var(--fs-accent,#2F4655); padding:2px 0 2px 24px; margin:0 0 30px; max-width:60ch; }
.fnbk-q p{ font-family:var(--serif); font-style:italic; font-size:17px; line-height:1.6; color:var(--fs-ink,#272320); margin:0 0 8px; }
.fnbk-q .pg{ font-family:var(--fs-mono); font-size:10px; letter-spacing:.12em; color:var(--fs-faint,#8A8272); }
.fnbk-pills{ margin-top:44px; }
.fnbk-pill{ display:inline-block; font-family:var(--fs-mono); font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; color:var(--fs-inksoft,#5C544A); border:1px solid var(--fs-rule,#C6C1AE); border-radius:3px; padding:5px 11px; margin:0 8px 8px 0; text-decoration:none; }
.fnbk-pill:hover{ color:var(--fs-accent,#2F4655); border-color:var(--fs-accent,#2F4655); }
.fnbk-backmatter{ margin-top:52px; padding-top:16px; border-top:1px solid var(--fs-rule,#C6C1AE); font-family:var(--serif); font-size:13.5px; font-style:italic; color:var(--fs-faint,#8A8272); }
.fnbk-backmatter a{ color:var(--fs-inksoft,#5C544A); }
.fnbk-bcov{ display:block; width:150px; border:1px solid rgba(35,32,27,.28); box-shadow:0 2px 5px rgba(28,22,12,.14),0 10px 24px rgba(28,22,12,.16); margin-bottom:38px; }
.fnbk-bcov img{ display:block; width:100%; height:auto; }
.fnbk-relbk{ display:block; padding:9px 0; border-bottom:1px dotted var(--fs-rule,#C6C1AE); text-decoration:none; }
.fnbk-relbk .t{ display:block; font-family:var(--display); font-size:16px; color:var(--fs-ink,#272320); line-height:1.25; }
.fnbk-relbk .a{ display:block; font-family:var(--fs-mono); font-size:11px; color:var(--fs-faint,#8A8272); margin-top:3px; }
.fnbk-relbk:hover .t{ color:var(--fs-accent,#2F4655); }
.fnbk-relwd{ display:block; padding:7px 0; border-bottom:1px dotted var(--fs-rule,#C6C1AE); text-decoration:none; }
.fnbk-relwd .w{ font-family:var(--display); font-size:16px; color:var(--fs-ink,#272320); }
.fnbk-relwd:hover .w{ color:var(--fs-accent,#2F4655); }
.fnbk-maplink{ display:block; font-family:var(--fs-mono); font-size:11px; letter-spacing:.1em; color:var(--fs-inksoft,#5C544A); text-decoration:none; line-height:1.9; }
.fnbk-maplink .go{ color:var(--fs-accent,#2F4655); font-weight:500; text-transform:uppercase; letter-spacing:.14em; font-size:10.5px; }

@media (max-width:900px){
  .fnbk-cols{ grid-template-columns:1fr; gap:40px; }
  .fnbk-rail{ border-left:none; padding-left:0; border-top:1px solid var(--fs-rule,#C6C1AE); padding-top:32px; }
  .fnbk-page{ padding:36px 20px 64px; }
}

/* ════════════════════════════════════════════════════════════════════════
   v6.3.0 — THE RIVER, OPTIMIZED. Books ride the river; the word plate
   leads with a nugget and names what's behind the door; a rare full-span
   specimen gives the mosaic its big moment; captions carry the place; the
   dice announce themselves once and then rest.
   ════════════════════════════════════════════════════════════════════════ */

/* word plate — definition first, one italic line of etymology, then the pointer */
.fn-tile-word .fn-word-def{ display:block; font-family:var(--serif); font-size:15.5px; line-height:1.55; color:var(--ink); margin:14px 0 0; }
.fn-tile-word .fn-word-etym{ display:block; font-family:var(--serif); font-style:italic; font-size:13.5px; line-height:1.5; color:var(--text-light); margin:11px 0 0; }
.fn-tile-word .fn-word-from{ display:none; } /* retired: etymology-as-body */
.fn-tile-word .fn-word-say{ display:block; padding-bottom:13px; border-bottom:1px solid var(--rule); }
.fn-tile-word .fn-word-more{ display:flex; justify-content:space-between; align-items:baseline; gap:12px; font-family:var(--mono); font-size:9.5px; letter-spacing:.14em; text-transform:uppercase; color:var(--text-lighter); border-top:1px solid var(--rule); margin-top:18px; padding-top:12px; }
.fn-tile-word .fn-word-more .go{ color:var(--accent-deep, var(--accent)); font-weight:500; white-space:nowrap; }
.fn-tile-word:hover .fn-word-more .go{ color:var(--ink); }

/* book tile — the register verdict as a river nugget */
.fn-tile-book{ display:block; text-decoration:none; color:inherit; }
.fn-book-plate{ display:flex; gap:20px; align-items:flex-start; border:1px solid var(--rule); background:var(--bg-warm); padding:22px; }
.fn-book-plate .cv{ flex:none; width:74px; border:1px solid rgba(35,32,27,.28); box-shadow:0 2px 5px rgba(28,22,12,.15),0 7px 14px rgba(28,22,12,.13); }
.fn-book-plate .cv img{ display:block; width:100%; height:auto; }
.fn-book-plate .bd{ min-width:0; }
.fn-book-plate .kick{ display:block; font-family:var(--mono); font-size:10px; letter-spacing:.16em; text-transform:uppercase; color:var(--text-light); margin-bottom:9px; }
.fn-book-plate .bt{ display:block; font-family:var(--display, 'Newsreader', serif); font-weight:500; font-size:19px; line-height:1.2; margin-bottom:3px; color:var(--ink); }
.fn-book-plate .ba{ display:block; font-family:var(--serif); font-size:13.5px; color:var(--text-light); margin-bottom:10px; }
.fn-book-plate .verdict{ display:block; font-family:var(--serif); font-size:14.5px; line-height:1.55; color:var(--ink); }
.fn-tile-book:hover .bt{ color:var(--accent-deep, var(--accent)); }

/* captions carry the place */
.fn-tile-cap.has-pl{ display:flex; justify-content:space-between; align-items:baseline; gap:12px; }
.fn-tile-cap.has-pl .l{ min-width:0; }
.fn-cap-pl{ font-style:normal; font-family:var(--mono); font-size:9.5px; letter-spacing:.14em; text-transform:uppercase; color:var(--text-light); white-space:nowrap; flex:none; }

/* the specimen — the river's full-span moment */
.fn-tile-spec .fn-tile-cap b{ font-size:1.25em; }
@media (max-width:760px){ .fn-tile-spec{ grid-column:auto !important; } }

/* the dice announce themselves once, then rest */
#fn-dice .hint{ opacity:.85; }
#fn-dice.rested .hint{ opacity:0; }
#fn-dice.rested button:hover .hint{ opacity:.85; }

/* ════════════════════════════════════════════════════════════════════════
   v6.3.2 — River legibility. Captions get a proper hed/dek format: bold
   hed and the place share the top row, the dek drops to its own
   sentence-case line, and a person's location never prints twice. The
   newsletter names itself. The word plate holds back the etymology and
   teases kin BY NAME — "Kin: scaur · crag" pulls; "4 books" never did.
   ════════════════════════════════════════════════════════════════════════ */
.fn-tile-cap.fn-cap2{ display:block; }
.fn-tile-cap.fn-cap2 .row{ display:flex; justify-content:space-between; align-items:baseline; gap:14px; }
.fn-tile-cap.fn-cap2 .hed{ min-width:0; }
.fn-tile-cap.fn-cap2 .dek{ display:block; margin-top:7px; font-weight:400; text-transform:none; letter-spacing:.03em; font-size:11.5px; line-height:1.55; color:var(--text-light); }

.fn-news-lab{ display:block; font-family:var(--mono); font-size:10px; letter-spacing:.18em; text-transform:uppercase; color:var(--ink); margin-bottom:10px; }

.fn-tile-word .fn-word-etym{ display:none; } /* etymology moved behind the door */
.fn-tile-word .fn-word-more .plus{ min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

/* v6.3.4 — word plate: eyebrow names the hoard; the footer is one plain
   door — "Etymology + Related Words" — no inventory beside it. */
.fn-tile-word .fn-word-kick{ display:block; font-family:var(--mono); font-size:10px; letter-spacing:.16em; text-transform:uppercase; color:var(--text-light); margin-bottom:12px; }
.fn-tile-word .fn-word-more{ justify-content:flex-start; }

/* ════════════════════════════════════════════════════════════════════════
   v6.3.5 — Caption row fix. A long place at white-space:nowrap + flex:none
   crushed the hed to min-content — one word per line, with the place
   overrunning it. The hed owns the row: it gets the floor, and the place
   wraps right-aligned inside a capped share instead of never wrapping.
   ════════════════════════════════════════════════════════════════════════ */
.fn-tile-cap.fn-cap2 .row .hed{ flex:1 1 auto; min-width:0; }
.fn-tile-cap.fn-cap2 .row .fn-cap-pl{ flex:0 1 auto; max-width:38%; white-space:normal; text-align:right; line-height:1.5; }

/* v6.3.9 — the place: a half-step under the hed, regular weight, and held
   to one line. Wrapping was the 38% cap fighting the hed's size; a wider
   share at the smaller size fits "New Bedford, Massachusetts" whole. */
.fn-tile-cap.fn-cap2 .row .fn-cap-pl{
  font-size:10px; font-weight:400; letter-spacing:.07em;
  white-space:nowrap; max-width:54%; text-align:right;
}

/* ════════════════════════════════════════════════════════════════════════
   v6.3.11 — Two fixes.
   1. The specimen can't open the river. A full-span tile in the first slot
      is a wall before a reader has any footing; it needs tiles above it to
      read as a change of pace. Barred from the opening row (ti >= 3 in
      fnAssignSpans), still free below.
   2. (The Join treatment described here was removed in v6.31.22 along with
      the rest of the membership apparatus.)
   ════════════════════════════════════════════════════════════════════════ */

/* ════════════════════════════════════════════════════════════════════════
   v6.4.0 — YOUR LIST on the bookshelf. Two reader-side states in the
   register row's footer, opposite "Read the entry": the decision point,
   where someone has just finished the take. The rail carries the list
   itself — count reports, three titles remind, the rest are one click
   away — with a quiet Read line beneath it. Second person throughout, so
   "Your list" never contests "My bookshelf" in the eyebrow.
   ════════════════════════════════════════════════════════════════════════ */

/* row footer becomes a two-sided bar */
.fnbk-foot{ display:flex; justify-content:space-between; align-items:center; gap:20px; flex-wrap:wrap; }
.fnbk-acts{ display:inline-flex; gap:18px; align-items:center; }
.fnbk-act{ display:inline-flex; align-items:center; gap:7px; background:none; border:0; padding:0; cursor:pointer;
  font-family:var(--mono); font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; color:var(--text-lighter);
  transition:color .18s; }
.fnbk-act .ic{ display:inline-flex; width:12px; height:13px; }
.fnbk-act .ic svg{ width:100%; height:100%; display:block; }
.fnbk-act:hover{ color:var(--accent-deep, var(--accent)); }
.fnbk-act[hidden]{ display:none; }
.fnbk-act.on{ color:var(--accent-deep, var(--accent)); font-weight:500; }
.fnbk-act.done{ color:var(--text-light); font-weight:500; }
.fnbk-act:disabled{ opacity:.45; cursor:default; }

/* entry page: stacked under the cover, in the rail's apparatus column */
.fnbk-acts-entry{ display:flex; flex-direction:column; gap:10px; align-items:stretch; margin:14px 0 38px; width:150px; }
.fnbk-acts-entry .fnbk-act{ justify-content:center; border:1px solid var(--accent-deep, var(--accent));
  color:var(--accent-deep, var(--accent)); border-radius:3px; padding:9px 0; font-weight:500; }
.fnbk-acts-entry .fnbk-act.fnbk-read{ border-color:var(--rule); color:var(--text-light); }
.fnbk-acts-entry .fnbk-act.on{ background:var(--accent-deep, var(--accent)); color:var(--bg, #DEDACB); }
.fnbk-acts-entry .fnbk-act.done{ border-color:var(--text-light); color:var(--text-light); }

/* the list block — first thing in the rail */

/* the filtered-register banner */

@media (max-width:900px){
  .fnbk-acts-entry{ width:100%; }
}

/* ════════════════════════════════════════════════════════════════════════
   v6.5.0 — THE ME PAGE. The 1970 photograph opens beside the lede, so a
   reader meets a person before a résumé; the CV runs in a column with the
   working pictures in the rail; the kicker is pulled out of its sentence
   and set as the thesis it is. Captions keep the river's two-slot grammar
   — line left, credit right — with a drawn camera rather than an emoji.
   ════════════════════════════════════════════════════════════════════════ */
.fnme-page{ max-width:1120px; margin:0 auto; padding:56px 40px 96px; font-family:var(--serif); color:var(--ink); }
.fnme-eyebrow{ display:flex; justify-content:space-between; align-items:baseline;
  font-family:var(--mono); font-size:11px; letter-spacing:.16em; text-transform:uppercase;
  color:var(--text-light); padding-bottom:12px; border-bottom:1px solid var(--rule); }
.fnme-eyebrow .r{ color:var(--text-lighter); }

.fnme-open{ display:grid; grid-template-columns:340px minmax(0,1fr); gap:64px; align-items:start; padding:56px 0 0; }
.fnme-lede{ font-family:var(--display, 'Newsreader', serif); font-weight:400;
  font-size:clamp(26px, 2.9vw, 36px); line-height:1.34; margin:0; max-width:22ch; }
.fnme-lede .nm{ font-weight:500; }
.fnme-lede-sub{ font-family:var(--serif); font-size:17px; line-height:1.7;
  color:var(--text-light); margin:26px 0 0; max-width:46ch; }

.fnme-fig{ margin:0; }
.fnme-fig img{ display:block; width:100%; height:auto; border:1px solid rgba(35,32,27,.2); }
.fnme-cap{ display:flex; justify-content:space-between; align-items:baseline; gap:14px;
  font-family:var(--mono); font-size:9.5px; letter-spacing:.13em; text-transform:uppercase;
  color:var(--text-light); background:var(--panel, #D3CFBD);
  border-top:1px solid var(--rule); padding:11px 13px; }
.fnme-cap .pl{ color:var(--text-lighter); white-space:nowrap; display:inline-flex; align-items:center; gap:6px; }
.fnme-cam{ width:13px; height:10.5px; flex:none; opacity:.85; }
.fnme-cap-cont{ border-top:0; padding-top:0; }
.fnme-cap .cap-line{ display:block; font-family:var(--serif); font-size:12.5px; line-height:1.5;
  letter-spacing:.02em; text-transform:none; color:var(--text-light); margin-top:6px; }

.fnme-cols{ display:grid; grid-template-columns:minmax(0,1fr) 300px; gap:72px; padding-top:72px; align-items:start; }
.fnme-prose p{ font-family:var(--serif); font-size:18px; line-height:1.74; margin:0 0 1.15em; max-width:60ch; }
.fnme-prose p:last-child{ margin-bottom:0; }

.fnme-kicker{ margin:64px 0 0; padding:34px 0 0; border-top:1px solid var(--rule); }
.fnme-kicker .lab{ font-family:var(--mono); font-size:10px; letter-spacing:.18em;
  text-transform:uppercase; color:var(--text-lighter); margin-bottom:16px; }
.fnme-kicker .line{ font-family:var(--display, 'Newsreader', serif); font-style:italic;
  font-size:clamp(24px, 2.6vw, 32px); line-height:1.32; max-width:22ch; color:var(--ink); }

.fnme-whatis{ margin-top:64px; padding-top:34px; border-top:1px solid var(--rule); }
.fnme-whatis p{ font-family:var(--serif); font-size:18px; line-height:1.74; max-width:62ch; margin:0; }
.fnme-whatis .bon{ font-family:var(--display, 'Newsreader', serif); font-style:italic;
  font-size:22px; margin-top:22px; color:var(--accent-deep, var(--accent)); }

.fnme-strip{ display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:34px; margin-top:72px; }
.fnme-strip .wide{ grid-column:1 / -1; }

.fnme-contact{ margin-top:80px; padding-top:22px; border-top:1px solid var(--rule);
  display:flex; justify-content:space-between; align-items:baseline; gap:20px; flex-wrap:wrap;
  font-family:var(--mono); font-size:11px; letter-spacing:.14em; text-transform:uppercase; color:var(--text-light); }
.fnme-contact a{ color:var(--accent-deep, var(--accent)); font-weight:500; text-decoration:none; }

@media (max-width:900px){
  .fnme-page{ padding:36px 20px 64px; }
  .fnme-open{ grid-template-columns:1fr; gap:34px; padding-top:36px; }
  .fnme-cols{ grid-template-columns:1fr; gap:44px; padding-top:48px; }
  .fnme-strip{ grid-template-columns:1fr; margin-top:48px; }
  .fnme-rail .fnme-fig{ max-width:420px; }
}

/* v6.5.1 — Me page contact form. Paper, hairlines, mono labels; the
   honeypot is positioned out of the layout rather than display:none,
   because some bots skip hidden fields but not off-screen ones. */
.fnme-contact{ margin-top:80px; padding-top:22px; border-top:1px solid var(--rule); display:block; }
.fnme-contact-lab{ font-family:var(--mono); font-size:11px; letter-spacing:.16em;
  text-transform:uppercase; color:var(--text-light); margin-bottom:22px; }

.fnme-notice{ font-family:var(--serif); font-size:15px; line-height:1.6; padding:13px 16px;
  border:1px solid var(--rule); background:var(--bg-warm); margin-bottom:22px; max-width:62ch; }
.fnme-notice.is-ok{ border-color:var(--accent-deep, var(--accent)); color:var(--accent-deep, var(--accent)); }
.fnme-notice.is-err{ color:var(--ink); }

.fnme-form{ max-width:620px; }
.fnme-hp{ position:absolute; left:-9999px; top:auto; width:1px; height:1px; overflow:hidden; }
.fnme-row{ display:grid; grid-template-columns:1fr 1fr; gap:20px; }
.fnme-field{ display:block; margin-bottom:20px; }
.fnme-field > span{ display:block; font-family:var(--mono); font-size:10px; letter-spacing:.16em;
  text-transform:uppercase; color:var(--text-lighter); margin-bottom:7px; }
.fnme-field input, .fnme-field textarea{
  display:block; width:100%; box-sizing:border-box;
  font-family:var(--serif); font-size:16px; line-height:1.6; color:var(--ink);
  background:var(--bg-warm); border:1px solid var(--rule); border-radius:3px;
  padding:11px 13px; transition:border-color .18s; }
.fnme-field textarea{ resize:vertical; min-height:150px; }
.fnme-field input:focus, .fnme-field textarea:focus{
  outline:none; border-color:var(--accent-deep, var(--accent)); }

.fnme-send{ display:flex; align-items:center; gap:18px; flex-wrap:wrap; margin-top:4px; }
.fnme-send button{ font-family:var(--mono); font-size:10.5px; letter-spacing:.16em;
  text-transform:uppercase; font-weight:500; color:var(--bg, #DEDACB);
  background:var(--accent-deep, var(--accent)); border:1px solid var(--accent-deep, var(--accent));
  border-radius:3px; padding:11px 26px; cursor:pointer; transition:opacity .18s; }
.fnme-send button:hover{ opacity:.88; }
.fnme-send-note{ font-family:var(--serif); font-style:italic; font-size:13.5px; color:var(--text-lighter); }

@media (max-width:900px){
  .fnme-row{ grid-template-columns:1fr; gap:0; }
}

/* v6.5.2 — the pulled-out kicker is gone: it repeated the same sentence
   forty words after the paragraph that introduces it. Rules kept for the
   whatis block, which now carries the section break on its own. */
.fnme-kicker{ display:none; }

/* v6.5.4 — the name takes the iron-gall accent. Safe at display size:
   every other accent element on the site is 10-16px, so nothing at 36px
   reads as a link. Pairs with "Bon appetit!", which already closes the
   page in the same ink. */
.fnme-lede .nm{ color:var(--accent-deep, var(--accent)); }

/* ════════════════════════════════════════════════════════════════════════
   v6.6.1 — Book entry bottom matter, matched to the Story>Book treatment
   The colophon read as one small wholly-italic line with an undecorated
   link; the story version is roman at 16px with the Bookshop link
   underlined, and it reads better. Title keeps its italic. Additive.
   ════════════════════════════════════════════════════════════════════════ */
.fnbk-backmatter{ font-style:normal; font-size:16px; line-height:1.6; }
.fnbk-backmatter em{ font-style:italic; }
.fnbk-backmatter a{ color:var(--accent-deep); text-decoration:underline; text-underline-offset:2px; }
.fnbk-backmatter a:hover{ color:var(--accent); }

/* The locus now sits under the colophon in the main column, using the story
   template's .fn-story-locus. Left-aligned here rather than centered, since
   the book entry's main column is a left-aligned reading measure. */
.fnbk-take-main .fn-story-locus{ justify-content:flex-start; margin:30px 0 8px; }


/* ════════════════════════════════════════════════════════════════════════
   v6.6.2 — Author and publisher link out of the apparatus line
   Quiet by default so the mono line doesn't turn into a row of links;
   the underline arrives on hover. Additive.
   ════════════════════════════════════════════════════════════════════════ */
.fnbk-h1app a{ color:inherit; text-decoration:none; border-bottom:1px solid var(--fs-rule,#C6C1AE); padding-bottom:1px; }
.fnbk-h1app a:hover{ color:var(--accent-deep); border-bottom-color:var(--accent-deep); }


/* ════════════════════════════════════════════════════════════════════════
   v6.6.5 — Book term archives on the register design
   ════════════════════════════════════════════════════════════════════════ */
.fnbk-taxhead{ padding:38px 0 6px; }
.fnbk-taxh1{ font-family:var(--display); font-weight:500; font-size:clamp(32px,3.6vw,48px); line-height:1.05; margin:0; color:var(--fs-ink,#272320); }
.fnbk-taxdesc{ font-family:var(--serif); font-size:16px; line-height:1.6; color:var(--fs-inksoft,#5C544A); max-width:56ch; margin:14px 0 0; }
.fnbk-taxcount{ font-family:var(--fs-mono); font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:var(--fs-faint,#8A8272); margin:16px 0 0; }
.fnbk-main-full{ padding-top:12px; }
.fnbk-taxpag{ display:flex; justify-content:space-between; padding:34px 0 0; font-family:var(--fs-mono); font-size:11px; letter-spacing:.14em; text-transform:uppercase; }
.fnbk-taxpag a{ color:var(--accent-deep); text-decoration:none; }
.fnbk-taxpag a:hover{ color:var(--accent); }


/* v6.6.9 — register pager */
.fnbk-pager{ display:flex; justify-content:space-between; align-items:baseline; gap:20px; padding:38px 0 0; font-family:var(--fs-mono); font-size:11px; letter-spacing:.14em; text-transform:uppercase; color:var(--fs-faint,#8A8272); }
.fnbk-pager a{ color:var(--accent-deep); text-decoration:none; }
.fnbk-pager a:hover{ color:var(--accent); }
.fnbk-pager .c{ color:var(--fs-faint,#8A8272); }


/* ════════════════════════════════════════════════════════════════════════
   v6.7.0 — Covers as legitimate thumbnails
   86px in a register row and 150px in the entry rail read as favicons next
   to a cover that's often the best thing a book has. Bookshop's list rows
   run the cover at roughly an eighth of the content width; these land in
   the same place. Still thumbnails, just not apologetic ones. Additive —
   the size declarations below simply come later than the originals.
   ════════════════════════════════════════════════════════════════════════ */
.fnbk-cover{ width:132px; }
.fnbk-bcov{ width:220px; }

@media (max-width: 900px){
  .fnbk-cover{ width:104px; }
  .fnbk-bcov{ width:180px; }
}


/* ════════════════════════════════════════════════════════════════════════
   v6.7.2 — Colophon links on their own line; register rows measured alike
   ════════════════════════════════════════════════════════════════════════ */
.fnbk-links{ display:block; margin-top:10px; font-style:normal; }
.fnbk-links .sep{ padding:0 8px; color:var(--fs-faint,#8A8272); }

/* The term archives ran their rows at the full 1040px because there's no rail
   there, while the landing runs them at ~696px inside the grid. Same markup,
   two different measures — which is why the Want to Read controls sat in a
   different place on each page, since .fnbk-foot is space-between. Matching
   the measure standardises the rows by construction instead of patching the
   foot on one page and not the other. */
.fnbk-main-full{ max-width:696px; }


/* ════════════════════════════════════════════════════════════════════════
   v6.8.0 — The index at /books/index/
   ════════════════════════════════════════════════════════════════════════ */
.fnbk-views{ margin-left:18px; }
.fnbk-views a{ color:var(--fs-soft,#5C544A); text-decoration:none; }
.fnbk-views a:hover{ color:var(--accent-deep); }
.fnbk-views .on{ color:var(--fs-ink,#272320); border-bottom:1px solid var(--fs-ink,#272320); padding-bottom:2px; }
.fnbk-views .sep{ color:var(--fs-rule,#C6C1AE); padding:0 8px; }

.fnx-page{ max-width:1120px; margin:0 auto; padding:56px 40px 140px; color:var(--fs-ink,#272320); font-family:var(--serif); }
.fnx-eyebrow{ display:flex; justify-content:space-between; align-items:baseline; font-family:var(--fs-mono); font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:var(--fs-inksoft,#5C544A); border-bottom:1px solid var(--fs-rule,#C6C1AE); padding-bottom:12px; margin-bottom:40px; }
.fnx-views a{ color:var(--fs-inksoft,#5C544A); text-decoration:none; }
.fnx-views a:hover{ color:var(--accent-deep); }
.fnx-views .on{ color:var(--fs-ink,#272320); border-bottom:1px solid var(--fs-ink,#272320); padding-bottom:2px; }
.fnx-views .sep{ color:var(--fs-rule,#C6C1AE); padding:0 8px; }

.fnx-h1{ font-family:var(--display); font-weight:500; font-size:clamp(34px,4vw,46px); line-height:1.04; letter-spacing:-.01em; margin:0 0 8px; }
.fnx-sub{ color:var(--fs-faint,#8A8272); font-size:17px; margin:0 0 30px; }

.fnx-sorter{ display:flex; align-items:baseline; gap:20px; border-bottom:1px solid var(--fs-rule,#C6C1AE); padding-bottom:12px; margin-bottom:46px; }
.fnx-lab{ font-family:var(--fs-mono); font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:var(--fs-faint,#8A8272); }
.fnx-sbtn{ background:none; border:0; padding:0; cursor:pointer; color:var(--fs-inksoft,#5C544A); font-family:var(--fs-mono); font-size:11px; letter-spacing:.16em; text-transform:uppercase; }
.fnx-sbtn:hover{ color:var(--accent-deep); }
.fnx-sbtn[aria-pressed="true"]{ color:var(--fs-ink,#272320); border-bottom:1px solid var(--fs-ink,#272320); padding-bottom:2px; }

.fnx-half{ margin:0 0 72px; }
.fnx-hlab{ display:flex; justify-content:space-between; font-family:var(--fs-mono); font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:var(--fs-faint,#8A8272); border-bottom:1px solid var(--fs-rule,#C6C1AE); padding-bottom:9px; margin-bottom:8px; }
.fnx-grid{ display:grid; grid-template-columns:74px minmax(0,1fr); gap:0 72px; align-items:start; }
.fnx-rail{ position:sticky; top:24px; display:flex; flex-direction:column; text-align:right; font-family:var(--fs-mono); font-size:11px; letter-spacing:.06em; padding-top:26px; }
.fnx-railhead{ display:flex; flex-direction:column; padding-bottom:12px; margin-bottom:10px; border-bottom:1px solid var(--fs-rule,#C6C1AE); }
.fnx-railkeys{ display:flex; flex-direction:column; }
.fnx-lk{ color:var(--fs-inksoft,#5C544A); text-decoration:none; padding:2.5px 0; line-height:1.15; }
.fnx-lk:hover{ color:var(--accent-deep); }
.fnx-lk.off{ color:var(--fs-rule,#C6C1AE); }
.fnx-lk.top{ color:var(--fs-faint,#8A8272); padding:3px 0; }
.fnx-rail.gen{ font-size:10px; letter-spacing:.1em; text-transform:uppercase; }
.fnx-rail.gen .fnx-railkeys .fnx-lk{ padding:7px 0; line-height:1.28; }

.fnx-stack{ padding-top:6px; }
.fnx-ltr{ font-family:var(--fs-mono); font-size:11px; letter-spacing:.18em; text-transform:uppercase; color:var(--fs-faint,#8A8272); margin:26px 0 10px; padding-bottom:6px; border-bottom:1px solid var(--fs-rule,#C6C1AE); }
.fnx-stack .fnx-ltr:first-child{ margin-top:8px; }
.fnx-row{ display:flex; justify-content:space-between; align-items:baseline; gap:44px; padding:14px 0; border-bottom:1px dotted var(--fs-rule,#C6C1AE); }
.fnx-pcell{ flex:1 1 auto; min-width:0; }
.fnx-pri{ display:block; color:var(--fs-ink,#272320); text-decoration:none; font-size:19px; line-height:1.34; }
.fnx-pri:hover{ color:var(--accent-deep); text-decoration:underline; text-underline-offset:3px; }
.fnx-sec{ flex:0 0 auto; color:var(--fs-inksoft,#5C544A); font-size:15.5px; font-style:italic; white-space:nowrap; }

@media (max-width: 760px){
  .fnx-page{ padding:34px 20px 90px; }
  .fnx-grid{ grid-template-columns:58px minmax(0,1fr); gap:0 30px; }
  .fnx-row{ gap:18px; }
  .fnx-pri{ font-size:17px; }
  .fnx-sec{ white-space:normal; text-align:right; font-size:14px; }
}


/* v6.8.1 — My bookshelf as the way back; full word in the rail head */
.fnbk-home, .fnx-home{ color:inherit; text-decoration:none; border-bottom:1px solid transparent; }
.fnbk-home:hover, .fnx-home:hover{ color:var(--accent-deep); border-bottom-color:var(--accent-deep); }
.fnx-railhead{ font-size:10px; letter-spacing:.08em; }
.fnx-r{ color:var(--fs-faint,#8A8272); }


/* ════════════════════════════════════════════════════════════════════════
   v6.8.2 — Commonplace passages read as quotations from the book
   The left rule is the web's generic "set-off text" mark — it says pullquote
   or callout as readily as quotation, so a passage could be mistaken for a
   snippet of somebody's review. A hanging open quote and a closing one say
   quotation and nothing else, and the reference gets weight enough to name
   the source rather than whisper it. Overrides the v6.2 rule treatment.
   ════════════════════════════════════════════════════════════════════════ */
.fnbk-q{ position:relative; border-left:0; padding:0 0 0 46px; margin:0 0 38px; max-width:62ch; }
.fnbk-q::before{
  content:"\201C";
  position:absolute; left:0; top:-14px;
  font-family:var(--display); font-style:normal; font-weight:500;
  font-size:64px; line-height:1; color:var(--fs-rule,#C6C1AE);
}
.fnbk-q p{ margin:0 0 12px; }
.fnbk-q p:last-of-type::after{
  content:"\201D";
  font-family:var(--display); font-style:normal;
  font-size:26px; line-height:0; vertical-align:-4px;
  color:var(--fs-rule,#C6C1AE); margin-left:3px;
}
.fnbk-q .pg{
  font-family:var(--fs-mono); font-size:11px; letter-spacing:.12em;
  text-transform:uppercase; color:var(--fs-inksoft,#5C544A);
}
.fnbk-q .pg .from{ color:var(--fs-ink,#272320); }
.fnbk-q .pg .dot{ color:var(--fs-rule,#C6C1AE); padding:0 8px; }

@media (max-width: 760px){
  .fnbk-q{ padding-left:34px; }
  .fnbk-q::before{ font-size:50px; top:-10px; }
}


/* v6.8.3 — colophon on three lines: title, citation, links */
.fnbk-bm-title{ display:block; }
.fnbk-bm-meta{ display:block; margin-top:2px; }


/* ════════════════════════════════════════════════════════════════════════
   v6.8.4 — Plain quote marks, set inline
   The oversized hanging mark was doing decoration when all that was needed
   was punctuation. Marks now sit directly against the text, bold, at the
   size of the passage. "From the book" comes off the reference line.
   ════════════════════════════════════════════════════════════════════════ */
.fnbk-q{ padding-left:24px; }
.fnbk-q::before{ content:none; }
.fnbk-q p:first-of-type::before{
  content:"\201C"; font-weight:500; font-style:normal; color:var(--fs-ink,#272320);
}
.fnbk-q p:last-of-type::after{
  content:"\201D"; font-weight:500; font-style:normal; font-size:inherit;
  line-height:inherit; vertical-align:baseline; margin-left:1px;
  color:var(--fs-ink,#272320);
}
.fnbk-q .pg .dot{ display:none; }

@media (max-width: 760px){
  .fnbk-q{ padding-left:18px; }
}


/* v6.8.5 — space above the survey-map block on book entries. It sat too close
   under the colophon links. Interior padding is unchanged. */
.fnbk-take-main .fn-story-locus{ margin:64px 0 8px; }


/* v6.8.6 — colophon links: iron gall alone, never underlined. Hover weights
   them instead, which reads as a state change without adding a rule. */
.fnbk-backmatter a, .fnbk-links a{
  color:var(--accent-deep); text-decoration:none; font-weight:400;
}
.fnbk-backmatter a:hover, .fnbk-links a:hover{
  color:var(--accent-deep); text-decoration:none; font-weight:700;
}


/* v6.8.8 — the colophon's title steps above its own metadata. Both sat at the
   same size in the same faint grey, so the citation read as one undifferentiated
   line. Title takes the softer ink a size up; publisher, year, and pages stay
   faint and drop a size. */
.fnbk-bm-title{ font-size:17.5px; color:var(--fs-inksoft,#5C544A); }
.fnbk-bm-meta{ font-size:15px; color:var(--fs-faint,#8A8272); margin-top:4px; }


/* v6.8.9 — the links sit lower and quieter. They were the same size as the
   citation above them, so the buy link read as loud as the author's name. */
.fnbk-links{ margin-top:20px; font-size:14px; }


/* ════════════════════════════════════════════════════════════════════════
   v6.9.0 — Spreads: publisher-supplied interiors on a book entry
   Full column width, generous space between plates, credit under each and a
   courtesy line closing the run. A photo book at thumbnail size isn't shown.
   ════════════════════════════════════════════════════════════════════════ */
.fnbk-spreads{ margin:56px 0 0; }
.fnbk-sp-lab{ font-family:var(--fs-mono); font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:var(--fs-inksoft,#5C544A); margin-bottom:22px; }
.fnbk-sp{ margin:0 0 34px; }
.fnbk-sp a{ display:block; }
.fnbk-sp img{ display:block; width:100%; height:auto; border:1px solid rgba(35,32,27,.18); box-shadow:0 2px 5px rgba(28,22,12,.10),0 10px 26px rgba(28,22,12,.12); }
.fnbk-sp figcaption{ font-family:var(--fs-mono); font-size:10.5px; letter-spacing:.06em; line-height:1.5; color:var(--fs-faint,#8A8272); margin-top:9px; }
.fnbk-sp-credit{ font-family:var(--fs-mono); font-size:10.5px; letter-spacing:.12em; text-transform:uppercase; color:var(--fs-faint,#8A8272); border-top:1px solid var(--fs-rule,#C6C1AE); padding-top:12px; margin-top:6px; }


/* ════════════════════════════════════════════════════════════════════════
   v6.9.3 — Word entries: links visible, etymology set the right way round
   ════════════════════════════════════════════════════════════════════════ */

/* Nothing on a word entry said "link". Iron gall, weighting on hover, matching
   the book colophon. */
.wl-def a, .wl-ety a, .wl-notes a{
  color:var(--accent-deep); text-decoration:none; font-weight:400;
}
.wl-def a:hover, .wl-ety a:hover, .wl-notes a:hover{
  color:var(--accent-deep); font-weight:700;
}

/* The etymology block was italic throughout with <em> flipped upright, so the
   English connectives leaned and the foreign forms stood straight — backwards
   from every dictionary. Roman block, italics where they belong, and a size
   down so the definition clearly leads. */
.wl-ety{ font-style:normal; font-size:19px; }
.wl-ety i, .wl-ety em{ font-style:italic; }


/* v6.9.4 — Notes measures the same as Etymology. Both were max-width:34em, but
   em scales with font-size, so 34em at 19px is 646px and 34em at 16.5px is
   561px — the same rule produced two different columns. Pinned to one figure. */
.wl-ety{ max-width:646px; }
.wl-notes{ max-width:646px; }


/* ════════════════════════════════════════════════════════════════════════
   v6.9.5 — Anchor jumps clear the sticky header
   The nav is position:sticky at 64px tall, so jumping to a letter put the band
   directly under it and sheared the letter in half. scroll-margin-top moves the
   browser's landing point down by the header plus a little air; it affects only
   where a jump stops, not the layout.
   ════════════════════════════════════════════════════════════════════════ */
.wb-band{ scroll-margin-top:96px; }
.fnx-ltr, .fnx-half, #fnx-top{ scroll-margin-top:96px; }

@media (max-width: 760px){
  .wb-band{ scroll-margin-top:84px; }
  .fnx-ltr, .fnx-half, #fnx-top{ scroll-margin-top:84px; }
}


/* ════════════════════════════════════════════════════════════════════════
   v6.9.6 — Book review drop cap
   The old rule was a float at 52px with line-height .9 and 5px of top padding.
   Body lines are 18px x 1.72 = 31px, so a two-line sink needs roughly 62px of
   type; at 52 the letter floated in a hole it didn't fill, its cap-top sitting
   below the first line's and its baseline above the second's. Where the browser
   supports initial-letter it now does the sinking itself, which gets the optical
   alignment right by measuring the actual font rather than guessing. The float
   stays as the fallback, retuned.
   ════════════════════════════════════════════════════════════════════════ */
.fnbk-review > p:first-child::first-letter{
  font-family:var(--display); font-weight:400; color:var(--fs-ink,#272320);
  font-size:62px; line-height:1; float:left; padding:2px 9px 0 0;
}

@supports (initial-letter: 2) or (-webkit-initial-letter: 2) {
  .fnbk-review > p:first-child::first-letter{
    float:none; padding:0; margin-right:9px;
    font-size:inherit; line-height:inherit;
    -webkit-initial-letter:2; initial-letter:2;
  }
}


/* v6.9.7 — the cap goes back to regular weight. v6.9.6 added font-weight:500
   while retuning the size; the original inherited 400 from the paragraph, and
   at 62px the heavier cut reads as a different voice from the text it opens. */
.fnbk-review > p:first-child::first-letter{ font-weight:400; }


/* ════════════════════════════════════════════════════════════════════════
   v6.10.0 — Notes is its own unit on a word entry
   Definition and Etymology answer what the word means and where it came from;
   Notes is a different kind of thing entirely — a study, a fact, the word in
   use. A hairline sets it apart and the label carries more weight than the
   Etymology label above it, so the break reads as intentional.
   ════════════════════════════════════════════════════════════════════════ */
.wl-label-notes{
  border-top:1px solid var(--rule, #C6C1AE);
  padding-top:30px;
  margin-top:46px;
  font-weight:700;
  color:var(--ink, #272320);
  max-width:646px;
}


/* ════════════════════════════════════════════════════════════════════════
   v6.10.3 — Autolinks get their own colour back
   v6.9.3 added .wl-def a / .wl-ety a / .wl-notes a in iron gall with no
   underline, to make an external link visible. Same specificity as
   a.word-autolink but later in the file, so it also clobbered the autolink
   treatment that already existed — words lost their yellow and their
   underline, and iron gall against near-black body text reads as body text.
   External links keep iron gall; autolinks go back to the section colours.
   ════════════════════════════════════════════════════════════════════════ */
.wl-def a.word-autolink, .wl-ety a.word-autolink, .wl-notes a.word-autolink{
  color:var(--yellow);
  text-decoration:underline;
  text-decoration-color:rgba(47,70,85,.45);
  text-underline-offset:2px;
  font-weight:400;
}
.wl-def a.word-autolink:hover, .wl-ety a.word-autolink:hover, .wl-notes a.word-autolink:hover{
  text-decoration-color:var(--yellow);
}
.wl-def a.book-autolink, .wl-ety a.book-autolink, .wl-notes a.book-autolink{
  color:var(--green);
  text-decoration:underline;
  text-decoration-color:rgba(47,70,85,.45);
  text-underline-offset:2px;
  font-weight:400;
}
.wl-def a.book-autolink:hover, .wl-ety a.book-autolink:hover, .wl-notes a.book-autolink:hover{
  text-decoration-color:var(--green);
}


/* ════════════════════════════════════════════════════════════════════════
   v6.10.4 — Links inside a book review look like links
   Nothing styled .fnbk-review a, so a linked title rendered as body text.
   Colour can't carry it here: --green, --yellow and --accent all resolve to
   the same iron gall #2F4655 since the palette was consolidated, and iron
   gall against near-black serif is not a difference a reader will notice.
   The underline does the work, matching .fn-story-body a, which is the
   established in-prose treatment on the site.
   ════════════════════════════════════════════════════════════════════════ */
.fnbk-review a,
.fnbk-take a,
.fnbk-q a,
.fnbk-sp figcaption a{
  color:var(--accent-deep);
  text-decoration:underline;
  text-decoration-color:rgba(47,70,85,.45);
  text-underline-offset:2px;
}
.fnbk-review a:hover,
.fnbk-take a:hover,
.fnbk-q a:hover,
.fnbk-sp figcaption a:hover{ text-decoration-color:var(--accent-deep); }


/* v6.12.0 — shelf state on a book entry. Quiet: it's a note to the reader about
   where you stand with the book, not a badge. */
.fnbk-shelf{
  font-family:var(--fs-mono); font-size:10.5px; letter-spacing:.14em;
  text-transform:uppercase; color:var(--fs-faint,#8A8272); margin-top:10px;
}


/* ════════════════════════════════════════════════════════════════════════
   v6.15.0 — The survey card, arriving from a book entry
   The reader saw the cover, the author and the take one click ago. Repeating
   them is why the map read as redundant. In this state the book collapses to
   an identity strip, the place takes the headline, and the neighbours take
   the space the blurb had — the one question a pin answers that an entry
   page can't.
   ════════════════════════════════════════════════════════════════════════ */

.fn-spec-placehead{
  display:flex; align-items:baseline; justify-content:space-between; gap:20px;
  border-top:1px solid var(--fs-rule,#C6C1AE); padding-top:18px; margin-bottom:4px;
}
.fn-spec-placehead .pl{
  font-family:var(--display); font-size:clamp(22px,2.4vw,30px); font-weight:500;
  line-height:1.12; color:var(--fs-ink,#272320);
}
.fn-spec-placehead .co{
  font-family:var(--fs-mono); font-size:12px; letter-spacing:.06em;
  color:var(--fs-inksoft,#5C544A); white-space:nowrap;
}

@media (max-width: 760px){
  .fn-spec-placehead .pl{ font-size:22px; }
}


/* v6.20.0 — the arrived card's cover has to obey its narrower column.
   Portrait covers are sized by height, so the image's width follows its aspect
   ratio and sailed 90px past the column edge into the text. Measured on the live
   card before and after: +90px overflow becomes -20px, inside the padding. */


/* ════════════════════════════════════════════════════════════════════════
   v6.20.1 — the arrived card's data block has to live inside the card
   The card body is a fixed-height flex column. The place headline plus the
   neighbour list overran it and spilled under the footer — measured at 9px
   past the body and 29px past the footer's top edge. Making the block a
   shrinkable flex child that scrolls its own overflow brings that to 0.
   The headline is tightened and the list is back to three so the scroll
   rarely has anything to do.
   ════════════════════════════════════════════════════════════════════════ */


/* v6.20.2 — the arrived card's place headline and list now live in the scroll
   region, so they need its spacing rather than the data strip's. The rule above
   the headline stands in for the border the strip used to provide. */


/* ════════════════════════════════════════════════════════════════════════
   v6.21.0 — stop constraining the arrived card
   The survey card is fixed-height by design: .fn-spec-body is height:var(--bayh)
   so a photograph and its note sit in a stable frame. The arrived state adds a
   headline and a list to that frame, and three versions of mine tried to fit
   them inside it — shrinking type, cutting the list, moving containers, adding
   scrollbars. All of it treating a height that didn't need defending.
   The card grows instead. The mobile rules already do this; this is the same
   move, applied to a state that has more to say. Selectors carry the extra
   class so they beat the .fn-spec.fn-por height rules further up the file.
   ════════════════════════════════════════════════════════════════════════ */


/* v6.22.0 — the arrived-card state is gone, and with it the map link on book
   entries. The link promised nearby books and returned the nearest pins of any
   layer, on coordinates that are regional approximations for a third of the
   shelf. Books stay on the map; the door from the entry closes. */

/* ════════════════════════════════════════════════════════════════════════
   v6.23.0 — the card with no photograph

   .fn-spec-nomedia was emitted but never styled. With no photograph the
   picture bay collapsed, and since v6.1.11 the bay sets the card height and
   the rail is absolute, so the rail was clipped and ran under the footer.
   No photograph now means no split at all: one column at rail width, the
   head in the rail, and the place and coordinates moved out of the foot
   (too narrow to centre them there) into the data block.

   (The index half of 6.23.0 — rows as switches — was replaced in 6.24.0.)
   ════════════════════════════════════════════════════════════════════════ */

.fn-spec.fn-spec-nomedia{ width:var(--rail); }
.fn-spec.fn-spec-nomedia .fn-spec-split{
  display:block; position:static; max-height:calc(var(--cardmax) - 86px);
}
.fn-spec.fn-spec-nomedia .fn-spec-body{
  position:static; width:100%; height:auto;
  min-height:260px; max-height:calc(var(--cardmax) - 86px);
  border-left:none; display:flex; flex-direction:column; overflow:hidden;
}
.fn-spec.fn-spec-nomedia .fn-spec-rhead{ flex:none; padding:22px 26px 12px; }
.fn-spec.fn-spec-nomedia .fn-spec-rscroll{
  flex:0 1 auto; min-height:0; overflow-y:auto; padding:0 26px 18px;
}
.fn-spec.fn-spec-nomedia .fn-spec-rdata{ flex:none; margin-top:auto; }
.fn-spec.fn-spec-nomedia .fn-spec-near{ padding-left:26px; padding-right:26px; }
.fn-spec.fn-spec-nomedia .fn-spec-rdata .fn-spec-coord{
  border-top:1px solid rgba(35,32,27,.30); border-bottom:none;
  padding:12px 26px; font-size:11px;
}
.fn-spec.fn-spec-nomedia .fn-spec-rdata .fn-spec-coord .pl,
.fn-spec.fn-spec-nomedia .fn-spec-rdata .fn-spec-coord .co{ color:var(--fs-inksoft); }
/* the foot loses its centred coordinates here, so the tagline gets the room */
.fn-spec.fn-spec-nomedia .fn-spec-foot .lft{
  min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}

@media (max-width:760px){
  .fn-spec.fn-spec-nomedia{ width:100%; }
  .fn-spec.fn-spec-nomedia .fn-spec-split{ max-height:none; }
  .fn-spec.fn-spec-nomedia .fn-spec-body{
    height:auto; max-height:none; min-height:0; overflow:visible;
  }
  .fn-spec.fn-spec-nomedia .fn-spec-rscroll{ overflow:visible; }
}

/* ════════════════════════════════════════════════════════════════════════
   v6.24.0 — Field Survey: Invert.
   The rows go back to what they always did: from the all-on state the first
   click narrows to that layer, after which clicks add and remove. What was
   missing was subtraction, and the state line supplies it. Whenever the map
   is showing less than everything, a line appears under the header naming
   what is on, with Invert to flip the selection and All to reset. Coffee,
   then Invert, is the map without coffee. It generalises: any selection can
   be flipped, so "everything but my own pictures" is the same two clicks.
   The 6.23.0 index rules (rows as switches, the Only control) are removed —
   that control is gone from the markup.
   ════════════════════════════════════════════════════════════════════════ */
.fn-survey-index .fn-si-state{
  display:flex; align-items:center; gap:8px;
  padding:8px 15px;
  border-bottom:1px solid var(--fs-rule);
  background:rgba(47,70,85,.06);
}
.fn-survey-index .fn-si-state button{
  flex:1 1 0; min-width:0; cursor:pointer; text-align:center;
  font-family:var(--fs-mono); font-size:9px; letter-spacing:.12em; text-transform:uppercase;
  background:var(--fs-paper); color:var(--fs-accent);
  border:1px solid var(--fs-rule); border-radius:4px; padding:4px 7px;
}
.fn-survey-index .fn-si-state button:hover{ border-color:var(--fs-accent); }
.fn-survey-index.collapsed .fn-si-state{ display:none; }

/* ════════════════════════════════════════════════════════════════════════
   v6.25.0 — Field Survey state bar: the controls, and nothing else.
   The bar used to lead with a running description ("Coffee only · 1043 of
   2468"). The rows already say which layers are on, and at 252px the line
   truncated to "104…" anyway. Invert and All become equal-width peers, the
   same shape as the cluster control further down the panel.
   ════════════════════════════════════════════════════════════════════════ */
.fn-survey-index .fn-si-state{ padding:9px 15px; }

/* ════════════════════════════════════════════════════════════════════════
   v6.29.0 — <hr> in body copy.
   Nothing in the theme styled hr, so a rule in a story, an interview, or a
   book take fell through to the browser default: border-style inset, which
   paints the top edge in the given colour and the bottom edge in white. That
   white lower edge is the second line under every divider. The default margin
   is half a line, so the next paragraph sits right on top of it as well.
   One hairline, the same --rule as every other divider on the site, with real
   air beneath it. hr + * loses its own top margin so the space below the rule
   is exactly the 30px set here rather than whatever the next element brings.
   ════════════════════════════════════════════════════════════════════════ */
.fn-story-body hr,
.fnbk-review hr,
.fnbk-take hr,
.wl-body hr{
  height:0;
  padding:0;
  border:0;
  border-top:1px solid var(--rule);
  background:none;
  margin:38px 0 30px;
  clear:both;
}
.fn-story-body hr + *,
.fnbk-review hr + *,
.fnbk-take hr + *,
.wl-body hr + *{ margin-top:0; }

/* ════════════════════════════════════════════════════════════════════════
   v6.30.0 — the sign you arrived for.
   A pulse lasts about a second, which isn't long enough to answer "which one
   of these is the thing I clicked." The ring stays until the reader moves the
   map. Paper first, then ink, so the ring reads against a dark sign and a
   light one alike.
   ════════════════════════════════════════════════════════════════════════ */
.fn-mk.fn-mk-focus{ z-index:10000 !important; }
.fn-mk.fn-mk-focus .fn-mk-disc{
  box-shadow:0 0 0 3px var(--fs-paper,#DEDACB),
             0 0 0 5px var(--fs-accent,#2F4655),
             0 6px 16px rgba(34,29,23,.28);
  transform:translateY(-1px) scale(1.06);
}

/* ════════════════════════════════════════════════════════════════════════
   v6.31.0 — the gallery module.
   Settled over five rounds: the picture inside a 15px mount, a running head
   above it, the progress as the rule dividing picture from label, and the
   label beneath. Nothing sits on the picture. Full screen is a flex column,
   so the label takes the height its note needs and the picture gets the rest.
   The mount width comes from FN_GAL_BORDER via --fngal-bw.
   ════════════════════════════════════════════════════════════════════════ */
.fngal{
  --fngal-bw:15px;
  position:relative; background:var(--bg); border:1px solid var(--rule);
  overflow:hidden; outline:none; margin:34px 0;
}
.fngal-view{
  position:relative; overflow:hidden;
  height:78vh; min-height:420px; max-height:840px; background:var(--bg-warm);
}
.fngal-track{ display:flex; height:100%; will-change:transform;
  transition:transform .5s cubic-bezier(.22,.61,.36,1); }
.fngal-track.drag{ transition:none; }
.fngal-panel{ flex:0 0 100%; height:100%; padding:var(--fngal-bw); background:var(--bg-warm); }
.fngal-panel img{
  display:block; width:100%; height:100%; object-fit:contain;
  margin:0; max-width:none; user-select:none; -webkit-user-drag:none;
}
.fngal-panel.fill img{ object-fit:cover; }

/* the rule between picture and label IS the progress */
.fngal-bar{ display:flex; gap:2px; background:var(--bg); }
.fngal-bar button{ flex:1 1 0; height:2px; border:0; padding:0; cursor:pointer;
  background:var(--rule); }
.fngal-bar button.on{ background:var(--accent-deep); }
.fngal-bar button:hover{ background:var(--text-light); }

/* running head */
.fngal-appar{
  display:flex; align-items:center; gap:16px; padding:10px 26px;
  border-bottom:1px solid var(--rule); background:var(--bg);
}
.fngal-kick{ font-family:var(--mono); font-size:10px;
  letter-spacing:.16em; text-transform:uppercase; color:var(--text-light); }
.fngal-count{ margin-left:auto; font-family:var(--mono);
  font-size:10.5px; letter-spacing:.12em; color:var(--text-faint);
  font-variant-numeric:tabular-nums; }
.fngal-count b{ color:var(--text); font-weight:500; }
.fngal-btns{ display:flex; gap:6px; }
.fngal-btn{
  font-family:var(--mono); font-size:10px; letter-spacing:.12em;
  text-transform:uppercase; background:var(--bg); border:1px solid var(--rule);
  color:var(--text-light); padding:5px 9px; cursor:pointer;
  display:flex; align-items:center; border-radius:0;
}
.fngal-btn:hover{ border-color:var(--accent-deep); color:var(--accent-deep); }
.fngal-btn[disabled]{ opacity:.3; cursor:default; }
.fngal-btn svg{ width:13px; height:13px; fill:none; stroke:currentColor; stroke-width:1.7; }

/* label */
.fngal-label{
  background:var(--bg); display:grid; grid-template-columns:150px 1fr;
  gap:28px; padding:22px 26px 40px; min-height:176px;
}
.fngal-l{ border-right:1px solid var(--rule); padding-right:22px; }
.fngal-date{ font-family:var(--display); font-size:26px;
  font-weight:500; line-height:1; }
.fngal-med{ font-family:var(--mono); font-size:10px;
  letter-spacing:.13em; text-transform:uppercase; color:var(--text-faint); margin-top:8px; }
.fngal-cr{ font-family:var(--mono); font-size:9.5px;
  letter-spacing:.1em; color:var(--text-faint); margin-top:16px; }
.fngal-ttl{ font-family:var(--display); font-size:21px;
  font-weight:500; line-height:1.26; margin-bottom:9px; }
.fngal-txt{ font-size:15.5px; line-height:1.62; max-width:76ch; }
.fngal-txt p{ margin:0 0 10px; }
.fngal-txt p:last-child{ margin-bottom:0; }

/* full screen: the picture takes whatever the apparatus and label don't need,
   so a long note never crowds the foot of the screen */
.fngal:fullscreen, .fngal.fngal-fakefs{
  border:0; margin:0; background:var(--bg);
  display:flex; flex-direction:column; height:100vh;
}
.fngal.fngal-fakefs{ position:fixed; inset:0; z-index:9999; }
.fngal:fullscreen .fngal-appar, .fngal.fngal-fakefs .fngal-appar,
.fngal:fullscreen .fngal-bar,   .fngal.fngal-fakefs .fngal-bar,
.fngal:fullscreen .fngal-label, .fngal.fngal-fakefs .fngal-label{ flex:none; }
.fngal:fullscreen .fngal-view, .fngal.fngal-fakefs .fngal-view{
  flex:1 1 auto; height:auto; min-height:0; max-height:none;
}
.fngal:fullscreen .fngal-label, .fngal.fngal-fakefs .fngal-label{ padding-bottom:44px; }

/* embedded in a story: full bleed to the column edges, so it reads as a gear
   change rather than a figure */
.fn-story-body .fngal{ border-left:0; border-right:0; }

@media (max-width:760px){
  .fngal-view{ height:62vh; min-height:320px; }
  .fngal-appar{ padding:9px 16px; gap:10px; }
  .fngal-kick{ display:none; }
  .fngal-label{ grid-template-columns:1fr; gap:14px; padding:18px 18px 28px; }
  .fngal-l{ border-right:0; border-bottom:1px solid var(--rule);
    padding:0 0 12px; display:flex; align-items:baseline; gap:14px; }
  .fngal-med, .fngal-cr{ margin-top:0; }
}

/* the standalone page — the gallery IS the page, so it takes the viewport below
   the nav and the reader lands on a picture. The title block moved below the
   sequence (v6.31.3); the apparatus row already carries the name. */
.fngal-page{ margin:0; }
.fngal-standalone{
  --fngal-nav:64px;                       /* .site-nav height */
  margin:0; border-left:0; border-right:0; border-top:0;
  display:flex; flex-direction:column;
  height:calc(100vh - var(--fngal-nav));
  height:calc(100dvh - var(--fngal-nav));
  min-height:520px;
}
.fngal-standalone .fngal-appar,
.fngal-standalone .fngal-bar,
.fngal-standalone .fngal-label{ flex:none; }
.fngal-standalone .fngal-view{
  flex:1 1 auto; height:auto; min-height:0; max-height:none;
}

/* v6.31.4 — no title block. The apparatus row carries the name and the counter
   carries the count, so a heading below the sequence said both twice. Only a
   standfirst survives, and only when the editor body has copy in it. */
.fngal-page-note{
  max-width:680px; margin:0 auto; padding:40px 26px 72px;
  font-size:17.5px; line-height:1.68;
}
.fngal-page-note p{ margin:0 0 18px; }
.fngal-page-note p:last-child{ margin-bottom:0; }

@media (max-width:760px){
  /* the label is taller here, so the picture would be squeezed; let the page
     scroll instead of forcing the whole module into one screen */
  .fngal-standalone{ height:auto; min-height:0; display:block; }
  .fngal-standalone .fngal-view{ height:62vh; min-height:320px; }
  .fngal-page-note{ padding:30px 18px 56px; }
}

/* ════════════════════════════════════════════════════════════════════════
   v6.31.7 — the run of dates on a card.
   Sits directly under the name, above the description, in the same mono
   register as the rest of the card's apparatus. On now is inked; something
   still to come is quieter, because it isn't actionable yet.
   ════════════════════════════════════════════════════════════════════════ */
.fn-spec .fn-spec-venue,
.fn-spec .fn-spec-run{
  font-family:var(--fs-mono); font-size:13px; font-weight:500;
  letter-spacing:.07em; text-transform:uppercase; color:var(--fs-ink);
  line-height:1.45;
  margin:-1px 0 16px;
}
/* v6.31.10 — venue and date are one block, not two facts that happen to be
   adjacent. The venue loses its bottom margin so the pair sets tight, and the
   date carries the space beneath for both. */
.fn-spec .fn-spec-venue{ margin-bottom:0; }
.fn-spec .fn-spec-sub + .fn-spec-venue,
.fn-spec .fn-spec-sub + .fn-spec-run{ margin-top:-6px; }
.fn-spec .fn-spec-venue + .fn-spec-run{ margin-top:0; }
/* v6.31.9 — something still to come is inked the same. The date is the reason
   the card exists, so it doesn't get quieted for being three weeks out; the
   state word in front of it carries that instead. */
.fn-spec .fn-spec-run.fn-run-upcoming{ color:var(--fs-ink); }


/* ════════════════════════════════════════════════════════════════════════
   v6.31.14 — People I've Met: three changes.

   1. Related books and words in the margin, below the map link. They ride
      along beside the whole conversation rather than waiting at the foot of
      eight thousand words for the few readers who reach it. The rail is
      display:none under 1080px, so the same block is rendered twice and the
      stylesheet decides which copy is on screen.
   2. No drop cap in this format. The cap was moved onto the first answer in
      v3.10.30 so it wouldn't land on the italic scene-setter; on a person
      entry it now goes entirely, and the question below it does the work of
      starting the piece.
   3. More emphasis on the interviewer's turn — a step up in size and weight,
      and the deeper ink. The question is the spine of a conversation and it
      was reading at nearly the same volume as the answers.
   ════════════════════════════════════════════════════════════════════════ */

/* — 1. the margin — */
.fn-rel{ margin-top:24px; border-top:1px solid var(--rule); padding-top:14px; }
.fn-rel-set + .fn-rel-set{ margin-top:16px; }
.fn-rel-set .h{
  font-family:var(--mono); font-size:9px; letter-spacing:.14em;
  text-transform:uppercase; color:var(--text-faint); margin-bottom:8px;
}
.fn-rel-set a{
  display:block; font-family:var(--display); font-size:14px; line-height:1.32;
  color:var(--text-light); text-decoration:none;
  padding:5px 0; border-bottom:1px dotted var(--rule);
}
.fn-rel-set a:last-child{ border-bottom:0; }
.fn-rel-set a:hover{ color:var(--accent); }

/* one of the two copies is always off. Above 1080 the rail carries it; below,
   the rail is gone and the foot copy takes over. */
.fn-rel--foot{ display:none; }
@media (max-width:1080px){
  .fn-rel--rail{ display:none; }
  .fn-rel--foot{
    display:block; max-width:680px; margin:40px auto 0;
  }
  .fn-rel--foot .fn-rel-set a{ font-size:16px; padding:7px 0; }
}

/* — 2. no drop cap on a person entry — */
.fn-story--person .fn-story-body .fn-first::first-letter,
.fn-story--person .fn-story-body > p:first-child::first-letter{
  font: inherit; font-size:inherit; font-weight:inherit; line-height:inherit;
  color:inherit; float:none; padding:0;
}

/* — 3. the interviewer's turn — */
.fn-story--person .fn-story-body p.fn-q{
  font-size:24px;
  font-weight:500;
  line-height:1.36;
  color:var(--accent-deep);
}
@media (max-width:760px){
  .fn-story--person .fn-story-body p.fn-q{ font-size:20px; }
}


/* ════════════════════════════════════════════════════════════════════════
   v6.31.16 — the autolink underline was still gold.
   --yellow and --green were both set to iron gall (#2F4655) at some point, so
   the autolink TEXT had already gone iron gall everywhere. The underline
   colours never followed: they were hardcoded rgba(184,155,47) and
   rgba(107,140,42) from when those variables really were yellow and green.
   On the definition and etymology — near-black body text, so the link colour
   itself barely registers — the gold rule was the only thing the eye caught.
   Both are now iron gall at the same alpha. Changed in place rather than
   overridden, since a leftover value is worth removing rather than burying.
   ════════════════════════════════════════════════════════════════════════ */

/* ════════════════════════════════════════════════════════════════════════
   v6.31.17 — People I've Met: the rail and the exchange.

   1. The question came down from 24px. Emphasis now comes from weight and
      ink rather than size — at 24 against an 18px answer it loomed, and the
      interviewer was speaking louder than the subject.
   2. More air between the question and the answer that follows it.
   3. The map link is centred, so it reads as a plate between its two rules
      rather than a line of type that happens to sit there.
   4. Section heads say "Related books" and "Related words".
   5. The rail had gone monochrome — six blocks of the same grey. The heads
      take iron gall, the picks take full ink, and the rules between blocks
      carry the tonal work. Colour comes from the ink already in the palette,
      not a new hue.
   ════════════════════════════════════════════════════════════════════════ */

/* — 1 & 2. the exchange — */
.fn-story--person .fn-story-body p.fn-q{
  font-size:21px;
  font-weight:500;
  line-height:1.42;
  color:var(--accent-deep);
  margin-bottom:22px;
}
.fn-story--person .fn-story-body p.fn-q + p{ margin-top:0; }
@media (max-width:760px){
  .fn-story--person .fn-story-body p.fn-q{ font-size:19px; margin-bottom:18px; }
}

/* — 3. the map link: flush left, air above and below — */
.fn-story--person .fn-rail-locus{
  text-align:left;
  padding-top:20px;
  padding-bottom:22px;
  border-bottom:1px solid var(--rule);
  margin-bottom:0;
}
.fn-story--person .fn-rail-locus + .fn-rel{ border-top:0; margin-top:26px; padding-top:0; }

/* — 5. tonal range in the rail — */
.fn-story--person .fn-rail dt{ color:var(--accent); }
.fn-story--person .fn-rail dd{ color:var(--text); }
.fn-story--person .fn-rel-set .h{
  color:var(--accent);
  letter-spacing:.15em;
}
.fn-story--person .fn-rel-set a{ color:var(--text); }
.fn-story--person .fn-rel-set a:hover{ color:var(--accent); }


/* ════════════════════════════════════════════════════════════════════════
   v6.31.18 — the rail, again.

   The map link goes back flush left; it was only ever the vertical space
   that needed fixing, and centring one line of mono in a column where
   everything else is ranged left made it the odd one out.

   The dotted rules between picks were doing nothing and cost more than they
   gave: eleven horizontal lines in a 240px column, so the eye read stripes
   rather than two lists. They come out, and the space between the two SETS
   goes up instead — the gap between Books and Words is now larger than the
   gap between two books, which is what tells a reader they are separate
   lists. A wrapped title is why the old spacing failed: at three lines,
   "The Mojave: A Portrait of the Definitive American Desert" looked like
   three entries, so the picks now carry a hanging indent and a tighter
   leading, which makes a wrapped title read as one thing.
   ════════════════════════════════════════════════════════════════════════ */
.fn-story--person .fn-rel-set a{
  border-bottom:0;
  padding:0;
  margin-bottom:11px;
  line-height:1.28;
  padding-left:11px;
  text-indent:-11px;   /* wrapped lines tuck under the first, so a long title
                          reads as one pick rather than several */
}
.fn-story--person .fn-rel-set a:last-child{ margin-bottom:0; }

/* the space between the two lists does the separating the rules were failing
   to do — and the heads get room above them */
.fn-story--person .fn-rel-set + .fn-rel-set{
  margin-top:30px;
  padding-top:20px;
  border-top:1px solid var(--rule);
}
.fn-story--person .fn-rel-set .h{ margin-bottom:12px; }

/* ════════════════════════════════════════════════════════════════════════
   v6.31.21 — the register's sort control, in the eyebrow.
   It first went in the slip's label line, which was wrong: the slip narrows
   WHICH books are shown and the sort decides the ORDER they come in. Those are
   different jobs. The eyebrow is already the register's apparatus row — My
   bookshelf, Index — so the sort joins it there, after the same middot the
   Index link uses. The active sort is inked; the rest are faint.
   ════════════════════════════════════════════════════════════════════════ */
.fnbk-sort{ display:inline-flex; align-items:baseline; gap:11px; margin-left:11px; }
.fnbk-sort .sep{ color:var(--fs-faint,#8A8272); margin-right:-3px; }
.fnbk-sort a{
  color:var(--fs-faint,#8A8272);
  text-decoration:none;
  border-bottom:1px solid transparent;
}
.fnbk-sort a:hover{ color:var(--fs-accent,#2F4655); }
.fnbk-sort a.on{
  color:var(--fs-ink,#272320);
  border-bottom-color:var(--fs-accent,#2F4655);
}

@media (max-width:700px){
  .fnbk-eyebrow{ flex-wrap:wrap; gap:6px 0; }
  .fnbk-sort{ gap:9px; }
}

/* ════════════════════════════════════════════════════════════════════════
   v6.31.23 — THE NEWSLETTER.

   Its own page, and a live form in the river card that used to be a dead
   one. The page runs: what it is, the signup, the terms, and how much there
   is to look at. (A live-sample section sat between the first two until
   v6.31.25.)

   No cadence is promised anywhere, by design. A schedule is a debt.
   ════════════════════════════════════════════════════════════════════════ */

/* — the form, wherever it lands — */
.fnnl-form{ display:flex; gap:9px; flex-wrap:wrap; align-items:stretch; position:relative; }
.fnnl-form input[type=email]{
  flex:1 1 240px; min-width:0;
  font-family:var(--mono); font-size:13px; letter-spacing:.02em;
  padding:13px 15px; color:var(--ink);
  background:var(--bg); border:1px solid var(--rule); border-radius:3px;
}
.fnnl-form input[type=email]:focus{ outline:none; border-color:var(--accent); }
.fnnl-form button{
  flex:0 0 auto;
  font-family:var(--mono); font-size:11px; font-weight:500; letter-spacing:.16em;
  text-transform:uppercase; color:var(--bg); background:var(--accent-deep);
  border:1px solid var(--accent-deep); border-radius:3px;
  padding:13px 22px; cursor:pointer; transition:background .18s, color .18s;
}
.fnnl-form button:hover{ background:var(--ink); border-color:var(--ink); }
.fnnl-form.is-sent input[type=email],
.fnnl-form.is-sent button{ opacity:.45; pointer-events:none; }
.fnnl-said{
  flex:1 0 100%; margin:0; min-height:0;
  font-family:var(--serif); font-size:14.5px; line-height:1.5; color:var(--text-light);
}
.fnnl-said:empty{ display:none; }
.fnnl-said.is-ok{ margin-top:4px; }
.fnnl-said.is-err{ margin-top:4px; color:#8C3A24; }
.fnnl-sink{ display:none; }
.fnnl-unset{
  font-family:var(--mono); font-size:11px; line-height:1.5; color:#8C3A24;
  border:1px dashed #C08A72; padding:10px 12px; border-radius:3px;
}

/* the river card keeps its own tighter measure */
.fn-news-tile .fnnl-form input[type=email]{ font-size:12.5px; padding:9px 12px; flex-basis:140px; }
.fn-news-tile .fnnl-form button{ font-size:10px; padding:9px 15px; letter-spacing:.12em; }
.fn-news-tile .fnnl-said{ font-size:13px; }

/* — the page — */
.fnnl-page{ max-width:1180px; margin:0 auto; padding:0 40px 100px; }

.fnnl-eyebrow{
  display:flex; justify-content:space-between; align-items:baseline;
  font-family:var(--mono); font-size:11px; letter-spacing:.16em; text-transform:uppercase;
  color:var(--text-light); padding:34px 0 12px; border-bottom:1px solid var(--rule);
}
.fnnl-eyebrow .r{ color:var(--text-faint); }

.fnnl-open{ padding:56px 0 8px; }
.fnnl-head{
  font-family:var(--display); font-weight:500;
  font-size:clamp(34px, 5vw, 62px); line-height:1.06; letter-spacing:-.01em;
  color:var(--ink); margin:0 0 24px; max-width:19ch;
}
.fnnl-lede{
  font-family:var(--serif); font-size:19px; line-height:1.66;
  color:var(--text); margin:0; max-width:58ch;
}

.fnnl-lab{
  font-family:var(--mono); font-size:10px; letter-spacing:.18em; text-transform:uppercase;
  color:var(--text-faint); padding-bottom:12px; margin-bottom:26px;
  border-bottom:1px solid var(--rule);
}

.fnnl-signup{ margin:56px 0 0; background:var(--bg-warm); border:1px solid var(--rule); }
.fnnl-signup-in{ padding:38px 40px 42px; max-width:640px; }
.fnnl-signup .fnnl-lab{ margin-bottom:18px; }
.fnnl-signup-copy{
  font-family:var(--serif); font-size:16.5px; line-height:1.6;
  color:var(--text-light); margin:0 0 20px;
}

.fnnl-terms{ padding:64px 0 0; }
.fnnl-list{ list-style:none; margin:0; padding:0; max-width:66ch; }
.fnnl-list li{
  font-family:var(--serif); font-size:16.5px; line-height:1.66; color:var(--text);
  padding:14px 0; border-bottom:1px dotted var(--rule);
}
.fnnl-list li:last-child{ border-bottom:0; }
.fnnl-list b{ font-weight:500; color:var(--ink); }

.fnnl-hoard{ padding:64px 0 0; }
.fnnl-figs{ display:grid; grid-template-columns:repeat(3, minmax(0,1fr)); gap:24px; }
.fnnl-fig{ display:block; text-decoration:none; box-shadow:none; }
.fnnl-fig .n{
  display:block; font-family:var(--display); font-weight:500;
  font-size:clamp(38px, 5vw, 58px); line-height:1; color:var(--ink);
  font-variant-numeric:tabular-nums;
}
.fnnl-fig .l{
  display:block; font-family:var(--mono); font-size:10px; letter-spacing:.16em;
  text-transform:uppercase; color:var(--text-faint); margin-top:11px;
}
.fnnl-fig:hover .n{ color:var(--accent); }

.fnnl-note{
  padding:56px 0 0; max-width:62ch;
  font-family:var(--serif); font-size:17px; line-height:1.68;
}

@media (max-width:860px){
  .fnnl-figs{ grid-template-columns:1fr; gap:28px; }
}
@media (max-width:760px){
  .fnnl-page{ padding:0 20px 72px; }
  .fnnl-open{ padding:38px 0 4px; }
  .fnnl-terms, .fnnl-hoard{ padding-top:46px; }
  .fnnl-signup{ margin-top:42px; }
  .fnnl-signup-in{ padding:26px 22px 30px; }
  .fnnl-form button{ flex:1 1 100%; }
}

/* ════════════════════════════════════════════════════════════════════════
   v6.31.29 — the books landing: a book, the slip, the register.

   The page opened with six mechanisms before a single book appeared, and the
   largest type on it was a sentence with no content in it. One book now takes
   the top, the slip keeps its wording one position down, and the register
   carries its own head so the rows don't read as the slip's results.

   NOTE: .fnbk-reg is this page's register wrapper. It is deliberately NOT
   .fnbk-cols — the book ENTRY page uses that class too, and repurposing it in
   v6.31.27 flattened that page's colophon and cover into the main column.
   ════════════════════════════════════════════════════════════════════════ */
.fnbk-reg{ padding-top:6px; }

/* the featured book */
.fnbk-feat{
  display:grid; grid-template-columns:250px minmax(0,1fr); gap:56px;
  align-items:start; padding:52px 0 60px;
  border-bottom:2px solid var(--fs-ink,#272320);
}
.fnbk-feat-cover{ display:block; box-shadow:0 3px 16px rgba(34,29,23,.26); }
.fnbk-feat-cover img{ display:block; width:100%; height:auto; }
.fnbk-feat-kick{
  font-family:var(--fs-mono); font-size:10px; letter-spacing:.18em;
  text-transform:uppercase; color:var(--fs-faint,#9C927E); margin-bottom:14px;
}
.fnbk-feat-t{
  font-family:var(--display); font-weight:500;
  font-size:clamp(34px,4.4vw,58px); line-height:1.03; letter-spacing:-.015em;
  margin:0 0 10px;
}
.fnbk-feat-t a{ color:var(--fs-ink,#272320); text-decoration:none; }
.fnbk-feat-t a:hover{ color:var(--fs-accent,#2F4655); }
.fnbk-feat-by{
  font-family:var(--fs-mono); font-size:11.5px; letter-spacing:.08em;
  color:var(--fs-faint,#9C927E); margin-bottom:24px;
}
.fnbk-feat-take{
  font-family:var(--serif); font-size:19px; line-height:1.64;
  color:var(--fs-text,#3C352C); max-width:52ch; margin:0 0 26px;
}
.fnbk-feat-acts{
  display:flex; align-items:baseline; gap:22px; flex-wrap:wrap;
  font-family:var(--fs-mono); font-size:10.5px; letter-spacing:.14em; text-transform:uppercase;
}
.fnbk-feat-acts a{
  color:var(--fs-accent,#2F4655); text-decoration:none;
  border-bottom:1px solid var(--fs-rule,#C6C1AE); padding-bottom:2px;
}
.fnbk-feat-acts a:hover{ border-bottom-color:var(--fs-accent,#2F4655); }

/* the slip follows the book rather than opening the page */
.fnbk-feat + .fnbk-slip{ padding:64px 0 64px; }

/* the register's own head, carrying the sort */
.fnbk-reghead{
  display:flex; align-items:baseline; justify-content:space-between; gap:30px;
  padding:70px 0 14px; border-bottom:1px solid var(--fs-rule,#C6C1AE);
  scroll-margin-top:90px;
}
.fnbk-reghead-l{ display:flex; align-items:baseline; gap:14px; flex-wrap:wrap; }
.fnbk-reghead .lab{
  font-family:var(--display); font-weight:500; font-size:23px;
  color:var(--fs-ink,#272320);
}
.fnbk-reghead .sub{
  font-family:var(--fs-mono); font-size:10.5px; letter-spacing:.12em;
  text-transform:uppercase; color:var(--fs-faint,#9C927E);
}
.fnbk-reghead .sub a{ color:var(--fs-accent,#2F4655); text-decoration:none; }
.fnbk-reghead .sub a:hover{ text-decoration:underline; text-underline-offset:3px; }

/* ── the book entry's foot, matched to the word entry's ── */
.fnbk-entryfoot{ margin-top:64px; padding-top:30px; border-top:1px solid var(--fs-rule,#C6C1AE); }
.fnbk-entrynav{ display:flex; justify-content:space-between; align-items:flex-start; gap:30px; }
.fnbk-entrynav a{ text-decoration:none; max-width:44%; }
.fnbk-entrynav .next{ text-align:right; }
.fnbk-entrynav .l{
  display:block; font-family:var(--fs-mono); font-size:10px; letter-spacing:.16em;
  text-transform:uppercase; color:var(--fs-faint,#9C927E); margin-bottom:6px;
}
.fnbk-entrynav .aw{
  display:block; font-family:var(--display); font-weight:500;
  font-size:22px; line-height:1.2; color:var(--fs-ink,#272320);
}
.fnbk-entrynav a:hover .aw{ color:var(--fs-accent,#2F4655); }
.fnbk-entryacts{
  margin-top:34px; display:flex; align-items:baseline; gap:12px; flex-wrap:wrap;
  font-family:var(--fs-mono); font-size:12px; letter-spacing:.04em;
}
.fnbk-entryacts a{ color:var(--fs-accent,#2F4655); text-decoration:none;
  border-bottom:1px solid transparent; padding-bottom:1px; }
.fnbk-entryacts a:hover{ border-bottom-color:currentColor; }
.fnbk-entryacts .sep{ color:var(--fs-faint,#9C927E); }

@media (max-width:900px){
  .fnbk-feat{ grid-template-columns:1fr; gap:26px; }
  .fnbk-feat-cover{ max-width:190px; }
  .fnbk-feat-take{ font-size:17px; }
}
@media (max-width:760px){
  .fnbk-eyebrow{ grid-template-columns:1fr; gap:8px; }
  .fnbk-lists{ justify-self:start; }
  .fnbk-feat{ padding:34px 0 40px; }
  .fnbk-feat + .fnbk-slip{ padding:42px 0 42px; }
  .fnbk-reghead{ padding-top:46px; flex-wrap:wrap; gap:12px; }
  .fnbk-entrynav{ flex-direction:column; gap:22px; }
  .fnbk-entrynav a{ max-width:100%; }
  .fnbk-entrynav .next{ text-align:left; }
}
