/* Worlds: every game the journal travels to repaints the page (tokens below), swaps the type, and gets its own
   living scene behind the paper (scene.js). Paper surfaces (article sheet, cards, side boxes) stay light in every
   world so reading never suffers; dark worlds darken only the page around them (data-dark).
   Keys match assets/worlds.json. No character art: colour, type and scenery only. */

:root{--paper:#fff;--page-ink:var(--ink);--page-soft:var(--soft);--w-accent:var(--red)}
.post,.card,.side-box{background-color:var(--paper)}

/* ---------- the worlds ---------- */
:root[data-world=starchasers],.ad-sheet[data-world=starchasers]{
  --sun:#17123a;--sand:#221b4d;--sky:#3b2e6e;--b1:#7a5aa8;--b2:#8b6fd6;--b3:#4b3592;--abyss:#120e2e;--ink:#1c1740;--soft:#5a5285;
  --page-ink:#f3eeff;--page-soft:#bdb2e6;--paper:#fcfbff;--w-accent:#ffd27a;
  --display:"Space Grotesk","Geist",system-ui,sans-serif;--mono:"Pixelify Sans","Geist Mono",ui-monospace,monospace}
:root[data-world=liminal-outliers],.ad-sheet[data-world=liminal-outliers]{
  --sun:#eef3f1;--sand:#e3ebe8;--sky:#d3e3e2;--b1:#b4cdce;--b2:#4f8a8f;--b3:#2f5f66;--abyss:#1f2b2e;--ink:#1f2b2e;--soft:#5c6f72;
  --paper:#fdfefd;--w-accent:#8cc63f;
  --display:"Fraunces",Georgia,serif;--mono:"IBM Plex Mono","Geist Mono",ui-monospace,monospace}
:root[data-world=deadend],.ad-sheet[data-world=deadend]{
  --sun:#15111d;--sand:#1f1828;--sky:#2b2036;--b1:#5a3d52;--b2:#c26a2a;--b3:#8e4517;--abyss:#120d18;--ink:#231b21;--soft:#6b5a60;
  --page-ink:#f3e9dc;--page-soft:#bba99a;--paper:#f8f2e8;--w-accent:#ffb347;
  --display:"Playfair Display",Georgia,serif;--mono:"Courier Prime","Geist Mono",ui-monospace,monospace}
:root[data-world=overgame],.ad-sheet[data-world=overgame]{
  --sun:#0e0b12;--sand:#17121c;--sky:#241520;--b1:#4a1a26;--b2:#c9283a;--b3:#7a1420;--abyss:#0a080d;--ink:#1a1216;--soft:#6a5459;
  --page-ink:#f6eef0;--page-soft:#b8a0a6;--paper:#fbf8f8;--w-accent:#ff3b4e;
  --display:"Bebas Neue","Geist",system-ui,sans-serif;--mono:"JetBrains Mono","Geist Mono",ui-monospace,monospace}
:root[data-world=ai-ice],.ad-sheet[data-world=ai-ice]{
  --sun:#0b1433;--sand:#0f2140;--sky:#123a52;--b1:#2f6f86;--b2:#2a8ea0;--b3:#1d6474;--abyss:#081029;--ink:#14203d;--soft:#56688c;
  --page-ink:#eaf6ff;--page-soft:#a8c4dc;--paper:#f8fbff;--w-accent:#ffcf9a;
  --display:"Unbounded","Geist",system-ui,sans-serif;--body:"Outfit","Geist",system-ui,sans-serif}
:root[data-world=archive],.ad-sheet[data-world=archive]{
  --sun:#f4ead6;--sand:#efe0c2;--sky:#e8d4ae;--b1:#d9bb8a;--b2:#a8642e;--b3:#7a4520;--abyss:#3a2616;--ink:#2e2015;--soft:#76604a;
  --paper:#fffaf0;--w-accent:#b5652b;
  --display:"Fraunces",Georgia,serif;--mono:"Special Elite","Geist Mono",ui-monospace,monospace}

/* page colours travel smoothly when a world is previewed or entered */
body,header,.post,.card,.side-box,.crumbs a,.shelf-head h1,.post-head h1{transition:background-color .6s,color .6s,border-color .6s}
:root[data-world] .sunball{opacity:0}

/* ---------- dark worlds: the page around the paper goes dark ---------- */
:root[data-dark] body{color:var(--page-ink)}
:root[data-dark] header{background:color-mix(in srgb,var(--sun) 70%,transparent);border-bottom-color:color-mix(in srgb,var(--page-ink) 14%,transparent)}
:root[data-dark] body::before{background:var(--sun)}
:root[data-dark] .brand span{color:#fff}
:root[data-dark] header nav a,:root[data-dark] .skin,:root[data-dark] .world-chip,:root[data-dark] .tweaks summary{color:var(--page-ink)}
:root[data-dark] .skin{border-color:color-mix(in srgb,var(--page-ink) 35%,transparent)}
:root[data-dark] .slot svg path:first-child{stroke:var(--page-ink)}
:root[data-dark] .slot .zz{color:var(--page-ink)}
:root[data-dark] header nav a:hover{border-color:var(--w-accent);background:color-mix(in srgb,var(--w-accent) 14%,transparent)}
:root[data-dark] .crumbs a,:root[data-dark] .crumbs span,:root[data-dark].reading .crumbs a,:root[data-dark] .reading .crumbs a,:root[data-dark] .reading .crumbs span{color:var(--page-soft)}
:root[data-dark] :is(.hero h1,.hero .sub,.shore h2,.more h2,.shelf-head h1,.sc-page h2){color:var(--page-ink)}
:root[data-dark] :is(.hero .kicker,h2 small,.note,.shelf-head p,.post-status,.hero-links span){color:var(--page-soft)}
:root[data-dark] .note a,:root[data-dark] .post-status a{color:var(--page-ink)}
:root[data-dark] :is(.card,.post,.side-box,.polaroid,.say,.chat,.cover,.shelf-tabs a,.deck-list,.story-band){color:var(--ink)}
:root[data-dark] .motto{background:var(--w-accent);color:var(--sun)}
:root[data-dark] .hero-links a{color:var(--page-ink);border-color:color-mix(in srgb,var(--page-ink) 35%,transparent)}
:root[data-dark] footer{background:color-mix(in srgb,var(--sun) 80%,#000);color:var(--page-soft);border-top:1px solid color-mix(in srgb,var(--page-ink) 12%,transparent)}
:root[data-dark] footer strong{color:var(--page-ink)}
:root[data-dark] footer a{color:var(--page-ink)}
:root[data-dark] .cassette .lbl{background:#fffaf0}
:root[data-dark] .shore{background:linear-gradient(180deg,var(--sky) 0,var(--sun) 260px)}
:root[data-dark] .sea{background:linear-gradient(180deg,var(--sun) 0%,var(--sand) 55%,var(--sky) 100%)}
:root[data-dark] .shelf-tabs a[aria-current]{background:var(--w-accent);color:var(--sun);border-color:var(--w-accent)}

/* ---------- header: brand, sections, then the HUD (travel chip, Ache's bed, settings) ---------- */
header .wrap{flex-wrap:nowrap}
.main-nav{flex:1 1 auto;justify-content:center;min-width:0}
.hud{display:flex;align-items:center;gap:6px;flex:none}
.world-chip{display:inline-flex;align-items:center;gap:8px;padding:6px 12px 6px 8px;border-radius:99px;border:1px solid color-mix(in srgb,var(--w-accent) 60%,transparent);background:color-mix(in srgb,var(--w-accent) 10%,transparent);color:var(--ink);font:500 13px var(--mono);cursor:pointer;white-space:nowrap;transition:background .3s,border-color .3s}
.world-chip:hover,.world-chip[aria-expanded=true]{background:color-mix(in srgb,var(--w-accent) 24%,transparent)}
.wc-globe{width:18px;height:18px;flex:none;color:var(--w-accent)}
.wc-globe .orbit{transform-origin:12px 12px;animation:spin 14s linear infinite}
.tweaks{position:relative}
.tweaks summary{list-style:none;display:grid;place-items:center;width:34px;height:34px;border-radius:50%;cursor:pointer;color:var(--ink);border:1px solid transparent}
.tweaks summary::-webkit-details-marker{display:none}
.tweaks summary:hover,.tweaks[open] summary{border-color:color-mix(in srgb,var(--b2) 50%,transparent)}
.tweaks summary svg{width:18px;height:18px}
.tweaks-pop{position:absolute;right:0;top:calc(100% + 10px);z-index:30;display:flex;flex-direction:column;gap:6px;padding:10px;border-radius:14px;background:#fff;box-shadow:0 20px 40px -18px rgba(19,34,75,.55);border:1px solid rgba(26,90,166,.15);min-width:180px}
.tweaks-pop .skin{text-align:left;color:#13224b;border-color:rgba(26,90,166,.25)}
.tweaks-pop small{font:11px var(--mono);color:#47648c;padding:2px 4px 0}
@media (max-width:1060px){
  header .wrap{flex-wrap:wrap;row-gap:8px}
  .main-nav{order:3;flex:1 0 100%;justify-content:flex-start;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin-inline:-4px;padding-inline:4px;-webkit-mask:linear-gradient(90deg,#000 88%,transparent)}
  .main-nav::-webkit-scrollbar{display:none}
  .main-nav a{flex:none}
  header .wrap{padding-block:10px}
}

/* ---------- the atlas (opens from the chip) ---------- */
.atlas{position:fixed;z-index:40;width:min(360px,calc(100vw - 16px));background:#fff;color:#13224b;border-radius:16px;padding:14px;box-shadow:0 30px 60px -24px rgba(10,14,40,.6);border:1px solid rgba(26,90,166,.15);animation:pop .25s cubic-bezier(.3,1.6,.5,1)}
.atlas-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;padding:2px 6px 10px}
.atlas-head b{font:800 20px "Geist",system-ui,sans-serif}
.atlas-head span{font:12px "Geist Mono",monospace;color:#47648c}
.atlas-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}
.atlas-row{display:grid;grid-template-columns:46px minmax(0,1fr) 26px;align-items:center;gap:10px;padding:8px;border-radius:10px}
.atlas-row:hover,.atlas-row:focus-visible{background:#f2f5fb}
.atlas-row[aria-current]{background:#fff4d6}
.atlas-code{font:600 12px "Geist Mono",monospace;text-align:center;padding:5px 0;border-radius:6px;color:#fff;background:var(--wc,#13224b)}
.atlas-txt{display:flex;flex-direction:column;min-width:0}
.atlas-txt b{font:600 15px "Geist",system-ui,sans-serif}
.atlas-txt small{font:12px "Geist Mono",monospace;color:#47648c;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.atlas-stamp{width:26px;height:26px;border-radius:50%;border:1.5px dashed #c5cfe0;display:grid;place-items:center;color:#d7182a;font-size:13px}
.atlas-stamp.on{border:1.5px solid #d7182a;transform:rotate(-12deg)}
.atlas-note{margin:10px 6px 2px;font:12px "Geist Mono",monospace;color:#47648c}

/* each world's own colour, wherever a world is named (atlas, departures, cards, strips) */
[data-w=tzero]{--wc:#d7182a}
[data-w=starchasers],[data-world=starchasers] .card-world i{--wc:#5b3f9e}
[data-w=liminal-outliers]{--wc:#4f8a8f}
[data-w=deadend]{--wc:#8e4517}
[data-w=overgame]{--wc:#7a1420}
[data-w=ai-ice]{--wc:#1d6474}
[data-w=archive]{--wc:#7a4520}
[data-w=contrary-quest]{--wc:#1b1b1b}
.card[data-world=starchasers],.world-strip[data-world=starchasers]{--wc:#5b3f9e;--wg:#ffd27a}
.card[data-world=liminal-outliers],.world-strip[data-world=liminal-outliers]{--wc:#4f8a8f;--wg:#8cc63f}
.card[data-world=deadend],.world-strip[data-world=deadend]{--wc:#8e4517;--wg:#ffb347}
.card[data-world=overgame],.world-strip[data-world=overgame]{--wc:#7a1420;--wg:#ff3b4e}
.card[data-world=ai-ice],.world-strip[data-world=ai-ice]{--wc:#1d6474;--wg:#ffcf9a}
.card[data-world=archive],.world-strip[data-world=archive]{--wc:#7a4520;--wg:#e0a86a}

/* ---------- cards in a world ---------- */
.card[data-world]{box-shadow:inset 0 4px 0 var(--wc),0 14px 34px -22px rgba(26,90,166,.5)}
.card[data-world].has-pic{box-shadow:0 14px 34px -22px rgba(26,90,166,.5)}
.card[data-world].has-pic .card-pic{border-bottom:4px solid var(--wc)}
.card-world{align-self:flex-start;display:inline-flex;align-items:center;gap:7px;font:500 11px "Geist Mono",monospace;letter-spacing:.06em;text-transform:uppercase;color:var(--wc)}
.card-world i{font-style:normal;padding:2px 6px;border-radius:4px;background:var(--wc);color:#fff;letter-spacing:.04em}
.card .tag+.card-world{margin-top:-6px}

/* ---------- world strip on top of an article ---------- */
.world-strip{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;margin:-40px calc(-1 * clamp(20px,6vw,64px)) 30px;padding:12px clamp(20px,6vw,64px);background:var(--wc);color:#fff;font:500 13px "Geist Mono",monospace;position:relative;overflow:hidden}
.world-strip::after{content:"";position:absolute;inset:0;background:linear-gradient(100deg,transparent 30%,rgba(255,255,255,.18) 50%,transparent 70%);transform:translateX(-100%);animation:ws-shine 5s 1s ease-in-out infinite}
@keyframes ws-shine{0%,60%{transform:translateX(-100%)}100%{transform:translateX(100%)}}
.ws-code{padding:3px 8px;border-radius:4px;background:var(--wg);color:var(--wc);font-weight:600}
.ws-name{font-weight:600;font-size:14px}
.ws-genre{opacity:.75}
.ws-go{margin-left:auto;opacity:.9}
.world-strip:hover .ws-go{text-decoration:underline;text-underline-offset:3px}

/* ---------- articles: each world sets its own type on the page ---------- */
:root[data-world=starchasers] .post-head{border-bottom:2px dotted color-mix(in srgb,var(--b2) 55%,transparent)}
:root[data-world=starchasers] .post-head h1{letter-spacing:-.02em}
:root[data-world=liminal-outliers] .post-head h1,:root[data-world=archive] .post-head h1{font-weight:300;font-style:italic;letter-spacing:-.01em;font-variation-settings:"opsz" 144}
:root[data-world=liminal-outliers] .post-head{border-bottom:2px solid var(--w-accent)}
:root[data-world=deadend] .post-head h1{font-weight:900;letter-spacing:-.01em}
:root[data-world=deadend] .post-head{border-bottom:1px solid #231b21;box-shadow:0 4px 0 -3px #231b21}
:root[data-world=overgame] .post-head h1{font-weight:400;text-transform:uppercase;letter-spacing:.01em;font-size:clamp(44px,7vw,76px);line-height:.92}
:root[data-world=overgame] .post-head{border-bottom:3px solid var(--w-accent)}
:root[data-world=ai-ice] .post-head h1{font-weight:700;letter-spacing:-.03em}
:root[data-world=ai-ice] .post{border-radius:22px}
:root[data-world=archive] .post{background-image:repeating-linear-gradient(180deg,transparent 0 31px,rgba(122,69,32,.05) 31px 32px)}
:root[data-world] .post-body h2,:root[data-world] .post-body h3{font-family:var(--display)}
:root[data-world=overgame] .post-body h2{text-transform:uppercase;font-weight:400;letter-spacing:.02em}

/* ---------- the arrival: a boarding pass, a stamp, a gate that opens ---------- */
.arrival{position:fixed;inset:0;z-index:60;display:grid;place-items:center;pointer-events:auto;cursor:pointer;--wc:#13224b;--wg:#ffd27a}
.arrival[data-to=starchasers]{--wc:#2a2163;--wg:#ffd27a}
.arrival[data-to=liminal-outliers]{--wc:#2f5f66;--wg:#8cc63f}
.arrival[data-to=deadend]{--wc:#1f1828;--wg:#ffb347}
.arrival[data-to=overgame]{--wc:#17121c;--wg:#ff3b4e}
.arrival[data-to=ai-ice]{--wc:#0f2140;--wg:#ffcf9a}
.arrival[data-to=archive]{--wc:#3a2616;--wg:#e0a86a}
.arrival[data-to=tzero]{--wc:#13224b;--wg:#d7182a}
.gate{position:absolute;top:0;bottom:0;width:50.5%;background:var(--wc);animation:gate-in .38s cubic-bezier(.7,0,.3,1) both}
.gate-l{left:0;transform-origin:left}.gate-r{right:0;transform-origin:right}
.gate::after{content:"";position:absolute;top:0;bottom:0;width:3px;background:var(--wg);opacity:.8}
.gate-l::after{right:0}.gate-r::after{left:0}
@keyframes gate-in{from{transform:scaleX(0)}to{transform:scaleX(1)}}
.arrival.open .gate{transition:transform .55s cubic-bezier(.7,0,.3,1)}
.arrival.open .gate-l{transform:translateX(-101%)}.arrival.open .gate-r{transform:translateX(101%)}
.pass{position:relative;width:min(420px,calc(100vw - 40px));background:#fffdf6;color:#13224b;border-radius:14px;padding:16px 20px 18px;box-shadow:0 30px 60px -20px rgba(0,0,0,.6);animation:pass-in .45s .12s cubic-bezier(.3,1.4,.5,1) both;font-family:"Geist Mono",monospace}
.pass::before,.pass::after{content:"";position:absolute;top:58px;width:18px;height:18px;border-radius:50%;background:var(--wc)}
.pass::before{left:-9px}.pass::after{right:-9px}
@keyframes pass-in{from{transform:translateY(40px) rotate(-4deg);opacity:0}to{transform:none;opacity:1}}
.arrival.open .pass{transition:transform .5s cubic-bezier(.6,0,.4,1),opacity .4s;transform:translateY(-30px) scale(.94);opacity:0}
.pass-top{display:flex;justify-content:space-between;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:#47648c;padding-bottom:12px;border-bottom:1.5px dashed #d5dbe7}
.pass-route{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:10px;padding:14px 0 8px}
.pass-end{display:flex;flex-direction:column;min-width:0}
.pass-end:last-child{text-align:right}
.pass-end small{font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:#47648c}
.pass-end b{font:800 34px "Geist",system-ui,sans-serif;letter-spacing:-.02em;line-height:1}
.pass-end span{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pass-plane{font-style:normal;color:#d7182a;font-size:20px;animation:spin 2s linear infinite}
.pass-foot{font-size:12px;color:#47648c}
.pass-stamp{position:absolute;right:-16px;top:-30px;display:flex;flex-direction:column;align-items:center;justify-content:center;width:84px;height:84px;border-radius:50%;border:3px double #d7182a;color:#d7182a;background:rgba(255,253,246,.9);transform:rotate(-14deg) scale(2.2);opacity:0;animation:stamp .22s .5s cubic-bezier(.5,0,.6,1.6) forwards;font-size:9px;letter-spacing:.14em;text-transform:uppercase}
.pass-stamp b{font:800 22px "Geist",system-ui,sans-serif;letter-spacing:0}
@keyframes stamp{to{transform:rotate(-14deg) scale(1);opacity:1}}

/* ---------- departures board (homepage) ---------- */
#departures h2 small a{color:inherit;text-decoration:underline;text-underline-offset:3px}
.dep-board{background:#101524;border-radius:16px;padding:14px;box-shadow:0 30px 60px -30px rgba(10,14,40,.7),inset 0 0 0 1px rgba(255,255,255,.06);color:#f3f0e6;font-family:"Geist Mono",monospace;overflow:hidden}
.dep-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.dep-row{display:grid;grid-template-columns:70px minmax(0,1.3fr) minmax(0,1.2fr) minmax(0,.9fr);gap:14px;align-items:center;padding:10px 12px;border-radius:10px;transition:background .25s,transform .25s}
a.dep-row:hover,a.dep-row:focus-visible{background:rgba(255,255,255,.07);transform:translateX(4px)}
.dep-head{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:#7d86a3;padding-block:4px}
.dep-code{font-weight:600;font-size:15px;text-align:center;padding:6px 0;border-radius:6px;background:var(--wc);color:#fff;letter-spacing:.08em;min-height:30px}
.dep-name{font:600 19px "Geist Mono",monospace;letter-spacing:.06em;color:#ffe9a8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dep-name,.dep-code{text-shadow:0 0 12px rgba(255,220,140,.25)}
.dep-genre{font-size:13px;color:#aab3cc;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dep-status{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:#7fe0a2;display:flex;align-items:center;gap:8px}
.dep-status::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor;box-shadow:0 0 8px currentColor;animation:pulse 1.8s infinite}
.dep-wip{cursor:default;background:repeating-linear-gradient(-45deg,rgba(255,212,0,.13) 0 14px,rgba(0,0,0,0) 14px 28px)}
.dep-wip .dep-status{color:#ffd400}
.dep-wip .dep-name{color:#ffd400}
@media (max-width:700px){
  .dep-row{grid-template-columns:56px minmax(0,1fr);row-gap:2px}
  .dep-head{display:none}
  .dep-genre{grid-column:2}
  .dep-status{grid-column:2}
  .dep-code{grid-row:span 3;align-self:start}
}

/* reduced motion: the arrival is skipped in JS; nothing here loops */
@media (prefers-reduced-motion:reduce){.world-strip::after{display:none}}

/* ---------- forms: each world morphs with the screen (data-form phone/tablet/desk, data-shape tall/wide) ---------- */
:root[data-form=phone] .pass-route{grid-template-columns:1fr;justify-items:start;gap:4px}
:root[data-form=phone] .pass-end:last-child{text-align:left}
:root[data-form=phone] .pass-plane{transform:rotate(90deg);animation:none;margin-left:8px}
:root[data-form=phone] .gate{width:100%;height:50.5%;left:0;right:auto}
:root[data-form=phone] .gate-l{top:0;bottom:auto;transform-origin:top}
:root[data-form=phone] .gate-r{bottom:0;top:auto;transform-origin:bottom}
:root[data-form=phone] .gate::after{width:auto;height:3px;left:0;right:0}
:root[data-form=phone] .gate-l::after{bottom:0;top:auto}:root[data-form=phone] .gate-r::after{top:0}
:root[data-form=phone] .arrival .gate{animation-name:gate-in-v}
@keyframes gate-in-v{from{transform:scaleY(0)}to{transform:scaleY(1)}}
:root[data-form=phone] .arrival.open .gate-l{transform:translateY(-101%)}
:root[data-form=phone] .arrival.open .gate-r{transform:translateY(101%)}
:root[data-form=phone] .world-strip{gap:4px 10px;font-size:12px}
:root[data-form=phone] .ws-genre{display:none}
:root[data-form=phone] .ws-go{flex-basis:100%;margin-left:0}
:root[data-form=phone] .wc-name{max-width:110px;overflow:hidden;text-overflow:ellipsis}
/* phones: the paper sits closer to the edges in a world, so the scenery frames it instead of crowding it */
:root[data-form=phone][data-world] .reading main{padding-top:14px}
:root[data-form=phone][data-world=overgame] .post-head h1{font-size:clamp(40px,12vw,56px)}
:root[data-form=phone][data-world=starchasers] .post-head{border-bottom-style:dashed}

/* ---------- fixes for dark worlds ---------- */
.brand{font-family:"Geist",system-ui,sans-serif}
:root[data-dark] .deck-tab{background:#fffaf0;color:#13224b}
:root[data-dark] .story-band .btn{color:#fff6cf}
:root[data-dark] .toc a{color:var(--soft)}
:root[data-world=overgame] .shelf-head h1{letter-spacing:.01em;font-weight:400}
.reading:has(.shelf) [data-world] .shelf-tabs{display:none}
:root[data-world] .shelf-tabs{display:none}
:root[data-world] .shelf-head .tag{color:var(--w-accent)}

/* ---------- reading, made for people: a calm column, a measure that's easy on the eyes, the world fading on request ---------- */
.post-head,.post-body,.post-sheet>.share,.post-foot,.post-sheet>.ache-note{max-width:70ch;margin-inline:auto}
.post-head{max-width:76ch}
.post-body{font-size:calc(18px * var(--read-scale,1));line-height:1.75;text-wrap:pretty;hyphens:auto;-webkit-hyphens:auto}
.post-body p{max-width:68ch}
.post-body h2{scroll-margin-top:110px}
.post-body .tz-speaking{background:linear-gradient(transparent 0,color-mix(in srgb,var(--w-accent) 28%,transparent) 0);border-radius:4px;box-shadow:-6px 0 0 color-mix(in srgb,var(--w-accent) 28%,transparent),6px 0 0 color-mix(in srgb,var(--w-accent) 28%,transparent);transition:background .3s}
/* a quiet first letter in the world's own type */
:root[data-world] .post-body>p.dropcap::first-letter{font-family:var(--display);float:left;font-size:3.3em;line-height:.86;margin:.08em .1em 0 0;color:var(--b3);font-weight:700}
:root[data-world=overgame] .post-body>p.dropcap::first-letter{font-weight:400}
/* reading progress: a thread across the top in the world's colour */
.reading{--read-p:0}
.reading .read-bar{position:fixed;left:0;top:0;height:3px;width:100%;z-index:30;transform-origin:left;transform:scaleX(var(--read-p));background:var(--w-accent);pointer-events:none;transition:transform .15s}
/* focus mode: the paper comes forward, everything else steps back */
:root[data-focus] .post-side,:root[data-focus] .crumbs,:root[data-focus] .more,:root[data-focus] .deck{opacity:0;pointer-events:none;transition:opacity .5s}
:root[data-focus] .post-layout{grid-template-columns:minmax(0,1fr)!important;max-width:880px}
:root[data-focus] .post-side{display:none}
:root[data-focus] #waves,:root[data-focus] #thread,:root[data-focus] #bg{opacity:.28;filter:saturate(.6);transition:opacity .8s,filter .8s}
:root[data-focus] header{opacity:.15;transition:opacity .4s}
:root[data-focus] header:hover,:root[data-focus] header:focus-within{opacity:1}
:root[data-focus] .post{box-shadow:0 40px 120px -40px rgba(0,0,0,.45)}

/* ---------- reading dock ---------- */
.dock{position:fixed;left:50%;bottom:max(16px,env(safe-area-inset-bottom,0px));z-index:28;display:flex;align-items:center;gap:2px;padding:6px;border-radius:99px;background:color-mix(in srgb,#fff 88%,transparent);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:0 18px 40px -18px rgba(10,14,40,.55),0 0 0 1px rgba(26,90,166,.12);color:#13224b;transform:translateX(-50%);transition:transform .45s cubic-bezier(.3,1.4,.5,1),opacity .3s;font-family:"Geist Mono",monospace}
.dock.hide{transform:translate(-50%,140%);opacity:0}
.dk-left{display:flex;align-items:center;gap:8px;padding:0 10px 0 6px;font-size:12px;white-space:nowrap}
.dk-ring svg{width:26px;height:26px;transform:rotate(-90deg);display:block}
.dk-ring circle{fill:none;stroke-width:3.5}
.dk-ring .bg{stroke:rgba(26,90,166,.15)}
.dk-ring .fg{stroke:var(--w-accent);stroke-dasharray:94.25;stroke-dashoffset:94.25;stroke-linecap:round;transition:stroke-dashoffset .2s}
.dk-sep{width:1px;height:22px;background:rgba(26,90,166,.18);margin:0 4px}
.dk-btn{width:40px;height:40px;border-radius:50%;border:0;background:transparent;color:inherit;display:grid;place-items:center;cursor:pointer;transition:background .2s,transform .2s cubic-bezier(.3,1.6,.5,1)}
.dk-btn svg{width:20px;height:20px}
.dk-btn:hover{background:rgba(26,90,166,.08);transform:translateY(-2px)}
.dk-btn[aria-pressed=true]{background:#13224b;color:#fff}
.dk-a{font:600 13px "Geist",system-ui,sans-serif}.dk-a2{font-size:16px}
@media (max-width:640px){
  .dock{left:8px;right:8px;transform:none;justify-content:space-between;border-radius:18px}
  .dock.hide{transform:translateY(140%)}
  .dk-left{padding-right:4px}.dk-time{display:none}
  .dk-btn{width:38px;height:38px}
  .dk-sep{display:none}
  .reading .deck{display:none}
  .reading main{padding-bottom:110px}
}

/* ---------- search palette ---------- */
.hud-btn{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 10px;border-radius:99px;border:1px solid color-mix(in srgb,var(--b2) 40%,transparent);background:transparent;color:inherit;font:12px var(--mono);cursor:pointer}
.hud-btn svg{width:17px;height:17px}
.hud-btn kbd{font:11px "Geist Mono",monospace;padding:1px 6px;border-radius:5px;border:1px solid currentColor;opacity:.6}
:root[data-dark] .hud-btn{color:var(--page-ink);border-color:color-mix(in srgb,var(--page-ink) 30%,transparent)}
@media (max-width:640px){.hud-btn kbd{display:none}.hud-btn{width:34px;padding:0;justify-content:center}}
.pal-wrap{position:fixed;inset:0;z-index:70;background:rgba(10,14,32,.42);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);display:flex;justify-content:center;align-items:flex-start;padding:max(10vh,16px) 12px 12px;animation:fadein .2s}
@keyframes fadein{from{opacity:0}}
.pal{width:min(660px,100%);max-height:min(640px,80vh);display:flex;flex-direction:column;background:#fff;color:#13224b;border-radius:18px;box-shadow:0 40px 90px -30px rgba(0,0,0,.6);overflow:hidden;animation:pop .25s cubic-bezier(.3,1.5,.5,1)}
.pal-top{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid #e6ebf3}
.pal-top svg{width:20px;height:20px;flex:none;color:#47648c}
.pal-in{flex:1;min-width:0;border:0;outline:0;font:500 18px "Geist",system-ui,sans-serif;color:#13224b;background:transparent;user-select:text;-webkit-user-select:text}
.pal-esc{font:11px "Geist Mono",monospace;padding:2px 7px;border-radius:5px;border:1px solid #c9d3e3;color:#47648c}
.pal-chips{display:flex;gap:6px;padding:10px 14px;overflow-x:auto;scrollbar-width:none;border-bottom:1px solid #f0f3f8}
.pal-chip{flex:none;font:12px "Geist Mono",monospace;padding:5px 11px;border-radius:99px;border:1px solid color-mix(in srgb,var(--wc) 40%,#fff);background:#fff;color:var(--wc);cursor:pointer}
.pal-chip[aria-pressed=true]{background:var(--wc);color:#fff}
.pal-list{list-style:none;margin:0;padding:6px;overflow-y:auto}
.pal-item{display:grid;grid-template-columns:110px minmax(0,1fr);gap:12px;align-items:center;padding:10px;border-radius:10px;cursor:pointer}
.pal-item[aria-selected=true]{background:#f1f5fc}
.pal-kind{font:600 11px "Geist Mono",monospace;letter-spacing:.04em;text-transform:uppercase;justify-self:start;padding:3px 8px;border-radius:5px;background:color-mix(in srgb,var(--wc,#47648c) 14%,#fff);color:var(--wc,#47648c);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.pal-txt{display:flex;flex-direction:column;min-width:0}
.pal-txt b{font:600 15px "Geist",system-ui,sans-serif;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pal-txt small{font:12px "Geist Mono",monospace;color:#6b7f9e;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pal-none{padding:30px;text-align:center;font:13px "Geist Mono",monospace;color:#6b7f9e}
.pal-foot{padding:9px 16px;border-top:1px solid #f0f3f8;font:11px "Geist Mono",monospace;color:#8193b0}
@media (max-width:640px){.pal-wrap{padding-top:10px}.pal{max-height:calc(100vh - 20px)}.pal-item{grid-template-columns:minmax(0,1fr)}.pal-kind{order:-1}.pal-foot{display:none}}
.tz-toast{position:fixed;left:50%;bottom:90px;z-index:75;transform:translate(-50%,20px);opacity:0;background:#13224b;color:#fff;font:13px "Geist Mono",monospace;padding:10px 16px;border-radius:99px;pointer-events:none;transition:opacity .25s,transform .3s cubic-bezier(.3,1.5,.5,1);max-width:calc(100vw - 32px);text-align:center}
.tz-toast.on{opacity:1;transform:translate(-50%,0)}
@media (max-width:640px){.world-chip .wc-name{display:none}.world-chip{padding:7px}.hud{gap:2px}}

/* ---------- hero: travel pills ---------- */
.hero-worlds{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:14px;font:12px var(--mono)}
.hero-worlds>span{margin-right:4px;color:var(--soft);font-size:11.5px;letter-spacing:.08em;text-transform:uppercase}
.hw-pill{display:inline-flex;align-items:center;gap:7px;padding:5px 12px 5px 5px;border-radius:99px;background:rgba(255,253,246,.72);border:1px solid color-mix(in srgb,var(--wc) 45%,transparent);color:var(--ink);transition:transform .25s cubic-bezier(.3,1.6,.5,1),background .25s}
.hw-pill i{font-style:normal;font-weight:600;font-size:10.5px;padding:3px 6px;border-radius:99px;background:var(--wc);color:#fff;letter-spacing:.06em}
.hw-pill:hover,.hw-pill:focus-visible{transform:translateY(-3px) scale(1.04);background:#fff}
:root[data-dark] .hero-worlds>span{color:var(--page-soft)}
@media (max-width:640px){.hero-worlds{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin-inline:-16px;padding:2px 16px 6px}.hw-pill{flex:none}}

/* ---------- next stop ---------- */
.next-stop{display:flex;flex-direction:column;gap:6px;max-width:70ch;margin:44px auto 0;padding:22px 24px;border-radius:14px;background:var(--wc,#13224b);color:#fff;position:relative;overflow:hidden;transition:transform .3s cubic-bezier(.2,.7,.2,1)}
.next-stop::before{content:"";position:absolute;inset:auto -20% -60% auto;width:260px;height:260px;border-radius:50%;background:radial-gradient(circle,var(--wg,#d7182a),transparent 70%);opacity:.35}
.next-stop:hover{transform:translateY(-3px)}
.ns-kick{font:500 11px "Geist Mono",monospace;letter-spacing:.14em;text-transform:uppercase;opacity:.8}
.next-stop b{font:700 22px var(--display);line-height:1.2}
.ns-sub{opacity:.85;font-size:15px}
.ns-go{font:500 13px "Geist Mono",monospace;color:var(--wg,#ffd27a);margin-top:4px}
.next-stop[data-world=starchasers]{--wc:#2a2163;--wg:#ffd27a}.next-stop[data-world=liminal-outliers]{--wc:#2f5f66;--wg:#8cc63f}
.next-stop[data-world=deadend]{--wc:#2b2036;--wg:#ffb347}.next-stop[data-world=overgame]{--wc:#2a0d14;--wg:#ff3b4e}
.next-stop[data-world=ai-ice]{--wc:#0f2a48;--wg:#ffcf9a}.next-stop[data-world=archive]{--wc:#5a3a20;--wg:#e0a86a}
:root[data-dark] .hero-links a{background:rgba(255,255,255,.08)}
:root[data-dark] .hw-pill{background:rgba(255,255,255,.08);color:var(--page-ink)}
:root[data-dark] .hw-pill:hover{background:rgba(255,255,255,.16)}

/* ---------- readability pass (Nero 07:07: some text wasn't readable on sub-interfaces) ---------- */
:root .tweaks-pop .skin,:root[data-dark] .tweaks-pop .skin{color:#13224b;border-color:rgba(26,90,166,.25)}
:root[data-dark] :is(.letter,.sc-member,.sc-soon-box,.cassette .lbl,.pal,.atlas,.chat,.say){color:var(--ink)}
:root[data-dark] .letter .stamp{color:#fff}
.ws-code{color:#14121c}
:root:not([data-dark])[data-world] .shelf-head .tag{color:var(--b3)}
:root[data-world=liminal-outliers],.ad-sheet[data-world=liminal-outliers]{--w-accent:#5e9a1f}
:root[data-dark] .btn{background:var(--w-accent);color:#14121c}
:root[data-dark] .story-band .btn{background:var(--w-accent);color:#14121c}
:root[data-dark] .side-avatar{background:var(--w-accent);color:#14121c}
/* lean: no frosted-glass blur over the animated scene (it repainted every frame); a near-solid header instead */
header{backdrop-filter:none;-webkit-backdrop-filter:none;background:color-mix(in srgb,var(--sun) 92%,transparent)}
:root[data-dark] header{background:color-mix(in srgb,var(--sun) 90%,transparent)}

/* ---------- denser cards everywhere (Nero, 11 Nov: "cards still waste space") ---------- */
.grid{grid-template-columns:repeat(auto-fill,minmax(232px,1fr));gap:14px;align-items:start}
.card{padding:14px 16px 16px;gap:6px;border-radius:14px}
.card-pic{margin:-14px -16px 4px;width:calc(100% + 32px);aspect-ratio:2/1;border-radius:13px 13px 0 0}
.card h4{font-size:17.5px;line-height:1.22;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.card p{font-size:14px;line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.card .meta{margin-top:auto;font-size:12px}
.card .tag+.card-world{margin-top:-2px}
@media (max-width:640px){
  .grid{grid-template-columns:minmax(0,1fr);gap:10px}
  /* on phones a card is a row: picture left, words right */
  .card.has-pic{display:grid;grid-template-columns:104px minmax(0,1fr);column-gap:12px;row-gap:4px;align-content:start;padding:10px 12px 10px 10px}
  .card.has-pic>*{grid-column:2}
  .card.has-pic .card-pic{grid-column:1;grid-row:1/span 5;margin:0;width:104px;height:auto;aspect-ratio:4/3;align-self:start;border-radius:9px;border-bottom:0}
  .card.has-pic p{display:none}
  .card.has-pic h4{font-size:16px}
}
.tweaks-pop .skin-opt{color:#13224b;border-color:rgba(26,90,166,.25)}
.tweaks-pop .skin-opt[aria-pressed=true]{color:#fff;border-color:transparent;background:#13224b}
.tweaks-pop .skin-opt.main[aria-pressed=true]{background:#d7182a}
.tweaks-pop .skin-set small{color:#47648c}
/* phones: listings are one calm panel of rows, not a pile of floating rounded cards */
@media (max-width:640px){
  .grid{gap:0;background:#fff;border:1px solid rgba(26,90,166,.12);border-radius:10px;overflow:hidden;box-shadow:0 14px 34px -26px rgba(26,90,166,.5)}
  .grid>.card{border:0;border-radius:0;box-shadow:none;background-image:none}
  .grid>.card+.card{border-top:1px solid rgba(26,90,166,.1)}
  .grid>.card[data-world]{box-shadow:inset 3px 0 0 var(--wc)}
  .card.has-pic .card-pic{border-radius:5px}
  .card-pic{border-radius:8px 8px 0 0}
}
@media (max-width:640px){
  .card.has-pic{grid-template-columns:84px minmax(0,1fr);padding:10px 12px 10px 10px}
  .card.has-pic .card-pic{width:84px;aspect-ratio:1}
  .card h4,.card.has-pic h4{font-size:15.5px;-webkit-line-clamp:2}
  .card .tag{font-size:10.5px}
  .card:not(.has-pic){padding:12px 14px}
}

/* picture stand-ins: the journal's star on the world colour, never a flat block */
.row .rp,.ticket .tk-ph{background:var(--wc,#13224b) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' fill-opacity='.85' d='M12 0l2.6 9.4L24 12l-9.4 2.6L12 24l-2.6-9.4L0 12l9.4-2.6z'/%3E%3C/svg%3E") center/34% no-repeat}
