/* APTAVIA 2.0 · the public street shell (run 5, part shellA). GENERATED by scripts/dev/public/build-public-shell-sheet.mjs from walk/shared/road-window.css (the still sky pane) and walk/shared/public-shell.css; never hand-edit. */
/* ---- walk/shared/road-window.css · the still sky pane ---- */
@property --rw-land-far { syntax: '<color>'; inherits: true; initial-value: transparent; }
@property --rw-land-mid { syntax: '<color>'; inherits: true; initial-value: transparent; }
@property --rw-land-near { syntax: '<color>'; inherits: true; initial-value: transparent; }
@property --rw-glow-c { syntax: '<color>'; inherits: true; initial-value: transparent; }
@property --rw-pool-c { syntax: '<color>'; inherits: true; initial-value: transparent; }
@property --rw-hz-c { syntax: '<color>'; inherits: true; initial-value: transparent; }
@property --rw-sill-lit { syntax: '<color>'; inherits: true; initial-value: transparent; }
.rw-pane{
  /* the wall: warm plaster, chroma ≤ 0.012 (warm material, not a new colour) */
  --rw-wall-hi:oklch(0.222 0.011 62);
  --rw-wall:oklch(0.196 0.010 56);
  --rw-wall-lo:oklch(0.172 0.009 52);
  /* the frame: painted timber, a little lighter than the wall; specular top-left, shade bottom-right */
  --rw-frame-face:oklch(0.345 0.012 66);
  --rw-frame-spec:oklch(0.62 0.012 70 / .75);
  --rw-frame-shade:oklch(0.10 0.008 50 / .9);
  --rw-cast:0 18px 34px -14px oklch(0.06 0.01 40 / .85), 0 2px 0 oklch(0.06 0.01 40 / .5);
  /* the sill: its top face catches the window's light */
  --rw-sill-face:oklch(0.330 0.011 66);
  --rw-sill-back:oklch(0.300 0.011 64);
  --rw-sill-nose:oklch(0.250 0.010 58);
  --rw-sill-foot:oklch(0.212 0.010 54);
  --rw-sill-edge:oklch(0.60 0.012 72 / .55);
  --rw-sill-shadow:oklch(0.06 0.01 40 / .55);
  --rw-engrave:oklch(0.72 0.012 72);
  --rw-engrave-lo:oklch(0.08 0.01 40 / .7);
  /* glass */
  --rw-refl:oklch(1 0 0 / .04);
  --rw-refl-thin:oklch(1 0 0 / .05);
  --rw-spec-c:oklch(1 0 0 / .38);
  /* her light's thread (Today) */
  --rw-thread-c:color-mix(in srgb,var(--sp-primary) 62%,var(--sp-ink));
  /* the lanterns: plain lamps (light, never a section fill) */
  --rw-lamp-core:oklch(0.97 0.02 85);
  --rw-lamp-rim:oklch(0.80 0.03 80 / .7);
  --rw-lamp-glow:0 0 7px 1px oklch(0.92 0.06 80 / .45);
  --rw-post:oklch(0.80 0.02 80 / .45);
}
.rw-glass{position:absolute;inset:var(--rw-frame);overflow:hidden;border-radius:calc(var(--rw-radius) - var(--rw-frame));isolation:isolate;
  --rw-glow-x:calc(var(--x0) + var(--d-glow, 8) * var(--pd) - var(--rw-gx));--rw-gw-px:calc(100cqw - 2 * var(--rw-gx));
  box-shadow:inset 0 3px 6px -2px oklch(0 0 0 / .45),inset 0 0 0 1px oklch(0 0 0 / .35)}
.rw-glass > *{position:absolute;display:block}
.rw-sky{inset:0;opacity:0;transition:opacity .4s linear}
.rw-pane[data-sky="morning"] .rw-sky[data-sky-layer="morning"],
.rw-pane[data-sky="day"] .rw-sky[data-sky-layer="day"],
.rw-pane[data-sky="evening"] .rw-sky[data-sky-layer="evening"],
.rw-pane[data-sky="night"] .rw-sky[data-sky-layer="night"]{opacity:1}
.rw-sky[data-sky-layer="morning"]{background:
  radial-gradient(60% 38% at var(--rw-glow-x,22%) 100%,oklch(0.52 0.075 70 / .55),transparent 70%),
  radial-gradient(26% 6% at 64% 30%,oklch(0.46 0.035 30 / .45),transparent 72%),
  radial-gradient(18% 4% at 80% 42%,oklch(0.48 0.045 50 / .40),transparent 72%),
  linear-gradient(180deg,oklch(0.300 0.042 242) 0%,oklch(0.340 0.034 262) 42%,oklch(0.385 0.040 330) 72%,oklch(0.440 0.062 68) 100%)}
.rw-sky[data-sky-layer="day"]{background:
  radial-gradient(24% 7% at 28% 30%,oklch(0.50 0.030 240 / .55),transparent 72%),
  radial-gradient(34% 6% at 70% 20%,oklch(0.48 0.028 240 / .45),transparent 72%),
  radial-gradient(14% 4% at 84% 46%,oklch(0.50 0.025 240 / .35),transparent 72%),
  linear-gradient(180deg,oklch(0.312 0.064 252) 0%,oklch(0.362 0.056 245) 52%,oklch(0.430 0.042 236) 100%)}
.rw-sky[data-sky-layer="evening"]{background:
  radial-gradient(70% 44% at var(--rw-glow-x,22%) 100%,oklch(0.50 0.13 42 / .60),transparent 70%),
  radial-gradient(30% 5% at 60% 46%,oklch(0.38 0.09 15 / .55),transparent 72%),
  linear-gradient(180deg,oklch(0.185 0.050 285) 0%,oklch(0.245 0.068 315) 38%,oklch(0.330 0.095 350) 68%,oklch(0.415 0.120 38) 100%)}
.rw-sky[data-sky-layer="night"]{background:
  radial-gradient(40% 30% at var(--rw-glow-x,22%) 100%,oklch(0.30 0.04 80 / .35),transparent 70%),
  linear-gradient(180deg,oklch(0.125 0.030 272) 0%,oklch(0.158 0.040 268) 58%,oklch(0.205 0.046 262) 100%)}
.rw-stars{left:0;top:0;width:1.6px;height:1.6px;border-radius:50%;opacity:0;transition:opacity .4s linear;background:oklch(0.95 0.01 90 / .9);
  box-shadow:
    calc(var(--rw-gw-px, 1100px) * .06) 22px 0 -.2px oklch(0.95 0.01 90 / .55),
    calc(var(--rw-gw-px, 1100px) * .13) 64px 0 0 oklch(0.95 0.01 90 / .35),
    calc(var(--rw-gw-px, 1100px) * .27) 18px 0 0 oklch(0.95 0.01 90 / .6),
    calc(var(--rw-gw-px, 1100px) * .36) 88px 0 -.3px oklch(0.95 0.01 90 / .4),
    calc(var(--rw-gw-px, 1100px) * .48) 40px 0 0 oklch(0.95 0.01 90 / .5),
    calc(var(--rw-gw-px, 1100px) * .58) 12px 0 -.2px oklch(0.95 0.01 90 / .45),
    calc(var(--rw-gw-px, 1100px) * .66) 70px 0 0 oklch(0.95 0.01 90 / .35),
    calc(var(--rw-gw-px, 1100px) * .74) 30px 0 0 oklch(0.95 0.01 90 / .55),
    calc(var(--rw-gw-px, 1100px) * .91) 58px 0 -.2px oklch(0.95 0.01 90 / .4),
    calc(var(--rw-gw-px, 1100px) * .96) 16px 0 0 oklch(0.95 0.01 90 / .5)}
.rw-pane[data-sky="night"] .rw-stars{opacity:1}
.rw-pane[data-sky="evening"] .rw-stars{opacity:.45}
.rw-moon{right:9%;top:16%;width:22px;height:22px;opacity:0;transition:opacity .4s linear}
.rw-moon path{fill:oklch(0.93 0.025 90)}
.rw-pane[data-sky="night"] .rw-moon{opacity:.92}
.rw-glow{left:calc(var(--x0) + var(--d-glow, 8) * var(--pd) - var(--rw-gx));top:var(--rw-hz-in);width:min(60cqw,640px);height:min(30cqw,260px);translate:-50% -50%;
  background:radial-gradient(closest-side,var(--rw-glow-c),color-mix(in oklab,var(--rw-glow-c) 40%,transparent) 48%,transparent 100%)}
.rw-band{display:none !important}
.rw-land{left:0;top:var(--rw-hz-in);width:100%;height:calc(100% - var(--rw-hz-in) + 1px);overflow:visible}
.rw-land-far{fill:var(--rw-land-far)}
.rw-land-mid{fill:var(--rw-land-mid)}
.rw-land-near{fill:var(--rw-land-near)}
.rw-refl{inset:0;pointer-events:none;
  background:linear-gradient(124deg,transparent 0 3%,color-mix(in oklab,var(--rw-refl) 55%,transparent) 8%,var(--rw-refl) 13%,color-mix(in oklab,var(--rw-refl) 55%,transparent) 19%,transparent 25%,transparent 100%),
    linear-gradient(124deg,transparent 0 26.5%,var(--rw-refl-thin) 27%,transparent 27.6%,transparent 100%) top left / 100% 34% no-repeat}
.rw-spec{inset:0;pointer-events:none;border-radius:inherit;
  background:
    linear-gradient(90deg,var(--rw-spec-c),oklch(1 0 0 / .08) 38%,transparent 70%) top left / 100% 1px no-repeat,
    linear-gradient(180deg,var(--rw-spec-c),oklch(1 0 0 / .06) 50%,transparent 85%) top left / 1px 100% no-repeat}
html:not(.dark) .rw-glass{box-shadow:inset 0 2px 0 color-mix(in srgb,var(--ink) 10%,transparent)}
html:not(.dark) .rw-sky[data-sky-layer="morning"]{background:
  radial-gradient(26% 6% at 64% 30%,oklch(1 0 0 / .7),transparent 72%),
  linear-gradient(180deg,oklch(0.915 0.030 245) 0%,oklch(0.935 0.024 290) 50%,oklch(0.945 0.040 55) 100%)}
html:not(.dark) .rw-sky[data-sky-layer="day"]{background:
  radial-gradient(24% 7% at 28% 30%,oklch(1 0 0 / .8),transparent 72%),
  radial-gradient(34% 6% at 70% 20%,oklch(1 0 0 / .7),transparent 72%),
  linear-gradient(180deg,oklch(0.860 0.058 240) 0%,oklch(0.905 0.040 237) 55%,oklch(0.960 0.016 230) 100%)}
html:not(.dark) .rw-sky[data-sky-layer="evening"]{background:
  linear-gradient(180deg,oklch(0.300 0.060 282) 0%,oklch(0.380 0.078 318) 42%,oklch(0.500 0.098 355) 72%,oklch(0.640 0.110 55) 100%)}
html:not(.dark) .rw-sky[data-sky-layer="night"]{background:
  linear-gradient(180deg,oklch(0.190 0.040 272) 0%,oklch(0.230 0.045 268) 58%,oklch(0.290 0.050 262) 100%)}
html:not(.dark) .rw-band{display:block !important;left:calc(var(--x0) + var(--d-glow, 8) * var(--pd) - var(--rw-gx));top:calc(var(--rw-hz-in) - 26px);width:min(46cqw,520px);height:26px;translate:-50% 0;
  background:linear-gradient(180deg,transparent,oklch(0.86 0.10 68 / .12));
  -webkit-mask:linear-gradient(90deg,transparent,black 30%,black 70%,transparent);mask:linear-gradient(90deg,transparent,black 30%,black 70%,transparent)}
html:not(.dark) .rw-pane .rw-band{left:calc(var(--pane-door) * 100%);width:50%}
.rw-pane{margin:0;display:grid;gap:8px;--rw-hz-in:62%}
.rw-pane .rw-glass{inset:9px;border-radius:8px;--rw-glow-x:calc(var(--pane-door) * 100%);--rw-gw-px:300px}
.rw-pane .rw-glow{left:calc(var(--pane-door) * 100%);width:70%;height:60%}
.rw-pane figcaption{font:600 13px/1.3 var(--font-ui);color:var(--body)}
.rw-glass{border-radius:2px}
html.dark .rw-sky[data-sky-layer="day"]{background:
  radial-gradient(24% 7% at 28% 30%,oklch(0.60 0.035 240 / .48),transparent 72%),
  radial-gradient(34% 6% at 70% 20%,oklch(0.58 0.035 240 / .40),transparent 72%),
  radial-gradient(14% 4% at 84% 46%,oklch(0.60 0.030 240 / .30),transparent 72%),
  linear-gradient(180deg,oklch(0.315 0.115 258) 0%,oklch(0.370 0.105 250) 52%,oklch(0.455 0.080 236) 100%)}
html.dark .rw-sky[data-sky-layer="morning"]{background:
  radial-gradient(60% 40% at var(--rw-glow-x,22%) 100%,oklch(0.62 0.115 60 / .62),transparent 70%),
  radial-gradient(26% 6% at 64% 30%,oklch(0.55 0.080 28 / .50),transparent 72%),
  radial-gradient(18% 4% at 80% 42%,oklch(0.58 0.090 48 / .45),transparent 72%),
  linear-gradient(180deg,oklch(0.300 0.075 262) 0%,oklch(0.350 0.065 292) 36%,oklch(0.425 0.080 350) 68%,oklch(0.510 0.105 52) 100%)}
html.dark .rw-sky[data-sky-layer="night"]{background:
  radial-gradient(10% 24% at 89% 22%,oklch(0.42 0.045 250 / .40),transparent 72%),
  radial-gradient(20% 7% at 70% 38%,oklch(0.36 0.040 255 / .45),transparent 72%),
  radial-gradient(14% 5% at 58% 22%,oklch(0.33 0.035 258 / .35),transparent 72%),
  radial-gradient(16% 5% at 34% 30%,oklch(0.31 0.035 260 / .30),transparent 72%),
  linear-gradient(118deg,transparent 0 38%,oklch(0.42 0.035 262 / .07) 50%,transparent 64%),
  radial-gradient(40% 30% at var(--rw-glow-x,22%) 100%,oklch(0.32 0.05 80 / .35),transparent 70%),
  linear-gradient(180deg,oklch(0.135 0.048 272) 0%,oklch(0.170 0.058 266) 58%,oklch(0.222 0.062 258) 100%)}
.rw-glass::before,.rw-glass::after{content:"";position:absolute;z-index:1;left:0;top:0;width:1.3px;height:1.3px;border-radius:50%;pointer-events:none;opacity:0;transition:opacity .4s linear}
.rw-glass::before{background:transparent;
  box-shadow:
    calc(var(--rw-gw-px, 1100px) * .03) 46px 0 0 oklch(0.95 0.01 90 / .35),
    calc(var(--rw-gw-px, 1100px) * .10) 34px 0 0 oklch(0.95 0.01 90 / .5),
    calc(var(--rw-gw-px, 1100px) * .17) 96px 0 0 oklch(0.95 0.01 90 / .3),
    calc(var(--rw-gw-px, 1100px) * .21) 52px 0 0 oklch(0.95 0.01 90 / .45),
    calc(var(--rw-gw-px, 1100px) * .31) 70px 0 0 oklch(0.95 0.01 90 / .35),
    calc(var(--rw-gw-px, 1100px) * .40) 22px 0 0 oklch(0.95 0.01 90 / .5),
    calc(var(--rw-gw-px, 1100px) * .44) 104px 0 0 oklch(0.95 0.01 90 / .28),
    calc(var(--rw-gw-px, 1100px) * .53) 60px 0 0 oklch(0.95 0.01 90 / .4),
    calc(var(--rw-gw-px, 1100px) * .62) 36px 0 0 oklch(0.95 0.01 90 / .55),
    calc(var(--rw-gw-px, 1100px) * .69) 98px 0 0 oklch(0.95 0.01 90 / .3),
    calc(var(--rw-gw-px, 1100px) * .79) 14px 0 0 oklch(0.95 0.01 90 / .45),
    calc(var(--rw-gw-px, 1100px) * .83) 82px 0 0 oklch(0.95 0.01 90 / .35),
    calc(var(--rw-gw-px, 1100px) * .94) 100px 0 0 oklch(0.95 0.01 90 / .3)}
.rw-glass::after{top:calc(var(--rw-hz-in) + 5px);width:2px;height:1.6px;border-radius:1px;background:transparent;
  box-shadow:
    calc(var(--rw-gw-px, 1100px) * .05) 2px 0 0 oklch(0.84 0.12 76 / .45),
    calc(var(--rw-gw-px, 1100px) * .065) 3px 0 0 oklch(0.84 0.12 76 / .35),
    calc(var(--rw-gw-px, 1100px) * .34) 1px 0 0 oklch(0.84 0.12 76 / .45),
    calc(var(--rw-gw-px, 1100px) * .36) 3px 0 0 oklch(0.84 0.12 76 / .35),
    calc(var(--rw-gw-px, 1100px) * .47) 6px 0 0 oklch(0.84 0.12 76 / .3),
    calc(var(--rw-gw-px, 1100px) * .58) 2px 0 0 oklch(0.84 0.12 76 / .45),
    calc(var(--rw-gw-px, 1100px) * .60) 4px 0 0 oklch(0.84 0.12 76 / .3),
    calc(var(--rw-gw-px, 1100px) * .88) 3px 0 0 oklch(0.84 0.12 76 / .4),
    calc(var(--rw-gw-px, 1100px) * .93) 1px 0 0 oklch(0.84 0.12 76 / .35)}

/* ---- walk/shared/public-shell.css ---- */
/* =============================================================================
   APTAVIA 2.0 · walk · THE PUBLIC SHELL (round 10, 11 Oct 2026) — the outside of the same house.
   Manual: shared/PUBLIC-KIT.md. Loaded by every page stamped with frame 'public' (shell.mjs headHTML('public')).
   The world: the street in front of her house at dusk. The sky is the Window's own four skies (road-window.css), the far
   land is Today's hills, the ground is the night street; the porch band is Login's porch (weatherboards, eave, lamp,
   blue door, deck), and the footer stands on the deck. Dark first; light = the same street by day, ink and shadow.
   Tokens and oklch() only, no hex. Motion: opacity and translate, once, never a loop, never a scale.
   Every block reads with JS off; public-shell.js only enhances (arrival, sticky header, scroll-spy, tool maths).
   ============================================================================= */

/* ---------------------------------------------------------------- 1 · tokens (dark first) */
.spine-app[data-spine-frame="public"] {
  --pub-head-h: 64px;
  --spine-th-h: 64px;                         /* pages that pad by the row height (pricing) pad by the header */
  --pub-max: 1200px;
  --pub-gut: clamp(16px, 4vw, 48px);
  --pub-ease: cubic-bezier(0.3, 0.6, 0.2, 1);
  --pub-font: var(--sp-font);
  --pub-ink: var(--sp-ink); --pub-body: var(--sp-body); --pub-muted: var(--sp-muted);
  /* the night street and its surfaces */
  --pub-ground: oklch(0.152 0.020 274);
  --pub-ground-2: oklch(0.176 0.021 276);
  --pub-foot-bg: oklch(0.118 0.016 272);
  --pub-card: linear-gradient(180deg, oklch(0.245 0.024 282 / .78), oklch(0.205 0.020 280 / .78));
  --pub-card-solid: oklch(0.212 0.021 280);
  --pub-edge: oklch(0.82 0.05 295 / .17);
  --pub-edge-strong: oklch(0.86 0.06 295 / .34);
  --pub-spec: oklch(0.96 0.03 300 / .16);
  --pub-shade: oklch(0.04 0.01 280 / .6);
  --pub-drop: 0 24px 48px -28px oklch(0.03 0.01 280 / .95), 0 2px 6px -3px oklch(0.03 0.01 280 / .6);
  --pub-wash: oklch(0.72 0.12 295 / .12);
  --pub-field: oklch(0.96 0.02 300 / .06);
  /* the house's warm light and its brass */
  --pub-lamp: oklch(0.86 0.11 78);
  --pub-lamp-soft: oklch(0.80 0.10 72 / .20);
  --pub-brass: oklch(0.74 0.085 82);
  --pub-brass-lo: oklch(0.50 0.07 74);
  /* the one violet */
  --pub-action: var(--sp-action);
  --pub-on-action: oklch(1 0 0);
  --pub-glow: 0 14px 34px -14px oklch(0.55 0.22 295 / .85), inset 0 1px 0 oklch(1 0 0 / .28);
  /* the porch (Login's door.css values, kept equal so the porch she meets here is the porch she arrives to) */
  --fd-wall: oklch(0.236 0.014 62); --fd-wall-lo: oklch(0.205 0.013 58);
  --fd-board-lo: oklch(0.13 0.012 50 / .55); --fd-board-hi: oklch(0.42 0.016 70 / .30);
  --fd-fascia: oklch(0.30 0.018 60); --fd-fascia-hi: oklch(0.52 0.02 70 / .7); --fd-gutter: oklch(0.36 0.012 70);
  --fd-deck-top: oklch(0.33 0.035 58); --fd-deck-face: oklch(0.255 0.03 55); --fd-deck-seam: oklch(0.15 0.02 50 / .7);
  --fd-pool: oklch(0.72 0.10 70);
}
html:not(.dark) .spine-app[data-spine-frame="public"] {
  --pub-ground: oklch(0.987 0.004 85);
  --pub-ground-2: oklch(0.966 0.007 84);
  --pub-foot-bg: oklch(0.955 0.007 84);
  --pub-card: linear-gradient(180deg, oklch(1 0 0), oklch(0.992 0.003 85));
  --pub-card-solid: oklch(1 0 0);
  --pub-edge: color-mix(in srgb, var(--sp-ink) 20%, transparent);
  --pub-edge-strong: color-mix(in srgb, var(--sp-ink) 48%, transparent);
  --pub-spec: oklch(1 0 0);
  --pub-shade: color-mix(in srgb, var(--sp-ink) 10%, transparent);
  --pub-drop: 0 1px 1px color-mix(in srgb, var(--sp-ink) 10%, transparent), 0 12px 26px -18px color-mix(in srgb, var(--sp-ink) 45%, transparent);
  --pub-wash: color-mix(in srgb, var(--sp-primary) 8%, transparent);
  --pub-field: oklch(1 0 0);
  --pub-lamp: color-mix(in srgb, var(--sp-ink) 88%, oklch(0.6 0.1 70));
  --pub-lamp-soft: color-mix(in srgb, var(--sp-ink) 8%, transparent);
  --pub-brass: oklch(0.58 0.08 76);
  --pub-brass-lo: oklch(0.45 0.07 72);
  --pub-glow: 0 1px 1px color-mix(in srgb, var(--sp-ink) 20%, transparent), 0 8px 18px -10px oklch(0.45 0.2 295 / .55);
  --fd-wall: oklch(0.972 0.006 82); --fd-wall-lo: oklch(0.958 0.007 80);
  --fd-board-lo: color-mix(in srgb, var(--sp-ink) 13%, transparent); --fd-board-hi: oklch(1 0 0 / .9);
  --fd-fascia: oklch(0.995 0.002 85); --fd-fascia-hi: oklch(1 0 0); --fd-gutter: oklch(0.93 0.004 85);
  --fd-deck-top: oklch(0.88 0.03 70); --fd-deck-face: oklch(0.83 0.035 66); --fd-deck-seam: color-mix(in srgb, var(--sp-ink) 30%, transparent);
}

/* ---------------------------------------------------------------- 2 · the frame: one column, the street as ground */
.spine-app[data-spine-frame="public"] { background-color: var(--pub-ground); }
.spine-app[data-spine-frame="public"] { grid-template-columns: minmax(0, 1fr); padding-bottom: 0; }
.spine-app[data-spine-frame="public"] .spine-main { grid-column: 1; }
.spine-app[data-spine-frame="public"] { color: var(--pub-body); font-family: var(--pub-font); -webkit-font-smoothing: antialiased; }
.pub { position: relative; color: var(--pub-body); font: 500 16px/1.55 var(--pub-font); }
.pub *, .pub *::before, .pub *::after { box-sizing: border-box; }
.pub-wrap { max-width: var(--pub-max); margin: 0 auto; }
.pub-section { position: relative; padding: clamp(56px, 8vw, 112px) var(--pub-gut); }
.pub-section[data-tone="2"] { background: var(--pub-ground-2); }
.pub-h2 { margin: 0; font: 760 clamp(26px, 2.6vw, 36px)/1.14 var(--pub-font); letter-spacing: -.02em; color: var(--pub-ink); text-wrap: balance; }
.pub-sub { margin: 12px 0 0; max-width: 62ch; font: 500 17px/1.55 var(--pub-font); color: var(--pub-body); }
.pub-kicker { margin: 0 0 14px; font: 650 12px/1.2 var(--pub-font); letter-spacing: .14em; text-transform: uppercase; color: var(--pub-lamp); }
.pub-head-row { margin-bottom: clamp(28px, 4vw, 44px); }
.pub :focus-visible, .spine-pubhead :focus-visible, .pub-foot :focus-visible { outline: 3px solid var(--sp-focus); outline-offset: 3px; }

/* buttons: ONE violet (go); everything else is glass or ink */
.pub-btn { display: inline-flex; align-items: center; justify-content: center; gap: 10px; min-height: 52px; padding: 0 26px; border-radius: 999px;
  font: 650 16px/1 var(--pub-font); text-decoration: none; white-space: nowrap; cursor: pointer; border: 0; }
.pub-btn--go { background: var(--pub-action); color: var(--pub-on-action); box-shadow: var(--pub-glow); }
.pub-btn--go:hover { filter: brightness(1.08); }
.pub-btn--quiet { color: var(--pub-ink); background: var(--pub-field); box-shadow: inset 0 0 0 1px var(--pub-edge-strong), inset 1px 1px 0 var(--pub-spec); }
.pub-btn--quiet:hover { background: var(--pub-wash); }
.pub-btn svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.pub-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin-top: 28px; }
.pub-note { margin: 14px 0 0; font: 500 14px/1.45 var(--pub-font); color: var(--pub-muted); }

/* ---------------------------------------------------------------- 3 · the header (threshold slot) */
.spine-threshold.spine-pubhead {
  position: absolute; top: 0; left: 0; right: 0; z-index: 60; height: var(--pub-head-h); padding: 0 var(--pub-gut);
  display: grid; grid-template-columns: auto minmax(0, 1fr) auto; grid-template-areas: "brand nav acts"; align-items: center; column-gap: 20px;
  font: 600 14px/1 var(--pub-font); color: var(--pub-ink); pointer-events: auto;
}
.spine-pubhead::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 1px; background: var(--pub-edge); opacity: 0; }
.pub-brand { grid-area: brand; display: inline-flex; align-items: center; gap: 10px; min-height: 44px; padding: 0 6px 0 2px; border-radius: 12px; color: inherit; text-decoration: none; }
.pub-brand .spine-brand-mark { width: 37px; height: 26px; }
.pub-nav { grid-area: nav; display: flex; justify-content: center; align-items: center; gap: 2px; min-width: 0; }
.pub-nav a { display: inline-flex; align-items: center; min-height: 40px; padding: 0 12px; border-radius: 12px; color: color-mix(in srgb, var(--pub-ink) 80%, transparent);
  font: 600 14px/1 var(--pub-font); text-decoration: none; white-space: nowrap; }
.pub-nav a:hover { color: var(--pub-ink); background: var(--pub-wash); }
.pub-nav a[aria-current="page"] { color: var(--pub-ink); background: var(--pub-field); box-shadow: inset 0 0 0 1px var(--pub-edge), inset 1px 1px 0 var(--pub-spec); }
.pub-acts { grid-area: acts; display: flex; align-items: center; gap: 8px; }
.pub-signin { display: inline-flex; align-items: center; min-height: 40px; padding: 0 14px; border-radius: 12px; color: var(--pub-ink); font: 650 14px/1 var(--pub-font); text-decoration: none; }
.pub-signin:hover { background: var(--pub-wash); }
.pub-start { display: inline-flex; align-items: center; min-height: 40px; padding: 0 18px; border-radius: 999px; font: 650 14px/1 var(--pub-font); text-decoration: none; white-space: nowrap;
  background: var(--pub-action); color: var(--pub-on-action); box-shadow: var(--pub-glow); transition: background-color .3s, color .3s, box-shadow .3s; }
/* one violet on screen: while a page's own violet (.pub-btn--go: the hero's, the porch's) is on screen, the header's
   Start free is glass. JS sets html[data-pub-quiet-start] from what is on screen; with JS off the hero rule holds. */
html:not(.pub-js):has(.pub-hero :is(.pub-btn--go, [data-pub-go])) .pub-acts > .pub-start, html[data-pub-quiet-start] .pub-acts > .pub-start { background: var(--pub-field); color: var(--pub-ink); box-shadow: inset 0 0 0 1px var(--pub-edge-strong), inset 1px 1px 0 var(--pub-spec); }
.pub-theme { display: inline-grid; place-items: center; width: 40px; height: 40px; margin: 0; padding: 0; border-radius: 50%; cursor: pointer; position: relative;
  border: 1px solid var(--pub-edge); background: var(--pub-field); color: var(--pub-ink); box-shadow: inset 1px 1px 0 var(--pub-spec); }
.pub-theme svg { display: block; width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; }
/* r8 fix: the screen-reader label fills the button (it wraps inside it) instead of a 1px box whose text runs out beside the Start pill: still clipped to nothing, but no text box reaches a neighbour at 375 */
.pub-theme [data-when] { position: absolute; inset: 0; overflow: hidden; clip: rect(0 0 0 0); }
.pub-theme .sp-sun, html.dark .pub-theme svg:not(.sp-sun) { display: none; }
html.dark .pub-theme .sp-sun { display: block; }
html:not(.pub-js) .pub-theme { display: none; }      /* the switch needs JS; with JS off the page stays in its theme */
/* the menu: a <details>, so it opens with JS off */
.pub-menu { position: relative; display: none; }
.pub-menu-btn { list-style: none; display: grid; place-items: center; width: 44px; height: 44px; border-radius: 50%; cursor: pointer; color: var(--pub-ink);
  border: 1px solid var(--pub-edge); background: var(--pub-field); box-shadow: inset 1px 1px 0 var(--pub-spec); }
.pub-menu-btn::-webkit-details-marker { display: none; }
.pub-menu-i { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; }
.pub-menu-a, .pub-menu-c { transition: opacity .2s; }
.pub-menu[open] .pub-menu-b { opacity: 0; }
.pub-menu[open] .pub-menu-a { d: path("M6 6l12 12"); }
.pub-menu[open] .pub-menu-c { d: path("M6 18L18 6"); }
.pub-menu-panel { position: absolute; right: 0; top: calc(100% + 10px); width: min(340px, calc(100vw - 32px)); padding: 10px; border-radius: 22px; z-index: 70;
  background: color-mix(in oklch, var(--pub-card-solid) 92%, transparent); -webkit-backdrop-filter: blur(22px) saturate(1.4); backdrop-filter: blur(22px) saturate(1.4);
  box-shadow: inset 0 0 0 1px var(--pub-edge), inset 1px 1px 0 var(--pub-spec), var(--pub-drop); }
.pub-menu-panel nav { display: grid; }
.pub-menu-panel nav a { display: flex; align-items: center; min-height: 48px; padding: 0 14px; border-radius: 14px; color: var(--pub-ink); font: 600 16px/1 var(--pub-font); text-decoration: none; }
.pub-menu-panel nav a:hover, .pub-menu-panel nav a[aria-current="page"] { background: var(--pub-wash); }
.pub-menu-acts { display: grid; margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--pub-edge); }
.pub-menu-acts .pub-signin { min-height: 48px; font-size: 16px; }
html[data-pub-menu-arrive] .pub-menu[open] .pub-menu-panel { animation: pub-rise .26s var(--pub-ease) both; }
/* the header holds: when she scrolls past the hero it comes down once as glass, fixed (the live header is sticky) */
html[data-pub-stuck] .spine-threshold.spine-pubhead { position: fixed; background: color-mix(in oklch, var(--pub-ground) 74%, transparent);
  -webkit-backdrop-filter: blur(18px) saturate(1.5); backdrop-filter: blur(18px) saturate(1.5); animation: pub-drop .3s var(--pub-ease) both; }
html[data-pub-stuck] .spine-pubhead::after { opacity: 1; }
@keyframes pub-drop { from { translate: 0 -100%; } to { translate: 0 0; } }
@keyframes pub-rise { from { opacity: 0; translate: 0 -6px; } to { opacity: 1; translate: 0 0; } }
@media (max-width: 1239px) { .pub-nav { display: none; } .pub-menu { display: block; } .spine-threshold.spine-pubhead { grid-template-columns: auto minmax(0, 1fr) auto; } }
@media (max-width: 599px) {
  .spine-threshold.spine-pubhead { column-gap: 8px; }
  .pub-brand .spine-brand-word { display: none; }
  .pub-acts > .pub-signin { display: none; }
  .pub-acts { gap: 6px; }
  .pub-start { padding: 0 16px; }
}

/* ---------------------------------------------------------------- 4 · the hero system: sky · land · one line · one CTA · one picture */
.pub-hero { position: relative; isolation: isolate; overflow: hidden; display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 6fr); align-items: center;
  column-gap: clamp(24px, 4vw, 64px); min-height: clamp(580px, 86svh, 820px); padding: calc(var(--pub-head-h) + 28px) var(--pub-gut) clamp(96px, 12svh, 140px); }
.pub-hero > .pub-sky.rw-pane { position: absolute; inset: 0; z-index: -1; width: auto; height: auto; margin: 0; display: block; border-radius: 0; --rw-hz-in: 100%; }
.pub-sky.rw-pane .rw-glass { inset: 0; border-radius: 0; box-shadow: none; --rw-glow-x: 72%; --rw-gw-px: 1440px; }
.pub-sky .rw-moon { right: 8%; top: 18%; }
.pub-sky .rw-glass::before, .pub-sky .rw-glass::after { display: none; }   /* the Window's sill line: no sill out here */
.pub-land { position: absolute; left: 0; right: 0; bottom: -2px; width: 100%; height: clamp(120px, 24%, 200px); display: block; }
.pub-land-far { fill: var(--rw-land-far); }
.pub-land-mid { fill: var(--rw-land-mid); }
.pub-land-near { fill: var(--pub-ground); }              /* the near land IS the street the page stands on: no seam */
/* the house's light across the street (dark only): a warm haze where her window is */
.pub-sky::after { content: ""; position: absolute; right: 6%; bottom: 10%; width: 46%; height: 50%; pointer-events: none;
  background: radial-gradient(closest-side, oklch(0.80 0.10 70 / .16), oklch(0.80 0.10 70 / .05) 60%, transparent); }
html:not(.dark) .pub-sky::after { display: none; }
html:not(.dark) .pub-sky.rw-pane .rw-glass { box-shadow: none; }
/* Editor fix 11 Oct (r10): light mode is the same street BY DAY, whatever her clock says. With a night or evening clock the
   light hero set dark ink on a dark sky (home, free-essay-marking, every public page). The day layer, day land and no stars/moon. */
html:not(.dark) .pub-hero .pub-sky.rw-pane .rw-sky[data-sky-layer] { opacity: 0; }
html:not(.dark) .pub-hero .pub-sky.rw-pane .rw-sky[data-sky-layer="day"] { opacity: 1; }
html:not(.dark) .pub-hero .pub-sky.rw-pane .rw-stars, html:not(.dark) .pub-hero .pub-sky.rw-pane .rw-moon { opacity: 0; }
html:not(.dark) .pub-hero .pub-sky.rw-pane { --rw-land-far: oklch(0.880 0.024 228); --rw-land-mid: oklch(0.840 0.024 195); --rw-land-near: oklch(0.800 0.024 150);
  --rw-hz-c: color-mix(in srgb, var(--ink) 32%, transparent); --rw-sill-lit: transparent; }
.pub-hero-copy { position: relative; max-width: 600px; }
.pub-h1 { margin: 0; font: 760 clamp(36px, 4vw, 56px)/1.04 var(--pub-font); letter-spacing: -.028em; color: var(--pub-ink); text-wrap: balance; }
.pub-lede { margin: 18px 0 0; max-width: 34ch; font: 500 clamp(17px, 1.4vw, 19px)/1.5 var(--pub-font); color: var(--pub-body); }
html:not(.dark) .pub-hero .pub-lede { color: color-mix(in srgb, var(--pub-ink) 82%, transparent); }
.pub-hero-pic { position: relative; margin: 0; justify-self: end; width: 100%; max-width: 640px; }
/* data-pub-pic="stand": the picture is an object standing on the near land (its foot on the street), not floating */
.pub-hero-pic[data-pub-pic="stand"] { align-self: end; margin-bottom: calc(-1 * clamp(96px, 12svh, 140px) + clamp(28px, 4svh, 44px)); }
.pub-hero-pic > svg, .pub-hero-pic > img { display: block; width: 100%; height: auto; overflow: visible; }
.pub-hero[data-pub-hero="center"] { grid-template-columns: minmax(0, 1fr); justify-items: center; text-align: center; }
.pub-hero[data-pub-hero="center"] .pub-lede { margin-inline: auto; }
.pub-hero[data-pub-hero="center"] .pub-actions { justify-content: center; }
.pub-hero[data-pub-hero="center"] .pub-hero-pic { justify-self: center; margin-top: 36px; }
@media (max-width: 899px) {
  .pub-hero { grid-template-columns: minmax(0, 1fr); align-content: start; row-gap: 26px; min-height: 0; padding: calc(var(--pub-head-h) + 22px) var(--pub-gut) 84px; }
  .pub-hero-pic { justify-self: center; max-width: 520px; }
  .pub-hero-pic[data-pub-pic="stand"] { margin-bottom: -56px; }
  .pub-hero[data-pub-arrive] { min-height: calc(100svh - 28px); align-content: start; row-gap: 34px; }
  .pub-hero[data-pub-hero="center"] .pub-hero-pic { margin-top: 0; }   /* round 10: phone hero is as tall as its content; the picture sits under the CTA, never a sky band */
  .pub-actions { margin-top: 22px; }
  .pub-actions .pub-btn { flex: 1 1 auto; }
}
/* arrival, ONCE (public-shell.js sets html.pub-arrive before the first paint, then .pub-go; resting, reduced motion,
   Pause or a second visit this session skip it). Opacity and translate only. With JS off nothing is ever hidden. */
html.pub-arrive [data-pub-arrive] :is(.pub-hero-copy > *, .pub-hero-pic) { opacity: 0; translate: 0 14px; }
html.pub-arrive.pub-go [data-pub-arrive] :is(.pub-hero-copy > *, .pub-hero-pic) { opacity: 1; translate: 0 0;
  transition: opacity .62s var(--pub-ease), translate .74s var(--pub-ease); }
html.pub-arrive.pub-go [data-pub-arrive] .pub-hero-copy > :nth-child(2) { transition-delay: .08s; }
html.pub-arrive.pub-go [data-pub-arrive] .pub-hero-copy > :nth-child(3) { transition-delay: .16s; }
html.pub-arrive.pub-go [data-pub-arrive] .pub-hero-copy > :nth-child(n+4) { transition-delay: .24s; }
html.pub-arrive.pub-go [data-pub-arrive] .pub-hero-pic { transition-delay: .18s; transition-duration: .9s, 1s; }
/* a block that arrives when it is scrolled to (porch, cards): [data-pub-reveal] — once */
html.pub-js [data-pub-reveal]:not([data-pub-shown]) > * { opacity: 0; translate: 0 16px; }
html.pub-js [data-pub-reveal][data-pub-shown] > * { opacity: 1; translate: 0 0; transition: opacity .6s var(--pub-ease), translate .7s var(--pub-ease); }
html.pub-js [data-pub-reveal][data-pub-shown] > :nth-child(2) { transition-delay: .1s; }
html.pub-js [data-pub-reveal][data-pub-shown] > :nth-child(n+3) { transition-delay: .2s; }
html.pub-rest [data-pub-reveal] > * { opacity: 1 !important; translate: none !important; transition: none !important; }

/* ---------------------------------------------------------------- 5 · breadcrumbs */
.pub-crumbs ol { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; margin: 0; padding: 0; list-style: none; font: 500 13px/1.4 var(--pub-font); color: var(--pub-muted); }
.pub-crumbs li + li::before { content: "/"; margin-right: 8px; opacity: .6; }
.pub-crumbs a { color: inherit; text-decoration: none; }
.pub-crumbs a:hover { color: var(--pub-ink); text-decoration: underline; text-underline-offset: 3px; }
.pub-crumbs [aria-current] { color: var(--pub-body); }

/* ---------------------------------------------------------------- 6 · cards (glass panes on the night street) */
.pub-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr)); gap: 16px; }
.pub-card { position: relative; padding: 24px; border-radius: 22px; background: var(--pub-card); box-shadow: inset 0 0 0 1px var(--pub-edge), inset 1px 1px 0 var(--pub-spec), var(--pub-drop); }
.pub-card h3 { margin: 0; font: 650 18px/1.3 var(--pub-font); color: var(--pub-ink); }
.pub-card p { margin: 8px 0 0; font: 500 15px/1.55 var(--pub-font); color: var(--pub-body); }
.pub-card-pic { display: block; width: 100%; height: auto; margin-bottom: 18px; }

/* ---------------------------------------------------------------- 7 · the porch: the sign-up band (hands off to ../signup/) */
.pub-porch { position: relative; isolation: isolate; overflow: hidden; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: end;
  column-gap: clamp(24px, 5vw, 80px); min-height: 440px; padding: 22px var(--pub-gut) 0;
  background:
    repeating-linear-gradient(180deg, transparent 0 27px, var(--fd-board-lo) 27px 28.5px, var(--fd-board-hi) 28.5px 30px),
    linear-gradient(180deg, var(--fd-wall) 0%, var(--fd-wall) 55%, var(--fd-wall-lo) 100%);
  background-position: 0 22px, 0 0; }
/* the eave across the top: a gutter over a painted fascia (Login's eave) */
.pub-porch::before { content: ""; position: absolute; left: 0; right: 0; top: 0; height: 22px; z-index: 1;
  background: linear-gradient(180deg, var(--fd-gutter) 0 7px, oklch(0 0 0 / .25) 7px 8px, transparent 8px), linear-gradient(180deg, transparent 8px, var(--fd-fascia-hi) 8px 9px, var(--fd-fascia) 9px 100%);
  box-shadow: 0 10px 18px -6px oklch(0.05 0.01 40 / .7); }
html:not(.dark) .pub-porch::before { box-shadow: 0 1px 0 color-mix(in srgb, var(--sp-ink) 55%, transparent), inset 0 1px 0 color-mix(in srgb, var(--sp-ink) 40%, transparent); }
/* the lamp's pool on the boards (dark only) */
.pub-porch-pool { position: absolute; z-index: 0; right: clamp(150px, 22vw, 330px); bottom: 40px; width: 980px; height: 680px; translate: 50% 30%; pointer-events: none;
  background: radial-gradient(closest-side, color-mix(in oklch, var(--fd-pool) 30%, transparent), color-mix(in oklch, var(--fd-pool) 12%, transparent) 44%, color-mix(in oklch, var(--fd-pool) 3%, transparent) 72%, transparent); }
html:not(.dark) .pub-porch-pool { display: none; }
.pub-porch-copy { position: relative; z-index: 2; align-self: center; max-width: 560px; padding: 48px 0 96px; }
.pub-porch-copy .pub-h2 { font-size: clamp(28px, 3vw, 40px); }
.pub-porch-copy .pub-sub { color: var(--pub-body); }
html.dark .pub-porch-copy .pub-h2 { text-shadow: 0 2px 18px oklch(0.1 0.02 50 / .6); }
.pub-porch-art { position: relative; z-index: 2; width: clamp(260px, 30vw, 400px); margin-bottom: 50px; }
.pub-porch-art svg { display: block; width: 100%; height: auto; overflow: visible; }
/* the deck under her feet (it continues into the footer) */
.pub-porch-deck { position: absolute; z-index: 1; left: 0; right: 0; bottom: 0; height: 50px;
  background: linear-gradient(180deg, var(--fd-fascia-hi) 0 1px, var(--fd-deck-top) 1px 9px, oklch(0 0 0 / .18) 9px 10px, var(--fd-deck-face) 10px 100%),
    repeating-linear-gradient(90deg, transparent 0 158px, var(--fd-deck-seam) 158px 159.5px, transparent 159.5px 160px); }
html:not(.dark) .pub-porch-deck { box-shadow: 0 -1px 0 color-mix(in srgb, var(--sp-ink) 55%, transparent); }
@media (max-width: 767px) {
  .pub-porch { grid-template-columns: minmax(0, 1fr); min-height: 0; padding-top: 22px; }
  .pub-porch-copy { padding: 40px 0 8px; }
  .pub-porch-art { justify-self: end; width: min(68vw, 280px); margin: 0 4px 50px 0; }
  .pub-porch-pool { right: 30%; bottom: 0; width: 640px; height: 520px; }
  .pub-porch .pub-actions .pub-btn { width: 100%; }
}
/* the porch drawing's paint (Login's porch tokens: dark = dusk, light = ink and paint, no glow) */
.pp { --pd-trim: oklch(0.52 0.018 74); --pd-trim-hi: oklch(0.70 0.02 80 / .65); --pd-trim-lo: oklch(0.32 0.01 60);
  --pd-paint: oklch(0.345 0.066 255); --pd-paint-in: oklch(0.29 0.06 255); --pd-paint-field: oklch(0.36 0.066 255); --pd-paint-hi: oklch(0.56 0.06 255 / .7); --pd-paint-lo: oklch(0.15 0.03 255 / .95);
  --pd-brass: oklch(0.53 0.078 78); --pd-brass-hi: oklch(0.72 0.07 86 / .65); --pd-iron: oklch(0.17 0.01 60);
  --pd-stone: oklch(0.40 0.012 70); --pd-stone-face: oklch(0.31 0.012 64); --pd-stone-hi: oklch(0.62 0.012 75 / .55);
  --pd-warm: oklch(0.86 0.11 78); --pd-warm-lo: oklch(0.70 0.12 62); --pd-glass: oklch(0.22 0.02 260); }
html:not(.dark) .pp { --pd-trim: oklch(0.995 0.002 85); --pd-trim-hi: oklch(1 0 0); --pd-trim-lo: color-mix(in srgb, var(--sp-ink) 55%, transparent);
  --pd-paint: oklch(0.47 0.085 255); --pd-paint-in: oklch(0.42 0.08 255); --pd-paint-field: oklch(0.49 0.085 255); --pd-paint-hi: oklch(0.66 0.06 255 / .8); --pd-paint-lo: oklch(0.24 0.05 255);
  --pd-brass: oklch(0.80 0.10 84); --pd-brass-hi: oklch(0.96 0.05 92); --pd-iron: oklch(0.24 0.012 60);
  --pd-stone: oklch(0.93 0.005 80); --pd-stone-face: oklch(0.87 0.006 78); --pd-stone-hi: oklch(1 0 0);
  --pd-warm: oklch(0.93 0.03 85); --pd-warm-lo: oklch(0.86 0.04 80); --pd-glass: oklch(0.90 0.01 240); }
.pp-trim { fill: var(--pd-trim); } .pp-trim-hi { fill: none; stroke: var(--pd-trim-hi); stroke-width: 1.5; } .pp-trim-lo { fill: none; stroke: var(--pd-trim-lo); stroke-width: 1.5; }
.pp-leaf { fill: var(--pd-paint); } .pp-recess { fill: var(--pd-paint-in); } .pp-field { fill: var(--pd-paint-field); }
.pp-hi { fill: none; stroke: var(--pd-paint-hi); stroke-width: 1.4; } .pp-lo { fill: none; stroke: var(--pd-paint-lo); stroke-width: 1.4; }
.pp-brass { fill: var(--pd-brass); } .pp-brass-hi { fill: none; stroke: var(--pd-brass-hi); stroke-width: 1.2; } .pp-iron { fill: var(--pd-iron); }
.pp-stone { fill: var(--pd-stone); } .pp-stone-face { fill: var(--pd-stone-face); } .pp-stone-hi { fill: none; stroke: var(--pd-stone-hi); stroke-width: 1.2; }
.pp-bar { fill: none; stroke: var(--pd-trim); stroke-width: 3; }
.pp-s-fan0 { stop-color: var(--pd-warm); } .pp-s-fan1 { stop-color: var(--pd-warm-lo); }
html:not(.dark) .pp-s-fan0, html:not(.dark) .pp-s-fan1 { stop-color: var(--pd-glass); }
.pp-bulb { fill: var(--pd-warm); } html:not(.dark) .pp-bulb { fill: oklch(0.97 0.02 90); }
.pp-lglass { fill: oklch(0.86 0.11 78 / .28); stroke: var(--pd-iron); stroke-width: 2; } html:not(.dark) .pp-lglass { fill: oklch(0.97 0.01 90 / .7); }
/* .pp-fan and .pp-halo take their gradient from the drawing's own fill attribute (ids are per drawing) */
html:not(.dark) .pp-halo { display: none; }
.pp-s-halo0 { stop-color: oklch(0.88 0.11 80 / .55); } .pp-s-halo1 { stop-color: oklch(0.86 0.11 78 / .12); } .pp-s-halo2 { stop-color: oklch(0.86 0.11 78 / 0); }
.pp-cast { fill: oklch(0.05 0.01 40 / .45); } html:not(.dark) .pp-cast { fill: color-mix(in srgb, var(--sp-ink) 8%, transparent); }
.pp-text { font: 600 13px/1 'Iowan Old Style', 'Palatino Linotype', Palatino, Georgia, serif; letter-spacing: .12em; fill: oklch(0.30 0.05 68); }
/* the door's warm gap (it lights once when the porch is scrolled to: opacity only) */
.pp-gap { fill: var(--pd-warm); opacity: .9; } html:not(.dark) .pp-gap { opacity: 0; }
html.pub-js .pub-porch:not([data-pub-shown]) .pp-gap { opacity: 0; }
html.pub-js.dark .pub-porch[data-pub-shown] .pp-gap { opacity: .9; transition: opacity 1.1s .35s var(--pub-ease); }

/* ---------------------------------------------------------------- 8 · the FAQ block (<details>: opens with JS off) */
.pub-faq { max-width: 860px; margin: 0 auto; }
.pub-faq-list { margin-top: 28px; border-top: 1px solid var(--pub-edge); }
.pub-q { border-bottom: 1px solid var(--pub-edge); }
.pub-q > summary { list-style: none; display: flex; align-items: center; justify-content: space-between; gap: 20px; min-height: 64px; padding: 16px 4px; cursor: pointer;
  font: 650 17px/1.35 var(--pub-font); color: var(--pub-ink); }
.pub-q > summary::-webkit-details-marker { display: none; }
.pub-q > summary::after { content: ""; flex: none; width: 10px; height: 10px; margin-right: 6px; border-right: 2px solid var(--pub-lamp); border-bottom: 2px solid var(--pub-lamp); rotate: 45deg; translate: 0 -3px; transition: rotate .25s var(--pub-ease), translate .25s var(--pub-ease); }
.pub-q[open] > summary::after { rotate: 225deg; translate: 0 3px; }
.pub-q > summary:hover { color: var(--pub-lamp); }
html:not(.dark) .pub-q > summary:hover { color: var(--pub-ink); text-decoration: underline; text-underline-offset: 4px; }
.pub-a { padding: 0 4px 24px; max-width: 70ch; font: 500 16px/1.62 var(--pub-font); color: var(--pub-body); }
.pub-a > :first-child { margin-top: 0; } .pub-a > :last-child { margin-bottom: 0; }
.pub-a a { color: var(--pub-ink); text-decoration-color: var(--pub-lamp); text-underline-offset: 3px; }

/* ---------------------------------------------------------------- 9 · the comparison table (a real <table>; a phone reads rows as cards) */
.pub-compare { border-radius: 24px; background: var(--pub-card); box-shadow: inset 0 0 0 1px var(--pub-edge), inset 1px 1px 0 var(--pub-spec), var(--pub-drop); overflow: hidden; }
.pub-compare table { width: 100%; border-collapse: separate; border-spacing: 0; font: 500 15px/1.5 var(--pub-font); color: var(--pub-body); }
.pub-compare caption { padding: 22px 24px 0; text-align: left; font: 650 13px/1.3 var(--pub-font); letter-spacing: .1em; text-transform: uppercase; color: var(--pub-muted); caption-side: top; }
.pub-compare th, .pub-compare td { padding: 18px 24px; text-align: left; vertical-align: top; }
.pub-compare tbody tr + tr > * { border-top: 1px solid var(--pub-edge); }
.pub-compare thead th { padding-top: 18px; padding-bottom: 14px; font: 650 14px/1.2 var(--pub-font); color: var(--pub-ink); border-bottom: 1px solid var(--pub-edge-strong); }
.pub-compare tbody th { width: 30%; font: 650 15px/1.4 var(--pub-font); color: var(--pub-ink); }
.pub-compare [data-us] { background: linear-gradient(180deg, color-mix(in oklch, var(--sp-primary) 11%, transparent), color-mix(in oklch, var(--sp-primary) 7%, transparent)); color: var(--pub-ink); }
.pub-compare thead [data-us] { box-shadow: inset 0 3px 0 var(--sp-primary); }
.pub-mark { display: inline-flex; align-items: center; gap: 8px; font-weight: 650; }
.pub-mark::before { content: ""; flex: none; width: 20px; height: 20px; border-radius: 50%; background-color: currentColor;
  -webkit-mask: var(--pub-mark-i) center / 20px 20px no-repeat; mask: var(--pub-mark-i) center / 20px 20px no-repeat; }
.pub-mark[data-mark="yes"] { color: var(--pub-ink); --pub-mark-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M10 0a10 10 0 1 0 0 20a10 10 0 0 0 0-20Zm-1.3 14.2L4.6 10.1l1.6-1.6l2.5 2.5l5.1-5.1l1.6 1.6Z'/%3E%3C/svg%3E"); }
.pub-mark[data-mark="no"] { color: var(--pub-muted); --pub-mark-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M10 0a10 10 0 1 0 0 20a10 10 0 0 0 0-20Zm5 11H5V9h10Z'/%3E%3C/svg%3E"); }
.pub-src { display: block; margin-top: 6px; font: 500 12.5px/1.4 var(--pub-font); color: var(--pub-muted); }
.pub-src a { color: inherit; }
@media (max-width: 699px) {
  .pub-compare table, .pub-compare tbody, .pub-compare tr, .pub-compare th, .pub-compare td { display: block; width: auto; }
  .pub-compare thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
  .pub-compare caption { display: block; padding: 18px 18px 6px; }
  .pub-compare tbody tr { padding: 14px 18px 16px; }
  .pub-compare tbody tr + tr { border-top: 1px solid var(--pub-edge); }
  .pub-compare tbody tr + tr > * { border-top: 0; }
  .pub-compare tbody th { width: auto; padding: 0 0 10px; }
  .pub-compare td { padding: 10px 12px; border-radius: 12px; }
  .pub-compare td::before { content: attr(data-label); display: block; margin-bottom: 4px; font: 650 11.5px/1.2 var(--pub-font); letter-spacing: .1em; text-transform: uppercase; color: var(--pub-muted); }
  .pub-compare td + td { margin-top: 6px; }
}

/* ---------------------------------------------------------------- 10 · the tool frame (calculators and dates): a brass instrument */
.pub-tool { position: relative; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 0; border-radius: 28px; overflow: hidden;
  background: var(--pub-card); box-shadow: inset 0 0 0 1px var(--pub-edge), inset 1px 1px 0 var(--pub-spec), var(--pub-drop); }
.pub-tool-in { padding: clamp(22px, 3vw, 36px); display: grid; align-content: start; gap: 22px; }
.pub-tool-head h2, .pub-tool-head h3 { margin: 0; font: 650 20px/1.25 var(--pub-font); color: var(--pub-ink); }
.pub-tool-head p { margin: 6px 0 0; font: 500 15px/1.5 var(--pub-font); color: var(--pub-muted); }
.pub-tool-fields { display: grid; gap: 14px; }
.pub-field { display: grid; grid-template-columns: minmax(0, 1fr) 132px; align-items: center; gap: 12px; }
.pub-field > span { font: 650 15px/1.3 var(--pub-font); color: var(--pub-ink); }
.pub-field > span small { display: block; margin-top: 2px; font: 500 13px/1.3 var(--pub-font); color: var(--pub-muted); }
.pub-field input, .pub-field select { width: 100%; min-height: 52px; padding: 0 14px; border-radius: 14px; border: 0; background: var(--pub-field); color: var(--pub-ink);
  box-shadow: inset 0 0 0 1px var(--pub-edge-strong); font: 650 20px/1 var(--pub-font); font-variant-numeric: tabular-nums; text-align: right; appearance: textfield; -moz-appearance: textfield; }
.pub-field input::-webkit-inner-spin-button, .pub-field input::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; }
.pub-field input:focus-visible { outline: 3px solid var(--sp-focus); outline-offset: 1px; }
.pub-tool-foot { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }
html.pub-js .pub-tool[data-pub-live] .pub-tool-submit { display: none; }      /* JS works it live; with JS off the form submits */
/* the plate: the result, engraved on brass-edged glass */
.pub-tool-plate { position: relative; display: grid; align-content: center; justify-items: start; gap: 6px; padding: clamp(26px, 3.4vw, 44px);
  background: radial-gradient(120% 90% at 100% 0%, var(--pub-lamp-soft), transparent 60%), color-mix(in oklch, var(--pub-ground) 55%, transparent);
  border-left: 1px solid var(--pub-edge); }
.pub-tool-plate::before { content: ""; position: absolute; left: clamp(26px, 3.4vw, 44px); right: clamp(26px, 3.4vw, 44px); top: 0; height: 3px; border-radius: 0 0 3px 3px;
  background: linear-gradient(90deg, var(--pub-brass-lo), var(--pub-brass), var(--pub-brass-lo)); }
.pub-tool-label { margin: 0; font: 650 12px/1.2 var(--pub-font); letter-spacing: .14em; text-transform: uppercase; color: var(--pub-muted); }
.pub-tool-out { display: block; font: 760 clamp(56px, 6vw, 84px)/1 var(--pub-font); letter-spacing: -.03em; color: var(--pub-ink); font-variant-numeric: tabular-nums; }
.pub-tool-say { margin: 4px 0 0; max-width: 34ch; font: 500 15px/1.5 var(--pub-font); color: var(--pub-body); }
.pub-tool-rule { width: 100%; height: 10px; margin-top: 14px; border-radius: 999px; background: var(--pub-field); box-shadow: inset 0 0 0 1px var(--pub-edge); overflow: hidden; }
.pub-tool-rule > i { display: block; height: 100%; width: var(--pub-pct, 50%); border-radius: inherit; background: linear-gradient(90deg, var(--pub-brass-lo), var(--pub-brass)); transition: width .5s var(--pub-ease); }
@media (max-width: 767px) {
  .pub-tool { grid-template-columns: minmax(0, 1fr); }
  .pub-tool-plate { border-left: 0; border-top: 1px solid var(--pub-edge); }
  .pub-field { grid-template-columns: minmax(0, 1fr) 112px; }
}
/* the list form (dates): an ordered list of days, confirmed solid, estimates dashed (never presented as confirmed) */
.pub-when { margin: 0; padding: 0; list-style: none; display: grid; gap: 10px; }
.pub-when li { display: grid; grid-template-columns: 76px minmax(0, 1fr) auto; align-items: center; gap: 16px; padding: 12px 16px 12px 12px; border-radius: 18px;
  background: var(--pub-field); box-shadow: inset 0 0 0 1px var(--pub-edge); }
.pub-when time { display: grid; justify-items: center; padding: 8px 0; border-radius: 12px; background: color-mix(in oklch, var(--pub-ground) 60%, transparent); box-shadow: inset 0 0 0 1px var(--pub-edge);
  font: 760 24px/1 var(--pub-font); color: var(--pub-ink); font-variant-numeric: tabular-nums; }
.pub-when time small { margin-top: 4px; font: 650 11px/1 var(--pub-font); letter-spacing: .1em; text-transform: uppercase; color: var(--pub-muted); }
.pub-when b { display: block; font: 650 15.5px/1.35 var(--pub-font); color: var(--pub-ink); }
.pub-when span { display: block; margin-top: 2px; font: 500 13.5px/1.4 var(--pub-font); color: var(--pub-muted); }
.pub-tag { display: inline-flex; align-items: center; min-height: 28px; padding: 0 12px; border-radius: 999px; font: 650 12px/1 var(--pub-font); white-space: nowrap; color: var(--pub-ink);
  box-shadow: inset 0 0 0 1px var(--pub-edge-strong); }
.pub-tag[data-tag="estimate"] { color: var(--pub-muted); box-shadow: none; border: 1.5px dashed var(--pub-edge-strong); }
.pub-tag[data-tag="next"] { color: var(--pub-lamp); box-shadow: inset 0 0 0 1px var(--pub-lamp); }
html:not(.dark) .pub-tag[data-tag="next"] { color: var(--pub-ink); box-shadow: inset 0 0 0 2px var(--pub-ink); }
.pub-when li[data-when="past"] { opacity: .62; }
@media (max-width: 599px) { .pub-when li { grid-template-columns: 64px minmax(0, 1fr); } .pub-when .pub-tag { grid-column: 2; justify-self: start; } }

/* ---------------------------------------------------------------- 11 · the reading template (long SEO text: a calm column, a sticky contents rail) */
.pub-read { display: grid; grid-template-columns: 236px minmax(0, 720px); justify-content: center; column-gap: clamp(32px, 5vw, 72px); padding: clamp(40px, 6vw, 80px) var(--pub-gut) clamp(64px, 8vw, 112px); }
.pub-toc { position: sticky; top: calc(var(--pub-head-h) + 24px); align-self: start; max-height: calc(100vh - var(--pub-head-h) - 48px); overflow: auto; }
.pub-toc summary { list-style: none; margin-bottom: 10px; font: 650 12px/1.2 var(--pub-font); letter-spacing: .14em; text-transform: uppercase; color: var(--pub-muted); }
.pub-toc summary::-webkit-details-marker { display: none; }
.pub-toc ol { margin: 0; padding: 0; list-style: none; border-left: 1px solid var(--pub-edge); }
.pub-toc a { display: block; margin-left: -1px; padding: 8px 12px 8px 16px; border-left: 2px solid transparent; color: var(--pub-muted); font: 500 14px/1.4 var(--pub-font); text-decoration: none; }
.pub-toc a:hover { color: var(--pub-ink); }
.pub-toc a[aria-current="true"] { color: var(--pub-ink); border-left-color: var(--pub-lamp); font-weight: 650; }
.pub-toc-cta { margin-top: 22px; padding: 16px; border-radius: 18px; background: var(--pub-card); box-shadow: inset 0 0 0 1px var(--pub-edge), inset 1px 1px 0 var(--pub-spec); }
.pub-toc-cta p { margin: 0 0 12px; font: 650 14px/1.35 var(--pub-font); color: var(--pub-ink); }
.pub-toc-cta .pub-btn { width: 100%; min-height: 44px; font-size: 14px; }
.pub-article { min-width: 0; font-size: 19px; line-height: 1.72; color: var(--pub-body); }
.pub-article > :first-child { margin-top: 0; }
.pub-article :is(h1, h2, h3, h4) { font-family: var(--pub-font); color: var(--pub-ink); scroll-margin-top: calc(var(--pub-head-h) + 20px); text-wrap: balance; }
.pub-article h1 { margin: 0 0 18px; font-size: clamp(32px, 3.6vw, 44px); font-weight: 760; line-height: 1.1; letter-spacing: -.025em; }
.pub-article h2 { margin: 2.2em 0 .6em; font-size: 28px; font-weight: 760; line-height: 1.2; letter-spacing: -.015em; }
.pub-article h3 { margin: 1.8em 0 .5em; font-size: 21px; font-weight: 650; line-height: 1.3; }
.pub-article p, .pub-article ul, .pub-article ol { margin: 0 0 1.05em; }
.pub-article li + li { margin-top: .35em; }
.pub-article a { color: var(--pub-ink); text-decoration: underline; text-decoration-color: var(--pub-lamp); text-decoration-thickness: 1.5px; text-underline-offset: 3px; }
.pub-article strong { color: var(--pub-ink); font-weight: 650; }
.pub-article blockquote { margin: 1.4em 0; padding: 4px 0 4px 22px; border-left: 3px solid var(--pub-lamp); color: var(--pub-ink); }
.pub-article .pub-meta { margin: 0 0 28px; font: 500 14px/1.4 var(--pub-font); color: var(--pub-muted); }
.pub-article .pub-figure { margin: 1.8em 0; }
.pub-article table { width: 100%; margin: 1.4em 0; border-collapse: collapse; font: 500 15px/1.5 var(--pub-font); }
.pub-article th, .pub-article td { padding: 10px 12px; border-bottom: 1px solid var(--pub-edge); text-align: left; }
.pub-article th { color: var(--pub-ink); font-weight: 650; }
@media (max-width: 999px) {
  .pub-read { grid-template-columns: minmax(0, 1fr); row-gap: 28px; padding-top: 28px; }
  .pub-toc { position: static; max-height: none; padding: 14px 18px; border-radius: 18px; background: var(--pub-card); box-shadow: inset 0 0 0 1px var(--pub-edge); }
  .pub-toc summary { display: flex; justify-content: space-between; align-items: center; min-height: 32px; margin: 0; cursor: pointer; }
  .pub-toc summary::after { content: ""; width: 8px; height: 8px; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; rotate: 45deg; translate: 0 -2px; }
  .pub-toc details[open] summary { margin-bottom: 10px; }
  .pub-toc details[open] summary::after { rotate: 225deg; translate: 0 2px; }
  .pub-toc-cta { display: none; }
  .pub-article { font-size: 18px; line-height: 1.68; }
}
@media (min-width: 1000px) { .pub-toc summary { pointer-events: none; } }

/* ---------------------------------------------------------------- 12 · the footer (dock slot): the deck, then the street */
.pub-foot { position: relative; background: var(--pub-foot-bg); color: var(--pub-muted); font: 500 14px/1.4 var(--pub-font); }
.pub-foot-deck { height: 18px;
  background: linear-gradient(180deg, var(--fd-fascia-hi) 0 1px, var(--fd-deck-top) 1px 9px, oklch(0 0 0 / .18) 9px 10px, var(--fd-deck-face) 10px 100%),
    repeating-linear-gradient(90deg, transparent 0 158px, var(--fd-deck-seam) 158px 159.5px, transparent 159.5px 160px); }
html:not(.dark) .pub-foot-deck { box-shadow: 0 -1px 0 color-mix(in srgb, var(--sp-ink) 40%, transparent); }
/* a page that ends on the porch (data-pub-end) lets its deck run straight into the footer: no second deck */
html:has(.pub-porch[data-pub-end]) .pub-foot-deck { height: 0; }
.pub-foot-in { max-width: var(--pub-max); margin: 0 auto; padding: 56px var(--pub-gut) 28px; display: grid; grid-template-columns: 260px minmax(0, 1fr); gap: 40px 56px; }
.pub-foot-brand .pub-brand { padding-left: 0; }
.pub-foot-line { margin: 12px 0 0; max-width: 30ch; font: 500 14px/1.5 var(--pub-font); color: var(--pub-muted); }
.pub-foot-groups { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 28px 24px; }
.pub-foot-h { margin: 0 0 12px; font: 650 12px/1.2 var(--pub-font); letter-spacing: .14em; text-transform: uppercase; color: var(--pub-ink); }
.pub-foot ul { margin: 0; padding: 0; list-style: none; display: grid; gap: 2px; }
.pub-foot ul a { display: inline-flex; align-items: center; min-height: 32px; color: var(--pub-muted); text-decoration: none; font: 500 14px/1.3 var(--pub-font); }
.pub-foot ul a:hover { color: var(--pub-ink); text-decoration: underline; text-underline-offset: 3px; }
.pub-foot-base { grid-column: 1 / -1; display: flex; flex-wrap: wrap; align-items: center; gap: 8px 24px; padding-top: 22px; border-top: 1px solid var(--pub-edge); font: 500 13px/1.45 var(--pub-font); }
.pub-foot-base p { margin: 0; }
.pub-foot-tools { margin-left: auto; display: flex; align-items: center; gap: 8px; }
.pub-foot .spine-pause { grid-area: auto; height: 44px; min-width: 44px; border: 1px solid var(--pub-edge); background: var(--pub-field); }
@media (max-width: 1023px) { .pub-foot-in { grid-template-columns: minmax(0, 1fr); } .pub-foot-groups { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 599px) {
  .pub-foot-groups { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .pub-foot ul a { min-height: 44px; }
  .pub-foot-tools { margin-left: 0; }
}

/* ---------------------------------------------------------------- 13 · rest, reduced motion, Pause: everything at its final frame */
html.pub-rest *, html[data-spn-paused="true"] .spine-app[data-spine-frame="public"] * { transition-duration: 0s !important; animation-duration: 0s !important; animation-delay: 0s !important; transition-delay: 0s !important; }
@media (prefers-reduced-motion: reduce) { .spine-app[data-spine-frame="public"] * { transition-duration: 0s !important; animation-duration: 0s !important; } }

/* ---- run 29 · port note · the header's two controls are 40 px tall (the walk: theme button 40x40, Start free 96x40): an invisible 44 px hit area, the look unchanged ---- */
@media (max-width: 767px) { .spine-app[data-spine-frame="public"] .pub-theme, .spine-app[data-spine-frame="public"] .pub-start { position: relative; } .spine-app[data-spine-frame="public"] :is(.pub-theme, .pub-start)::before { content: ""; position: absolute; inset: -2px; } }
/* ... and a long action label wraps inside the screen instead of running past both edges (free-gamsat-prep at 375: the pill was 408 px, nowrap) */
@media (max-width: 599px) { .spine-app[data-spine-frame="public"] .pub-actions .pub-btn { max-width: 100%; white-space: normal; text-align: center; padding-block: 12px; } }
/* ---- run 32 · DB2 item 11 · the door bar for a signed-in student (walk-r21/error-page/_r32.css, verbatim) ---- */
/* Round 32 · run 27 (frame designer, 24 Oct 2026) · SQ-194 + SQ-58 · THE STREET'S BAR FOR A STUDENT WHO IS SIGNED IN.
   A signed-in student who lands on the 404, the 500 or the crash page is not a visitor: she is not offered "Sign in" or
   "Start free". The end of the bar is one door home, "Your Today": the bar's quiet glass pill (the header's quiet Start free,
   kit §3), carrying the house's own small roof with its window lit, the same warm lamp as the signpost's. Never violet: the
   page's one violet stays the sign's arm (Back to Today / Try again). On a phone the door stays in the bar (Sign in hides at
   < 600 px, the door does not) and the menu's foot carries the same door. Arrival, once: the window's lamp catches (opacity,
   0.5 s after the bar, 0.9 s); reduced motion = the lit resting frame. Ported into the app's error sheet by
   scripts/dev/public/build-p1b-sheets.mjs (ADD.error) and drawn by components/public/v2/PublicHeader.tsx (signedIn). */
.pub-door { display: inline-flex; align-items: center; gap: 8px; min-height: 40px; padding: 0 16px 0 12px; border-radius: 999px; white-space: nowrap;
  font: 650 14px/1 var(--pub-font); text-decoration: none; color: var(--pub-ink); background: var(--pub-field);
  box-shadow: inset 0 0 0 1px var(--pub-edge-strong), inset 1px 1px 0 var(--pub-spec); transition: background-color .3s, box-shadow .3s; }
.pub-door:hover { background: var(--pub-wash); box-shadow: inset 0 0 0 1px var(--pub-edge-strong), inset 1px 1px 0 var(--pub-spec), 0 0 18px -6px var(--pub-lamp); }
.pub-door:focus-visible { outline: 2px solid var(--pub-ink); outline-offset: 2px; }
.pub-door svg { display: block; flex: none; width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; overflow: visible; }
.pub-door .pub-door-glow { fill: var(--pub-lamp); stroke: none; opacity: .32; animation: pub-door-lamp .9s .5s both; }
.pub-door .pub-door-lamp { fill: var(--pub-lamp); stroke: none; animation: pub-door-lamp .9s .5s both; }
@keyframes pub-door-lamp { from { opacity: 0; } }
.pub-menu-acts .pub-door { min-height: 48px; padding: 0 14px; border-radius: 14px; font-size: 16px; background: transparent; box-shadow: none; }
.pub-menu-acts .pub-door:hover { background: var(--pub-wash); box-shadow: none; }
@media (max-width: 599px) { .pub-door { padding: 0 14px 0 10px; } }
@media (prefers-reduced-motion: reduce) { .pub-door .pub-door-glow, .pub-door .pub-door-lamp { animation: none; } }
/* ---- run 30 · true Newsreader weights on the public pages (the variable files of the house sheet) ---- */
@font-face { font-family: Newsreader; font-style: normal; font-weight: 200 800; font-display: swap; src: url(/fonts/v2/newsreader-opsz-wght-latin.woff2) 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: Newsreader; font-style: italic; font-weight: 200 800; font-display: swap; src: url(/fonts/v2/newsreader-opsz-wght-italic-latin.woff2) 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: Newsreader; font-style: normal; font-weight: 200 800; font-display: swap; src: url(/fonts/v2/newsreader-wght-latin-ext.woff2) format("woff2"); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: Newsreader; font-style: italic; font-weight: 200 800; font-display: swap; src: url(/fonts/v2/newsreader-wght-italic-latin-ext.woff2) format("woff2"); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; }
