/* Generated by book/scripts/build_chapters.py. Do not edit by hand — the next run overwrites it. */
/* Generated by book/scripts/restyle_fragment.py from the lpp build. Do not edit by hand — the next run overwrites it. */
.lpp-book{
  /* Bridged to the site's tokens — tokens.classic.css redefines these under
     [data-theme="white_blue_red"], so the book follows the site toggle for free.
     Every var() carries a literal fallback: an undefined custom property drops
     the whole declaration SILENTLY, and three token vocabularies exist on this
     network. */
  --ground:rgb(var(--color-bg-dark, 11 11 11));
  --panel:rgb(var(--color-bg-card, 17 17 24));
  --sunk:rgb(var(--color-bg-elevated, 26 26 36));
  --ink:var(--hh-text, #FFFFFF);
  --muted:rgb(var(--color-border, 255 255 255) / .55);
  --hair:rgb(var(--color-border, 255 255 255) / .12);
  --gold:rgb(var(--color-gold, 255 215 0));
  /* The album, not the site. Constant across themes except for contrast. */
  --accent:#35E0A1; --accent-ink:#35E0A1;
  --villain:#FF3D81; --villain-bg:#1F0E19;
  --rail:clamp(15rem,20vw,18.5rem);
  /* No serif token exists on this site. Declared locally on purpose: the serif
     body is the one thing that makes this read as a BOOK and not another page. */
  --serif:Georgia,'Iowan Old Style','Times New Roman',serif;
  --sans:var(--hh-font-heading, 'Helvetica Neue', Helvetica, Arial, sans-serif);
  --mono:ui-monospace,'SF Mono',Menlo,Consolas,'Liberation Mono',monospace;
}
[data-theme="white_blue_red"] .lpp-book{
  /* Classic Sticker. Structural colour already follows via the bridge above;
     only the album accents need a contrast-safe variant — #35E0A1 on white is
     ~1.6:1 and fails WCAG AA. */
  --accent:#0F8F62; --accent-ink:#0B7050;
  --villain:#B3175A; --villain-bg:#FBEEF3;
}
.lpp-book *{box-sizing:border-box;}
.lpp-book{margin:0;background:var(--ground);color:var(--ink);
  font-family:var(--serif);font-size:17px;line-height:1.62;
  -webkit-text-size-adjust:100%;}
.lpp-book .wrap{display:grid;grid-template-columns:var(--rail) minmax(0,1fr);
  gap:0;align-items:start;max-width:1500px;margin:0 auto;}
.lpp-book /* ---- contents rail ---- */
/* Explicit background rather than inheriting from body: sticky + overflow-y
   promotes this to its own compositing layer,.lpp-book and a transparent layer is at the
   mercy of whatever is rasterised behind it. */
.rail{position:sticky;top:calc(var(--hh-header-h, 5.8rem) + .5rem);max-height:calc(100dvh - var(--hh-header-h, 5.8rem) - 1rem);overflow-y:auto;padding:2.2rem 1.4rem 3rem 2rem;
  background:var(--ground);border-right:1px solid var(--hair);font-family:var(--sans);}
.lpp-book .rail h2{font-family:var(--mono);font-size:.66rem;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;color:var(--muted);margin:1.7rem 0 .5rem;}
.lpp-book .rail h2:first-of-type{margin-top:1.2rem;}
.lpp-book .brand{font-family:var(--sans);font-weight:800;font-size:1.02rem;line-height:1.2;
  letter-spacing:-.015em;margin:0;text-wrap:balance;}
.lpp-book .brand span{color:var(--accent);}
.lpp-book .brand-sub{font-family:var(--mono);font-size:.66rem;letter-spacing:.1em;
  text-transform:uppercase;color:var(--muted);margin:.45rem 0 0;}
.lpp-book .rail ol{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.1rem;}
.lpp-book .rail a{display:flex;gap:.6rem;text-decoration:none;color:var(--ink);opacity:.72;
  font-size:.83rem;line-height:1.35;padding:.28rem .5rem .28rem .55rem;border-radius:4px;
  border-left:2px solid transparent;}
.lpp-book .rail a:hover{opacity:1;background:var(--sunk);}
.lpp-book .rail a.on{opacity:1;border-left-color:var(--accent);background:var(--sunk);font-weight:600;}
.lpp-book .rail a .n{font-family:var(--mono);font-size:.72rem;color:var(--muted);
  font-variant-numeric:tabular-nums;flex:none;padding-top:.08em;}
.lpp-book .rail a.on .n{color:var(--accent);}
.lpp-book .rail .villain a .n{color:var(--villain);}
.lpp-book /* ---- reading column ---- */
.bookmain{padding:2.2rem 2rem 6rem;min-width:0;}
.lpp-book .doc{max-width:66ch;margin:0 auto;}
.lpp-book section{padding:2.2rem 0 1rem;scroll-margin-top:calc(var(--hh-header-h, 5.8rem) + .75rem);}
.lpp-book section + section{border-top:1px solid var(--hair);}
.lpp-book h1{font-family:var(--sans);font-size:clamp(1.5rem,3.4vw,2.05rem);font-weight:800;
  letter-spacing:-.02em;line-height:1.14;margin:0 0 .5rem;text-wrap:balance;}
.lpp-book h2{font-family:var(--sans);font-size:1.12rem;font-weight:700;letter-spacing:-.01em;
  margin:2.1rem 0 .6rem;text-wrap:balance;}
.lpp-book h3{font-family:var(--sans);font-size:1rem;font-weight:700;margin:1.5rem 0 .35rem;}
.lpp-book p{margin:0 0 .85rem;}
.lpp-book a{color:var(--accent-ink);}
.lpp-book strong{font-weight:700;}
.lpp-book hr{border:0;border-top:1px solid var(--hair);margin:2rem 0;}
.lpp-book ul,.lpp-book ol{margin:0 0 1rem;padding-left:1.3rem;}
.lpp-book li{margin:.25rem 0;}
.lpp-book code{font-family:var(--mono);font-size:.82em;background:var(--sunk);
  padding:.1em .36em;border-radius:3px;}
.lpp-book pre{background:var(--sunk);padding:.9rem;overflow-x:auto;border-radius:5px;}
.lpp-book blockquote{margin:1.2rem 0;padding:.75rem 1rem;background:var(--sunk);
  border-left:3px solid var(--accent);border-radius:0 4px 4px 0;}
.lpp-book blockquote p:last-child{margin-bottom:0;}
.lpp-book /* eyebrow under each chapter title */
.subtitle{font-family:var(--mono);font-size:.72rem;letter-spacing:.09em;
  text-transform:uppercase;color:var(--muted);margin:0 0 1.6rem;line-height:1.7;}
.lpp-book /* ---- lyrics ---- */
.lyrics{white-space:pre-wrap;font-family:var(--mono);font-size:.83rem;line-height:1.7;
  background:var(--sunk);border:1px solid var(--hair);border-radius:6px;
  padding:1.1rem 1.2rem;margin:1rem 0 2rem;overflow-x:auto;}
.lpp-book /* ---- annotations ---- */
.annotation{margin:1.7rem 0;padding-left:1rem;border-left:2px solid var(--hair);}
.lpp-book .ann-bar{font-family:var(--serif);font-style:italic;font-size:1.06rem;line-height:1.45;
  margin:0 0 .45rem;color:var(--ink);text-wrap:balance;}
.lpp-book .ann-meta{font-family:var(--mono);font-size:.66rem;letter-spacing:.11em;
  text-transform:uppercase;color:var(--muted);margin:0 0 .7rem;}
.lpp-book .annotation p{margin:0 0 .5rem;font-size:.97rem;}
.lpp-book .annotation code{font-size:.78em;}
.lpp-book /* ---- defense sheets ---- */
.defense{background:var(--villain-bg);border:1px solid var(--hair);
  border-left:3px solid var(--villain);border-radius:0 6px 6px 0;
  padding:1.1rem 1.2rem;margin:2rem 0;}
.lpp-book .defense h2{margin-top:0;color:var(--villain);}
.lpp-book .defense blockquote{border-left-color:var(--villain);background:transparent;
  padding-left:.9rem;}
.lpp-book /* ---- tables ---- */
.tablewrap{overflow-x:auto;margin:1.2rem 0;
  border:1px solid var(--hair);border-radius:6px;}
.lpp-book table{border-collapse:collapse;width:100%;font-family:var(--sans);font-size:.8rem;
  line-height:1.5;min-width:34rem;}
.lpp-book th,.lpp-book td{border-bottom:1px solid var(--hair);padding:.55rem .7rem;text-align:left;
  vertical-align:top;}
.lpp-book th{background:var(--sunk);font-weight:700;font-size:.7rem;letter-spacing:.06em;
  text-transform:uppercase;color:var(--muted);}
.lpp-book tbody tr:last-child td{border-bottom:0;}
.lpp-book td:first-child{font-variant-numeric:tabular-nums;}
.lpp-book /* ---- glossary ---- */
.gl{margin:0 0 1.4rem;padding-bottom:1.1rem;border-bottom:1px solid var(--hair);}
.lpp-book .gl:last-child{border-bottom:0;}
.lpp-book .gl h3{margin:0 0 .3rem;display:flex;align-items:baseline;gap:.6rem;flex-wrap:wrap;}
.lpp-book .gl .cat{font-family:var(--mono);font-size:.6rem;letter-spacing:.12em;
  text-transform:uppercase;color:var(--muted);border:1px solid var(--hair);
  border-radius:3px;padding:.12em .4em;font-weight:400;}
.lpp-book .gl p{margin:0 0 .35rem;font-size:.95rem;}
.lpp-book .gl .def{background:var(--sunk);border-left:3px solid var(--accent);
  padding:.55rem .75rem;border-radius:0 4px 4px 0;margin-top:.5rem;font-size:.92rem;}
.lpp-book .gl .ann-meta{margin:.5rem 0 0;}
.lpp-book /* ---- title page ---- */
#titlepage h1{font-size:clamp(2rem,6vw,3.3rem);letter-spacing:-.035em;line-height:1.02;}
.lpp-book #titlepage .subtitle{font-family:var(--serif);font-size:1rem;text-transform:none;
  letter-spacing:0;color:var(--muted);line-height:1.6;}
.lpp-book /* ---- header strip on small screens ---- */
.topbar{display:none;position:sticky;top:0;z-index:20;background:var(--ground);
  border-bottom:1px solid var(--hair);padding:.7rem 1rem;
  font-family:var(--sans);align-items:center;gap:.8rem;}
.lpp-book .topbar button{font-family:var(--mono);font-size:.68rem;letter-spacing:.1em;
  text-transform:uppercase;background:var(--sunk);color:var(--ink);
  border:1px solid var(--hair);border-radius:4px;padding:.4rem .7rem;cursor:pointer;}
.lpp-book .topbar strong{font-size:.85rem;letter-spacing:-.01em;}
.lpp-book :where(a,.lpp-book button):focus-visible{outline:2px solid var(--accent);outline-offset:2px;
  border-radius:3px;}
@media (max-width:1000px){.lpp-book .wrap{grid-template-columns:1fr;}
.lpp-book .topbar{display:flex;}
.lpp-book .rail{position:static;height:auto;border-right:0;border-bottom:1px solid var(--hair);
    padding:1rem 1.2rem 1.6rem;display:none;}
.lpp-book .rail.open{display:block;}
.lpp-book .bookmain{padding:1.2rem 1.2rem 4rem;}
.lpp-book{font-size:16px;}}
@media (prefers-reduced-motion:reduce){.lpp-book *{animation:none!important;transition:none!important;scroll-behavior:auto!important;}}

/* The site header is position:fixed (~93px). Content that starts at viewport top
   renders underneath it. whitepaper.php solves this with padding:5rem on its own
   wrapper; same convention here, and the sticky rail is offset to clear it too. */
.lpp-book{max-width:1400px;margin:0 auto;
  padding:calc(var(--hh-header-h, 5.8rem) + 1rem) 1rem 0;}
.lpp-book .wrap{gap:0;}
.lpp-book .rail{top:calc(var(--hh-header-h, 5.8rem) + .5rem);height:auto;
  max-height:calc(100dvh - var(--hh-header-h, 5.8rem) - 1rem);
  padding-top:1.4rem;background:transparent;}
.lpp-book .bookmain{padding-top:1.4rem;}
.lpp-book .topbar{top:calc(var(--hh-header-h, 5.8rem) + .25rem);}
.lpp-book section{scroll-margin-top:calc(var(--hh-header-h, 5.8rem) + .75rem);}
.lpp-book section:first-of-type{padding-top:.5rem;}

/* ── chapter edition ──────────────────────────────────────────────────────
   Lyrics are per-line elements, not one pre-wrapped blob. That is what a
   later sync layer needs to highlight or seek a line, and it costs nothing
   today: with no sync JSON the list renders exactly like the blob did. */
.lpp-book ol.lyrics{list-style:none;margin:1rem 0 2rem;padding:1.1rem 1.2rem;
  font-family:var(--mono);font-size:.83rem;line-height:1.7;
  background:var(--sunk);border:1px solid var(--hair);border-radius:6px;
  overflow-x:auto;}
.lpp-book ol.lyrics li{margin:0;padding:0 .15rem;border-radius:3px;}
.lpp-book ol.lyrics li.brk{height:.85em;}
/* Structure markers ([Verse 1], [Hook]) are shown but carry no data-i — they
   were not sung, so the sync file does not count them either. See
   lyrics_to_lines(). Dimmed so they read as scaffolding, not as a lyric. */
.lpp-book ol.lyrics li.mark{opacity:.55;font-size:.78rem;letter-spacing:.04em;
  text-transform:uppercase;margin-top:.5em;}

/* ── the story layer ──────────────────────────────────────────────────────
   A beat is narrative prose sitting between two lyric lines. It must not read
   like an annotation: those are decode-and-danger, this is the story, and if
   they render alike a reader has no way to tell teaching from telling. So the
   beat is set in the body face (annotations are mono), indented behind a rule,
   and given room. */
.lpp-book aside.beat{margin:.9rem 0 1.1rem;padding:.15rem 0 .15rem 1rem;
  border-left:3px solid var(--accent);font-family:inherit;font-size:.95rem;
  line-height:1.65;color:var(--ink);}
.lpp-book aside.beat p{margin:0;}
/* The beats live INSIDE ol.lyrics, which is mono and scrolls sideways. Both are
   wrong for a paragraph: reset them here rather than lifting the beats out of
   the list, because their position in the list IS the anchor. */
.lpp-book ol.lyrics aside.beat{font-family:var(--body,inherit);white-space:normal;
  max-width:34rem;}

/* Chapter art. Square per style bible rule 18 — aspect-ratio holds the box
   before the file lands, so a slow connection does not reflow the page. */
.lpp-book figure.chapter-art{margin:1.2rem 0 1.4rem;}
.lpp-book figure.chapter-art img{display:block;width:100%;height:auto;
  aspect-ratio:1;max-width:36rem;border-radius:8px;border:1px solid var(--hair);
  background:var(--sunk);}

/* The link into the game. Deliberately quiet: it is an offer, not the point of
   the page, and the page's job is still to be readable. */
.lpp-book p.playlink{margin:0 0 1.4rem;font-size:.86rem;}
.lpp-book p.playlink a{color:var(--accent);text-decoration:none;
  border-bottom:1px solid currentColor;padding-bottom:1px;}
.lpp-book p.playlink a:hover,.lpp-book p.playlink a:focus-visible{opacity:.8;}

/* Chapter-to-chapter navigation. The rail is the index; this is the spine. */
.lpp-book .chapnav{display:flex;gap:1.2rem;justify-content:space-between;
  margin:2.6rem 0 0;padding-top:1.4rem;border-top:1px solid var(--hair);
  font-family:var(--sans);font-size:.86rem;line-height:1.35;}
.lpp-book .chapnav a{color:var(--accent-ink);text-decoration:none;max-width:47%;}
.lpp-book .chapnav a:hover{text-decoration:underline;}
.lpp-book .chapnav a.prev{text-align:left;}
.lpp-book .chapnav a.next{margin-left:auto;text-align:right;}
.lpp-book .chapnav .dir{display:block;font-family:var(--mono);font-size:.62rem;
  letter-spacing:.12em;text-transform:uppercase;color:var(--muted);
  margin-bottom:.2rem;}

/* Contents page. Rendered by templates/book-chapter-content.php from the
   manifest — scoped book classes only, never a Tailwind utility, because the
   built bundle cannot ship through deploy-safe.sh. */
.lpp-book .contents-hero{display:flex;gap:1.6rem;align-items:flex-start;
  flex-wrap:wrap;margin:0 0 2rem;}
.lpp-book .contents-cover{width:min(220px,44vw);height:auto;border-radius:8px;
  border:1px solid var(--hair);display:block;}
.lpp-book .contents-lede{flex:1 1 18rem;min-width:0;}
.lpp-book .contents-lede h1{margin-bottom:.35rem;}
.lpp-book .contents-group{margin:2rem 0 0;}
.lpp-book .contents-group h2{font-family:var(--mono);font-size:.68rem;
  font-weight:600;letter-spacing:.16em;text-transform:uppercase;
  color:var(--muted);margin:1.8rem 0 .6rem;}
.lpp-book .contents-group.villain h2{color:var(--villain);}
.lpp-book ol.contents-list{list-style:none;margin:0;padding:0;}
.lpp-book ol.contents-list li{margin:0 0 .35rem;}
.lpp-book ol.contents-list a{display:flex;gap:.8rem;align-items:baseline;
  text-decoration:none;color:var(--ink);padding:.5rem .6rem;border-radius:5px;
  border:1px solid transparent;}
.lpp-book ol.contents-list a:hover{background:var(--sunk);
  border-color:var(--hair);}
.lpp-book ol.contents-list .n{font-family:var(--mono);font-size:.74rem;
  color:var(--muted);font-variant-numeric:tabular-nums;flex:none;}
.lpp-book ol.contents-list .t{font-family:var(--sans);font-weight:600;
  font-size:.97rem;}
.lpp-book ol.contents-list .job{display:block;font-family:var(--sans);
  font-weight:400;font-size:.82rem;color:var(--muted);margin-top:.15rem;}
.lpp-book .contents-foot{margin:2.6rem 0 0;padding-top:1.4rem;
  border-top:1px solid var(--hair);font-family:var(--sans);font-size:.84rem;
  color:var(--muted);}
.lpp-book .contents-foot a{color:var(--accent-ink);}
