/* Zone7 Studios hub: the SUB-PAGE layer of the "Orbit" design system (?v=123, 2026-09-13).
   Loaded after assets/orbit.css by privacy.html, terms.html and 404.html, and by nothing else.

   TOKENS LIVE IN ONE PLACE. Every colour below is an orbit.css :root token (--bg --ink --dim
   --faint --line --acc --pane --serif --sans --pad). This file adds no colour of its own except
   the two stops of the static ground, which are copied verbatim from the reduced-motion ground
   orbit.css already ships. orbit.css itself is UNCHANGED by this wave, so index.html keeps
   ?v=123 and the contrast proof it rests on is untouched.

   NO canvas, NO GSAP, NO motion. These pages are legal reading and a not-found card: they must
   render completely with JavaScript off, so nothing here waits on a class set by script, and
   there is no transition, animation or scroll effect to pause. Reduced motion is satisfied by
   having no motion at all (plus the scroll-behavior reset at the foot of this file, which is
   the CSS-only stand-in for the html.rm class that only index.html can set).

   THE GROUND. The home page brightens its ground with a particle canvas at #field{opacity:.62}.
   A sub-page has no canvas: body.doc::before is one fixed radial whose brightest stop is
   #0a0f1e, so the sub-page ground is strictly DARKER than the worst-case open field the hub
   proof is computed over (tools/wcag-contrast.py BACKDROP, rgb(180.1, 181.5, 184.2)). Every
   pair proven over that backdrop therefore holds here with room to spare, which is exactly how
   the sub-page pairs in the manifest are stated.

   CONTRAST. tools/wcag-contrast.py carries the sub-page pairs (labels beginning "sub ") and it
   MUST exit 0. PANE stays rgba(5,7,13,.78) and #field{opacity:.62} is not touched from here.
   In-copy links are underlined in currentColor, so an underline can never be fainter than the
   text it belongs to; the decorative hairlines are var(--line), the same token the home page
   uses for card borders and the footer rule, and are out of the proof for the same reason. */

/* ---------- the static ground (replaces the home page field) ---------- */
body.doc{background:var(--bg)}
body.doc::before{content:"";position:fixed;inset:0;z-index:0;pointer-events:none;
  background:radial-gradient(60% 50% at 50% 38%,#0a0f1e,#05070d 72%)}

/* ---------- the reading column ----------
   main and footer are already position:relative;z-index:1 in orbit.css, so they sit above the
   ground layer. The top padding clears the fixed nav band (about 58px) with air to spare, and
   [id]{scroll-margin-top:4.6rem} in orbit.css keeps any anchor clear of it. */
.doc main{position:relative;z-index:1;padding:clamp(5.6rem,12svh,8.5rem) var(--pad) clamp(3rem,8svh,6rem)}
.doc .page{width:100%;max-width:40rem;margin:0 auto;padding:clamp(1.5rem,4.5vw,2.8rem)}

/* ---------- article typography (orbit.css resets every margin, so state them) ---------- */
.doc .page h1{font-family:var(--serif);font-weight:400;font-size:clamp(2.4rem,8.5vw,3.6rem);line-height:1.03;letter-spacing:-.012em;text-wrap:balance;color:var(--ink);margin:0 0 .55rem}
.doc .page h2{font-family:var(--serif);font-weight:400;font-size:clamp(1.55rem,4.4vw,2.15rem);line-height:1.14;letter-spacing:-.008em;text-wrap:balance;color:var(--ink);margin:2.5rem 0 .9rem;padding-top:1.7rem;border-top:1px solid var(--line)}
.doc .page p{color:var(--dim);font-size:clamp(1.01rem,1.5vw,1.1rem);line-height:1.68;margin:0 0 1.05rem}
.doc .page p:last-child{margin-bottom:0}
.doc .page .updated{color:var(--faint);font-size:.86rem;letter-spacing:.04em;margin:0 0 1.9rem}
.doc .page .lead{color:var(--dim);font-size:clamp(1.08rem,2.2vw,1.25rem);line-height:1.5;margin:0 0 1.3rem}
.doc .page ul{margin:0 0 1.3rem;padding-left:1.3rem;list-style:disc outside}
.doc .page li{color:var(--dim);font-size:clamp(1.01rem,1.5vw,1.1rem);line-height:1.6;margin:0 0 .5rem}
.doc .page li:last-child{margin-bottom:0}
.doc .page li::marker{color:var(--acc)}
.doc .page strong{color:var(--ink);font-weight:600}
.doc .page a{color:var(--ink);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.2em}
@media (hover:hover) and (pointer:fine){.doc .page a:hover{text-decoration-thickness:2px}}

/* ---------- the not-found card: same look, centred, smaller ---------- */
.doc-404 main{min-height:100svh;display:grid;align-content:center;justify-items:center}
.doc-404 .page{max-width:32rem}

/* ---------- narrow phones: keep the gutter, tighten the pane ---------- */
@media (max-width:420px){
  .doc main{padding-left:1rem;padding-right:1rem}
  .doc .page{padding:1.35rem 1.15rem 1.5rem;border-radius:22px}
  .doc .page h2{margin-top:2rem;padding-top:1.35rem}
}

/* ---------- reduced motion ----------
   orbit.css turns its smooth scrolling off through html.rm, a class index.html sets in a head
   script. The sub-pages carry no script, so the same reset is done here in pure CSS. */
@media (prefers-reduced-motion: reduce){
  html{scroll-behavior:auto}
}
