/* Deep File (build_site.py): the page fonts are the site's own files */
@font-face{font-family:"Source Sans 3";font-style:normal;font-weight:400;font-display:swap;src:url(SourceSans3-Regular.woff2?v=2) format("woff2")}
@font-face{font-family:"Source Sans 3";font-style:normal;font-weight:600;font-display:swap;src:url(SourceSans3-Semibold.woff2?v=2) format("woff2")}
@font-face{font-family:"Source Sans 3";font-style:normal;font-weight:700;font-display:swap;src:url(SourceSans3-Semibold.woff2?v=2) format("woff2")}
@font-face{font-family:"Source Sans 3";font-style:normal;font-weight:900;font-display:swap;src:url(SourceSans3-Black.woff2?v=2) format("woff2")}
@font-face{font-family:"Cormorant Garamond";font-style:italic;font-weight:600;font-display:swap;src:url(CormorantGaramond-BoldItalic.woff2?v=2) format("woff2")}
/* Deep File. Page chrome follows the Geopolitics Club Zurich site; everything inside .frame is pixel art. */
@font-face{font-family:"Silkscreen";font-style:normal;font-weight:400;font-display:swap;src:url(deep-file-silkscreen-latin.woff2?v=1) format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Silkscreen";font-style:normal;font-weight:400;font-display:swap;src:url(deep-file-silkscreen-latin-ext.woff2?v=1) format("woff2");
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
/* Reading text (questions, options, answers, results): Departure Mono by Helena Zhang, SIL OFL 1.1; a clear pixel monospace, even at speed */
@font-face{font-family:"Departure Mono";font-style:normal;font-weight:400;font-display:swap;src:url(deep-file-departure-mono.woff2?v=1) format("woff2")}

:root{
  --gold:#97865A;--red:#B13634;--dark:#1A1613;--ink:#0F0E0D;--white:#FFFFFF;--cream:#F7F5F0;
  --gold-deep:#584E36;--gold-light:#C9BC93;--cream-shade:#E9E4D9;--wood:#393225;
  --bg:var(--cream);--text:var(--ink);--muted:#5A5249;--focus:var(--ink);
  color-scheme:light;
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){--bg:var(--dark);--text:var(--cream);--muted:#B9B0A0;--focus:var(--cream);color-scheme:dark}
}
:root[data-theme="dark"]{--bg:var(--dark);--text:var(--cream);--muted:#B9B0A0;--focus:var(--cream);color-scheme:dark}
*{box-sizing:border-box}
[hidden]{display:none!important}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--text);font:17px/1.5 "Source Sans 3",system-ui,sans-serif;border-top:4px solid var(--red);overflow-x:hidden}
button,input{font:inherit;color:inherit}
:focus-visible{outline:3px solid var(--focus);outline-offset:3px}
.sr{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ---------- page chrome (site style) ---------- */
.site{max-width:992px;margin:0 auto;padding:12px 16px;display:flex;align-items:center;justify-content:space-between;gap:12px}
.brand{display:flex;align-items:center;gap:10px;color:inherit;text-decoration:none;font-weight:700;font-size:16px;line-height:1.2}
.brand svg{width:32px;height:32px}
.site nav{display:flex;align-items:center;gap:6px}
.site nav a,.tbtn{display:inline-flex;align-items:center;min-height:44px;padding:0 10px;color:inherit;font-size:15px;font-weight:600;text-decoration:underline;text-underline-offset:3px;background:none;border:0;cursor:pointer}
.tbtn{text-decoration:none;border:2px solid currentColor}
.page{max-width:992px;margin:0 auto;padding:0 16px 32px}
.title{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 14px;margin:6px 0 14px}
.title h1{margin:0;font-weight:900;font-size:clamp(30px,6vw,40px);line-height:1}
.title p{margin:0;font:italic 600 20px/1.3 "Cormorant Garamond",Georgia,serif;color:var(--muted)}
.foot{font-size:14px;color:var(--muted);max-width:75ch;margin:18px 0 0}

/* ---------- the game frame ---------- */
.frame{--fb:var(--ink);--px:4px;
  position:relative;width:100%;max-width:960px;margin:0 auto;overflow:hidden;background:var(--dark);color:var(--ink);
  height:clamp(560px,calc(100svh - 150px),760px);
  font-family:"Silkscreen",ui-monospace,monospace;font-size:16px;line-height:1.25;letter-spacing:.04em;
  box-shadow:0 calc(-1*var(--px)) 0 0 var(--fb),0 var(--px) 0 0 var(--fb),calc(-1*var(--px)) 0 0 0 var(--fb),var(--px) 0 0 0 var(--fb),
    var(--px) calc(var(--px)*2) 0 0 rgba(15,14,13,.35);
  margin-top:4px;margin-bottom:12px;isolation:isolate}
@media (min-width:720px){.frame{height:auto;aspect-ratio:16/10}}
.frame [tabindex="-1"]:focus{outline:none;box-shadow:none}
.frame :focus-visible{outline:3px solid var(--cream);outline-offset:3px;box-shadow:var(--edge,none),0 0 0 9px var(--ink)}
.frame canvas{position:absolute;left:0;top:0;image-rendering:pixelated;image-rendering:crisp-edges;z-index:0}
.frame .long{font-family:"Departure Mono",ui-monospace,monospace;letter-spacing:0}
.frame,.frame *{font-variant-ligatures:none;font-feature-settings:"liga" 0,"clig" 0}

/* stepped pixel edge: four hard shadows leave the corners notched */
.px-edge,.panel,.btn,.hudp,.chipb,.menu-btn,.exit-btn{--e:3px;--ec:var(--ink);
  --edge:0 calc(-1*var(--e)) 0 0 var(--ec),0 var(--e) 0 0 var(--ec),calc(-1*var(--e)) 0 0 0 var(--ec),var(--e) 0 0 0 var(--ec);
  box-shadow:var(--edge)}

/* layers */
.torch,.vig,.alarm,.fx{position:absolute;inset:0;pointer-events:none}
.torch{z-index:1;opacity:0;background:radial-gradient(circle calc(var(--tr,90px)) at var(--mx,50%) var(--my,50%),rgba(255,240,205,var(--ta,.1)),rgba(255,240,205,0) 100%)}
.torch.on{opacity:1}
.vig{z-index:2}
.ui{position:absolute;inset:0;z-index:3;pointer-events:none}
.ui>*{pointer-events:auto}
.alarm{z-index:6;opacity:0;box-shadow:inset 0 0 0 6px var(--red),inset 0 0 0 14px rgba(177,54,52,.22),inset 0 0 0 24px rgba(177,54,52,.1)}
.fx{z-index:8;overflow:hidden}

/* panels and buttons */
.panel{position:absolute;background:var(--cream);color:var(--ink);padding:14px 16px;
  box-shadow:var(--edge),6px 8px 0 0 rgba(15,14,13,.45)}
.panel h2,.panel h3{margin:0;font-weight:400;letter-spacing:.06em;text-transform:uppercase;line-height:1.15}
.panel h2{font-size:24px}
.panel h3{font-size:16px;font-size:round(16px,var(--dpx,1px))}
.panel p{margin:0}
.panel .long{font-size:18px;line-height:1.35}
.panel .meta{font-size:13px;color:var(--paper-muted);margin-top:6px}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:8px 16px;margin:3px;border:0;cursor:pointer;
  background:var(--red);color:var(--white);font-family:"Silkscreen",ui-monospace,monospace;font-size:16px;font-size:round(16px,var(--dpx,1px));letter-spacing:.06em;text-transform:uppercase;
  box-shadow:var(--edge),inset -3px -3px 0 0 rgba(0,0,0,.3),4px 5px 0 0 rgba(15,14,13,.45)}
.btn:active{transform:translate(2px,3px);box-shadow:var(--edge),inset 3px 3px 0 0 rgba(0,0,0,.3)}
.btn.alt{background:var(--cream);color:var(--ink)}
.btn.ghost{background:var(--cream-shade);color:var(--ink)}
.btn:hover{outline:1px solid var(--gold-light);outline-offset:6px}
.btn:disabled{opacity:.6;cursor:default}
.row{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:14px}
.toggle{display:flex;align-items:center;gap:10px;margin-top:12px;min-height:44px;cursor:pointer;font-size:14px;font-size:round(14px,var(--dpx,1px));text-transform:uppercase}
.toggle input{appearance:none;width:22px;height:22px;margin:0;background:var(--white);box-shadow:0 -2px 0 0 var(--ink),0 2px 0 0 var(--ink),-2px 0 0 0 var(--ink),2px 0 0 0 var(--ink);display:grid;place-items:center;cursor:pointer}
.toggle input:checked::after{content:"";width:12px;height:12px;background:var(--ink)}

/* HUD */
.menu-btn{position:absolute;left:10px;top:10px;width:44px;height:44px;padding:0;border:0;cursor:pointer;background:var(--ink);display:grid;place-items:center;
  --ec:var(--gold);box-shadow:var(--edge)}
.menu-btn i,.menu-btn i::before,.menu-btn i::after{display:block;width:20px;height:4px;background:var(--cream);position:relative}
.menu-btn i::before,.menu-btn i::after{content:"";position:absolute;left:0}
.menu-btn i::before{top:-7px}.menu-btn i::after{top:7px}
.menu-btn:hover{outline:1px solid var(--gold-light);outline-offset:5px}
.hud{position:absolute;left:66px;right:10px;top:10px;display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:stretch}
.hudp{background:var(--ink);color:var(--cream);padding:5px 10px;--ec:var(--gold);min-height:44px;display:flex;flex-direction:column;justify-content:center}
.hudp b{display:block;font-weight:400;font-size:11px;font-size:round(11px,var(--dpx,1px));color:var(--gold-light);letter-spacing:.12em}
.hudp .num{font-size:22px;font-size:round(22px,var(--dpx,1px));line-height:1.1;white-space:nowrap}
.hudp .num small{font-size:13px;font-size:round(13px,var(--dpx,1px))}
.prog{align-items:center;text-align:center}
.prog ol{display:flex;gap:6px;list-style:none;margin:0;padding:0}
.prog li{width:16px;height:16px;box-shadow:0 0 0 2px var(--steel,#8C8679)}
.prog li.cur{box-shadow:0 0 0 2px var(--cream)}
.prog li.done{box-shadow:0 0 0 2px var(--cream)}
.prog li svg.icon{width:16px;height:16px}
.prog p{margin:4px 0 0;font-size:11px;font-size:round(11px,var(--dpx,1px));letter-spacing:.12em;color:var(--cream)}
.time .num.low{color:#E08A87}
.sign{position:absolute;left:10px;top:66px;background:var(--ink);color:var(--cream);padding:4px 8px;font-size:12px;font-size:round(12px,var(--dpx,1px));letter-spacing:.1em;--ec:var(--gold);box-shadow:var(--edge)}
.sign.flash{background:var(--cream);color:var(--ink)}
@media (max-width:719px){
  .hud{grid-template-columns:1fr 1fr;left:64px}
  .hud .prog{grid-column:1/3;grid-row:2;flex-direction:row;justify-content:space-between;gap:8px;min-height:34px;margin-left:-54px}
  .hud .prog p{margin:0}
  .prog li{width:16px;height:16px}
  .prog ol{gap:5px}
  /* "Floor 55, Revolutions and the First Markets" is wider than a phone: smaller, and on two lines if need be */
  .sign{top:112px;font-size:10px;max-width:calc(100% - 20px)}
}

/* placement of panels */
/* the start card sits high, so the archivist and the hidden door stay in view */
/* the title screen, over the whole Reading Room */
.title-screen{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;padding:8% 16px 0;text-align:center;color:var(--cream);
  background:linear-gradient(rgba(10,8,6,.62),rgba(10,8,6,.15) 60%,rgba(10,8,6,.55))}
.title-screen[hidden]{display:none}
.title-screen .logotype{position:static;width:calc(var(--lw) * 3px);max-width:92%;height:auto;image-rendering:pixelated}
.title-screen .slogan{margin:14px 0 0;font-family:"Silkscreen",ui-monospace,monospace;color:var(--gold-light);letter-spacing:.14em;font-size:clamp(12px,1.9vw,18px);font-size:round(clamp(12px,1.9vw,18px),var(--dpx,1px));text-transform:uppercase}
.title-screen .desc{margin:12px 0 0;font-size:clamp(15px,2vw,19px)}
.title-screen .desc i{color:var(--gold);font-style:normal;padding:0 8px}
.title-screen .go-start{margin-top:auto;min-width:min(340px,80%);min-height:56px;font-size:clamp(16px,2.2vw,20px);font-size:round(clamp(16px,2.2vw,20px),var(--dpx,1px));letter-spacing:.2em}
/* the other ways to play, under Begin: Play random, Battle, Enter a code */
.title-screen .modes{display:flex;flex-wrap:wrap;justify-content:center;gap:4px 8px;margin-top:10px}
.title-screen .modes .btn{min-height:40px;padding:6px 12px;font-size:13px;font-size:round(13px,var(--dpx,1px))}
@media (max-width:719px){.title-screen .modes .btn{min-height:36px;padding:4px 8px;font-size:11px;font-size:round(11px,var(--dpx,1px))}}
.title-screen .meta{margin:14px 0 0;font-family:"Silkscreen",ui-monospace,monospace;font-size:12px;font-size:round(12px,var(--dpx,1px));letter-spacing:.14em;color:var(--gold-light);text-transform:uppercase}
.title-screen .note{margin:6px 0 0;font-size:15px;max-width:52ch}
.title-screen .links{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin:10px 0 7%}
.lnk{display:inline-flex;align-items:center;gap:8px;min-height:36px;padding:6px 10px;border:0;cursor:pointer;background:var(--ink);color:var(--cream);
  font-family:"Silkscreen",ui-monospace,monospace;font-size:11px;font-size:round(11px,var(--dpx,1px));letter-spacing:.12em;text-transform:uppercase;box-shadow:0 0 0 2px var(--gold)}
.lnk:hover{outline:1px solid var(--gold-light);outline-offset:4px}
.lnk:disabled{opacity:.6}
.lnk.toggle input{width:16px;height:16px}
@media (max-width:719px){.title-screen{padding-top:14%}.title-screen .slogan{letter-spacing:.05em}.title-screen .links{gap:6px;margin-bottom:5%}.lnk{min-height:32px;padding:4px 8px;font-size:10px;font-size:round(10px,var(--dpx,1px))}}
/* the rarity drop, on the left edge after an answer locks */
/* `.frame .drop`, not `.drop`: `.frame canvas` (left 0, top 0) would otherwise win and put the meter over the menu button and HUD */
.frame .drop{position:absolute;left:10px;top:100px;z-index:3;image-rendering:pixelated;transition:transform .2s steps(4,end),opacity .2s steps(4,end)}
.drop.away{transform:translateX(-120%);opacity:0}
/* the result card keeps clear of the meter: a gutter on its left on phones, a narrower card on small desktop frames */
/* top 166: below a sign that wraps to two lines */
@media (max-width:719px){.frame .drop{top:166px;left:6px}#p-result{left:56px;transform:none;width:calc(100% - 66px)}}
@media (min-width:720px){#p-result{top:100px;width:min(560px,calc(100% - 220px));max-height:calc(100% - 190px)}}
@media (prefers-reduced-motion:reduce){.frame .drop{transition:none}}
/* the stopwatch at the head of the prompt folder; the question and its scope sit to its right,
   and the head is at least as tall as the watch, so the answer field never runs under it */
.folder .head{display:grid;grid-template-columns:80px 1fr;gap:14px;align-items:start;min-height:92px}
.folder .watch{position:static;display:block;width:80px;height:92px;image-rendering:pixelated}
.folder .watch[hidden]{display:none}
.folder .head:has(.watch[hidden]){grid-template-columns:1fr;min-height:0}
.folder .head .q{margin:0;overflow-wrap:anywhere}
@media (max-width:719px){.folder .head{grid-template-columns:40px 1fr;gap:10px;min-height:46px}.folder .watch{width:40px;height:46px}}
/* the card at a new floor: what happened here, in the reading font */
.floorcard{text-align:left;font-family:"Source Sans 3",system-ui,sans-serif}
/* `.card.floorcard`: the later `.card` rule would otherwise centre it over the room it describes. Below the sign (top 100), which can run 500 px wide. */
@media (min-width:720px){.card.floorcard{left:auto;right:44px;transform:none;top:100px;width:min(360px,44%);max-height:calc(100% - 180px)}}
.floorcard .fc-no{font-family:"Silkscreen",ui-monospace,monospace;font-size:12px;font-size:round(12px,var(--dpx,1px));letter-spacing:.1em;text-transform:uppercase;color:var(--paper-muted)}
.floorcard .fc-title{font:900 26px/1.1 "Source Sans 3",system-ui,sans-serif;text-transform:none;letter-spacing:0;margin-top:6px}
.floorcard .fc-date{font-weight:700;font-size:16px;margin-top:4px;color:var(--paper-muted)}
.floorcard .fc-cap{font-size:17px;line-height:1.45;margin-top:10px}
.floorcard .fc-art{font-size:15px;line-height:1.4;margin-top:8px;color:var(--paper-muted);font-style:italic}
/* the solutions at the end, in the site's reading font */
.sol{margin-top:16px;padding-top:12px;box-shadow:0 -3px 0 0 var(--gold-light);text-align:left;font-family:"Source Sans 3",system-ui,sans-serif}
.sol h3{font:900 22px "Source Sans 3",system-ui,sans-serif;text-transform:none;letter-spacing:0}
/* a source can be a long bare URL: it must wrap, not widen the list past the card on a phone */
.sol .reveal{gap:12px;grid-template-columns:minmax(0,1fr)}
.sol .reveal li,.landed{overflow-wrap:anywhere}
.sol .reveal li{padding:12px 14px;background:var(--white);box-shadow:0 0 0 2px var(--ink)}
.sol .sh{display:flex;gap:10px;align-items:flex-start;margin-bottom:8px}
.sol .sq{flex:none;display:grid;place-items:center;width:26px;height:26px;background:var(--ink);color:var(--gold-light);font:700 14px "Source Sans 3",system-ui,sans-serif}
.sol .reveal .q{font:700 16px/1.35 "Source Sans 3",system-ui,sans-serif;margin:2px 0 0}
.sol dl{margin:0;display:grid;gap:6px}
.sol dl>div{display:grid;grid-template-columns:110px 1fr;gap:10px;align-items:baseline}
.sol dt{font:700 11px "Source Sans 3",system-ui,sans-serif;letter-spacing:.08em;text-transform:uppercase;color:#5A5249}
.sol dd{margin:0;font:400 15px/1.45 "Source Sans 3",system-ui,sans-serif}
.sol dd .sn{color:var(--paper-muted)}
.sol .reveal .yours{display:grid;font-size:inherit;color:inherit;margin:0;padding-top:6px;box-shadow:0 -1px 0 0 #D6D1C7}
.sol .reveal li{box-shadow:0 0 0 2px var(--ink);padding-left:14px}
.sol .fact{margin:10px 0 0;padding:8px 10px;background:var(--cream);font:400 14px/1.5 "Source Sans 3",system-ui,sans-serif;color:#2B2622}
@media (max-width:519px){.sol dl>div{grid-template-columns:1fr;gap:2px}}
.sol .reveal .src{font:400 12.5px "Source Sans 3",system-ui,sans-serif;text-transform:none;letter-spacing:0;color:#5A5249}

.sol .chip{font-size:10px;font-size:round(10px,var(--dpx,1px));padding:3px 5px;margin:0 6px;vertical-align:1px}
.total small{font-size:.4em;letter-spacing:.1em}
/* the score: the floor badge, the era, the coins earned */
.card .badge{position:static;display:block;margin:4px auto 0;width:calc(var(--bw) * 2px);max-width:100%;height:auto;image-rendering:pixelated}
.card .earned{gap:10px 14px;margin-top:16px}
.card .earned li{font-size:13px;font-size:round(13px,var(--dpx,1px));gap:4px}
.card .earned svg{width:64px;height:64px}
@media (max-width:719px){.card .earned svg{width:44px;height:44px}}
/* statistics, as on the Wordle statistics screen: numbers, then distributions */
.statbox{margin-top:16px;padding-top:10px;text-align:left;box-shadow:0 -3px 0 0 var(--gold-light)}
.statbox h3{font-size:15px;font-size:round(15px,var(--dpx,1px));letter-spacing:.08em}
.card .stats{display:block;margin-top:0}
.cstats{display:flex;flex-wrap:wrap;justify-content:space-around;gap:8px 18px;margin-top:10px;font-size:11px;font-size:round(11px,var(--dpx,1px));letter-spacing:.06em;color:var(--paper-muted);text-align:center}
.cstats>div{min-width:64px}
.card .cstats b{display:block;font-weight:400;font-size:28px;font-size:round(28px,var(--dpx,1px));line-height:1.1;color:var(--ink)}
.statbox .note{font-size:12px;color:var(--paper-muted);margin-top:6px}
.dist{display:grid;gap:4px;margin-top:10px}
.drow{display:grid;grid-template-columns:minmax(110px,38%) 1fr;gap:8px;align-items:center;font-size:11px;font-size:round(11px,var(--dpx,1px))}
.drow .dl{color:var(--paper-muted);text-align:right;letter-spacing:.02em;line-height:1.1}
.drow .db i{display:block;min-width:22px;padding:2px 6px;background:#6E6A62;color:var(--white);font-style:normal;font-size:12px;font-size:round(12px,var(--dpx,1px));text-align:right;box-shadow:0 0 0 2px var(--ink)}
.drow.me .db i{background:var(--gold);color:var(--ink)}
.drow.me .dl{color:var(--ink)}
.share{display:inline-block;margin-left:6px;padding:1px 6px;background:var(--cream-shade);font:600 12px "Source Sans 3",system-ui,sans-serif}
/* you against today's players */
.curve{display:block;width:100%;height:auto;margin-top:10px}
.curve .ax{font:600 9px "Source Sans 3",system-ui,sans-serif;fill:var(--paper-muted)}
.curve .you{font:700 9px "Source Sans 3",system-ui,sans-serif;fill:#FFFFFF;letter-spacing:.08em}
/* the LinkedIn link at the very end, in LinkedIn's blue */
.follow{margin:18px 0 4px;text-align:center}
.linkedin{display:inline-flex;align-items:center;gap:10px;min-height:44px;padding:8px 18px;background:#0A66C2;color:#FFFFFF;text-decoration:none;
  font:700 16px "Source Sans 3",system-ui,sans-serif;box-shadow:0 -3px 0 0 var(--ink),0 3px 0 0 var(--ink),-3px 0 0 0 var(--ink),3px 0 0 0 var(--ink),4px 5px 0 0 rgba(15,14,13,.45)}
.linkedin:hover{background:#004182}
.linkedin .in{display:grid;place-items:center;width:22px;height:22px;background:#FFFFFF;color:#0A66C2;font:900 15px/1 "Source Sans 3",Arial,sans-serif;border-radius:3px}/* the room you came to rest in */
.landed{margin-top:16px;padding:12px 14px;text-align:left;background:var(--white);box-shadow:0 -3px 0 0 var(--ink),0 3px 0 0 var(--ink),-3px 0 0 0 var(--ink),3px 0 0 0 var(--ink);font-family:"Source Sans 3",system-ui,sans-serif}
.landed .ln-no{font-family:"Silkscreen",ui-monospace,monospace;font-size:11px;font-size:round(11px,var(--dpx,1px));letter-spacing:.08em;text-transform:uppercase;color:var(--paper-muted)}
.landed .ln-title{font:900 22px/1.15 "Source Sans 3",system-ui,sans-serif;text-transform:none;letter-spacing:0;margin-top:6px}
.landed .ln-date{font-weight:700;font-size:15px;color:var(--paper-muted);margin-top:2px}
.landed .ln-cap{font-size:16px;line-height:1.45;margin-top:8px}
.landed .ln-art{font-size:14px;line-height:1.4;margin-top:6px;color:var(--paper-muted);font-style:italic}
.landed .ln-era,.landed .ln-next{font-size:14px;line-height:1.4;margin-top:6px;color:var(--paper-muted)}
.pctl{font-family:"Silkscreen",ui-monospace,monospace;font-size:13px;font-size:round(13px,var(--dpx,1px));letter-spacing:.06em;text-transform:uppercase;background:var(--ink);color:var(--gold-light);display:inline-block;padding:6px 10px;margin-top:10px}
.pctl[hidden]{display:none}
.folder{left:50%;transform:translateX(-50%);bottom:18px;width:min(600px,calc(100% - 64px));padding-top:16px;background:var(--cream-shade)}
.folder .tab{position:absolute;left:0;top:-30px;height:30px;padding:7px 12px 0;background:var(--cream-shade);font-size:12px;font-size:round(12px,var(--dpx,1px));letter-spacing:.1em;
  box-shadow:0 -3px 0 0 var(--ink),-3px 0 0 0 var(--ink),3px 0 0 0 var(--ink)}
.folder h2.q{font-family:"Departure Mono",ui-monospace,monospace;font-weight:400;font-size:clamp(16.5px,2.4vw,22px);letter-spacing:0;text-transform:none;line-height:1.25}
.scope{font-size:11px;font-size:round(11px,var(--dpx,1px));letter-spacing:.1em;color:var(--paper-muted);margin-top:6px;text-transform:uppercase}
.tbar{height:12px;margin:0 0 12px;background:var(--cream);box-shadow:0 -2px 0 0 var(--ink),0 2px 0 0 var(--ink),-2px 0 0 0 var(--ink),2px 0 0 0 var(--ink);position:relative;overflow:hidden}
.tbar i{position:absolute;inset:0;background:var(--gold);transform-origin:left;transform:scaleX(1)}
.tbar i::after{content:"";position:absolute;inset:0;background:repeating-linear-gradient(to right,transparent 0 10px,rgba(15,14,13,.25) 10px 12px)}
form.answer{display:flex;gap:8px;margin-top:12px;align-items:stretch}
.field{position:relative;flex:1;min-width:0}
.field input{width:100%;min-height:48px;padding:8px 10px;border:0;border-radius:0;background:var(--white);color:var(--ink);font-family:"Departure Mono",ui-monospace,monospace;font-size:20px;
  caret-color:transparent;box-shadow:0 -3px 0 0 var(--ink),0 3px 0 0 var(--ink),-3px 0 0 0 var(--ink),3px 0 0 0 var(--ink)}
.field input:focus-visible{outline:3px solid var(--red);outline-offset:4px}
.field input.bad{box-shadow:0 -3px 0 0 var(--red),0 3px 0 0 var(--red),-3px 0 0 0 var(--red),3px 0 0 0 var(--red)}
.caret{position:absolute;top:12px;width:10px;height:24px;background:var(--ink);pointer-events:none}
@media (prefers-reduced-motion:no-preference){.caret{animation:blink 1s steps(1,end) infinite}}
form.answer .btn{margin:0 0 0 3px}
.feedback{min-height:1.3em;margin-top:10px;font-size:16px}
#feedback{margin-top:10px}
.feedback.bad{color:var(--red)}
.feedback.neutral{color:var(--paper-muted)}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
@media (max-width:719px){
  .chips .btn{font-size:13px;font-size:round(13px,var(--dpx,1px));letter-spacing:.03em;padding:6px 10px}
  .folder:has(.chips:not([hidden])) .scope{display:none}
}
@media (prefers-reduced-motion:no-preference){.shake{animation:shake .15s steps(3)}@keyframes shake{33%{transform:translateX(-4px)}66%{transform:translateX(4px)}}}

/* result and end cards */
.card{left:50%;top:66px;transform:translateX(-50%);width:min(560px,calc(100% - 64px));max-height:calc(100% - 160px);overflow:auto;text-align:center;
  scrollbar-width:auto;scrollbar-color:var(--ink) var(--cream-shade)}
.card::-webkit-scrollbar{width:12px}
.card::-webkit-scrollbar-track{background:var(--cream-shade);box-shadow:inset 2px 0 0 var(--ink)}
.card::-webkit-scrollbar-thumb{background:var(--ink);box-shadow:inset 0 0 0 2px var(--cream-shade)}
.card .long{line-height:1.25}
.frame.paused .hud .time{visibility:hidden}
.card.end{max-height:calc(100% - 86px);top:66px;width:min(620px,calc(100% - 40px))}
@media (max-width:719px){.card{top:166px;max-height:calc(100% - 256px);width:calc(100% - 40px)}.card.end{top:66px;max-height:calc(100% - 86px)}}
.frame.ended .hud .time{visibility:hidden}
.verdict{font-size:clamp(24px,4.4vw,36px);font-size:round(clamp(24px,4.4vw,36px),var(--dpx,1px));letter-spacing:.06em;line-height:1.05}
.big-ic{display:flex;justify-content:center;margin:8px 0 4px}
.gain{font-size:22px}
.line{margin-top:6px}
.counted{margin-top:10px;font-size:20px}
.deep{margin-top:10px;padding-top:10px;box-shadow:0 -3px 0 0 var(--gold-light);text-align:left}
.deep ul,.reveal{list-style:none;margin:8px 0 0;padding:0;display:grid;gap:10px}
.deep li{display:flex;gap:10px;align-items:flex-start}
.deep .long,.reveal .long{font-size:17px}
.fact{margin-top:10px;text-align:left}
.src{font-size:11px;letter-spacing:.06em;color:var(--paper-muted);margin-top:8px;text-align:left;text-transform:uppercase}
.total{font-size:clamp(44px,9vw,64px);line-height:1}
.rank{font-size:18px;font-size:round(18px,var(--dpx,1px));letter-spacing:.1em;margin-top:6px}
.earned{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;list-style:none;margin:14px 0 0;padding:0}
.earned li{display:grid;justify-items:center;gap:2px;font-size:11px;font-size:round(11px,var(--dpx,1px))}
.stats{display:flex;flex-wrap:wrap;justify-content:center;gap:6px 22px;margin-top:12px;font-size:11px;font-size:round(11px,var(--dpx,1px));letter-spacing:.08em;color:var(--paper-muted)}
.stats b{display:block;font-weight:400;font-size:20px;font-size:round(20px,var(--dpx,1px));color:var(--ink)}
.pctl{margin-top:10px;font-size:15px;font-size:round(15px,var(--dpx,1px))}
.reveal{text-align:left;margin-top:10px}
.reveal li{padding-left:12px;box-shadow:-3px 0 0 0 var(--gold)}
.reveal .q{font-size:16px}
.reveal .yours{font-size:12px;color:var(--paper-muted);margin-top:4px;display:flex;flex-wrap:wrap;align-items:center;gap:6px}
textarea.manual{width:100%;min-height:100px;margin-top:8px;font:14px/1.4 ui-monospace,monospace;background:var(--white);border:2px solid var(--ink)}
.end .row{justify-content:center}

/* tier chip */
.chip{display:inline-flex;align-items:center;font-family:"Silkscreen",ui-monospace,monospace;font-size:12px;line-height:1;padding:5px 7px;margin:3px;background:var(--tb);color:var(--tf);letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;position:relative;
  box-shadow:0 -2px 0 0 var(--ink),0 2px 0 0 var(--ink),-2px 0 0 0 var(--ink),2px 0 0 0 var(--ink)}
.chip.primary{box-shadow:0 -2px 0 0 var(--ink),0 2px 0 0 var(--ink),-2px 0 0 0 var(--ink),2px 0 0 0 var(--ink),0 -4px 0 0 var(--gold-light),0 4px 0 0 var(--gold-light),-4px 0 0 0 var(--gold-light),4px 0 0 0 var(--gold-light)}
svg.icon{display:block;flex:none;color:var(--ink)}

/* bottom button */
.bottom{position:absolute;left:0;right:0;bottom:18px;display:flex;justify-content:center;align-items:center;gap:14px;pointer-events:none}
.bottom>*{pointer-events:auto}
.go{min-width:min(320px,70%);min-height:56px;font-size:22px;font-size:round(22px,var(--dpx,1px))}
.hint{font-size:11px;font-size:round(11px,var(--dpx,1px));letter-spacing:.12em;color:var(--cream);background:var(--ink);padding:4px 6px}
@media (pointer:coarse),(max-width:719px){.hint{display:none}}

/* menu and legend */
.dlg{left:50%;top:50%;transform:translate(-50%,-50%);width:min(560px,calc(100% - 40px));max-height:calc(100% - 40px);overflow:auto;z-index:5}
.legend{list-style:none;margin:12px 0 0;padding:0;display:grid;gap:10px}
.legend li{display:grid;grid-template-columns:32px 1fr 64px 7.2em;gap:4px 12px;align-items:center}
.legend .nm{font-size:15px;font-size:round(15px,var(--dpx,1px));text-transform:uppercase}
.legend .pts{font-size:14px;font-size:round(14px,var(--dpx,1px));text-align:right;white-space:nowrap}
@media (max-width:420px){.legend li{grid-template-columns:32px 1fr auto}.legend .pips{grid-column:2;grid-row:2}.legend .pts{grid-row:1/3;grid-column:3}}
/* rarity meter: six pips filled up to the tier level, in the tier colour */
.tier{display:inline-flex;align-items:center;gap:6px;flex-wrap:nowrap;vertical-align:middle}
.pips{display:inline-flex;gap:2px;vertical-align:middle}
.pips i{width:6px;height:10px;background:transparent;box-shadow:0 0 0 1px rgba(15,14,13,.3)}
.pips i.on{background:var(--tb);box-shadow:0 0 0 1px var(--ink)}
.meter{display:flex;justify-content:center;margin-top:8px}
.meter .pips{gap:4px}.meter .pips i{width:12px;height:16px;box-shadow:0 0 0 2px rgba(15,14,13,.3)}.meter .pips i.on{box-shadow:0 0 0 2px var(--ink)}
.menu-list{display:grid;gap:8px;margin-top:12px}
.menu-list .btn{justify-content:flex-start}

/* game codes and battles */
.codeform{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;align-items:center}
.codein,.namein{flex:1;min-width:12ch;min-height:44px;padding:6px 10px;border:0;background:var(--white);color:var(--ink);box-shadow:var(--edge);
  font-family:"Silkscreen",ui-monospace,monospace;font-size:18px;font-size:round(18px,var(--dpx,1px));letter-spacing:.12em;text-transform:uppercase}
.namein{text-transform:none;letter-spacing:.04em;font-family:"Source Sans 3",system-ui,sans-serif}
.dlg .err{min-height:1.4em;margin-top:8px;color:var(--red);font-size:15px;font-size:round(15px,var(--dpx,1px))}
.dlg .lab{display:block;margin-top:14px;font-size:12px;font-size:round(12px,var(--dpx,1px));letter-spacing:.1em;text-transform:uppercase;color:var(--paper-muted)}
.dlg .or{margin:16px 0 0;font-size:12px;font-size:round(12px,var(--dpx,1px));letter-spacing:.12em;text-transform:uppercase;color:var(--paper-muted);text-align:center}
.lobby-code{margin-top:8px;font-family:"Silkscreen",ui-monospace,monospace;font-size:40px;font-size:round(40px,var(--dpx,1px));letter-spacing:.2em;text-align:center}
.players{list-style:none;margin:10px 0 0;padding:0;display:grid;gap:4px}
.players li{display:flex;justify-content:space-between;gap:10px;padding:6px 10px;background:var(--cream-shade);font-size:16px;font-size:round(16px,var(--dpx,1px))}
.players li.me{box-shadow:inset 4px 0 0 0 var(--gold)}
.players li small{font-size:12px;font-size:round(12px,var(--dpx,1px));letter-spacing:.08em;text-transform:uppercase;color:var(--paper-muted)}
.countdown{margin-top:12px;font-family:"Silkscreen",ui-monospace,monospace;font-size:48px;font-size:round(48px,var(--dpx,1px));text-align:center}
.gcode{margin-top:12px;display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:6px 10px;font-size:13px;font-size:round(13px,var(--dpx,1px));letter-spacing:.08em;text-transform:uppercase;color:var(--paper-muted)}
.gcode code{font-family:"Silkscreen",ui-monospace,monospace;font-size:18px;font-size:round(18px,var(--dpx,1px));letter-spacing:.12em;color:var(--ink);background:var(--cream-shade);padding:4px 8px}
.gcode .btn{min-height:36px;padding:4px 10px;font-size:12px;font-size:round(12px,var(--dpx,1px))}
.bboard ol{list-style:none;margin:10px 0 0;padding:0;display:grid;gap:4px;counter-reset:b}
.bboard li{display:grid;grid-template-columns:2em 1fr auto;gap:10px;align-items:center;padding:6px 10px;background:var(--cream-shade);font-size:16px;font-size:round(16px,var(--dpx,1px))}
.bboard li.me{box-shadow:inset 4px 0 0 0 var(--gold)}
.bboard li .pos{font-family:"Silkscreen",ui-monospace,monospace}
.bboard li .fl{font-family:"Silkscreen",ui-monospace,monospace;white-space:nowrap}
.bboard li .sq{letter-spacing:1px;font-size:13px;font-size:round(13px,var(--dpx,1px))}

/* time warning: never faster than 2 Hz */
@media (prefers-reduced-motion:no-preference){
  .frame.t5 .alarm{animation:blink 1s steps(1,end) infinite}
  .frame.t3 .alarm{animation:blink .5s steps(1,end) infinite}
  .frame.t5 .tbar i{animation:barblink 1s steps(1,end) infinite}
  .frame.t3 .tbar i{animation:barblink .5s steps(1,end) infinite}
}
.frame.t1 .alarm{animation:none;opacity:1}
.frame.t1 .tbar i{animation:none;background:var(--red)}
@media (prefers-reduced-motion:reduce){
  .frame.t5 .alarm,.frame.t3 .alarm{opacity:1}
  .frame.t5 .tbar i,.frame.t3 .tbar i{background:var(--red)}
}
@keyframes blink{0%{opacity:1}50%{opacity:0}}
@keyframes barblink{0%{background:var(--red)}50%{background:var(--gold)}}

/* cursor effects: fine pointers only */
@media (pointer:fine){
  .frame{cursor:var(--cur-arrow,default)}
  .frame button,.frame label,.frame .hit,.frame .toggle input{cursor:var(--cur-hand,pointer)}
  .frame input[type=text]{cursor:var(--cur-text,text)}
}
.dust{position:absolute;width:6px;height:6px;margin:-3px 0 0 -3px;opacity:0}
.dust.fade{animation:dust .3s steps(3,end) forwards}
@keyframes dust{0%{opacity:1;transform:none}100%{opacity:0;transform:translateY(6px)}}
.spark{position:absolute;width:6px;height:6px;margin:-3px 0 0 -3px;animation:spark .32s steps(4,end) forwards}
@keyframes spark{0%{transform:none;opacity:1}100%{transform:translate(var(--dx),var(--dy));opacity:0}}
@media (prefers-reduced-motion:reduce){.dust,.spark,.torch{display:none}}

@media (prefers-reduced-motion:no-preference){
  .stamp-in{animation:stampin .12s steps(1,end) both}
  @keyframes stampin{from{transform:scale(2);opacity:.85}to{transform:none;opacity:1}}
}

/* feel: the floor number nudges up as each floor passes; the coins on the end card drop in one by one */
.hudp .num{display:inline-block}
@media (prefers-reduced-motion:no-preference){
  .hudp .num.bump{animation:bump .16s steps(2,end)}
  @keyframes bump{50%{transform:translateY(-2px)}}
  .earned li.pop{animation:popin .24s steps(3,end) both}
  @keyframes popin{from{transform:translateY(-8px);opacity:0}to{transform:none;opacity:1}}
}

/* Silkscreen is drawn on a grid of 1/8 em: sizes are rounded so each of its pixels covers whole device pixels.
   game.js sets --dpx (8px / devicePixelRatio) on screens of 1.5x and more; without it, or without CSS round(), sizes stay as written. */

/* the era plaque: a brass plate that rises past the cage when the lift enters a new era */
.plaque{position:absolute;left:50%;top:40%;z-index:6;margin:0;padding:8px 16px;transform:translateX(-50%);background:#3A2E1E;color:#F2DE9A;
  font-size:16px;font-size:round(16px,var(--dpx,1px));letter-spacing:.14em;text-transform:uppercase;white-space:nowrap;pointer-events:none;
  box-shadow:0 -3px 0 0 #97865A,0 3px 0 0 #5A4A2A,-3px 0 0 0 #6F5E38,3px 0 0 0 #6F5E38,0 0 0 6px rgba(15,14,13,.55)}
@media (prefers-reduced-motion:no-preference){
  .plaque.go{animation:plaque 2.6s steps(40,end) both}
  @keyframes plaque{0%{transform:translate(-50%,120px);opacity:0}25%{opacity:1}70%{opacity:1}100%{transform:translate(-50%,-160px);opacity:0}}
}
/* the archivist's remark */
.bubble{position:absolute;z-index:6;max-width:230px;margin:0;padding:8px 10px;transform:translate(-50%,-100%);background:var(--cream);color:var(--ink);
  font-family:"Departure Mono",ui-monospace,monospace;font-size:15px;line-height:1.3;text-transform:none;letter-spacing:0;pointer-events:none;
  box-shadow:0 -2px 0 0 var(--ink),0 2px 0 0 var(--ink),-2px 0 0 0 var(--ink),2px 0 0 0 var(--ink)}
.bubble::after{content:"";position:absolute;left:50%;bottom:-8px;width:6px;height:6px;background:var(--cream);box-shadow:2px 0 0 0 var(--ink),-2px 0 0 0 var(--ink),0 2px 0 0 var(--ink)}
/* eras reached, unreached ones still ??? */
.eras-got{margin:10px 0 4px;font-size:11px;font-size:round(11px,var(--dpx,1px));letter-spacing:.08em;text-transform:uppercase}
.eras{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;justify-content:center;gap:4px}
.eras li{padding:2px 6px;background:#D6D1C7;color:var(--paper-muted);font-size:11px;font-size:round(11px,var(--dpx,1px));letter-spacing:.06em}
.eras li.got{background:var(--ink);color:var(--gold-light)}
.eras li span{color:var(--cream)}
.nextfile{margin-top:8px}

/* abbreviations: a dotted underline; hover, focus or a tap shows the full name in a small pixel label */
abbr.ab{position:relative;text-decoration:underline dotted;text-decoration-thickness:2px;text-underline-offset:3px;cursor:help;border:0}
abbr.ab:focus{outline:none;text-decoration-style:solid}
abbr.ab:hover::after,abbr.ab:focus::after{content:attr(data-x);position:absolute;left:50%;bottom:calc(100% + 8px);z-index:20;transform:translateX(calc(-50% + var(--tx,0px)));
  width:max-content;max-width:min(260px,70vw);padding:5px 8px;background:var(--ink);color:var(--cream);white-space:normal;text-align:left;
  font:600 14px/1.3 "Source Sans 3",system-ui,sans-serif;letter-spacing:0;text-transform:none;
  box-shadow:0 -2px 0 0 var(--gold),0 2px 0 0 var(--gold),-2px 0 0 0 var(--gold),2px 0 0 0 var(--gold);pointer-events:none}
.feedback.first-hint{color:var(--paper-muted);font-style:italic}   /* not .hint: that class is the dark key-hint box */

/* the weekly club board */
.board .wk{list-style:none;margin:8px 0 0;padding:0;text-align:left}
.board .wk li{display:grid;grid-template-columns:28px 1fr auto;gap:8px;align-items:baseline;padding:4px 6px;font-size:13px;font-size:round(13px,var(--dpx,1px))}
.board .wk li:nth-child(odd){background:#E9E4D9}
.board .wk li.me{background:var(--ink);color:var(--gold-light)}
.board .wk small{font-size:.8em;opacity:.8}
.board .joinb{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;align-items:center;margin-top:10px}
.board .joinb input{min-height:40px;padding:4px 8px;border:0;background:var(--white);box-shadow:0 0 0 2px var(--ink);font:inherit}

/* four-option questions: a 2 x 2 board of answer plates, each with its key; the right one stamps green,
   wrong ones are struck out; under them, the tier you would get if you picked now */
.choices{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:14px}
.opt{display:flex;align-items:center;gap:10px;min-height:56px;padding:8px 12px;text-align:left;cursor:pointer;
  background:var(--white);color:var(--ink);border:0;font:600 17px/1.25 "Departure Mono",ui-monospace,monospace;
  box-shadow:0 -3px 0 0 var(--ink),0 3px 0 0 var(--ink),-3px 0 0 0 var(--ink),3px 0 0 0 var(--ink),inset 0 -4px 0 0 #D6D1C7}
.opt .k{flex:none;display:grid;place-items:center;width:28px;height:28px;background:var(--ink);color:var(--gold-light);
  font-family:"Silkscreen",ui-monospace,monospace;font-size:16px;font-size:round(16px,var(--dpx,1px))}
.opt .t{flex:1}
@media (hover:hover){.opt:hover:not(:disabled){background:#FFF8E6;box-shadow:0 -3px 0 0 var(--ink),0 3px 0 0 var(--ink),-3px 0 0 0 var(--ink),3px 0 0 0 var(--ink),inset 0 -4px 0 0 var(--gold)}}
.opt:focus-visible{outline:3px solid var(--gold);outline-offset:3px}
.opt:active:not(:disabled){transform:translateY(2px)}
.opt.bad{background:#E9E4D9;color:#6E685E;text-decoration:line-through;text-decoration-thickness:2px;cursor:not-allowed}
.opt.bad .k{background:var(--red);color:var(--white)}
.opt.right{background:#55704F;color:var(--white);box-shadow:0 -3px 0 0 var(--ink),0 3px 0 0 var(--ink),-3px 0 0 0 var(--ink),3px 0 0 0 var(--ink),inset 0 -4px 0 0 #3E5439}
.opt.right .k{background:var(--white);color:#55704F}
.opt:disabled{cursor:default}
@media (prefers-reduced-motion:no-preference){.opt.bad{animation:shake .15s steps(3)}.opt.right{animation:stampin .12s steps(1,end) both}}
@media (max-width:519px){.choices{grid-template-columns:1fr;gap:8px}.opt{min-height:48px;font-size:16px}}
.speed{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px;margin:12px 0 0;font-size:12px;font-size:round(12px,var(--dpx,1px));letter-spacing:.08em;text-transform:uppercase;color:var(--paper-muted)}
.speed b{display:inline-flex;align-items:center;gap:6px;padding:3px 8px;font-weight:400}
.speed b svg{width:16px;height:16px}

/* the exit button: top right, like the menu button; the HUD makes room for it */
.exit-btn{position:absolute;right:10px;top:10px;z-index:3;width:44px;height:44px;padding:0;border:0;cursor:pointer;background:var(--ink);display:grid;place-items:center;--ec:var(--gold);box-shadow:var(--edge)}
.exit-btn:hover{background:#2A2420}
.exit-btn:focus-visible{outline:3px solid var(--gold);outline-offset:3px}
.frame.exitable .hud{right:66px}
/* Battle without a lobby: the code to send round */
.dlg .bigcode{margin:4px 0 6px;font-family:"Departure Mono",ui-monospace,monospace;font-size:24px;letter-spacing:.06em;color:var(--ink);background:var(--white);padding:8px 12px;box-shadow:0 -3px 0 0 var(--ink),0 3px 0 0 var(--ink),-3px 0 0 0 var(--ink),3px 0 0 0 var(--ink);user-select:all;text-align:center}
.dlg .bt-ok{min-height:0;margin-top:6px;font-size:15px}
.dlg #bt-off{margin-top:10px}
/* The answers at the end: yours first, then all the others by tier, rarest first */
.sol .reveal .yours:first-child{padding-top:0;box-shadow:none}
.sol .all{padding-top:6px;box-shadow:0 -1px 0 0 #D6D1C7}
.sol .tiers{list-style:none;margin:0;padding:0;display:grid;gap:5px}
.sol .tiers .chip{margin-right:4px}
.sol .more-b{margin-top:8px;padding:4px 0;background:none;border:0;border-bottom:2px solid var(--red);font:600 14px "Source Sans 3",system-ui,sans-serif;color:var(--ink);cursor:pointer}
.sol .more-b:hover{color:var(--red)}
.sol .more-b:focus-visible{outline:3px solid var(--gold);outline-offset:2px}
.sol .reveal .tiers li{padding:0;background:none;box-shadow:none}
/* Title screen notes: never wider than the frame, lines balanced; with today's note and the record showing, the rules line makes room */
.title-screen .note,.title-screen .meta{max-width:min(52ch,88%);overflow-wrap:anywhere;text-wrap:balance}
.title-screen #record{letter-spacing:.06em;line-height:1.5}
.title-screen:has(#played-note:not([hidden])) .desc{display:none}
/* On and off: an empty box when off, a pixel X when on */
.toggle input:checked::after{width:12px;height:12px;background:var(--ink);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 6 6' shape-rendering='crispEdges'%3E%3Cpath d='M0 0h1v1H0zM1 1h1v1H1zM2 2h2v2H2zM4 1h1v1H4zM5 0h1v1H5zM1 4h1v1H1zM0 5h1v1H0zM4 4h1v1H4zM5 5h1v1H5z'/%3E%3C/svg%3E") center/100% 100% no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 6 6' shape-rendering='crispEdges'%3E%3Cpath d='M0 0h1v1H0zM1 1h1v1H1zM2 2h2v2H2zM4 1h1v1H4zM5 0h1v1H5zM1 4h1v1H1zM0 5h1v1H0zM4 4h1v1H4zM5 5h1v1H5z'/%3E%3C/svg%3E") center/100% 100% no-repeat}
.lnk.toggle input:checked::after{width:12px;height:12px}
.menu-btn{z-index:4}   /* above the title screen, which otherwise covers it and takes its clicks */
.folder h2.q:focus{outline:none}
/* How rarity works: the six coins at full size in a grid, the name and the floors under each */
.legend{grid-template-columns:repeat(3,minmax(0,1fr));gap:14px 10px;margin-top:14px}
.legend li{display:flex;flex-direction:column;align-items:center;gap:4px;text-align:center;grid-template-columns:none}
.legend li svg,.legend li img,.legend li canvas{width:96px;height:96px;image-rendering:pixelated}
.legend .nm{margin-top:4px;font-size:13px;font-size:round(13px,var(--dpx,1px));letter-spacing:.08em}
.legend .pts{grid-row:auto;grid-column:auto;text-align:center;color:var(--paper-muted);font-size:13px;font-size:round(13px,var(--dpx,1px))}
.legend .coin-top .nm{color:var(--red)}
@media (max-width:719px){.legend{gap:12px 4px}.legend li svg,.legend li img,.legend li canvas{width:72px;height:72px}.legend .nm,.legend .pts{font-size:11px;letter-spacing:.04em}}
/* UI review fixes, title screen and dialogs */
.lnk.toggle{margin-top:0}
.title-screen .links{align-items:center}
.title-screen{overflow-y:auto}
.title-screen .slogan{margin-bottom:16px;text-wrap:balance;max-width:88%}
@media (max-width:719px),(max-height:500px){.title-screen:has(#played-note:not([hidden])) #record{display:none}}
@media (max-width:719px){
  .title-screen{padding-top:64px}
  .title-screen .go-start{letter-spacing:.08em;padding:8px 10px;font-size:14px;white-space:nowrap}
  .title-screen .logotype{width:calc(var(--lw) * 2px);max-width:none}
  .codein{flex-basis:100%;letter-spacing:.02em}
  .codeform .btn{flex:1}
  .legend .nm{min-height:2.4em}
}
@media (max-width:369px){.title-screen .logotype{width:calc(var(--lw) * 1.5px)}}
@media (max-width:519px){#bt-body .row .btn{width:100%}}
/* a dimmed backdrop behind any open dialog, so what lies behind it does not look clickable */
.ui:has(.dlg:not([hidden]))::before{content:"";position:absolute;inset:0;z-index:4;background:rgba(10,8,6,.7)}
/* a long dialog keeps its Close button in view */
.dlg>.row:last-child{position:sticky;bottom:-14px;margin:14px -16px -14px;padding:10px 16px 14px;background:var(--cream);box-shadow:0 -3px 0 0 var(--gold-light)}
.menu-list .btn{text-align:left}
.btn{text-decoration:none}
.dlg h2+*{margin-top:8px}
.dlg .err:empty{min-height:0;margin:0}
.dlg :focus-visible{outline:3px solid var(--red);outline-offset:3px;box-shadow:var(--edge,none)}
.dlg .btn:hover{outline-color:var(--gold)}
.lnk.toggle input{background:transparent;box-shadow:0 0 0 2px var(--cream)}
.lnk.toggle input:checked{background:var(--white)}
.title-screen .desc,.title-screen .slogan{background:rgba(15,14,13,.55);padding:2px 8px}
:root[data-theme="dark"] .frame{--fb:#97865A}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .frame{--fb:#97865A}}

/* UI review fixes, play screens */
.frame:has(#p-floor:not([hidden])) .bubble{display:none}
#p-result .line{margin-top:6px}
#p-result .counted{margin-top:10px}
.panel .speed{margin-top:12px}
.folder .scope{margin-top:6px}
.opt:focus-visible{outline:3px solid var(--gold);outline-offset:2px;box-shadow:0 -3px 0 0 var(--ink),0 3px 0 0 var(--ink),-3px 0 0 0 var(--ink),3px 0 0 0 var(--ink)}
.field input.bad:focus-visible{outline-color:var(--ink)}
.card.floorcard{text-align:left}
.opt.bad{text-decoration:none}
.opt.bad .t{text-decoration:line-through;text-decoration-thickness:2px}
.speed b{box-shadow:0 -2px 0 0 var(--ink),0 2px 0 0 var(--ink),-2px 0 0 0 var(--ink),2px 0 0 0 var(--ink)}
.gain{font-size:round(22px,var(--dpx,1px))}
@media (max-width:719px){
  .folder{max-height:calc(100% - 154px);overflow-y:auto}
  .choices{gap:6px}
  .opt{min-height:44px;padding:6px 10px}
  .speed{flex-wrap:nowrap;gap:6px;letter-spacing:.04em}
  #feedback{font-size:16.5px}
}
@media (max-width:379px){.hud .prog p{white-space:nowrap;letter-spacing:.04em}.prog ol{gap:3px}.prog li{width:14px;height:14px}}
/* UI review fixes, end screen and coins */
.legend li svg,.legend li img,.legend li canvas{width:64px;height:64px}
.eras li:not(.got) span{color:#6E6A62}
.eras li span{white-space:nowrap}
.sol .reveal .yours{column-gap:10px}
.sol .tiers{gap:8px}
.sol .tiers .chip{margin:0 6px 0 0}
.sol .reveal .src{margin-top:8px}
.bboard li{grid-template-columns:2em minmax(0,1fr) auto}
.bboard li .sq{letter-spacing:0;font-size:11px}
.gcode code{white-space:nowrap;letter-spacing:.04em}
.eras-got{margin-top:14px}
.board .wk small{display:block;white-space:nowrap}
.statbox .note{font-family:"Source Sans 3",system-ui,sans-serif;text-transform:none;letter-spacing:0;font-size:14px}
.landed{margin-inline:3px}
@media (max-width:719px){.card .earned svg{width:32px;height:32px}.card .earned{gap:6px 8px}.legend li svg,.legend li img,.legend li canvas{width:64px;height:64px}}
@media (max-width:520px){.curve .ax,.curve .you{font-size:15px}.gcode code{font-size:15px}.cstats{display:grid;grid-template-columns:repeat(3,1fr)}}

/* Design review: one system (game interface) */
.panel{--ec:var(--gold)}                       /* on the scene, edges are gold; inside paper they stay ink */
.ui:has(.dlg:not([hidden]))::before{z-index:5}
.dlg{z-index:6}
.frame:has(.dlg:not([hidden])) .alarm{display:none}
.hud .prog p{white-space:nowrap;letter-spacing:.06em}
.folder .feedback{min-height:2.6em}
.choices{gap:12px}
.opt{font-weight:400}
.feedback.first-hint,.fc-art,.ln-art{font-style:normal}
.speed>*{white-space:nowrap}
.title-screen .go-start{letter-spacing:.12em}
.opt.bad{color:#5A5249}
.frame.paused .hud .time{visibility:visible}
.frame.paused .hud .time .num{opacity:.35}
.dlg .err{font-family:"Departure Mono",ui-monospace,monospace;text-transform:none;letter-spacing:0;font-size:16.5px}
.btn:disabled{opacity:1;background:#E9E4D9;color:#5A5249;cursor:default}
@media (max-width:719px){
  .choices{gap:12px}
  .folder .tab{position:static;display:block;height:auto;padding:0 0 8px;background:none;box-shadow:none}
  .lnk,.title-screen .modes .btn{min-height:44px}
}
/* the clock from 10 seconds: warm digits and a small bump each second */
.num.warn{color:#E8C27A}
/* a firmer shake for a wrong answer, on the 3 px grid */
.shake{animation:shake 240ms steps(4,end)}
@keyframes shake{20%{transform:translateX(-3px)}40%{transform:translateX(3px)}60%{transform:translateX(-3px)}80%{transform:translateX(3px)}}
/* the era plaque: above the cage, inside the frame, shorter */
.plaque{top:22%;max-width:calc(100% - 32px);white-space:normal;text-align:center}
@media (max-width:719px){.plaque{top:max(22%,176px)}}
.plaque.go{animation:plaque 1620ms steps(27,end) both}
@keyframes plaque{0%{transform:translate(-50%,40px);opacity:0}15%,75%{opacity:1}100%{transform:translate(-50%,-60px);opacity:0}}

/* one focus ring for site and game: 3 px, offset 3 px; cream on the dark scene, ink on paper; never red while typing */
.frame{--focus:var(--cream)}
.frame .panel,.frame .card,.frame .dlg{--focus:var(--ink)}
.frame :focus-visible{outline:3px solid var(--focus);outline-offset:3px;box-shadow:var(--edge,none)}
.frame .opt:focus-visible,.frame .dlg :focus-visible,.frame .field input:focus-visible,.frame .exit-btn:focus-visible,.frame .sol .more-b:focus-visible{outline:3px solid var(--focus);outline-offset:3px}
.frame .field input.bad:focus-visible{outline-color:var(--focus)}
/* the header's lion is drawn by script: its box is reserved so the page does not jump when it appears */
#logo{display:block;width:32px;height:32px;flex:none}

/* Today's result, reopened from the title screen */
#p-today .td-floor{margin:8px 0 0;font-family:"Silkscreen",ui-monospace,monospace;font-size:32px;font-size:round(32px,var(--dpx,1px));letter-spacing:.06em;color:var(--ink)}
#p-today .meta-dark{margin:2px 0 0;font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:#5A5249}
#p-today .td-coins{list-style:none;display:flex;flex-wrap:wrap;gap:8px;margin:14px 0 10px;padding:0}
#p-today .td-coins svg{width:32px;height:32px;display:block}
#p-today .td-ok{min-height:0;margin-top:6px;font-size:15px}
/* the date line over the art gets the same quiet panel as the slogan */
.title-screen .meta{background:rgba(15,14,13,.55);padding:2px 8px}

/* the page header follows the club site: the lion mark, the two-line name in Source Sans Black, an icon theme switch */
.brand .mark{width:44px;height:44px;flex:none;display:block}
.brand span{font-family:"Source Sans 3",system-ui,sans-serif;font-weight:900;font-size:17px;line-height:1.02;letter-spacing:-.01em}
.brand span b{display:block;font-weight:900}
.site nav a{white-space:nowrap}
.ctl{display:inline-grid;place-items:center;width:44px;height:44px;padding:0;background:none;color:inherit;border:1px solid currentColor;cursor:pointer}
.ctl .ic{width:20px;height:20px}
.ctl .sun,.ctl.is-dark .moon{display:none}
.ctl.is-dark .sun{display:block}
@media (max-width:420px){.site nav .long{display:none}.brand span{font-size:15px}.brand .mark{width:38px;height:38px}}

/* shared tokens with the club site (one muted grey, one sand, one gold-light) */
:root{--paper-muted:#5A5249;--sand:#E9E4D9;--gold-light:#C9BC93}   /* paper is always light, so its grey does not follow the page theme */
/* the floor badge settles once the last coin has landed: a short drop on the 3 px grid, no scaling */
.badge-stamp{animation:badgein 240ms steps(4,end) both}
@keyframes badgein{0%{transform:translateY(-9px)}50%{transform:translateY(3px)}100%{transform:none}}
@media (prefers-reduced-motion:reduce){.badge-stamp{animation:none}}

/* the archivist's bust beside the floor badge on the end screen, at the badge's own pixel scale */
.card .badge-row{display:flex;align-items:flex-end;justify-content:center;gap:12px;margin-top:4px}
.card .badge-row .badge{margin:0}
.card .end-lion{width:120px;height:152px;image-rendering:pixelated;flex:none}


/* a phone held sideways: the frame fills the screen height instead of keeping 16:10 */
@media (orientation:landscape) and (max-height:500px){.frame{aspect-ratio:auto;height:calc(100svh - 8px)}}
.card .end-lion,.card .badge-row .badge{position:static}

/* the end screen uses the whole frame below the menu and exit buttons, so less of it is cut off */
.card.end{top:64px;max-height:calc(100% - 80px)}
@media (max-width:719px){.card .end-lion{width:60px;height:76px}}   /* at 1x on phones, so it fits beside the badge */

/* the club board: a gap row before your own place when you are outside the top 50; the dialog list scrolls */
.board .wk li.gap{display:block;text-align:center;background:none;padding:2px 0;letter-spacing:.3em}
#board-dlg .wk{max-height:min(50vh,420px);overflow-y:auto}
#board-dlg{margin-top:8px}
.lnk-in{background:none;border:0;padding:0;font:inherit;color:inherit;text-decoration:underline;cursor:pointer}
.board .wk li{grid-template-columns:3.4em 1fr auto}   /* room for four-digit ranks such as 1345 */
