/* Stories, documentation, glossary, about, search, offline, 404. */

/* ---------- toggles (Contents on phones, filters on Sources): closed by CSS before first paint, so no shift */
@media (max-width:999px){
  .js .rd-tt{display:flex}
  .js .tg[aria-expanded="false"] + .tg-p{display:none}
}
.tg{align-items:center;gap:10px;width:100%;min-height:48px;padding:0;border:0;background:none;color:var(--ink);font:700 var(--t-body) var(--body);cursor:pointer;text-align:left}
.tg .num{font-weight:400;color:var(--dim)}
.tg::after{content:"";width:8px;height:8px;margin-left:auto;margin-right:6px;border-right:2px solid var(--dim);border-bottom:2px solid var(--dim);transform:rotate(45deg);transition:transform var(--d-2) var(--ease-out)}
.tg[aria-expanded="true"]::after{transform:rotate(-135deg)}

/* ---------- reader: sticky contents rail + 68ch reading column (stories, documentation, about) */
.rd{padding-block:12px 8px}
@media (min-width:1000px){.rd{display:grid;grid-template-columns:15rem minmax(0,1fr);gap:64px;align-items:start}}
.rd-toc{margin:20px 0 4px;border-block:1px solid var(--line)}
.rd-tt{display:none}

.rd-toc ol{list-style:none;margin:0;padding:0 0 12px}
.rd-toc li{margin:0}
.rd-toc a{display:block;padding:7px 0 7px 12px;margin-left:-12px;border-left:2px solid transparent;color:var(--dim);text-decoration:none;font:400 1.0625rem/1.3 var(--display)}
.rd-toc a:hover{color:var(--ink)}
.rd-toc a[aria-current="true"]{color:var(--ink);border-left-color:var(--blue)}
.rd-toc ol ol{padding:0 0 6px 12px}
.rd-toc ol ol a{font:400 var(--t-xs)/1.35 var(--body);padding-block:5px}
@media (min-width:1000px){
  .rd-toc{position:sticky;top:calc(var(--head-h) + 24px);max-height:calc(100vh - var(--head-h) - 48px);overflow:auto;margin-top:36px;border:0;scrollbar-width:thin}
}
.rd-main{min-width:0}
.rd-sec{padding-top:36px;scroll-margin-top:calc(var(--head-h) + 12px)}
.rd-sec + .rd-sec{margin-top:24px;border-top:1px solid var(--line)}
.rd-sec > h2{max-width:22ch}
.rd-main .prose h3{scroll-margin-top:calc(var(--head-h) + 12px)}
.rd-main .prose table{margin:1.2em 0 1.6em;font-size:var(--t-sm)}
.rd-main .prose td:first-child{font-family:var(--display);font-variant-numeric:lining-nums tabular-nums;white-space:nowrap}
.rd-main .prose{max-width:68ch}

/* about: what the site holds, set as a margin ledger */
.ab-led{display:flex;flex-wrap:wrap;gap:4px 28px;margin:32px 0 0;padding:14px 0;border-block:1px solid var(--line)}
.ab-led p{margin:0}
.ab-led a{display:inline-flex;align-items:baseline;gap:8px;min-height:44px;align-items:center;color:var(--dim);text-decoration:none}
.ab-led a:hover{color:var(--ink)}
.ab-led b{font:400 1.75rem/1 var(--display);color:var(--ink)}
.ab-upd{margin-top:32px;color:var(--dim);font-size:var(--t-sm)}

/* ---------- glossary: a dictionary column with a term index */
.gl{display:block}
@media (min-width:1000px){.gl{display:grid;grid-template-columns:15rem minmax(0,1fr);gap:64px;align-items:start}}
.gl-idx ol{list-style:none;margin:0 0 20px;padding:0;display:flex;flex-wrap:wrap;gap:4px 16px}
.gl-idx a{display:inline-block;padding-block:6px;color:var(--dim);font:400 1.0625rem/1.3 var(--display)}
@media (min-width:1000px){.gl-idx{position:sticky;top:calc(var(--head-h) + 24px)}.gl-idx ol{display:block}.gl-idx a{display:block;padding:5px 0;text-decoration:none}.gl-idx a:hover{color:var(--ink);text-decoration:underline}}
dl.gloss{margin:0;max-width:68ch}
.gl-e{display:grid;gap:4px;padding:20px 0 22px;border-top:1px solid var(--line);scroll-margin-top:calc(var(--head-h) + 12px)}
.gl-e:first-child{border-top-color:var(--line-strong)}
.gl-l .gl-e:first-child{border-top-color:var(--line-strong)}
.gl-e:target{background:linear-gradient(90deg,var(--glow),transparent 70%);animation:ev-hl var(--d-4) var(--ease-out)}
dl.gloss dt{font:400 var(--t-h3)/1.15 var(--display)}
dl.gloss dd{margin:0}
dl.gloss dd p{margin:0 0 6px;font-size:var(--t-read);line-height:1.6}
.gl-more{display:inline-block;padding-block:6px;font-size:var(--t-sm);font-weight:700}
.gl-pending p{color:var(--dim);font-size:var(--t-body)!important}

/* ---------- Pagefind search, themed from the site tokens (both themes) */
.srch{max-width:820px}
/* the search field's height is held before Pagefind mounts, so the footer does not jump (CLS) */
.js .srch #search{min-height:72px}
/* [jury3 #1] with ?q= the results region holds a full screen until Pagefind settles, so the footer starts below the fold;
   a result still loading, and every result after it, stays invisible while its height settles (no visible shift) */
.js .srch #search.pf-q{min-height:100svh}
.js #search.pf-q .pagefind-ui__result:has(.pagefind-ui__loading),.js #search.pf-q .pagefind-ui__result:has(.pagefind-ui__loading)~.pagefind-ui__result{visibility:hidden}
#search .pagefind-ui{--pagefind-ui-primary:var(--blue);--pagefind-ui-text:var(--ink);--pagefind-ui-background:var(--bg2);--pagefind-ui-border:var(--line-strong);
  --pagefind-ui-tag:var(--bg3);--pagefind-ui-border-radius:12px;--pagefind-ui-border-width:1px;--pagefind-ui-font:var(--body);--pagefind-ui-scale:1}
#search .pagefind-ui__search-input{color:var(--ink);background:var(--bg2);font:400 1.375rem var(--display);height:64px;border-radius:999px}
#search .pagefind-ui__search-input::placeholder{color:var(--dim);opacity:1}
#search .pagefind-ui__search-clear{background:var(--bg2);color:var(--dim);border-radius:999px;height:56px;top:4px;right:6px}
#search .pagefind-ui__result-link{color:var(--ink);font-family:var(--display);font-size:1.25rem}
#search .pagefind-ui__result-title{font-weight:400}
#search .pagefind-ui__result-excerpt,#search .pagefind-ui__message{color:var(--dim)}
#search .pagefind-ui__message{font:400 1.0625rem var(--display);padding-block:14px 4px}
#search .pagefind-ui__result{border-top-color:var(--line)}
#search .pagefind-ui__result-nested .pagefind-ui__result-link{font-size:1.0625rem}
#search mark{background:color-mix(in srgb,var(--blue) 30%,transparent);color:var(--ink);border-radius:2px}
#search .pagefind-ui__button{color:var(--ink);background:var(--bg2);border-color:var(--line-strong);border-radius:999px}
.tl-bridge{margin:16px 0 0;font-weight:700}
.tl-bridge a{display:inline-block;padding-block:8px}
#search .tl-bridge a{color:var(--blue)}
.srch-nojs{color:var(--dim)}

/* ---------- offline and 404: the four stars, the message, the ways back */
.lost{padding-block:clamp(48px,10vw,120px) 24px;max-width:46rem;margin-inline:auto}
.lost-stars{width:clamp(72px,12vw,112px);color:var(--star);margin-bottom:28px}
.lost-stars svg{width:100%;height:auto;display:block}
@media (prefers-reduced-motion:no-preference){.lost-stars path{animation:lost-tw 3.4s ease-in-out infinite}.lost-stars path:nth-child(2){animation-delay:.6s}.lost-stars path:nth-child(3){animation-delay:1.2s}.lost-stars path:nth-child(4){animation-delay:1.8s}}
@keyframes lost-tw{50%{opacity:.55}}
.lost h1{margin-bottom:.3em}
.lost .lede{font-size:var(--t-lg);color:var(--dim);max-width:44ch;margin:0 0 28px}
.lost-links{list-style:none;margin:0;padding:0;border-top:1px solid var(--line-strong)}
.lost-links a{display:flex;align-items:center;justify-content:space-between;min-height:56px;border-bottom:1px solid var(--line);color:var(--ink);text-decoration:none;font:400 1.5rem/1.2 var(--display)}
.lost-links a::after{content:"";width:9px;height:9px;border-top:2px solid var(--dim);border-right:2px solid var(--dim);transform:rotate(45deg);margin-right:6px}
.lost-links a:hover{color:var(--blue)}
.lost-links a:hover::after{border-color:var(--blue)}

/* 404: "This star isn't on the chart": a small chart of the four states with an empty dotted star in open sea */
.lost-chart{display:block;width:min(420px,100%);height:auto;margin:0 0 20px -6px;overflow:visible}
.lost-chart .lc-grat{fill:none;stroke:var(--line);stroke-width:1;vector-effect:non-scaling-stroke}
.lost-chart .lc-at{fill:var(--dim);opacity:.7}
.lost-chart .lc-st{fill:var(--star);stroke:var(--star-ring);stroke-width:1.2}
.lost-chart .lc-miss circle{fill:none;stroke:var(--blue);stroke-width:1.5;stroke-dasharray:2 5;stroke-linecap:round}
.lost-chart .lc-miss path{fill:none;stroke:var(--blue);stroke-width:1.4;stroke-dasharray:3 3;stroke-linejoin:round}
@media (prefers-reduced-motion:no-preference){.lost-chart .lc-miss{animation:lost-tw 3.4s ease-in-out infinite}}
.lost-404 .eyebrow{margin-bottom:6px}
.lost-search{margin:0 0 28px}
.lost-search label{display:block;font-weight:700;font-size:var(--t-sm);margin-bottom:8px}
.lost-row{display:flex;gap:8px;flex-wrap:wrap}
.lost-row .search{flex:1 1 220px}
.lost-sug{margin-top:28px}
.lost-sug-h{font:400 var(--t-lg)/1.3 var(--display);margin:0 0 8px}
.lost-sug ol{margin:0;padding-left:1.4em}
.lost-sug li{margin:2px 0}
.lost-sug a{display:inline-block;padding-block:8px}

/* glossary A–Z: letters with entries link to their group; the others stay as plain, quiet text */
.gl-az ol{list-style:none;display:flex;flex-wrap:wrap;gap:2px;margin:0 0 8px;padding:0}
.gl-az li > *{display:inline-grid;place-items:center;min-width:29px;min-height:36px;border-radius:8px;font:400 1.125rem/1 var(--display)}
.gl-az a{color:var(--ink);font-weight:600;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.2em}
.gl-az a:hover{background:var(--bg3);color:var(--blue)}
.gl-az span{color:var(--dim)}
@media (pointer:coarse){.gl-az li > *{min-width:40px;min-height:44px}}
.gl-l{scroll-margin-top:calc(var(--head-h) + 12px)}
.gl-lh{font:400 var(--t-h2)/1 var(--display);margin:28px 0 0;padding-bottom:8px;color:var(--blue)}
.gl-main{min-width:0;max-width:68ch}

@media print{.rd{display:block}.rd-toc,.gl-idx,.gl-az,.lost-search,.lost-sug{display:none}}

/* phones: the A–Z is the index; the full term list is for the wide rail only */
@media (max-width:999px){.gl-idx{display:none}}

/* ---------- About: image credits (scripts/pages/images.py). Thumbs use the era pages' two-tone plate treatment;
   under html.ph-off (Photos off or Save-Data) they are not shown, so nothing is fetched. */
.t-misc{--ph-lo:var(--ink);--ph-hi:var(--bg2)}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .t-misc{--ph-lo:var(--bg2);--ph-hi:color-mix(in srgb,var(--ink) 62%,var(--dim))}}
:root[data-theme="dark"] .t-misc{--ph-lo:var(--bg2);--ph-hi:color-mix(in srgb,var(--ink) 62%,var(--dim))}
.cr{list-style:none;margin:20px 0 0;padding:0}
.cr-i{display:grid;grid-template-columns:84px minmax(0,1fr);gap:4px 20px;padding:18px 0;border-top:1px solid var(--line)}
.cr-i > div{min-width:0}
.cr-i p{margin:0}
.cr-th{display:block;width:84px;height:56px}
.cr .g-th{display:block;position:relative;width:84px;height:56px;overflow:hidden;isolation:isolate;background:var(--ph-hi);border-radius:2px;box-shadow:0 0 0 1px var(--line)}
.cr .g-th::after{content:"";position:absolute;inset:0;background:var(--ph-lo);mix-blend-mode:lighten;pointer-events:none}
.cr .g-th img{display:block;width:84px;height:56px;object-fit:cover;filter:grayscale(1) contrast(1.04);mix-blend-mode:multiply}
.ph-off .cr-th{display:none}
.ph-off .cr-i{grid-template-columns:minmax(0,1fr)}
.cr-ch{font:400 1.1875rem/1.3 var(--display)}
.cr-cap{margin-top:4px!important;font-size:var(--t-sm);line-height:1.5}
.cr-cred{margin-top:4px!important;font-size:var(--t-xs);line-height:1.5;color:var(--dim)}
.ph-links{display:flex;flex-wrap:wrap;align-items:center;gap:0 16px;margin:2px 0 0;font-size:var(--t-xs)}
.ph-links a{display:inline-flex;align-items:center;min-height:32px;color:var(--dim)}
.ph-links a:hover{color:var(--blue)}
.cr-sw{display:flex;align-items:center;gap:6px 14px;flex-wrap:wrap;font-size:var(--t-sm);color:var(--dim)}
.no-js .cr-sw{display:none}
.ph-sw{display:inline-flex;align-items:center;gap:8px;min-height:32px;padding:0 2px;border:0;background:none;color:var(--ink);font:inherit;font-size:var(--t-sm);font-weight:700;cursor:pointer}
.ph-sw-t{position:relative;width:30px;height:18px;border:1.5px solid var(--line-strong);border-radius:999px;transition:background-color var(--d-2),border-color var(--d-2)}
.ph-sw-t::after{content:"";position:absolute;top:2px;left:2px;width:11px;height:11px;border-radius:50%;background:var(--line-strong);transition:transform var(--d-2) var(--ease-out),background-color var(--d-2)}
.ph-sw[aria-checked="true"] .ph-sw-t{background:var(--blue);border-color:var(--blue)}
.ph-sw[aria-checked="true"] .ph-sw-t::after{transform:translateX(12px);background:var(--blue-ink)}
@media (pointer:coarse){.ph-links a,.ph-sw{min-height:44px}}
@media print{.cr-th,.cr-sw{display:none}.cr-i{grid-template-columns:1fr}}
