Fixer for the opening group · 2026-10-13 · files owned: prototype/index.html, prototype/shared.css (plus the new prototype/vendor/ pair). Captures: headless Chrome for Testing via Playwright, python3 -m http.server 8703 inside prototype/, 1440x900 and 390x844 at DPR 1, shot prefix r2-opening-. Every capture below was read as pixels before judging; the luminance numbers come from a stdlib PNG probe (L = 0.2126 R + 0.7152 G + 0.0722 B on stored values, the same measure the round-2 visual critique used).
Before (round 1, c2v-opening-head-1440.png): a skull by shape. Oversized orbits at y 0.05 that sat half inside the dissolve band and read as open cavities, a second bridge lobe below the cut descending as a lone column (the tooth), a cheekbone flare where the socket and temple subtractions met, grey noisy tendrils in the fade (noise amplitude 0.22), putty albedo with orange rims.
After (r2-opening-head-1440.png, r2-opening-1440x900.png, r2-opening-390x844.png): a smooth matte display-mannequin cranium from the nose bridge up.
sdHeadLocal): one cranium ellipsoid centre (0, 0.46, −0.06) radii (0.74, 0.80, 0.92) that narrows toward the cut on its own; a frontal plate (0, 0.50, 0.42) r (0.56, 0.50, 0.40) k 0.22; a soft brow swelling (0, 0.28, 0.68) r (0.52, 0.14, 0.16) k 0.30; a low bridge ridge (0, 0.14, 0.78) r (0.09, 0.12, 0.05) k 0.14 that no longer hangs below the cut; two broad shallow dishes subtracted at (±0.27, 0.20, 0.75) r (0.14, 0.09, 0.07) k 0.16, orbit bottom at y 0.11, above the fade; temporal planes from a large, tall cutter far out (±1.18, 0.35, 0) r (0.50, 1.20, 0.60) k 0.35, which flattens the sides without a crease and never lets the head widen again toward the cut (no jaw, no cheekbone).CUT_EXT 0.26 → 0.34, headAlpha noise amplitudes 0.22/0.07 → 0.08/0.02 at frequency (1.4, 0.8, 1.4), band smoothstep(CUT_Y − CUT_EXT, CUT_Y, y), and the colour is fogged before compositing (hc = mix(CLOUD_LIT, hc, ha)), so what dissolves turns white, never grey. The deck's haze top moved from y 0.36 to 0.16 and the collar follows, so the hollows sit above the mist instead of inside it.1 − 0.70·occ; hemisphere 0.56, key 0.50, fill 0.28; near-white warm rims (1.0, 0.96, 0.92) and (1.0, 0.97, 0.94) at 0.30 and 0.06 instead of the orange pair; soft-shadow penumbra factor 7 → 4; floor max(col, 0.60). Camera lift 0.85 → 0.40 (nearly eye level with the fog line, so the cranium reads as a head rather than a ball seen from above).r2-opening-1440x900.png: whole head [520,80 400x400] min L 164, p1 165; left hollow p1 165 (mean 196); right hollow p1 164 (mean 181); band under the cut [540,437 360x48] min 171; column runs below L 150 (≥ 8 px) under the cut: 0; below L 120 (≥ 4 px): 0. Round-1 numbers were whole-head min 117, right socket p1 119 with 14 % below L 140.Before: // 01 / // 02 eyebrows, ENTER THE SITE / ASK THE MIND in Unbounded 800 caps, old explainers, a hint with a key legend, no corner tags, no accessible names, lockup // AUSTIN, TX // 2027, slash and printable keys inert, card-lift hover with a peach ring and backdrop blur, Space on a door did nothing.
After (r2-opening-1440x900.png, r2-opening-390x844.png, r2-opening-hover-mind-1440.png, r2-opening-focus-map-1440.png):
- One eyebrow // two ways in above the fork. Door A: Open the map / Everything laid out: agenda, lineup, venue, tickets. / tag [ browse ] / aria-label Open the map: the full site with pages and navigation. Door B: Ask the mind / Say what you came for. Only that appears. / [ ask ] / Ask the mind: a conversational guide that shows only what you ask for. Under both: // you can switch any time. Strings live in CONFIG.copy and CONFIG.doors and in the static markup (no-JS carries them: r2-opening-nojs-1440.png).
- Lockup: // MAY 3-6, 2027 // AUSTIN, TX as real text in both CONFIG and markup; .tag--caps keeps the caps on that line only.
- Labels Unbounded 400 at clamp(1.25rem, 1rem + 1vw, 1.75rem); explainers Unbounded 300 at 15 px; corner tags top-right, opacity 0 → 1 on hover and focus-visible, always visible under (hover: none) (measured opacity 1 at 390).
- States per §3.3: rest 1 px --line-ui outline, no fill, no shadow, no backdrop-filter, square corners; hover/focus border → ink plus a 1 px inset ink shadow (2 px total, nothing shifts); explainer → ink; door B grows a raspberry hairline along its top edge over 240 ms (::before, measured matrix(1,0,0,1,0,0), rgb(193,17,90)); active scale 0.985; focus ring 2 px raspberry, 4 px offset (measured). Tab order map → mind → shortcuts toggle; arrows wrap; Tab is never intercepted; Space on a focused door opens it (measured → standard.html).
- Keys (one document keydown handler): ignores defaultPrevented, isComposing, ctrl/meta/alt and editable targets. / → mind.html#compose. Any other single printable key → the key is stored in sessionStorage['ets27.draft'] and the page goes to mind.html#compose; nothing typed ever travels in a URL, so no server log carries it. mind.html (the other group's 02:54 version) already reads and removes the draft: measured after pressing w on the fork, #q value w, focused, caret at 1, zero turns sent, storage cleared. The 1 and 2 door shortcuts from §3.3 are dropped on purpose (decision 1 makes every printable key a draft).
- WCAG 2.1.4: a [ shortcuts off ] / [ shortcuts on ] mono button in the hint line, remembered in localStorage['ets27.shortcuts']; with it off, w and / do nothing (r2-opening-shortcuts-off-1440.png, measured URL unchanged, draft null, label survives reload).
- The storyboard's 10 s line > pick a door, or just start typing. appears once per session on hover-capable devices with shortcuts on (r2-opening-nudge-1440.png, measured at t 10.0).
Before: no skip, no shortcut out of the 5.6 s intro, Tab at 0.95 s focused an invisible door (c2i-fork-focus-before-reveal-1440.png).
After: [ skip ] mono button bottom-right, visible from 0.4 s (r2-opening-skip-visible-1440.png, measured opacity 1 at t 0.71) and hidden once settled; the first keydown, pointerdown, wheel or touchstart, a focusin inside #fork, or the skip click adds intro-done, which forces every .reveal to its final state and jumps the realm clock to settledAtMs (accumulation restarts so no ghost of the rise lingers). Measured: two Tabs at t≈1 s → intro-done, door A focused at opacity 1, filter none, raspberry outline (r2-opening-focus-early-1440.png); skip click → phase settled, intro 1 (r2-opening-after-skip-1440.png). Reduced motion and ?still=1 keep the doors present from the first frame and never show the skip (r2-opening-reduced-motion-1440.png, r2-opening-still-1440.png).
prototype/vendor/three.module.js and three.core.js (verbatim upstream; sha384 wyxAlyAVVsyc7KN24a4+m1tMTC2BwrjQyLgLStDaUBDmwK+gWUMULWHSS0NRoZKv and r1q8Si7xFBrvMv3Q4yjQkKhkYZ2lp+wn/bPPzNZTsc8DY4uPJmm2vheuz1Yn+8m8, matching the engineering critique's values), with modulepreload for both and the unused three/addons/ map entry removed. No third-party script on the front door.goLive (idempotent), the import races a 2.5 s timeout into fallbackToCss, and a late import after the fallback is ignored. When the realm is late or absent the page adds quick-reveal, which compresses the reveal delays to 15 % (nothing to wait for). Stall test with vendor/** held open: is-live at 1.67 s, CSS realm at 2.70 s, both doors visible at ~4.2 s (r2-opening-stall-1440.png); round 1 was plain white after 8 s.failIfMajorPerformanceCaveat: true drops software rasterizers to the CSS realm; a frame-time probe over the first 1.5 s of wall clock (unclamped) steps to render scale 0.55 when the median exceeds 45 ms and, if still slow, stops the loop, disposes the renderer and hands over to the CSS realm with the phase clock carried over. Measured on this machine: median 8.3 ms, 120 fps, 167 samples, scale 1.stopped flag plus full dispose on context loss (no preventDefault, no frames into a lost context); resize debounced to one rAF and skipped for unchanged size/DPR (mobile URL-bar jitter no longer rebuilds three render targets); render capped at 30 fps once settled while the clock keeps real time; fallbackToCss(reason, elapsedMs) continues the phase clock instead of restarting it..no-js hides the canvas and shows the CSS realm (the CSS head is a neutral egg with a brow shadow and two shallow dishes; the peach ring is gone). r2-opening-nojs-1440.png, r2-opening-nojs-390.png: realm visible, plain-link doors, dated lockup. ?nowebgl=1: r2-opening-nowebgl-1440.png, -390.png. ?debug= flags kept (checked ?debug=2).Before: two 173 px doors side by side with wrapped labels, 125 px of empty deck between the head and the mark, and the desktop grid inflated to 1804 px when an indefinite-height grid met a 2fr filler row.
After: at 390x844 the doors stack full width (358 px), 12 px apart, 102 px tall (min 64), map above mind, tags always visible; lookYTall −0.62 → −0.50 puts the cut at 335 px and the lockup follows --head-bottom (369 px) directly; scrollHeight 844 (no scroll). The stage has a definite height (100dvh) so spare space splits 1:2 between the head's room and the bottom. On wide-but-short screens the DOM stack scales with height (mark min(…, 10.7vh), door padding min(1.75rem, 3.1vh), gaps in vh) and the head lifts and shrinks a little (shortBelowPx 900, shortLift 1.0, shortShrink 0.6): measured no scroll at 1024x680, 1280x720, 1366x768, 1920x1080, head clear of the corner tags.
--bg #ffffff; fog tones #fafaf9 / #f3f3f1 / #ebebe8 (--ets-warm-white, --ets-cloud, --ets-mist); --line #e2e2df (decorative); new --line-ui rgba(11,11,12,.5) for interactive outlines (3.7:1 on white, 3.5:1 over the fork sky); --line-strong ink.--muted → --ets-ash #64635f (6.0:1 on white, 5.0:1 on mist, 4.6:1 over the fork sky) so every informational grey passes AA; --muted-quiet #8a8a86 (the direction's gray-500) is defined for decorative glyphs only. The warm #67625b the interaction critique proposed is kept in spirit (same luminance) but neutralised to match the new fog tones.--accent #c1115a, plus --accent-ink #8f0c43 and --accent-tint #fbe9f0 for the other group's hovers and selected chips. --focus is now the raspberry ring per §3.3 (5.7:1 on white, 4.3:1 on the darkest fork sky). --ets-signal (the unused blue) is deleted. The old ember is renamed --ets-sun and documented as realm-lighting only; --ets-ember and --ets-glow remain as deprecated aliases that resolve to the raspberry and the sun halo, so the three live references in mind.html and standard.html render raspberry (never the old ember) until the other group replaces them. Grep of index.html and shared.css for e8a06a, 232,160,106, ffd9b8, 255,217,184, 1b4bd6, faf8f4: only the --ets-sun definition and the alias line..mark 800 and .numeral 900 opt in. .tag no longer forces uppercase; .tag--caps is the modifier (used for the dated lockup line); .skip-link lowercase. Focus ring corners square. --ease-settle added.prototype/shots/, prefix r2-opening-)1440x900, head-1440, 390x844, mid-intro-1440, focus-early-1440, skip-visible-1440, after-skip-1440, hover-mind-1440, focus-map-1440, shortcuts-off-1440, nudge-1440, reduced-motion-1440, still-1440, nowebgl-1440, nowebgl-390, nojs-1440, nojs-390, stall-1440. Round-1 shots untouched.
Console: zero errors and zero warnings on every index.html load in the run except the deliberate [ets27] CSS realm: … warning in the forced-fallback cases. The only "failed request" entries are Playwright reporting the two modulepreload fetches as blocked inside its JavaScript-disabled context (reason csp); a real no-JS browser simply does not fetch them, and the no-JS page renders fully.
1 and 2 door shortcuts (§3.3): dropped, as decision 1 makes every printable key a draft and the interaction critique asked for the same.ETS27 with FREE YOUR MIND as the theme line is kept (the visual critique called this a call to make, not a defect); if the direction's display-xl lockup wins, .lockup__theme and .lockup__mark are the two rules to swap.ets SVG wordmark: not available; the corner tags still stand in.[ ] remember my door: open question 11.6, not in the findings.--ets-ember outright: kept as a deprecated alias to the raspberry until mind.html and standard.html stop referencing it, so their hovers never fall back to transparent in the meantime.mind.html#compose means focus the composer and send nothing; sessionStorage['ets27.draft'] carries a typed draft that must be read and removed on load, placed in #q with the caret at the end, focused, never auto-sent. Your 02:54 mind.html does this; thank you.--accent-ink for filled-button hover, --accent-tint for selected chips, --line-ui for chip/button outlines, --muted-quiet for the // glyph only, .tag--caps where caps are wanted (nav links, .reg).