/* Fonts are requested from each page's <head>, not from here. An @import
   inside the stylesheet forces the browser to download and parse this
   whole file before it even discovers the font request, so the two
   happen one after the other instead of side by side. */

:root{
  --paper:#F1ECE1;
  /* one cream ground for the whole site: a warm light, a deeper warm low
     down, a vignette carrying most of the depth, and a base that travels
     about 42% in luminance from its lightest stop to its darkest. */
  --cream-grade:
    radial-gradient(60% 48% at 88% 2%,  rgba(210,168,104,.34), transparent 64%),
    radial-gradient(56% 46% at 4% 98%,  rgba(150,116,66,.22), transparent 66%),
    radial-gradient(110% 82% at 50% 42%, transparent 26%, rgba(88,64,32,.30) 100%),
    linear-gradient(164deg, #FBF9F4 0%, #F2EBDD 28%, #E4D8C2 62%, #CFBF9F 100%);
  /* gold falls to 1.6:1 on the darkest cream, so text gold on cream is deeper.
     Rules, ticks and arrows keep --gold: they are not text. */
  --gold-deep:#8A6A32;

  /* ---- gold as TEXT ----
     --gold at #B4915A measures 2.5:1 on flat paper and as low as 1.36:1 at the
     foot of a long cream section, where the vignette in --cream-grade is at its
     darkest. That is unreadable for the small sizes this colour is used at.
     The same gold on a dark band measures 6.3:1 and is fine, so the colour
     cannot simply be darkened everywhere.
     --gold-text is therefore contextual. Custom properties inherit, so
     declaring it again inside .on-dark hands every descendant the right value
     without any selector having to know which ground it is sitting on.
     #6E5527 clears 4.5:1 on every cream lighter than about #D9CDBA. */
  --gold-text:#6E5527;

  --paper-dim:#E8E1D2;
  --ink:#1B1A17;
  --ink-soft:#3d3a34;
  --gold:#B4915A;
  --gold-soft:#C9AC7C;
  --black:#141311;
  --rule: rgba(27,26,23,0.14);

  /* ---- fixed header ----
     One number, set in one place. The masthead and the nav bar are both
     fixed, so every hero on the site has to clear them. Previously each
     page guessed at that clearance with its own hard number. */
  --mast-h:33px;
  --nav-h:64px;
  --head-h:97px;          /* mast + nav */

  /* ---- vertical rhythm ----
     One gap between sections, everywhere, at every width. */
  --sec-y:84px;
  --hero-y:181px;         /* head-h + sec-y */
}
@media (max-width:1024px){
  :root{ --sec-y:66px; --hero-y:163px; }
}
@media (max-width:640px){
  :root{ --sec-y:52px; --hero-y:149px; }
}
*{box-sizing:border-box; margin:0; padding:0;}
html{scroll-behavior:smooth; scroll-padding-top:112px;}
body{
  background:var(--paper);
  color:var(--ink);
  font-family:'Crimson Pro', serif;
  font-weight:400;
  line-height:1.5;
  overflow-x:hidden;
}
.wordmark{
  font-family:'Archivo', sans-serif;
  letter-spacing:0.14em;
  text-transform:uppercase;
  text-decoration:none;
  color:inherit;
}
.eyebrow{
  font-family:'Archivo', sans-serif;
  font-size:0.72rem;
  letter-spacing:0.22em;
  text-transform:uppercase;
  color:var(--gold-text);
  font-weight:600;
}
/* On any dark ground the deeper gold would be near-invisible, so the token is
   redeclared there and inherits down to everything inside. --gold-soft is the
   value these eyebrows already used on dark bands.
   This list is deliberately short and was checked by sampling the rendered
   ground of each one. .closing is NOT here: it reads as a dark section by
   name, but on the homepage it is cream, and redeclaring it there dropped
   "Where do you begin?" to 1.84:1. */
.on-dark, .hero, .post-cta,
.bkx-dark, .crs-band.dark, .circle-closing, .quiz-band.dark,
.book-strip, .crs-art, .episodes-band, .expression-band, .notify, .origin-band,
.paper-hero, .pp-mid, .pp-step, .questions-band, .quiz-box, .quiz-panel.solid-bg,
.rev-flip, .unmet-band, .versus{ --gold-text:var(--gold-soft); }
a{color:inherit;}
img{max-width:100%; height:auto; display:block;}

/* ---------- masthead ---------- */
/* The masthead measured 32px while the nav sat at 33px, which left a 1px
   line of the page showing through between them on every page. Its height
   is now fixed, so the nav sits flush against it at any font size. */
.masthead{
  position:fixed; top:0; left:0; right:0; z-index:1001;
  height:var(--mast-h);
  background:var(--black); color:var(--paper);
  display:flex; align-items:center; justify-content:center;
  padding:0 4vw;
  font-family:'Archivo',sans-serif; font-size:0.64rem;
  letter-spacing:0.16em; text-transform:uppercase;
  border-bottom:1px solid rgba(180,145,90,0.35);
  overflow:hidden;
}
.masthead span{ opacity:0.85; white-space:nowrap; }
@media (max-width:420px){
  .masthead{ font-size:0.58rem; letter-spacing:0.12em; }
}

/* ---------- nav ---------- */
nav{
  position:fixed; top:var(--mast-h); left:0; right:0; height:var(--nav-h);
  display:flex; align-items:center; justify-content:space-between;
  gap:24px;
  padding:0 6vw;
  z-index:1000;
  background:rgba(241,236,225,0.94);
  -webkit-backdrop-filter:blur(8px);
  backdrop-filter:blur(8px);
  border-bottom:1px solid var(--rule);
}
nav.on-dark{
  background:rgba(20,19,17,0.55);
  border-bottom:1px solid rgba(241,236,225,0.12);
  color:var(--paper);
}
nav .wordmark{font-size:0.8rem; white-space:nowrap;}
.nav-links{
  display:flex; align-items:center; gap:clamp(16px,1.9vw,30px);
  font-family:'Archivo',sans-serif;
  font-size:0.72rem;
  letter-spacing:0.1em;
  text-transform:uppercase;
}
/* Nav labels are two words often enough ("The Book", "The Circle") that a
   mid-word break was possible on narrower desktops. They never break now. */
.nav-links a{ text-decoration:none; opacity:0.75; transition:opacity .2s; white-space:nowrap; }
.nav-links a:hover, .nav-links a.active{ opacity:1; }
.buy-nav{
  font-family:'Archivo', sans-serif;
  font-size:0.72rem;
  letter-spacing:0.14em;
  text-transform:uppercase;
  border:1px solid currentColor;
  padding:8px 16px;
  text-decoration:none;
  white-space:nowrap;
}
.nav-toggle{ display:none; }
.nav-scrim{ display:none; }

/* The full nav ran until 1000px, but by about 1030px the links were already
   touching the wordmark. It hands over to the menu button earlier now. */
@media (max-width: 1080px){
  .nav-links{ display:none; }
  .nav-toggle{
    display:block;
    font-family:'Archivo',sans-serif;
    font-size:0.7rem;
    letter-spacing:0.1em;
    text-transform:uppercase;
    border:1px solid currentColor;
    padding:8px 14px;
    background:none;
    color:inherit;
    cursor:pointer;
  }

  /* While the menu is open the bar is opaque paper on every page, including
     the ones with a dark hero. Before this, the home page showed a black bar
     above a cream panel. */
  nav:has(.nav-links.open),
  nav.on-dark:has(.nav-links.open){
    -webkit-backdrop-filter:none;
    backdrop-filter:none;
    background:var(--paper);
    color:var(--ink);
    border-bottom-color:var(--rule);
  }
  nav:has(.nav-links.open) .wordmark,
  nav:has(.nav-links.open) .nav-toggle{ color:var(--ink); }

  .nav-links.open{
    display:flex;
    flex-direction:column;
    position:fixed;
    top:var(--head-h); left:0; right:0; z-index:1002;
    background:var(--paper);
    color:var(--ink);
    padding:24px 6vw 30px;
    border-bottom:1px solid var(--rule);
    gap:20px;
    align-items:flex-start;
    max-height:calc(100dvh - var(--head-h));
    overflow-y:auto;
    overscroll-behavior:contain;
  }
  .nav-links.open a{ color:var(--ink); opacity:0.8; }
  .nav-links.open a:hover, .nav-links.open a.active{ opacity:1; }
  .nav-links.open .buy-nav{ margin-top:6px; }

  /* Tapping the page behind the menu closes it, so it is never a trap. */
  /* The scrim MUST sit below <nav>. The panel lives inside <nav>, and <nav>
     is a fixed, z-indexed element, so it forms its own stacking context -
     the panel's z-index only competes with other things inside <nav>, never
     with the scrim outside it. At 1001 the scrim covered the panel and every
     tap on a menu link landed on the scrim instead of the link. */
  .nav-scrim{
    display:block;
    position:fixed; inset:var(--head-h) 0 0 0; z-index:999;
    background:rgba(20,19,17,0.35);
    border:0; padding:0; cursor:pointer;
  }
}
/* The page behind must not scroll while the menu is over it. */
body.nav-open{ overflow:hidden; }

/* ---------- buttons ---------- */
.btn{
  font-family:'Archivo', sans-serif;
  font-size:0.78rem;
  letter-spacing:0.16em;
  text-transform:uppercase;
  text-decoration:none;
  padding:16px 30px;
  display:inline-block;
  border:1px solid var(--gold);
  transition:all .25s ease;
  cursor:pointer;
  background:none;
}
.btn.solid{ background:var(--gold); color:var(--black); }
.btn.solid:hover{ background:var(--gold-soft); }
.btn.ghost{ color:var(--paper); border-color:rgba(241,236,225,0.5);}
.btn.ghost:hover{ border-color:var(--paper); }
.btn.dark{ border-color:var(--ink); color:var(--ink); }
.btn.dark:hover{ background:var(--ink); color:var(--paper); }

/* ---------- page hero (interior pages) ---------- */
.page-hero{
  padding:var(--hero-y) 6vw var(--sec-y);
  max-width:1100px;
  margin:0 auto;
}
.page-hero .eyebrow{ display:block; margin-bottom:20px; }
.page-hero h1{
  font-family:'Crimson Pro', serif;
  font-weight:300;
  font-style:italic;
  font-size:clamp(2rem, 4.4vw, 3.2rem);
  line-height:1.22;
  max-width:18ch;
  text-wrap:balance;
}
.page-hero .sub{
  margin-top:26px;
  font-size:1.05rem;
  color:var(--ink-soft);
  max-width:56ch;
  font-weight:300;
}

section{ padding:var(--sec-y) 6vw; position:relative; }
.section-inner{ max-width:1100px; margin:0 auto; }

footer{
  padding:50px 6vw 60px;
  display:flex;
  justify-content:space-between;
  align-items:flex-start;
  flex-wrap:wrap;
  gap:24px;
  border-top:1px solid var(--rule);
  font-family:'Archivo',sans-serif;
  font-size:0.7rem;
  letter-spacing:0.08em;
  text-transform:uppercase;
  color:var(--ink-soft);
}
footer a{ text-decoration:none; }
.footer-links{ display:flex; gap:26px; flex-wrap:wrap; }
.footer-links a:hover{ color:var(--ink); }

/* ---------- thread seam – recurring signature device ---------- */
.thread-seam{ position:relative; height:100px; }
.thread-seam::before{
  content:''; position:absolute; top:0; bottom:0; left:50%; width:1px;
  background:linear-gradient(var(--gold-soft), var(--gold), var(--gold-soft));
  opacity:0.55;
}
.thread-seam .stitch{ position:absolute; width:22px; height:2px; background:var(--gold); opacity:0.75; left:calc(50% - 11px); }
.thread-seam .stitch.s1{ top:24%; transform:rotate(24deg); }
.thread-seam .stitch.s2{ top:52%; transform:rotate(-20deg); }
.thread-seam .stitch.s3{ top:78%; transform:rotate(16deg); }
.thread-seam.on-dark::before{ opacity:0.4; }

/* ---------- subtle grain, for tactile depth on flat panels ---------- */
.grain{ position:relative; }
.grain::after{
  content:''; position:absolute; inset:0; pointer-events:none;
  background-image:radial-gradient(rgba(27,26,23,0.05) 1px, transparent 1px);
  background-size:3px 3px; opacity:0.6;
}
.grain.on-dark::after{
  background-image:radial-gradient(rgba(241,236,225,0.05) 1px, transparent 1px);
}

/* ---------- three doors (platform-level cross-links) ---------- */
.doors{ display:grid; grid-template-columns:repeat(3,1fr); border:1px solid var(--rule); }
.door{
  padding:46px 36px; border-left:1px solid var(--rule); text-decoration:none; color:inherit;
  display:flex; flex-direction:column; min-height:260px; transition:background .2s ease;
}
.door:first-child{ border-left:none; }
.door:hover{ background:var(--paper-dim); }
.door .door-num{ font-family:'Archivo',sans-serif; font-size:0.7rem; letter-spacing:0.1em; color:var(--gold); margin-bottom:22px; }
.door h3{ font-family:'Crimson Pro',serif; font-weight:400; font-style:italic; font-size:1.5rem; margin-bottom:14px; }
.door p{ font-size:0.95rem; color:var(--ink-soft); font-weight:300; flex-grow:1; }
.door .door-cta{ margin-top:22px; font-family:'Archivo',sans-serif; font-size:0.68rem; letter-spacing:0.1em; text-transform:uppercase; }
@media (max-width:820px){
  .doors{ grid-template-columns:1fr; }
  .door{ border-left:none; border-top:1px solid var(--rule); }
  .door:first-child{ border-top:none; }
}

/* ---------- stat / credibility strip ---------- */
.stat-strip{
  display:flex; justify-content:space-between; flex-wrap:wrap; gap:30px;
  border-top:1px solid var(--rule); border-bottom:1px solid var(--rule);
  padding:36px 0;
}
.stat{ font-family:'Archivo',sans-serif; }
.stat .num{ font-family:'Crimson Pro',serif; font-style:italic; font-size:2rem; color:var(--ink); display:block; }
.stat .label{ font-size:0.68rem; letter-spacing:0.1em; text-transform:uppercase; color:var(--ink-soft); margin-top:6px; display:block; }

/* ---------- reader reviews ---------- */
.reviews-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:1px; background:var(--rule); border:1px solid var(--rule); }
.review-card{ background:var(--paper); padding:36px 30px; display:flex; flex-direction:column; min-height:260px; }
.review-card .stars{ color:var(--gold); font-size:0.85rem; letter-spacing:2px; margin-bottom:18px; }
.review-card .quote{ font-family:'Crimson Pro',serif; font-style:italic; font-size:1rem; color:var(--ink); line-height:1.55; flex-grow:1; }
.review-card .who{ margin-top:20px; font-family:'Archivo',sans-serif; font-size:0.68rem; letter-spacing:0.08em; text-transform:uppercase; color:var(--ink-soft); }
@media (max-width:900px){ .reviews-grid{ grid-template-columns:1fr 1fr; } }
@media (max-width:600px){ .reviews-grid{ grid-template-columns:1fr; } }

/* ---------- circle ---------- */
.circle-guide{
  max-width:700px; margin:0 auto 70px; padding:32px 34px; border:1px solid var(--rule); background:var(--paper-dim);
}
.circle-guide p{ font-family:'Crimson Pro',serif; font-style:italic; font-size:1.05rem; color:var(--ink-soft); }
.circle-form{ max-width:700px; margin:0 auto 90px; }
.circle-form .row{ display:flex; gap:14px; flex-wrap:wrap; margin-bottom:14px; }
.circle-form input[type=text]{
  flex:1; min-width:180px; padding:14px 16px; border:1px solid var(--ink); background:var(--paper);
  font-family:'Crimson Pro',serif; font-size:1rem; color:var(--ink);
}
.circle-form textarea{
  width:100%; padding:16px 18px; border:1px solid var(--ink); background:var(--paper);
  font-family:'Crimson Pro',serif; font-size:1.05rem; color:var(--ink); resize:vertical; margin-bottom:14px;
}
.circle-form input:focus, .circle-form textarea:focus{ outline:2px solid var(--gold); outline-offset:2px; }
.circle-status{ font-family:'Archivo',sans-serif; font-size:0.75rem; color:var(--gold); margin-top:12px; display:none; }
.circle-error{ font-family:'Archivo',sans-serif; font-size:0.75rem; color:#a0402f; margin-top:12px; display:none; }

.thread-list{ max-width:1120px; margin:0 auto; columns:3 300px; column-gap:22px; }
.thread{
  break-inside:avoid; margin-bottom:22px; padding:30px 28px; border:1px solid var(--rule);
  background:var(--paper-dim);
}
.thread-head{ display:flex; justify-content:space-between; align-items:baseline; gap:12px; margin-bottom:14px; flex-wrap:wrap; }
.thread-name{ font-family:'Archivo',sans-serif; font-size:0.72rem; letter-spacing:0.08em; text-transform:uppercase; color:var(--gold); }
.thread-time{ font-family:'Archivo',sans-serif; font-size:0.68rem; color:var(--ink-soft); }
.thread-body{ font-family:'Crimson Pro',serif; font-style:italic; font-size:1.08rem; line-height:1.55; color:var(--ink); margin-bottom:16px; }
.thread-actions{ display:flex; gap:18px; align-items:center; flex-wrap:wrap; }
.thread-toggle{
  font-family:'Archivo',sans-serif; font-size:0.7rem; letter-spacing:0.08em; text-transform:uppercase;
  background:none; border:none; color:var(--ink-soft); cursor:pointer; padding:0; border-bottom:1px solid var(--rule);
}
.report-link{
  font-family:'Archivo',sans-serif; font-size:0.65rem; letter-spacing:0.06em; text-transform:uppercase;
  background:none; border:none; color:var(--rule); cursor:pointer; padding:0; margin-left:auto;
}
.report-link:hover{ color:var(--ink-soft); }
.thread-replies{ display:none; margin-top:20px; padding-top:18px; border-top:1px solid var(--rule); }
.thread-replies.open{ display:block; }
.reply{ margin-bottom:18px; }
.reply-head{ display:flex; gap:10px; align-items:baseline; margin-bottom:6px; }
.reply-name{ font-family:'Archivo',sans-serif; font-size:0.66rem; letter-spacing:0.06em; text-transform:uppercase; color:var(--gold); }
.reply-time{ font-family:'Archivo',sans-serif; font-size:0.63rem; color:var(--ink-soft); }
.reply-body{ font-family:'Crimson Pro',serif; font-size:0.95rem; color:var(--ink-soft); }
.reply-form{ margin-top:16px; display:flex; flex-direction:column; gap:8px; }
.reply-form input[type=text]{ padding:9px 11px; border:1px solid var(--rule); background:var(--paper); font-family:'Crimson Pro',serif; }
.reply-form textarea{ width:100%; padding:10px 12px; border:1px solid var(--rule); background:var(--paper); font-family:'Crimson Pro',serif; resize:vertical; }
.empty-state{ text-align:center; padding:60px 0; color:var(--ink-soft); font-family:'Archivo',sans-serif; font-size:0.8rem; letter-spacing:0.05em; }
.load-more-wrap{ text-align:center; margin-top:50px; }
@media (max-width:780px){ .thread-list{ columns:1 300px; } }
.setup-banner{
  max-width:700px; margin:0 auto 50px; padding:28px 30px; border:1px dashed var(--gold);
  font-family:'Archivo',sans-serif; font-size:0.8rem; line-height:1.7; color:var(--ink-soft);
}
.setup-banner b{ color:var(--ink); }
.circle-trust{
  max-width:700px; margin:0 auto 30px; text-align:center;
  font-family:'Archivo',sans-serif; font-size:0.72rem; letter-spacing:0.04em; color:var(--ink-soft);
}
.circle-count{
  text-align:center; margin:0 auto 60px; font-family:'Crimson Pro',serif; font-style:italic;
  font-size:1.15rem; color:var(--ink);
}
.circle-count b{ color:var(--gold); font-weight:600; font-style:normal; }
.thread-avatar{
  width:26px; height:26px; border-radius:50%; display:flex; align-items:center; justify-content:center;
  font-family:'Archivo',sans-serif; font-size:0.68rem; font-weight:600; color:var(--paper); flex-shrink:0;
}
.thread-who{ display:flex; align-items:center; gap:10px; }
.recognise-btn{
  font-family:'Archivo',sans-serif; font-size:0.7rem; letter-spacing:0.06em; text-transform:uppercase;
  background:none; border:1px solid var(--rule); color:var(--ink-soft); cursor:pointer; padding:6px 12px;
  border-radius:20px; transition:all .2s ease;
}
.recognise-btn:hover{ border-color:var(--gold); color:var(--ink); }
.recognise-btn.recognised{ border-color:var(--gold); color:var(--gold); background:rgba(180,145,90,0.08); }
.circle-closing{ background:var(--black); color:var(--paper); text-align:center; padding:var(--sec-y) 6vw; }
.circle-closing .eyebrow{ color:var(--gold-soft); }
.circle-closing h2{ color:var(--paper); font-family:'Crimson Pro',serif; font-weight:300; font-style:italic; font-size:clamp(1.4rem,2.6vw,1.9rem); margin:16px auto 12px; max-width:26ch; }
.circle-closing p{ color:#a9a396; font-weight:300; font-size:0.95rem; max-width:44ch; margin:0 auto; }

/* ---------- blog index ---------- */
.blog-filter{
  display:flex; gap:10px; flex-wrap:wrap; margin-bottom:60px;
  font-family:'Archivo',sans-serif; font-size:0.7rem; letter-spacing:0.08em; text-transform:uppercase;
}
.blog-filter button{
  background:none; border:1px solid var(--rule); padding:9px 16px; cursor:pointer;
  color:var(--ink-soft); font-family:inherit; font-size:inherit; letter-spacing:inherit; text-transform:inherit;
}
.blog-filter button.active{ border-color:var(--gold); color:var(--ink); background:var(--paper-dim); }
.blog-list{ display:flex; flex-direction:column; }
.blog-row{
  display:grid; grid-template-columns:130px 1fr auto; gap:24px; align-items:center;
  padding:24px 0; border-top:1px solid var(--rule); text-decoration:none; color:inherit;
}
.blog-list a.blog-row:last-child{ border-bottom:1px solid var(--rule); }
.blog-row:hover{ background:var(--paper-dim); }
.blog-row .tag{ font-family:'Archivo',sans-serif; font-size:0.66rem; letter-spacing:0.1em; text-transform:uppercase; color:var(--gold); }
.blog-row h3{ font-family:'Crimson Pro',serif; font-style:italic; font-weight:400; font-size:1.15rem; line-height:1.3; }
.blog-row .read{ font-family:'Archivo',sans-serif; font-size:0.68rem; letter-spacing:0.1em; text-transform:uppercase; color:var(--ink-soft); white-space:nowrap; }
@media (max-width:640px){
  .blog-row{ grid-template-columns:1fr; gap:8px; align-items:start; }
  .blog-row .read{ display:none; }
}

/* ---------- single post ---------- */
/* The post pages carry no <style> block of their own, so their rhythm is
   set here. 200px of top padding was being used on phones as well as
   desktops, which left a lot of dead space above the title on a small
   screen. --hero-y already accounts for the fixed masthead and nav. */
.post-shell{ max-width:680px; margin:0 auto; padding:var(--hero-y) 6vw 60px; }
.post-tag{ display:block; margin-bottom:20px; }
.post-shell h1{ font-family:'Crimson Pro',serif; font-weight:300; font-style:italic; font-size:clamp(2rem,4.5vw,3rem); line-height:1.22; margin-bottom:24px; }
.post-meta{ font-family:'Archivo',sans-serif; font-size:0.72rem; letter-spacing:0.08em; text-transform:uppercase; color:var(--ink-soft); margin-bottom:50px; }
.post-body{ max-width:680px; margin:0 auto; padding:0 6vw 40px; }
.post-body p{ font-size:1.15rem; line-height:1.75; color:var(--ink); font-weight:300; margin-bottom:28px; }
.post-body p.pull{ font-style:italic; font-size:1.35rem; color:var(--ink); margin:44px 0; padding-left:24px; border-left:2px solid var(--gold); }
.post-signature{ max-width:680px; margin:0 auto; padding:0 6vw 20px; }
.post-signature img, .post-signature span{ display:block; }
.post-signature .sig-img{ width:130px; height:auto; opacity:0.88; }
.post-signature .sig-line{ width:70px; height:1px; background:var(--gold); margin-top:14px; }
.post-share{
  max-width:680px; margin:0 auto; padding:0 6vw 80px;
  display:flex; align-items:center; gap:16px; flex-wrap:wrap;
}
.post-share .copy-note{ font-family:'Archivo',sans-serif; font-size:0.7rem; color:var(--gold); display:none; }
.post-cta{
  background:var(--black); color:var(--paper); text-align:center; padding:var(--sec-y) 6vw;
}
.post-cta h2{ font-family:'Crimson Pro',serif; font-weight:300; font-style:italic; font-size:clamp(1.5rem,3vw,2rem); max-width:24ch; margin:16px auto 34px; }
.post-nav-links{
  max-width:680px; margin:0 auto; padding:var(--sec-y) 6vw; display:flex; justify-content:space-between; gap:20px;
  font-family:'Archivo',sans-serif; font-size:0.72rem; letter-spacing:0.08em; text-transform:uppercase;
}
.post-nav-links a{ text-decoration:none; color:var(--ink-soft); }
.post-nav-links a:hover{ color:var(--ink); }

/* ---------- how text is allowed to break ----------
   Two rules, applied everywhere.

   balance  – for short display text (headings, pull quotes, single-line
              claims). The browser evens the lines out, so a heading never
              drops one or two words onto a line of their own.
   pretty   – for running copy. Stops the last line of a paragraph being a
              single stranded word.

   Long words and URLs are allowed to break rather than push a column wide. */

h1, h2, h3, h4, h5, h6,
blockquote, figcaption,
.page-hero .sub, .hero .sub, .sub, .lede, .desc, .line, .quote,
.unmet-claim, .unmet-sub, .unmet-close, .address-close, .questions-close,
.origin-question, .origin-close,
.continues-verse, .continues-lede,
.ideas-close, .lex-quote, .lex-note, .lex-asks, .lexicon-frame,
.book-claim, .nuri-claim, .between-close,
.beat-quote, .wd-line, .wd-sub, .rd-sub,
.gives-lede, .purpose-ask, .purpose-whisper,
.car-verse, .car-note, .car-lede,
.crs-note, .crs-kind,
.mzp-strong, .vs-quote,
.hub-label, .feed-welcome, .lexc-lead, .divide-close, .lex-sub,
.circle-guide p, .circle-closing h2, .circle-closing p,
.review-card .quote, .thread-body, .door p, .blog-row h3,
.post-body p.pull, .post-cta h2, .closing h2, .quiz-box h2,
.intro-band p, .interstitial-band p, .texture-break p, .expression-band .pull-line,
.stat .label, .empty-state{
  text-wrap: balance;
}

/* Longer running copy stays on `pretty`. Past about six lines the browser
   gives up on balancing and falls back to plain wrapping, which would undo
   the widow protection, so these are deliberately not in the list above. */
p, li, dd, .post-body p,
.unmet-body, .address-list li, .origin-lede, .continues-close,
.idea-body, .between-lede, .lex-poem, .beat-text, .vs-mine,
.gives-body, .purpose-body, .car-desc, .crs-desc, .mzp-open, .mzp-close{
  text-wrap: pretty;
}

p, li, h1, h2, h3, h4, .thread-body, .reply-body{
  overflow-wrap: break-word;
}

/* Ampersands, initials and units should not be left hanging alone. */
.eyebrow{ text-wrap: balance; }

/* ---------- visually hidden, still announced ----------
   For labels that would clutter the design but that a screen reader needs.
   Not display:none, which removes them from the accessibility tree too. */
.sr-only{
  position:absolute; width:1px; height:1px;
  padding:0; margin:-1px; overflow:hidden;
  clip:rect(0 0 0 0); clip-path:inset(50%);
  white-space:nowrap; border:0;
}
