/* house.css — the shared language of Osmo's house on the web (Fable V owns this file).
   Tokens first; every other stylesheet uses them. No inline styles (CSP style-src 'self').
   Measured from the reference sky: a warm plum-black sky (never navy), book serif, tiny mono labels in
   amber, pale blue and coral, hairline rules, and one cream card for the thing you read. */

:root {
  --sky: #06050a;
  --sky-2: #030207;
  --ink: #f1ede4;
  --ink-2: #d5d3cf;
  --dim: #8d8d8f;
  --dim-2: #77757d;
  --amber: #eeb03f;
  --blue: #7ca9c0;
  --coral: #e0777f;
  --cream: #f6f1e7;
  --cream-ink: #1c1b22;
  --cream-dim: #6a676d;
  --cream-amber: #8a5e0e;
  --cream-blue: #2f6178;
  --cream-coral: #a13a45;
  --seal: #8b2d29;
  --seal-ink: #f0d597;
  --serif: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, "Times New Roman", serif;
  --mono: ui-monospace, "SF Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace;
  --hair: rgba(241, 237, 228, 0.14);
  --hair-2: rgba(241, 237, 228, 0.07);
  --sat: env(safe-area-inset-top, 0px);
  --sab: env(safe-area-inset-bottom, 0px);
  --sal: env(safe-area-inset-left, 0px);
  --sar: env(safe-area-inset-right, 0px);
  --house-top: 0px;          /* set by the house shell: the height of its bar, for rooms to keep clear of */
  --radius-card: 24px;
  color-scheme: dark;
}

html, body { height: 100%; }
body.house-body {
  margin: 0; background: var(--sky); color: var(--ink);
  font: 17px/1.5 var(--serif); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
  overflow: hidden;
}
body.house-body.house-scroll { overflow: auto; }
body.house-body a:not(.label) { color: inherit; text-decoration: none; }
body.house-body ::selection { background: rgba(238, 176, 63, 0.35); }

/* ---------- the label: tiny letter-spaced mono small caps (1 to 3 words; never a sentence) ---------- */
.label {
  font: 500 10.5px/1.2 var(--mono);
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--dim);
  font-variant-numeric: tabular-nums;
}
.label.amber, .label-amber { color: var(--amber); }
.label.blue, .label-blue { color: var(--blue); }
.label.coral, .label-coral { color: var(--coral); }
.label.ink, .label-ink { color: var(--ink); }
a.label, button.label {
  appearance: none; -webkit-appearance: none; background: none; border: 0; padding: 0; margin: 0;
  cursor: pointer; color: var(--dim); text-decoration: none; transition: color 0.25s;
  -webkit-tap-highlight-color: transparent;
}
a.label:hover, button.label:hover, a.label:focus-visible, button.label:focus-visible { color: var(--ink); }
a.label[aria-current="page"], button.label[aria-pressed="true"], button.label.is-on { color: var(--amber); }
a.label:focus-visible, button.label:focus-visible { outline: 1px solid var(--amber); outline-offset: 6px; border-radius: 2px; }
button.label:disabled { opacity: 0.35; cursor: default; }
/* a label you can tap: the glyphs stay small, the target is 44 px */
.tap { position: relative; }
.tap::before { content: ""; position: absolute; left: -8px; right: -8px; top: 50%; height: 44px; transform: translateY(-50%); }

/* ---------- the italic line: one quiet sentence in the book face ---------- */
.line { font: italic 15px/1.5 var(--serif); color: var(--dim); }

/* ---------- hairlines ---------- */
.hair { border: 0; border-top: 1px solid var(--hair); margin: 0; height: 0; }
.hair-2 { border: 0; border-top: 1px solid var(--hair-2); margin: 0; height: 0; }

/* ---------- buttons ---------- */
.btn {
  appearance: none; -webkit-appearance: none;
  display: inline-flex; align-items: center; justify-content: center; gap: 0.6em;
  font: 500 11px/1 var(--mono); letter-spacing: 0.2em; text-transform: uppercase;
  color: var(--ink); background: transparent;
  border: 1px solid var(--hair); border-radius: 999px;
  padding: 12px 20px; min-height: 44px; cursor: pointer;
  transition: border-color 0.25s, color 0.25s, background 0.25s, transform 0.15s, opacity 0.25s;
  -webkit-tap-highlight-color: transparent;
}
.btn:hover { border-color: rgba(241, 237, 228, 0.45); }
.btn:active { transform: translateY(1px); }
.btn:focus-visible { outline: 1px solid var(--amber); outline-offset: 4px; }
.btn:disabled { opacity: 0.4; cursor: default; }
.btn-primary {
  background: var(--cream); color: var(--cream-ink); border-color: var(--cream);
  box-shadow: 0 0 0 1px rgba(247, 243, 234, 0.08), 0 0 40px rgba(247, 243, 234, 0.08);
}
.btn-primary:hover { background: #fffcf4; border-color: #fffcf4; }
.btn-small { padding: 8px 14px; min-height: 30px; font-size: 10px; }

/* ---------- the cream card: the one thing you read ---------- */
.card-cream {
  background: var(--cream); color: var(--cream-ink);
  border-radius: var(--radius-card);
  padding: 28px 30px 24px;
  box-shadow: 0 30px 80px rgba(0, 0, 0, 0.55), 0 1px 0 rgba(255, 255, 255, 0.5) inset;
  font-family: var(--serif);
}
.card-cream .label { color: var(--cream-dim); }
.card-cream .label.amber { color: var(--cream-amber); }
.card-cream .label.blue { color: var(--cream-blue); }
.card-cream .label.coral { color: var(--cream-coral); }
.card-cream .line { color: var(--cream-dim); }
.card-cream .hair { border-top-color: rgba(28, 27, 34, 0.12); }
.card-cream .btn { color: var(--cream-ink); border-color: rgba(28, 27, 34, 0.22); }
.card-cream .btn:hover { border-color: rgba(28, 27, 34, 0.55); }
.card-cream .btn-primary { background: var(--cream-ink); color: var(--cream); border-color: var(--cream-ink); box-shadow: none; }
.card-cream .btn-primary:hover { background: #2c2b33; border-color: #2c2b33; }
.card-cream a.label, .card-cream button.label { color: var(--cream-dim); }
.card-cream a.label:hover, .card-cream button.label:hover, .card-cream a.label:focus-visible, .card-cream button.label:focus-visible { color: var(--cream-ink); }
.card-cream ::selection { background: rgba(238, 176, 63, 0.4); }
/* an italic underlined link in the card, the reference's "what does this mean?" */
.card-cream .link, .link {
  appearance: none; background: none; border: 0; padding: 0; margin: 0; cursor: pointer;
  font: italic 16px/1.4 var(--serif); color: inherit; text-decoration: underline; text-underline-offset: 4px; text-decoration-thickness: 1px;
  text-decoration-color: rgba(28, 27, 34, 0.35); transition: text-decoration-color 0.25s;
  -webkit-tap-highlight-color: transparent;
}
.card-cream .link:hover, .link:hover { text-decoration-color: currentColor; }
.card-cream .link:focus-visible, .link:focus-visible { outline: 1px solid var(--cream-amber); outline-offset: 4px; border-radius: 2px; }

/* the seal: Osmo's sunrise in wax, for the one thing you read */
.seal { width: 48px; height: 48px; flex: none; display: block; filter: drop-shadow(0 2px 3px rgba(40, 10, 8, 0.35)); }
.seal .seal-edge { fill: #6a2320; opacity: 0.9; }
.seal .seal-wax { stroke: #4e1716; stroke-width: 0.6; }
.seal .seal-rim { fill: none; stroke: var(--seal-ink); stroke-width: 0.8; opacity: 0.55; }
.seal .seal-letters { fill: none; stroke: var(--seal-ink); stroke-width: 2.2; stroke-dasharray: 0.9 2.3; opacity: 0.45; }
.seal .seal-sun { fill: var(--seal-ink); }
.seal .seal-glyph { fill: none; stroke: var(--seal-ink); stroke-width: 1.3; stroke-linecap: round; }
.seal .seal-ray { fill: none; stroke: var(--seal-ink); stroke-width: 1.1; stroke-linecap: round; opacity: 0.85; }
.seal .seal-shine { fill: #ffffff; opacity: 0.16; }
button.seal-btn { appearance: none; background: none; border: 0; padding: 0; margin: 0; cursor: pointer; border-radius: 50%; }
button.seal-btn:focus-visible { outline: 1px solid var(--cream-amber); outline-offset: 4px; }
button.seal-btn:hover .seal { filter: drop-shadow(0 3px 5px rgba(40, 10, 8, 0.45)); }

/* Osmo's mark: the name alone (the sunrise beside it went on 2026-09-25; it stays in the wax seal) */
.mark { display: inline-flex; align-items: center; color: var(--ink); font: 400 17px/1 var(--serif); letter-spacing: 0.02em; }

/* ============================================================
   The door (public): a quiet sky, a few words, one control
   ============================================================ */
.house-canvas { position: fixed; inset: 0; width: 100%; height: 100%; display: block; z-index: 0; }
/* the Why Engine's own sky behind the door, and (adopted) behind the vault room (T-20260925-studio-002) */
.why-door-host { position: fixed; inset: 0; z-index: 1; background: #000; }
/* pass four (item 10): until the renderer has taken the host (why-scene), it is not drawn: its black would show at the
   first paint and then give way to the page's own sky when vault.js holds it back to warm (#000 -> #06050a) */
.why-door-host:not(.why-scene) { opacity: 0; }
.why-door-host[hidden] { display: none; }
.why-door-host.is-away { visibility: hidden; }
body.has-why-door .house-canvas { display: none; }
/* the button turns to dust: the grains are born on it in the same frame it goes */
.door-open.is-dust { visibility: hidden; transition: none; }
/* its words stay on one line at every width down to 320 px (the polish, 2026-09-27: "OPEN WITH FACE / ID" wrapped on
   the 402 px iPhone in studio's Simulator run, and in headless Chrome at 320 and 375 px and "TOUCH ID" at 1280 x 800;
   the entrance's button is max(clamp(150px, 23vh, 232px), 16em) wide, so it follows the screen's height) */
.door-open { white-space: nowrap; }
.door-open.is-back { animation: door-back 0.6s ease both; }
@keyframes door-back { from { opacity: 0; } to { opacity: 1; } }
/* Amendment 2 (items 10, 11): the sky is held back while the engine loads and warms, then comes up; the button waits,
   calm, until then, and again while Face ID or Touch ID is asked (it turns to dust only once the passkey has answered) */
.why-door-host.is-warming { opacity: 0; }
.why-door-host.is-waking { transition: opacity 0.9s ease; }
.door-open.is-preparing, .door-open.is-preparing:disabled { opacity: 0.55; cursor: progress; }
.door-open.is-waiting, .door-open.is-waiting:disabled { opacity: 1; cursor: progress; animation: door-wait 2.4s ease-in-out infinite; }
@keyframes door-wait {
  0%, 100% { box-shadow: 0 0 0 1px rgba(247, 243, 234, 0.08), 0 0 40px rgba(247, 243, 234, 0.08); }
  50% { box-shadow: 0 0 0 1px rgba(247, 243, 234, 0.3), 0 0 60px rgba(247, 243, 234, 0.24); }
}
/* ---------- the entrance (T-20260926-studio-005, part D): a dead star in the button's box ----------
   The egg is drawn on its own canvas (why/house/entrance.ts), laid just after #why-door, so it follows the sky's
   warming, waking and away states. The button stays the control: its box is the egg's (padding-top), its words under
   it. The plain pill comes back where the entrance cannot run (body.no-entrance) and on the three.js door (door-plain). */
.entrance-canvas { position: fixed; inset: 0; width: 100%; height: 100%; display: block; z-index: 1; pointer-events: none; }
.why-door-host.is-warming ~ .entrance-canvas { opacity: 0; }
.why-door-host.is-waking ~ .entrance-canvas { transition: opacity 0.9s ease; }
.why-door-host.is-away ~ .entrance-canvas { visibility: hidden; }
.why-door-host[hidden] ~ .entrance-canvas { display: none; }
body:not(.no-entrance):not(.door-plain) .door .btn.door-open {
  display: flex; flex-direction: column; align-items: center; justify-content: flex-end;
  box-sizing: border-box; width: max(var(--orb-box), 16em); min-height: 0;
  padding: var(--orb-box) 16px 8px; margin: 0;
  background: transparent; border: 0; border-radius: 32px; box-shadow: none;
  color: var(--ink-2); font: 500 10.5px/1.2 var(--mono); letter-spacing: 0.24em;
  transition: opacity 0.8s ease, color 0.3s ease;
}
body:not(.no-entrance):not(.door-plain) .door .btn.door-open:hover { background: transparent; color: var(--ink); }
body:not(.no-entrance):not(.door-plain) .door .btn.door-open:active { transform: none; }
body:not(.no-entrance):not(.door-plain) .door .btn.door-open.is-waiting,
body:not(.no-entrance):not(.door-plain) .door .btn.door-open.is-waiting:disabled { animation: none; box-shadow: none; opacity: 1; }
body:not(.no-entrance):not(.door-plain) .door .btn.door-open:disabled { opacity: 1; }
/* (pass four: while the door warms, only the words wait, dimmed; the egg in the box is at its full light from the
   first paint, so nothing about it changes when the door can be pressed) */
body:not(.no-entrance):not(.door-plain) .door .btn.door-open.is-preparing { opacity: 1; color: var(--dim-2); }
/* (the box anchors the egg's still below; the label's wrap at 402 px is Osmo's to fix, per the coordinator's scope) */
body:not(.no-entrance):not(.door-plain) .door .btn.door-open { position: relative; }
/* Pass four (item 10): the door is never empty. From the first paint the egg's box holds a still of the egg as the
   entrance draws it at its first frame (web/why/door-scene.js, entrance.ts at clock 0; captured from that canvas,
   536 px square, WebP q90, inlined so it is there with this stylesheet, before any script). The entrance's canvas
   comes up under it when the sky wakes (0.9 s, the egg held at this very pose, entrance.ts STILL_HOLD_MS), and then
   the still goes: nothing on the screen changes. A press or the dust takes it at once. */
body:not(.no-entrance):not(.door-plain) .door .btn.door-open::before {
  content: ""; position: absolute; left: 50%; top: calc(var(--orb-box) * 0.06);
  width: calc(var(--orb-box) * 0.92); height: calc(var(--orb-box) * 0.92); transform: translateX(-50%);
  background: url("data:image/webp;base64,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") center / 100% 100% no-repeat;
  pointer-events: none;
}
body.has-entrance:not(.door-warming) .door .btn.door-open::before { opacity: 0; transition: opacity 0.5s ease 0.95s; }
body:not(.no-entrance):not(.door-plain) .door .btn.door-open:is(.is-waiting, .is-dust, .is-back)::before { opacity: 0; transition: none; }
/* the words under the egg go gently once it breaks (never in one frame) */
body:not(.no-entrance):not(.door-plain) .door .btn.door-open.is-dust { visibility: visible; opacity: 0; pointer-events: none; transition: opacity 0.9s ease; }
/* vault.js fades the words at once when the index opens; with the entrance they stay while the stream reads them,
   and go when it hands over (body.entrance-leaving) */
body.has-entrance .door.is-opening { opacity: 1; }
body.has-entrance.entrance-leaving .door { opacity: 0; pointer-events: none; }
/* "Osmo" remembers: a warm glow while the stream goes round it */
.door-mark span { transition: color 1.6s ease, text-shadow 2.2s ease; }
.door-mark.is-remembered span {
  color: #fff4de;
  text-shadow: 0 0 9px rgba(255, 214, 150, 0.9), 0 0 24px rgba(238, 176, 63, 0.55), 0 0 46px rgba(238, 176, 63, 0.28);
  transition: color 0.7s ease, text-shadow 0.9s ease;
}

/* the house bar steps away while a piece is shown, and on the way to the Why Engine */
.house-bar { transition: opacity 0.6s ease, transform 0.6s ease; }
.house-host.house-bare .house-bar { opacity: 0; transform: translateY(-8px); pointer-events: none; }
.house-host.house-bare .house-bar > * { pointer-events: none; }

.door {
  position: fixed; inset: 0; z-index: 2;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  padding: calc(40px + var(--sat)) max(20px, var(--sal)) calc(40px + var(--sab)) max(20px, var(--sar));
  text-align: center; pointer-events: none;
  transition: opacity 0.9s ease;
}
.door > * { pointer-events: auto; }
.door[hidden] { display: none; }
.door.is-opening { opacity: 0; pointer-events: none; }
.door.is-opening > * { pointer-events: none; }
.door-kicker, .door-title .door-kicker { display: block; margin: 0 0 22px; font-size: 10.5px; }
.door-title {
  margin: 0 0 32px; max-width: 22em;
  font: 400 clamp(28px, 4.3vw, 54px)/1.14 var(--serif); letter-spacing: -0.008em; color: var(--ink);
  text-wrap: balance;
}
.door-title em { font-style: italic; color: var(--ink-2); }
.door .v-status {
  min-height: 6em; margin: 16px 0 0; max-width: 34em;   /* room for four lines, so a message never moves the words */
  font: italic 15px/1.5 var(--serif); color: var(--dim);
}
.door .v-status.v-error { color: var(--coral); }
.door .v-status.v-ok { color: var(--amber); }
.door-foot { margin: 30px 0 0; display: flex; gap: 14px; align-items: baseline; flex-wrap: wrap; justify-content: center; }
.door-foot a.label { position: relative; border-bottom: 1px solid var(--hair); padding-bottom: 3px; }
.door-foot a.label::before { content: ""; position: absolute; left: -8px; right: -8px; top: 50%; height: 44px; transform: translateY(-50%); }
.door-foot .v-enrolled:empty { display: none; }
.door-foot .v-enrolled::before { content: "·"; margin-right: 14px; color: var(--dim-2); }
.house-corner { position: fixed; z-index: 3; top: calc(18px + var(--sat)); pointer-events: none; }
.house-corner > * { pointer-events: auto; }
.house-corner.left { left: max(22px, var(--sal)); }
.house-corner.right { right: max(22px, var(--sar)); }
.house-corner[hidden] { display: none; }

/* the house arrives over the door's bloom */
.house-host { transition: opacity 1.1s ease; }
.house-host.is-arriving { opacity: 0; }

/* ============================================================
   The house shell: an observatory top bar, room labels, Lock
   ============================================================ */
.house { position: relative; width: 100%; height: 100%; --house-top: 54px; color: var(--ink); font-family: var(--serif); }
.house-bar {
  position: absolute; left: 0; right: 0; top: 0; z-index: 20;
  display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 16px;
  height: calc(var(--house-top) + var(--sat));
  padding: var(--sat) max(22px, var(--sar)) 0 max(22px, var(--sal));
  box-sizing: border-box;
  background: linear-gradient(to bottom, rgba(6, 5, 10, 0.9) 0%, rgba(6, 5, 10, 0.55) 60%, rgba(6, 5, 10, 0) 100%);
  pointer-events: none;
}
.house-bar > * { pointer-events: auto; }
.house-nav { display: flex; gap: 26px; align-items: center; justify-content: center; }
.house-nav a.label { position: relative; padding: 16px 4px; }
.house-nav a.label::after {
  content: ""; position: absolute; left: 50%; right: 50%; bottom: 10px; height: 1px; background: var(--amber);
  transition: left 0.3s, right 0.3s; opacity: 0.9;
}
.house-nav a.label[aria-current="page"]::after { left: 4px; right: 4px; }
.house-end { display: flex; justify-content: flex-end; align-items: center; gap: 18px; }
.house-lock { position: relative; padding: 16px 4px; }
.house-mark { position: relative; padding: 12px 0; }
/* every control in the bar is a 44 x 44 px target at least (the polish, 2026-09-27): a hit slop like .tap's, 8 px to
   each side and 44 px tall, laid over the glyphs and taking no layout, so the bar looks and lays out as before. (On a
   phone Lock's own box was 34 x 12 px: button.label's padding: 0 outranks .house-lock's.) Where two slops meet in a
   gap the later control's wins, except between Sound and Lock (below). */
.house-bar .house-mark::before, .house-bar .house-nav a.label::before, .house-bar .house-end > .label::before {
  content: ""; position: absolute; left: -8px; right: -8px; top: 50%; height: max(100%, 44px); transform: translateY(-50%);
}
/* (the review of the polish) Sound and Lock split the gap between them at its midpoint, so a thumb on the right of
   SOUND toggles the sound and never Locks the house: the gap is 18 px wide (8 px of slop each, no overlap), 14 px
   under 640 px and 10 px under 440 px (house-sound.css). */
@media (max-width: 640px) {
  .house-bar .house-end > .house-sound::before { right: -7px; }
  .house-bar .house-end > .house-sound + .house-lock::before { left: -7px; }
}
@media (max-width: 440px) {
  .house-bar:has(.house-sound) .house-end > .house-sound::before { right: -5px; }
  .house-bar:has(.house-sound) .house-end > .house-sound + .house-lock::before { left: -5px; }
}
/* At 320 px the bar already runs past the screen (Lock's box ends at 347 px; the bar is pass four's). There the last
   control's slop stops at its own right edge, so the page is no wider than it was (a wider page zooms the whole house
   out further on a phone); Lock's hit area is then 39 x 44 px, the most that fits beside Sound's half of the gap. */
@media (max-width: 359px) {
  .house-bar .house-end > .label:last-child::before { right: 0; }
}
.house-rooms { position: absolute; inset: 0; }
.house-room { position: absolute; inset: 0; }
.house-room[hidden] { display: none; }
.house-toast {
  position: absolute; left: 50%; bottom: calc(22px + var(--sab)); z-index: 30; transform: translate(-50%, 6px);
  max-width: min(520px, calc(100% - 40px)); padding: 10px 16px; border-radius: 999px;
  background: rgba(6, 5, 10, 0.8); border: 1px solid var(--hair); color: var(--ink);
  font: italic 14px/1.4 var(--serif); text-transform: none; letter-spacing: 0; text-align: center;
  opacity: 0; transition: opacity 0.3s, transform 0.3s; pointer-events: none;
}
.house-toast.is-shown { opacity: 1; transform: translate(-50%, 0); }

/* a placeholder room (the dev harness uses it for rooms that are not built here) */
.house-empty {
  position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 14px; text-align: center; padding: 0 24px;
}
.house-empty p { margin: 0; font: italic 18px/1.5 var(--serif); color: var(--ink-2); max-width: 30em; }

/* ============================================================
   The viewer bar (P's viewer.js; class hooks only)
   ============================================================ */
.v-viewer .v-viewer-text { font: 15px/1.3 var(--serif); }
.v-viewer .v-viewer-text b { font: 400 16px/1 var(--serif); letter-spacing: 0.01em; }
.v-viewer .v-viewer-text span { font: italic 14px/1 var(--serif); letter-spacing: 0; text-transform: none; margin-left: 12px; }
.v-viewer .v-btn {
  appearance: none; background: transparent; border: 1px solid var(--hair); border-radius: 999px; color: var(--ink);
  font: 500 10px/1 var(--mono); letter-spacing: 0.2em; text-transform: uppercase; padding: 12px 16px; min-height: 44px; cursor: pointer;
  backdrop-filter: none; -webkit-backdrop-filter: none; box-shadow: none;
}
.v-viewer .v-btn:hover { border-color: rgba(241, 237, 228, 0.45); background: transparent; }
.v-viewer .v-btn:focus-visible { outline: 1px solid var(--amber); outline-offset: 3px; }

/* the fallback bar and plain list (vault.js, when gallery.js is missing) */
.v-bar { font-family: var(--serif); background: linear-gradient(to bottom, rgba(6, 5, 10, 0.9), rgba(6, 5, 10, 0)); }
.v-bar .v-bar-title { font: 400 17px/1 var(--serif); letter-spacing: 0.02em; }
.v-bar .v-bar-count { font: 500 10.5px/1 var(--mono); letter-spacing: 0.22em; text-transform: uppercase; color: var(--dim); }
.v-bar .v-btn { font: 500 10px/1 var(--mono); letter-spacing: 0.2em; text-transform: uppercase; background: transparent; border-color: var(--hair); backdrop-filter: none; -webkit-backdrop-filter: none; }
.v-list .v-card { background: transparent; border: 1px solid var(--hair); border-radius: 14px; }
.v-list .v-card .v-card-t { font: 400 20px/1.2 var(--serif); }
.v-list .v-card .v-card-m { font: italic 14px/1.4 var(--serif); color: var(--dim); }
.v-list .v-card p { font: 15px/1.5 var(--serif); color: var(--ink-2); }

/* ============================================================
   The enroll page (P owns its logic; class hooks: v-checks .v-ok/.v-bad, v-steps .v-doing/.v-done/.v-fail,
   v-status .v-error/.v-ok, v-out[hidden])
   ============================================================ */
.page {
  position: relative; z-index: 2; box-sizing: border-box;
  max-width: 620px; margin: 0 auto; min-height: 100%;
  padding: calc(64px + var(--sat)) max(20px, var(--sal)) calc(72px + var(--sab)) max(20px, var(--sar));
}
.page-head { margin: 0 0 34px; }
.page-head .label { display: block; margin-bottom: 18px; }
.page h1 { margin: 0 0 14px; font: 400 clamp(30px, 5vw, 44px)/1.12 var(--serif); letter-spacing: -0.008em; color: var(--ink); text-wrap: balance; }
.page h2 { margin: 0 0 12px; font: 400 22px/1.25 var(--serif); color: var(--ink); }
.page .lede { margin: 0; font: italic 18px/1.5 var(--serif); color: var(--ink-2); max-width: 32em; }
.page p { margin: 0 0 14px; font: 16px/1.55 var(--serif); color: var(--ink-2); }
.page .quiet { color: var(--dim); font-size: 15px; }
.page section { padding: 28px 0; }
.page section + section { border-top: 1px solid var(--hair); }
.page section > .label { display: block; margin-bottom: 16px; }
.page code { font: 12.5px var(--mono); color: var(--ink); background: rgba(241, 237, 228, 0.06); padding: 1px 6px; border-radius: 4px; }
.page b { font-weight: 500; color: var(--ink); }

.checks { list-style: none; margin: 0 0 6px; padding: 0; display: grid; gap: 10px; }
.checks li { display: flex; gap: 12px; align-items: baseline; font: 15px/1.45 var(--serif); color: var(--ink-2); }
.checks li::before { content: "○"; font: 12px var(--mono); color: var(--dim); flex: none; }
.checks li.v-ok { color: var(--ink-2); }
.checks li.v-ok::before { content: "●"; color: var(--blue); }
.checks li.v-bad { color: var(--coral); }
.checks li.v-bad::before { content: "×"; color: var(--coral); }
.checks:empty { display: none; }

.field { display: grid; gap: 8px; margin: 0 0 22px; }
.field label { display: block; }
.field input {
  appearance: none; -webkit-appearance: none; width: 100%; box-sizing: border-box;
  font: 20px/1.3 var(--serif); color: var(--ink); background: transparent;
  border: 0; border-bottom: 1px solid var(--hair); border-radius: 0; padding: 6px 0 10px;
  transition: border-color 0.25s;
}
.field input::placeholder { color: var(--dim-2); font-style: italic; }
.field input:focus { outline: none; border-bottom-color: var(--ink); }
.actions { display: flex; gap: 16px; align-items: center; flex-wrap: wrap; margin: 26px 0 8px; }

.steps { list-style: none; margin: 18px 0 0; padding: 0; display: grid; }
.steps li {
  display: flex; gap: 14px; align-items: baseline; padding: 10px 0;
  border-top: 1px solid var(--hair-2); font: 15px/1.45 var(--serif); color: var(--dim);
  counter-increment: step;
}
.steps li::before { content: counter(step, decimal-leading-zero); font: 500 10.5px var(--mono); letter-spacing: 0.2em; color: var(--dim); flex: none; min-width: 2.4em; }
.steps li.v-doing { color: var(--ink); }
.steps li.v-doing::before { color: var(--amber); }
.steps li.v-done { color: var(--ink-2); }
.steps li.v-done::before { color: var(--amber); }
.steps li.v-fail { color: var(--coral); }
.steps li.v-fail::before { color: var(--coral); content: "×"; }
.page .v-status { min-height: 1.6em; margin: 14px 0 0; font: italic 15px/1.5 var(--serif); color: var(--dim); }
.page .v-status.v-error { color: var(--coral); }
.page .v-status.v-ok { color: var(--amber); }

.out { display: grid; gap: 14px; }
.out[hidden] { display: none; }
.out textarea {
  width: 100%; box-sizing: border-box; min-height: 200px; resize: vertical;
  font: 12px/1.55 var(--mono); color: var(--ink); background: rgba(241, 237, 228, 0.04);
  border: 1px solid var(--hair); border-radius: 12px; padding: 12px 14px;
}
.out textarea:focus { outline: none; border-color: rgba(241, 237, 228, 0.4); }
.out .row { display: flex; gap: 16px; align-items: center; flex-wrap: wrap; }
.note { margin: 0; padding: 14px 18px; border-radius: 14px; border: 1px solid rgba(238, 176, 63, 0.3); background: rgba(238, 176, 63, 0.06); font: 15px/1.5 var(--serif); color: var(--ink-2); }
.page .existing { font: italic 15px/1.5 var(--serif); color: var(--dim); }

/* the six words: the one thing you read aloud, so they get the cream card and the seal */
.words, .page section.words { display: grid; gap: 18px; padding: 28px 30px 24px; }
.words[hidden], .page section.words[hidden] { display: none; }
.words .words-kicker { margin: 0; font: italic 15px/1.5 var(--serif); color: var(--cream-dim); }
/* six words in a row (they wrap on a phone), each with its small number above; the older vault.css
   word-list rules (boxes) are reset here on purpose */
.word-list { list-style: none; margin: 4px 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 14px 34px; counter-reset: word; }
.word-list li {
  counter-increment: word; display: flex; flex-direction: column; align-items: flex-start; gap: 2px;
  padding: 0; margin: 0; border: 0; border-radius: 0; background: none;
  font: 400 clamp(26px, 6vw, 34px)/1.2 var(--serif); color: var(--cream-ink); letter-spacing: -0.005em;
}
.word-list li::before { content: counter(word); font: 500 9.5px/1 var(--mono); letter-spacing: 0.2em; color: var(--cream-amber); }
.word-list li::after { content: none; }
.words .words-foot { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-top: 4px; }
.words .words-note { margin: 0; font: italic 15px/1.5 var(--serif); color: var(--cream-dim); }
.words .words-note:empty { display: none; }
.words .words-links { display: flex; gap: 20px; align-items: center; flex-wrap: wrap; }

/* ---------- small screens ---------- */
@media (max-width: 640px) {
  .label { font-size: 10px; letter-spacing: 0.2em; }
  .house { --house-top: 50px; }
  .house-bar { grid-template-columns: auto 1fr auto; gap: 12px; padding-left: max(18px, var(--sal)); padding-right: max(18px, var(--sar)); }
  .house-nav { gap: 18px; justify-content: center; }
  .mark { font-size: 16px; }
  .door-title { font-size: clamp(25px, 7.2vw, 32px); margin-bottom: 24px; }
  .btn { padding: 12px 18px; }
  .card-cream { border-radius: 20px; padding: 20px 20px 18px; }
  .page { padding-top: calc(44px + var(--sat)); }
  .seal { width: 44px; height: 44px; }
}

@media (prefers-reduced-motion: reduce) {
  .btn, a.label, button.label, .house-nav a.label::after, .house-toast, .field input, .door, .house-host, .house-bar { transition: none; }
  .door-open.is-back, .door-open.is-waiting { animation: none; }
  .why-door-host.is-waking { transition: none; }
  body.has-entrance:not(.door-warming) .door .btn.door-open::before { transition: none; }
}

/* ---------- pass four (item 2): the viewer grows at once, with the piece's picture, and the piece comes up over it ---------- */
/* (T-20261001-eastdoor-next, the entry scout's A: contained, never covered: as the box grows from the frame's shape to the
   screen's, cover re-cropped the picture every frame, a phone ending on a quarter of it four times too big. viewer.js
   places it at its natural size and scales it uniformly to fit, turned with the zoom when the stage turns; until its
   size is known it is contained in the well) */
.v-viewer .v-viewer-poster { position: absolute; left: 0; top: 0; width: 100%; height: 100%; max-width: none; object-fit: contain; transform-origin: 50% 50%; display: block; pointer-events: none; user-select: none; }
/* (all but unseen, never 0: a frame at opacity 0 may be throttled as hidden, and the piece is measured as it boots) */
.v-viewer.is-booting .v-viewer-frame { opacity: 0.002; }
.v-viewer.is-live .v-viewer-frame { opacity: 1; transition: opacity 0.45s ease; }
@media (prefers-reduced-motion: reduce) { .v-viewer.is-live .v-viewer-frame { transition: none; } }

/* ---------- pass four: "Skip the reveal" (web/reveal.js), the door's top-right corner, a 44 pt target ----------
   Gurjeet (plan P-20260927-walk): a collapse button that skips the reveal, so the house can be tested without sitting
   through it. Quiet like the door's other labels; amber while it is on (the reveal will be skipped). */
.door .door-reveal {
  position: fixed; z-index: 3; top: calc(8px + var(--sat)); right: max(10px, var(--sar));
  min-height: 44px; min-width: 44px; padding: 0 12px; display: inline-flex; align-items: center; justify-content: center;
  white-space: nowrap; color: var(--dim);
}
.door .door-reveal[aria-pressed="true"] { color: var(--amber); }
/* (while the stream plays the door is is-opening, which takes every pointer off its words: the toggle stays pressable,
   so a reveal under way can be ended; not once the house is taking over) */
body.has-entrance:not(.entrance-leaving) .door.is-opening > .door-reveal { pointer-events: auto; }
.door .door-reveal[aria-pressed="true"]::after { content: ""; width: 5px; height: 5px; margin-left: 9px; border-radius: 50%; background: currentColor; }
/* "Cover the pieces" (web/reveal.js; Gurjeet, 2026-10-09: "hide pieces again ... so I can switch them on and off"), the
   same quiet toggle under "Skip the reveal"; amber while the pieces are covered. Shown only while there is something to
   cover or uncover ([hidden] beats the display above), and gone once the door is opening: the house reads the memory then. */
.door .door-cover { top: calc(56px + var(--sat)); }
.door .door-cover[hidden], .door.is-opening > .door-cover { display: none; }

/* ---------- pass four (item 8): the house bar, calm and on one line from 320 to 430 px ----------
   Gurjeet: "Clean up the nav bar and bottom bar". The phone bar was six words across the full width ("Osmo | VAULT
   WHY ENGINE PORCH SOUND LOCK"), Sound in amber like the room you are in, Lock a 12 px target at the edge (off the
   screen at 320 px). Now: Osmo, the three rooms (the only words, the current one amber), and Sound and Lock as two
   quiet icons with their names for screen readers; every target 44 px; the safe areas kept; under 360 px the rooms
   keep the bar (Osmo's mark goes; "Vault" is the same room). Wider than 640 px, the words as before. */
.house-ico { display: none; width: 19px; height: 19px; fill: none; stroke: currentColor; stroke-width: 1.35; stroke-linecap: round; stroke-linejoin: round; }
.house-lock, .house-end > .house-sound { min-height: 44px; min-width: 44px; display: inline-flex; align-items: center; justify-content: center; }
.house-sound .house-ico-off { display: none; }
.house-sound[aria-pressed="false"] .house-ico-on { display: none; }
.house-sound[aria-pressed="false"] .house-ico-off { display: inline; }
.house-nav a.label, .house-lbl { white-space: nowrap; }
@media (max-width: 640px) {
  .house-bar { grid-template-columns: auto minmax(0, 1fr) auto; gap: 10px; padding-left: max(16px, var(--sal)); padding-right: max(10px, var(--sar)); }
  .house-nav { gap: 16px; }
  .house-nav a.label { padding: 16px 3px; letter-spacing: 0.17em; }
  .house-end { gap: 0; }
  .house-end > button.label { padding: 0; }
  .house-end .house-ico { display: block; }
  .house-end .house-lbl { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  .house-lock { color: var(--dim); }
  /* (on seal 61: the two icons are 44 x 44 boxes side by side with no gap, so the polish's hit slop stays on their own
     edges; the boundary between Sound and Lock is then the midpoint the polish asks for, and neither takes the other's) */
  .house-bar .house-end > .house-sound::before, .house-bar .house-end > .house-sound + .house-lock::before,
  .house-bar:has(.house-sound) .house-end > .house-sound::before, .house-bar:has(.house-sound) .house-end > .house-sound + .house-lock::before { left: 0; right: 0; }
}
@media (max-width: 400px) {
  .house-nav { gap: 12px; }
  .house-nav a.label { letter-spacing: 0.14em; }
}
@media (max-width: 359px) {
  .house-bar { grid-template-columns: minmax(0, 1fr) auto; padding-left: max(12px, var(--sal)); }
  .house-bar .house-mark { display: none; }
  .house-nav { justify-content: flex-start; gap: 12px; }
}

/* ---------- pass four (item 8): the porch (and the Belt in it) scrolls below the bar, never under it ----------
   The porch room is its own scroller (porch.css, inset 0, padded by the bar's height). Scrolled, or with a Belt item
   brought up, its words ran under the bar's fading backdrop and through the room names (Osmo's finding at 1280 x 800).
   The scroller now starts where the bar ends; the bar's backdrop keeps the sky above it. */
.house-room[data-room="porch"].porch { top: calc(var(--house-top) + var(--sat)); padding-top: 10px; }
.house-room[data-room="porch"] .belt-stage { scroll-margin-top: 12px; }

/* ---------- pass four: the door's two small links are 44 pt targets, with their words where they were ----------
   "Osmo" (top left) and "Enroll this device" measured 44 x 17 and ~130 x 15 px (E3's test page). Their boxes grow to
   44 px tall; negative margins (and the corner's top) keep every word, and the door's column, exactly where it was;
   Enroll's hairline becomes its underline so it stays under the word. (The stream reads the word, not the box.) */
.door .door-mark.house-corner { top: calc(4.5px + var(--sat)); left: calc(max(22px, var(--sal)) - 6px); min-height: 44px; min-width: 44px; padding: 0 6px; box-sizing: border-box; }
.door-foot a.label { display: inline-flex; align-items: center; min-height: 44px; margin: -16.5px 0 -11.5px; padding: 0; border-bottom: 0; text-decoration: underline; text-decoration-color: var(--hair); text-decoration-thickness: 1px; text-underline-offset: 6px; }
.door-foot a.label::before { content: none; }
@media (max-width: 640px) { .door .door-mark.house-corner { top: calc(4px + var(--sat)); } }
/* (pass four, item 8, from E3's placement check: the last targets under 44 px in the bar) */
.house-bar .house-mark { min-height: 44px; }
.house-nav a.label { min-width: 44px; box-sizing: border-box; text-align: center; }

/* ---------- amendment F (Gurjeet, on desktop and iPhone): the egg at the centre of the screen ----------
   "move the egg lower. it should be centered in the page. its too close to title and too much gap above the enroll
   this device text element line". The door was one centred column (title, egg, words, a status line that always kept
   four lines of room, the foot), so the egg sat wherever that column put it: 43 px above the centre on a 390 x 844
   iPhone, and 25-30 px under the title with ~170 px of mostly empty status line above "Enroll this device".
   Now the door is a grid whose first row ends exactly where the egg's box must start for the egg (drawn at 0.52 of the
   box, entrance.ts measureOrb and the still above) to sit at the door's vertical centre, at every size, by layout alone.
   The title sits at the bottom of that first row, and the foot under the words; both are one gap (--egg-gap) from
   the egg's visible edge (its crust spans 0.52 +/- 0.418 of the box). The status line keeps no empty room: a message
   (a cancel, an error) now moves only the foot below it, never the title or the egg. Where the title cannot fit above
   the centre (a phone on its side), its row grows to hold it and the egg goes lower rather than under the words.
   The door's padding is carried by the title (the corners' clearance) and the foot (the home indicator), so the
   rows' percentages are of the whole screen. (Never on a hidden door: `.door[hidden]` must keep its display: none.) */
body:not(.no-entrance):not(.door-plain) .door:not([hidden]) {
  --orb-box: clamp(150px, 23vh, 232px);
  --egg-gap: clamp(44px, 6.5vh, 76px);
  display: grid; justify-items: center; align-content: start;
  grid-template-columns: minmax(0, 1fr);
  grid-template-rows: minmax(min-content, calc(50% - var(--orb-box) * 0.52)) repeat(4, auto) minmax(0, 1fr);
  padding-top: 0; padding-bottom: 0;
}
body:not(.no-entrance):not(.door-plain) .door .door-title {
  align-self: end;
  margin: calc(clamp(44px, 7vh, 58px) + var(--sat)) 0 calc(var(--egg-gap) - var(--orb-box) * 0.102);
}
body:not(.no-entrance):not(.door-plain) .door .btn.door-open { align-self: start; }
body:not(.no-entrance):not(.door-plain) .door .v-status { min-height: 0; margin: 0; }
body:not(.no-entrance):not(.door-plain) .door .v-status:not(:empty) { margin-top: 14px; }
body:not(.no-entrance):not(.door-plain) .door .door-foot {
  /* (the egg's crust ends 0.062 of the box above the box's end; the words under it are 20.6 px: 12.6 px of line, 8 of
     padding; Enroll's word sits 0.6 px under the foot's top inside its 44 px target) */
  margin: calc(var(--egg-gap) - var(--orb-box) * 0.062 - 21.2px) 0 calc(24px + var(--sab));
}
