GENERATED VIEW · PRIVATE ARCHIVE · DO NOT SERVE
RobCo Industries · Archive Museum

DESIGN_OVERHAUL_SLATE.md



RELEASE

planning/2.8.0/slates/DESIGN_OVERHAUL_SLATE.md

sha256 2aacb026d5920647 · 72913 bytes · original held in the private archive

# DESIGN_OVERHAUL_SLATE.md — RobCo U.O.S. Total Transformation Idea Slate > **IDEATION ONLY.** Nothing here is implemented, committed, or pushed. This is a pick-from > menu for the owner. Lives in gitignored `planning/`. Grounded in the live `dev` build > @ `cd8a824` (v2.7.0, cache `-r38`, 1903 tests / 157 suites) — every surface named below was > read out of the actual code, not imagined. > > **The bar:** `planning/mockups/module-bay-mockup.html` — "I am operating real 2077 RobCo > hardware." This slate takes that feeling and makes it the *entire site*, **2–3× bolder**. --- ## 0. HOW TO READ THIS ### 0.1 The North Star (owner, re-confirmed verbatim spirit) When this is done it should **not look like the same site** — a *total transformation, not a reskin*. The current app is the **foundation** (data, systems, correctness, save integrity) but **not the destination**. The Module Bay is the floor, not the ceiling. And it is **per-game**: every part of the UI — settings included — becomes *that machine's own version*. - **New Vegas** = a **salvaged, jury-rigged wasteland terminal** (RobCo desk unit wired into a Pip-Boy uplink — scavenged, warm-amber-capable, held together with courier grit). - **Fallout 3** = a **Pip-Boy 3000 on the wrist** (Vault-Tec issue, grimy Capital-Wasteland green, dented casing, the device *strapped to you*). - **Fallout 4** = an **Institute holo-terminal** (clean, cold, synthetic-blue, floating glass and projected light — the "too-perfect" machine). **Design-only this cycle; refined at 3.0.** ### 0.2 The 6 UNLOCKS (all greenlit — the slate assumes them) 1. **The AI/Overseer has a FORM.** Not a text box — a diegetic *presence* (a CRT face, a voice readout, a character), different per game. 2. **Navigation is an EXPERIENCE, not tabs.** You move *through* the machine like a place. 3. **Per-game differs STRUCTURALLY, not just visually.** The three machines can be organized and operated differently. 4. **First-boot / game-switch is a real CEREMONY** — powering on 2077 hardware. 5. **The whole app is a physical DEVICE** — bezel, screen curvature, chrome, custom cursor. 6. **Break webapp conventions for immersion** — **HARD GUARDRAIL: the PWA must not break** (installable, offline, service worker, standalone all keep working). ### 0.3 HELD CONSTRAINTS (design *within* these — non-negotiable) - **Player authority.** The AI is opt-in and *never* authoritative over durable state. Nothing here changes that. Every atmospheric idea writes **nothing** to the campaign save. - **Free + offline + PWA-intact.** No paid infra, bring-your-own AI key, works in airplane mode. - **The campaign save/data layer is SACRED.** The visual overhaul never touches save integrity or the atmosphere↔save boundary. Skin the terminal all you like; the `robco_v8` container and its migrate/sanitize path are untouchable. - **Mobile AND desktop both fully work** (they may *differ* — and should). - **Accessibility floor still holds** (reduced-motion, AA contrast, ≥16px inputs, ≥28px targets, literal ARIA) even though it's back-burner as a *driver*. ### 0.4 STANDING DESIGN RULES (apply everywhere in this slate) - **★ THE CENTERING RULE (NEW — now a standing rule).** *Nothing sits visibly off-center.* Any incomplete final row in any grid **centers** its leftover items — 1 leftover → centered; 2 → centered as a pair; never left-aligned against an empty gap. This applies to **every** grid and layout in the overhaul (chip grids, tube racks, macro pads, save slots, map cells, tool trays, the whole IA). Where a grid can't center cleanly, choose a column count that divides evenly for the common case. Treat "off-center = a bug" as a design principle. *(Implementation-agnostic: `justify-content:center` on the wrapping flex/grid, or a `:last-child:nth-child(odd)` centering rule — the DECISION is what's locked here, not the mechanism.)* - **Diegetic-first, literal-safe.** Visible chrome obeys HOUSE_STANDARD voice (`> ` prompts, ALL-CAPS, `[BRACKETED]` status, `⚠` faults, "OPTICS" not "dark mode"). ARIA/alt text stays plain and literal underneath. - **Reduced-motion is a first-class variant, not an afterthought** — every animated idea names its reduced-motion resting state. - **One house feel under N skins.** The three machines share a *motion language* and *interaction grammar* (§L) so the site feels like one family of hardware, not three websites. ### 0.5 RATING KEY (every idea carries this line) `⏱ Effort: S | M | L | XL` · `⚡ Impact: ★ (nice) → ★★★★★ (defines the overhaul)` · `⚑ Risk: [perf] [scope] [mobile] [a11y] [pwa] [save-boundary] [none]` · `✅ Alignment: which held-constraints it must clear` - **Effort:** S = hours / one file. M = a unit. L = a chapter. XL = a multi-unit program. - Ideas are **not** all recommended — recommendations are called out explicitly per area, and the cut-list (§N) trims scope. This is a menu. --- ## 1. THE DESIGN LANGUAGE — the "one house, three machines" spine (§cohesion anchor) Before the per-area ideas: the through-line that makes 2–3× bolder *cohere* instead of fragmenting. Every later section references this. ### 1.1 The physical model: "You are holding the device" Today the app is a webpage with a CRT overlay. The overhaul reframes the **entire viewport as the screen of a physical machine**, with the machine's *body* rendered around it: ``` ┌─────────────────────────────────────────────┐ │ ▓▓ BEZEL ▓▓ [device chrome — per game] ▓▓ │ ← physical casing: rivets (FO3), │ ┌─────────────────────────────────────────┐ │ scavenged plates (NV), │ ▓│ │▓ │ seamless glass (FO4) │ ▓│ (( curved CRT glass — the app )) │▓ │ │ ▓│ slight barrel distortion at edges │▓ │ ← screen curvature (subtle, │ ▓│ phosphor bloom, scanlines, vignette │▓ │ reduced-motion-safe) │ ▓│ │▓ │ │ ▓└─────────────────────────────────────────┘▓ │ │ ▓▓ [ dial ] [ latch ] [ lamps ● ● ● ] ▓▓ │ ← hardware controls live ON the bezel └─────────────────────────────────────────────┘ ``` - The **bezel is where hardware controls live** — the Module-Bay dial, the power lamp, the cartridge slot, hardware-life indicator LEDs. This is the single biggest "it's a device" multiplier and it *unifies* the three games (same bezel *grammar*, different bezel *material*). - **Screen curvature**: a very subtle CSS barrel/vignette on the content frame so the "glass" reads as convex. Reduced-motion and low-power keep it static; it never distorts *text legibility* (the curve lives on the frame + a corner-darkening layer, not a transform on the text). - **Custom cursor** per machine: NV = a chunky amber block caret / crosshair; FO3 = a Pip-Boy selection reticle; FO4 = a thin Institute pointer with a soft glow. Falls back to system cursor on coarse-pointer (touch) — no cursor cost on mobile. `⏱ Effort: L · ⚡ Impact: ★★★★★ · ⚑ Risk: [perf][mobile][a11y] · ✅ must clear reduced-motion + no-text-distortion + mobile (bezel becomes a thin band, §G)` ### 1.2 The motion language (shared grammar, per-game tuning) One vocabulary of motions, re-tuned per machine so they feel related: | Motion verb | What it is | NV (salvaged) | FO3 (Pip-Boy) | FO4 (Institute) | |---|---|---|---|---| | **SEAT** | a thing installs/commits | mechanical *thunk*, slight overshoot | firm click, dust-settle | frictionless glide + soft chime | | **SWEEP** | focus/selection moves | amber phosphor smear | green scanline wipe | blue light travels a rail | | **WAKE** | screen powers/returns | flickery warm-up | tube warm + jitter | instant, too-clean fade-in | | **FAULT** | error/alert | hard red glitch + static | rad-shudder | calm blue "ANOMALY" pulse | | **BREATHE** | idle/standby life | slow phosphor drift | dim tube hum | glass shimmer | - The **verbs are constant**; the **texture** changes. That's what makes three machines feel like one company's product line. Every micro-interaction in §I is one of these verbs. `⏱ Effort: M (as a token/class system) · ⚡ Impact: ★★★★ · ⚑ Risk: [scope] · ✅ reduced-motion resting state per verb` ### 1.3 The interaction grammar (structural cohesion) Two rules that hold across all three machines even when they're organized differently (Unlock 3): 1. **Everything is a component you operate, not a control you set.** A toggle is a *chip you pull*, a mode is a *dial you turn*, a screen is a *cartridge you load*. (The Module Bay already proves this; the overhaul extends it site-wide.) 2. **State reads at a glance, physically.** Lit LED = on, dark socket = off, dashed = removed, solid = seated. A technician reads the board without reading labels. Carry this to *every* surface — quests, inventory, map, factions all get a "physical state at a glance" pass. --- ## 2. AREA A — LAYOUT / IA & NAVIGATION REINVENTION **Current reality (from inventory):** 4 tabs — `STAT` / `INV` / `DATA` / `CAMPG` — driving a two-column desktop shell (panel list left, Comm-Link right) that collapses to a single stacked column on mobile. ~25 `<details>` panels distributed across the tabs. Tab bar + uptime clock + version in a pulsing header. This is a competent webapp IA. It is also the single biggest "still looks like a website" tell. **The panel/tab layout is NOT fixed — this is the area to be boldest.** ### (a) EXPANDED IDEAS **A-1 · "THE MACHINE HAS ROOMS" — navigation as moving through the device.** Replace the abstract tab bar with **spatial movement through named subsystems** of the terminal. Instead of STAT/INV/DATA/CAMPG, you traverse a machine: ``` ROBCO U.O.S. — SUBSYSTEM MAP [ you are here: ▸ OPERATIONS ] ┌────────────┬────────────┬────────────┬────────────┬────────────┐ │ OPERATOR │ OPERATIONS │ DATABANK │ UPLINK │ CHASSIS │ │ (bio/spec)│ (inv/craft)│ (quest/map)│ (comm-link)│ (settings) │ └────────────┴────────────┴────────────┴────────────┴────────────┘ ▲ the "tab bar" becomes a subsystem selector on the BEZEL, rendered as illuminated hardware buttons, not web tabs. ``` The move: the selector lives on the **device bezel** (§1.1), each subsystem is a *place* with its own boot-in transition (a SWEEP, §1.2), and switching feels like re-tuning the machine to a channel rather than clicking a tab. Deep, but the underlying `switchTab()` routing is preserved (Unlock-3 structural freedom rides on top of the working router — Protocol 22/25). **A-2 · The COMM-LINK stops being a right column and becomes the machine's "face."** Right now chat is a co-equal blue column. In the overhaul, the **Overseer presence** (§C) is the *center of gravity* — the thing you're talking to *is* the machine — and the data subsystems orbit it. On desktop the Overseer face/readout sits central with subsystems as bezel-accessible drawers; on mobile the Overseer is the home screen and subsystems slide over it. **A-3 · Filesystem as a real navigable place (the OS fantasy).** The parked plan already wants a `DIR`/`OPEN` filesystem skin (F2). Go bolder: make it a *primary* navigation affordance, not a novelty — `ARCHIVES/` (saves), `INTERCEPTS/` (inbox), `MANUALS/` (help), `LOGS/` (record+errors), `SYSTEM/` (Module Bay), `USER/` (notes+exports). A power user navigates by typing a path; a casual user taps the illuminated subsystem buttons. Both routes hit the same surfaces. This is the "it's an operating system, not a site" proof. **A-4 · Diegetic wayfinding — the machine tells you where you are.** A persistent bezel readout: `▸ SUBSYSTEM: OPERATIONS · 3 ACTIVE DIRECTIVES · RAD NOMINAL`. The "breadcrumb" is a *status telemetry line*, not a web breadcrumb. ### (b) RECOMMENDATIONS - **Adopt A-1 (subsystem model) as the spine, but keep the 4-way muscle memory as an alias.** Rename/reframe the tabs into subsystems on the bezel, keep `[1]`–`[4]` hotkeys and the same routing underneath. This is the highest-leverage single change in the whole overhaul and it's *the* thing that stops it looking like the same site. - **Do A-2 in tandem** — the Overseer-as-face reframe is what makes the subsystem model feel like a machine you commune with rather than a nav menu. These two are the headline. - **Ship A-3's filesystem as a SECONDARY power-route in this cycle** (command-driven), and consider promoting it to primary at 3.0 once MANUALS/INTERCEPT exist. Don't force it as the only nav — that risks discoverability and mobile ergonomics. - **A-4 is a quick win** — it's a text line on the bezel; ship it early. ### (c) NEW FEATURES / ELEMENTS - **Bezel subsystem selector** (illuminated hardware buttons + LEDs). - **Subsystem SWEEP transition** (the per-game motion verb on nav change). - **`GOTO`/`DIR`/`OPEN` command grammar** extending the existing TERMINAL-mode command router. - **"You are here" telemetry line** on the bezel. - **Per-subsystem ambient identity** — each subsystem can carry its own faint hum/scanline character (Operations busier, Databank quieter), a §D/§F tie-in. ### (d) BUILDING ON CURRENT IDEAS - The parked **B1 Command Language** + **F2 filesystem** already exist as plans — this area *promotes* them from "nice command aliases" to "the actual navigation model." Reuses `NATIVE_COMMAND_ROUTER`, `PANEL_NAV_ALIASES`, `COMMAND_REGISTRY`, `switchTab`, and `expandPanelForCategory` — no parallel router (Protocol 22). - The just-shipped **Module Bay** *is* the CHASSIS subsystem already — it proves the room model works. The overhaul makes every subsystem a room to the Bay's standard. `⏱ Effort: XL (spine) / S–M (A-4, aliases) · ⚡ Impact: ★★★★★ · ⚑ Risk: [scope][mobile][a11y] [pwa] — nav is load-bearing; must keep hotkeys, deep-links, tab ARIA, and back-button/PWA routing intact · ✅ mobile+desktop both, keyboard order preserved, offline` > **★ SIGNATURE MOMENT (Area A):** the tab bar dies; in its place, **illuminated hardware > subsystem buttons on the machine's bezel**, and switching subsystems *sweeps* the screen like > re-tuning a channel. You navigate a machine, not a menu. --- ## 3. AREA B — PER-GAME IDENTITY (NV / FO3 / FO4 as three distinct MACHINES) **Current reality:** per-game is data-driven but *shallow* — `GAME_DEFS[ctx].theme` swaps default optic (FNV `green #14fdce` / FO3 `green3 #4fb05a`), `framing` string (`vegas`/`capital`), Pip-Boy model string, boot flavor, save label. `data-game` CSS hooks are speced (GT-4) but not built. The architecture is *ready* for deep per-game identity; almost none of it is *spent* yet. This is where "go 2–3× bolder" has the most runway. ### (a) EXPANDED IDEAS — the three machines, structurally **B-1 · NEW VEGAS — the salvaged desk terminal + Pip-Boy uplink.** - **Material:** scavenged steel, mismatched panels, a courier's field-repairs (tape, a hand-etched serial). Warm bias — amber is *native*, not just an optic. - **Structure:** feels *jury-rigged* — the Overseer (§C) is a **scratchy uplink to the Lucky 38**, intermittent, characterful. Boot is grimier. The bezel has *extra scavenged toggles* that do real things (they're the Module Bay controls, surfaced as field-wired switches). - **Signature:** the "MOJAVE UPLINK" handshake — the terminal *dials into* the wasteland network on boot with a modem-handshake SFX and a flickery connection-establishing readout. **B-2 · FALLOUT 3 — the Pip-Boy 3000 strapped to your wrist.** - **Material:** Vault-Tec injection-molded casing, dented, Capital-Wasteland grime. The green is *duller, heavier* (`green3`), scanlines thickest. - **Structure:** this is the **most "device on your body"** machine. The bezel wraps like a wrist unit; the subsystem selector is the Pip-Boy's rotary knobs. The Overseer here is **colder / Vault-Tec institutional** — a Vault computer, not a companion. - **Signature:** the **wrist-mounted framing** — on mobile especially (§G), the FO3 machine reads as a device *held up to your face*, casing filling the screen edges. **B-3 · FALLOUT 4 — the Institute holo-terminal (design-only this cycle).** - **Material:** seamless white glass, projected blue light, no rivets, no grime — *unsettlingly clean*. The "too perfect" machine. - **Structure:** **structurally different** — instead of physical boards/chips, the FO4 machine uses **floating holographic panes** you summon and dismiss; the Overseer is a **synthetic Institute intelligence**, smooth and disquieting. Settings aren't a "Module Bay hatch" — they're a **holographic configuration lattice** that assembles in mid-air. - **Signature:** boot isn't a CRT warm-up — it's a **holographic projection assembling from nothing** (light coalescing into the UI). Cold, silent, precise. - **Status:** fully *designed* now (below), *built/refined at 3.0*. Its existence as a spec proves the architecture is N-game and forces the abstraction to be right. ### (b) RECOMMENDATIONS - **Make per-game a `GAME_DEFS[ctx].identity` block that owns FAR more than today** — not just colors, but: bezel material, boot ceremony flavor, Overseer persona + presence style, motion-verb texture (§1.2), cursor, ambient character, empty-state voice, and *structural mode* (physical boards vs. holographic panes). One data block per machine; zero feature-code branching (Protocol 38). This is the make-or-break architectural call and it's worth doing right. - **Ship NV + FO3 fully this cycle; ship FO4 as the data block + design spec only** (its `identity` entry exists and validates, but the holographic renderer is a 3.0 build). This keeps the N-game promise honest and de-risks the cycle. - **Lean into the structural difference for FO4** — if all three machines are just recolors, the overhaul under-delivers. FO4 being *organized differently* (panes vs boards) is the proof of Unlock 3 and the thing that makes the owner's "each is its own version" real. ### (c) NEW FEATURES / ELEMENTS - **`GAME_DEFS[ctx].identity`** — the expanded per-machine data contract (material, ceremony, persona, motion texture, cursor, structural mode, voice bank). - **Per-game bezel materials** (CSS `[data-game]` skins on the §1.1 chrome). - **Per-game Overseer persona** (§C) sourced from `identity.persona`. - **Per-game structural mode flag** (`bay` vs `lattice`) — the hook FO4 needs. - **Per-game cursor + motion texture.** - **A per-game "hero object"** on each machine — NV's etched serial plate, FO3's Vault-Tec decal, FO4's floating logo — the thing you see and instantly know which machine you're on. ### (d) BUILDING ON CURRENT IDEAS - Directly extends the shipped **WU-T1/T2/T3** theming seam (`THEMES` table + `GAME_DEFS.theme`) — the overhaul *widens* `theme` into `identity`, it doesn't replace it. - Absorbs the parked **GT-4 (framing CSS)** and **GT-5 (game-styled saves)** and **IMMERSION #12 (per-game EXPERIENCE as data)** — all become facets of `identity`. - The **`data-game` root attribute** (already speced) is the CSS switch for all of it. `⏱ Effort: XL (NV+FO3 machines) / L (FO4 spec) · ⚡ Impact: ★★★★★ · ⚑ Risk: [scope][mobile][a11y] — 3 machines × 3 breakpoints × render-check is the real cost · ✅ game-agnostic (Protocol 38), mobile+desktop, AA contrast per machine` > **★ SIGNATURE MOMENTS (per machine):** > - **NV** — the **MOJAVE UPLINK modem-handshake** on boot: your salvaged terminal dialing into the > wasteland. > - **FO3** — the **Pip-Boy wrist casing** wrapping the screen; a device held to your face. > - **FO4** — the **holographic assembly boot**: the UI coalescing from projected light, silent. --- ## 4. AREA C — THE AI / OVERSEER DIEGETIC PRESENCE (Unlock 1) **Current reality:** the AI is a blue COMM-LINK text column — a chat box. Input via textarea + OVERSEER/TERMINAL mode pill + macro pad + `> TRANSMIT PROTOCOL`. The AI is GEM / THE DIRECTOR in fiction, locked to Tri-Node JSON, opt-in, offline-degrading. **The FORM is now reimaginable.** This is the most exciting unlock and the one that most changes "what the app *is*." ### (a) EXPANDED IDEAS **C-1 · THE OVERSEER GAINS A FACE — a CRT presence, not a chat log.** Give the AI a **diegetic on-screen presence**: an oscilloscope face / phosphor waveform / vault-boy -style CRT avatar that *reacts* — idles with a slow scan when quiet, spikes and animates while "thinking" (during an API call, riding the existing `startThermalLoad()` hum), settles when it replies. The text response still appears (it's the transcript), but the *entity* you're talking to is now visibly present and alive. ``` ┌─────────────────────────────┐ │ ▁▂▃▅▇▅▃▂▁ DIRECTOR LINK │ ← waveform "face": idle = gentle sine, │ ∿∿∿∿∿∿∿∿∿ [ LISTENING ] │ thinking = jagged spikes, speaking = pulse-to-text │ │ │ > ...transcript appears │ │ below the presence... │ └─────────────────────────────┘ ``` **C-2 · PER-GAME OVERSEER PERSONAS (ties to §B).** - **NV** — the **Lucky 38 uplink**: a scratchy, intermittent, characterful signal. Static bursts, dropped-carrier moments, a scavenger's-network feel. Warm but unreliable. - **FO3** — the **Vault-Tec overseer computer**: cold, institutional, clipped. Green monochrome face, bureaucratic cadence. "PROCESSING. STAND BY, RESIDENT." - **FO4** — the **Institute synthetic**: smooth, disquietingly calm, *too* helpful. A clean blue waveform that never jitters — which is its own kind of unsettling. **C-3 · VOICE READOUT (opt-in, offline-safe).** Optional **Web Speech synthesis** of the Overseer's replies (device SpeechSynthesis API — free, offline on most platforms, no infra). A per-game voice character (pitch/rate). Strictly opt-in behind a Module-Bay "VOX" chip, reduced-motion/quiet-hours aware, and *never required* — pure text still works. This is a huge presence multiplier for ~zero cost. **C-4 · THE THINKING STATE IS AN EVENT.** Right now an API call is a spinner-ish wait. Make it a **diegetic transmission**: the presence animates, the hum ramps (existing `startThermalLoad`), a `> ESTABLISHING DIRECTOR LINK… DECRYPTING TELEMETRY…` readout ticks. The wait *becomes* immersion instead of dead time. Ties to §J (loading states). **C-5 · THE OVERSEER IS PRESENT EVEN WHEN OFFLINE / SILENT.** When there's no key or the player isn't prompting, the presence still *idles* — a living face on a powered machine (§D/§E ambient tie-in). It occasionally emits a diegetic status blip (not AI, a template) so the machine never feels dead. This is the bridge between "the AI" and "the living terminal." ### (b) RECOMMENDATIONS - **Build C-1 (the waveform presence) + C-4 (thinking-as-event) as the core** — they're the highest-impact, lowest-risk pieces (pure CSS/canvas animation over existing hooks, no new AI behavior, no save touch). This is what turns "a chat box" into "an entity." - **Wire C-2 personas through `GAME_DEFS[ctx].identity.persona`** — the presence's *texture* and the diegetic status-line voice are per-game data. Big payoff, rides §B's data block. - **Ship C-3 (voice) as an opt-in chip, clearly optional** — it's a wow-feature but must never be load-bearing or on-by-default (accessibility + annoyance + battery). Great quick-win *after* the presence exists. - **C-5 is the tie that binds §C to §D/§E** — recommend it, but it's a consumer of the Ambient Runtime, so it lands after that substrate. ### (c) NEW FEATURES / ELEMENTS - **Overseer presence canvas** (waveform/oscilloscope face; idle/think/speak states). - **Per-game persona pack** (visual texture + cadence + status-blip bank). - **VOX chip** (opt-in speech synthesis, per-game voice). - **Transmission choreography** for the thinking state. - **Presence idle-life** (ambient blips when unprompted). - **Reframe the input:** `> TRANSMIT PROTOCOL` stays, but the textarea becomes a **"hail the Director" console** framed as talking *to the face*, not typing into a box. ### (d) BUILDING ON CURRENT IDEAS - Reuses `startThermalLoad()`/`stopThermalLoad()` (the API-call hum already exists — the presence just *visualizes* it), `appendToChat(…, 'sys')` for status blips, the OVERSEER/TERMINAL mode pill, and the whole Tri-Node contract **unchanged** (Protocol 14/24 — the AI's *behavior* and JSON shape don't move; only its *presentation* gains a body). - Consumes the parked **INTERCEPT inbox / incoming-transmission** ideas (§D) — the presence is where an incoming transmission visibly *arrives*. `⏱ Effort: L (presence+personas) / S (voice chip) · ⚡ Impact: ★★★★★ · ⚑ Risk: [perf][a11y] — canvas animation must be reduced-motion-safe + not spam aria-live; voice must be opt-in · ✅ player-authority (presentation only, AI still opt-in + non-authoritative), offline (presence works with no key), save-boundary (writes nothing)` > **★ SIGNATURE MOMENT (Area C):** the AI **grows a face** — a living phosphor waveform that > listens, spikes while it thinks, and pulses as it speaks, *in that game's voice*. You're no > longer typing into a box; you're hailing the Director. --- ## 5. AREA D — LIVING WORLD / WASTELAND UPLINK IMMERSION **Current reality:** the app is *reactive* — it only comes alive when you prompt the AI or change a stat. Between prompts it's inert (standby just dims). The **Ambient Runtime** (`runtime.js`, `OFF→COLD_BOOT→READY→ACTIVE→IDLE→STANDBY→SHUTDOWN`, one heartbeat, tier-gated observers) is *built and live* — it's the substrate the parked WASTELAND UPLINK / IMMERSION plans need, and it's already here. This area is *ready to build on*. ### (a) EXPANDED IDEAS **D-1 · THE WASTELAND UPLINK — the machine is plugged into a living world.** The parked MEGA idea, greenlit in spirit: a deterministic, **offline**, no-durable-write ambient engine (runtime observers) that periodically emits diegetic world-life through *existing* channels: - **Ambient broadcasts** — unsolicited `> [WASTELAND UPLINK] CARAVAN LOST NEAR NIPTON · TRADE ADVISORY` sys-lines, templated from real state (loc, nearest faction, active-quest count), per-game via `identity` banks. No AI, no network. - **Rad-storm weather** — occasional storms drive the existing `body.rad-warning` CRT interference + a geiger tick-up, then clear. **Visual/audio only — never mutates `state.rads`.** (Owner ruling: **weather yes, day/night NO** — no dusk/dawn cycle.) - **INTERCEPT inbox** — rare `> UNKNOWN FREQUENCY DETECTED` nudges that arrive at the Overseer presence (§C) and can pre-fill the input, inviting you back in. **D-2 · YOUR DEEDS BECOME WASTELAND NEWS (read-only personal legend).** Templated "news" that **reads** the Terminal Record / `eventLog` and echoes your actual deeds back as wasteland chatter — "`> RADIO NEW VEGAS: A COURIER WAS SEEN LEAVING GOODSPRINGS…`". Never writes state; pure read + template. Deep continuity for ~zero cost, and it makes the world feel like it *noticed* you. **D-3 · LOCATION-AWARE AMBIENCE.** The terminal *sounds and reads different where you stand* — zone-type (from registry location `type`) tunes the ambient character: a settlement is calmer, a ruin is tenser/geiger-ier, a Vault hums. Rides §F sound + the §A per-subsystem ambient idea. **D-4 · THE UPLINK AS A VISIBLE SUBSYSTEM.** Rather than only sys-lines, give the living world a *home* — an `UPLINK` / `INTERCEPTS` subsystem (§A) showing the frequency scanner, the inbox, broadcast history, the current "weather." A place to *tune in*, not just passive noise. ### (b) RECOMMENDATIONS - **Build the UPLINK on the existing Ambient Runtime as tier-gated observers** — this is the correct, low-risk architecture and the runtime is already live. Every consumer declares an immersion tier; Minimal = silent. **Hard invariant: writes nothing durable to the campaign** (gate-guarded). - **D-2 (deeds-as-news) is the emotional core** — recommend it strongly. It's the single idea that makes the world feel *aware of you* and it's a pure read of data you already log. - **Honor the owner ruling: weather yes, day/night no.** Rad-storms stay; no dusk/dawn. - **Keep intensity conservative + dial-gated + off-lean at Minimal.** The failure mode is "noisy gimmick" — mitigate with cooldowns and the immersion dial. ### (c) NEW FEATURES / ELEMENTS - **UPLINK engine** (runtime observers, seeded rolls, device seed, template banks). - **INTERCEPT inbox + frequency scanner** subsystem. - **Rad-storm weather** (transient CRT + geiger, no state write). - **Deeds-as-news** template layer (reads `eventLog`). - **Per-zone ambient tuning.** - **App-badge for unread intercepts** (reuses existing Badging API single-source). ### (d) BUILDING ON CURRENT IDEAS - This is the **WASTELAND_UPLINK_SPEC + IMMERSION_AUDIT #1/#3/#4/#8/#10 + RECREATION #4**, all of which are already written and consolidated — the overhaul is their *home*. It reuses `appendToChat`, `body` CRT classes, geiger/hum, `RobcoEvents`, `_logEvent` (read-only), the app badge, and `GAME_DEFS`. - The **Ambient Runtime (A1)** shipped exactly to carry this — nothing new to invent at the substrate level. `⏱ Effort: L–XL · ⚡ Impact: ★★★★★ · ⚑ Risk: [perf][scope][save-boundary] — the no-durable-write invariant is load-bearing and easy to breach; battery on the ambient loop · ✅ save-boundary (writes nothing), offline (deterministic, no AI/network), player-authority (changes nothing you didn't do), dial-gated` > **★ SIGNATURE MOMENT (Area D):** the machine **echoes your own deeds back as wasteland news** — > you walk out of Goodsprings and, an hour later, Radio New Vegas mentions a courier was seen > leaving town. The world noticed you. --- ## 6. AREA E — HARDWARE LIFE (the terminal as salvaged, aging, personal hardware) **Current reality:** boot has three flavors (normal / cold-first-boot / rare 1% degraded), the Overseer's Log tracks boot count + power-on hours + longest session (device telemetry, local-only), and there's a `robco_booted_before` gate. The bones of "this machine has a history" exist but are buried in a DATA-tab panel almost nobody opens. ### (a) EXPANDED IDEAS **E-1 · THE GLASS SHOWS THE MILES.** Cosmetic **emergent wear** driven by *device* telemetry (boot count, power-on hours — data already logged): a long-running terminal accrues faint, *purely cosmetic* CRT character — a slightly warmer tube, a hair more scanline grime, a phosphor burn-in ghost of the header. **Always loses to real hazards** (a rad-storm's effect overrides wear), reduced-motion-honored, never color-only. Your machine ages *with you* and no two operators' terminals look identically worn. **E-2 · THE MACHINE HAS A PERSONALITY / QUIRKS.** Rare, characterful hardware *quirks* — an occasional flicker on wake, a tube that takes a beat to warm, a relay that clicks. Deterministic, gentle, dial-gated. This is what makes it feel like *your specific salvaged unit* rather than a fresh install. **Per-game:** NV's quirks are scavenger-jank, FO3's are Vault-Tec-institutional wear, FO4's machine is *too clean to quirk* (its "quirk" is that it never does — uncanny). **E-3 · SYSTEM STATUS as a real machine-health readout.** Consolidate Overseer telemetry + the `[LOGS]` error ring + a `RUN DIAGNOSTIC` self-test into one **SYSTEM STATUS** surface framed as reading the machine's vitals — bus voltage, tube hours, memory integrity, uptime. The machine reports its own health like real hardware. **E-4 · THE COLD-BOOT HANDSHAKE (first power-on ceremony) — see §H.** Hardware Life owns the once-per-device "this unit was just salvaged and powered on for the first time" ceremony. ### (b) RECOMMENDATIONS - **Ship E-1 (emergent wear) at a WHISPER.** The risk is gimmick; the win is a machine that feels lived-in. Keep it *subtle*, dial-gated, and always subordinate to real hazards. Recommend, but discipline the intensity hard. - **E-3 (SYSTEM STATUS) is a clear win and mostly consolidation** — recommend as a solid, lower-risk unit that also gives the CHASSIS/§A subsystem more to *be*. - **E-2 quirks: ship a tiny, tasteful set, per-game, dial-gated.** Lean minimal — a little goes a long way; overdone reads as "broken app." - **Keep Hardware Life strictly DEVICE state** (MetaStore / IDB `meta`), surfaced as a *read-only* view over device data — it must **not** write the campaign `eventLog` (the atmosphere↔save boundary). ### (c) NEW FEATURES / ELEMENTS - **Emergent-wear CRT layer** (telemetry-driven cosmetic classes). - **Hardware quirk bank** (per-game, deterministic, dial-gated). - **SYSTEM STATUS subsystem** (vitals + error ring + self-test). - **Device hardware-condition log** (read-only view; boot count/hours already exist). ### (d) BUILDING ON CURRENT IDEAS - Directly builds on **WU-F6 (degraded/cold boot)**, **WU-F7 (Overseer's Log)**, the `[LOGS]` error ring, and **IMMERSION #7 (emergent CRT condition) + #11 (cold-boot onboarding) + #14 (chassis feedback)** — all already written. - The existing `robco_booted_before` + boot-count telemetry are the exact data E-1/E-2 need. `⏱ Effort: M–L · ⚡ Impact: ★★★ (subtle by design; ★★★★ cumulatively as "it's MY machine") · ⚑ Risk: [perf][a11y][scope] — gimmick risk; must lose to hazards + honor reduced-motion · ✅ save-boundary (device state only), reduced-motion, dial-gated` > **★ SIGNATURE MOMENT (Area E):** after many sessions, a faint **phosphor burn-in ghost** of the > header lingers on the glass — your terminal wears the hours you've put into it, and it's *yours*. --- ## 7. AREA F — SOUND DESIGN (per-game + hardware + ambient) **Current reality (strong foundation):** ~23 fully-synthesized, zero-byte WebAudio sources — geiger, tinnitus, CRT hum (with thermal-load ramp during API calls), radio station bed, boot drone, heartbeat, wake/sync tones, limb/quest/faction SFX, panel clicks, level-up jingle, and the B2c hardware SFX (chip-click, board-thunk). 13-channel mute grid + master mute + servo-click relay, all in the Module Bay. This is genuinely excellent and *under-exploited* per-game. ### (a) EXPANDED IDEAS **F-1 · PER-GAME SONIC IDENTITY.** The synthesis params become `identity` data: NV's hum is warmer/scratchier (uplink static), FO3's is a duller institutional 60Hz, FO4's is a clean high sine with no grit. Boot drones, wake tones, and the radio bed all get per-game character. Same instruments, three voices — the audio analogue of §1.2's motion language. **F-2 · THE MACHINE'S OWN SOUNDS (hardware foley) extended site-wide.** The B2c chip-click/board-thunk proved hardware foley. Extend it: subsystem navigation (§A) gets a *channel-tune* sound, the cartridge/save load (§K) gets a *seat-and-spin*, the dial a *detent click*, the bezel latch a *thunk*. Every §1.2 SEAT/SWEEP verb has a sound. Behind the existing `hardwareSfx` channel + master mute (Protocol 7 guards). **F-3 · THE OVERSEER HAS A VOICE (ties §C-3).** Opt-in speech synthesis + a per-game "transmission" audio bed under the Overseer presence (carrier static for NV, clean tone for FO4). **F-4 · AMBIENT SOUNDSCAPE tuned by location + weather (ties §D).** Zone-type and rad-storms drive the geiger/hum/tinnitus mix so *where you are* and *what the world is doing* is audible, not just visible. ### (b) RECOMMENDATIONS - **F-1 (per-game sonic identity) is a HIGH-VALUE quick-ish win** — the synth already exists; this is mostly parameterizing it into `identity` data. Recommend early; it makes the three machines *sound* different, which is half of feeling different. - **F-2 (site-wide foley) rides the nav/cartridge work** — build the sounds alongside those interactions so every physical action is *felt*. Recommend. - **Everything stays behind the existing channel/mute architecture** — no new always-on audio, all opt-in-respecting, master-mute-first (Protocol 7). ### (c) NEW FEATURES / ELEMENTS - **`identity.audio` param block** (per-game synth tuning). - **Navigation/cartridge/dial/latch foley** (new `hardwareSfx` sources). - **Overseer transmission bed + optional VOX.** - **Location/weather-tuned ambient mix.** ### (d) BUILDING ON CURRENT IDEAS - Reuses the *entire* existing audio engine (`ensureAudioCtx`, `AudioSettings`, the 13-channel grid, master mute, servo-click relay) — this is parameterization + a few new sources, **not** a rewrite (Protocol 22). Each new source follows the Protocol 7 checklist. - Consumes **WU-F5 radio**, **B2c hardware SFX**, and the **thermal-load hum** already wired to API calls. `⏱ Effort: M (F-1) / M–L (F-2, per verb) · ⚡ Impact: ★★★★ · ⚑ Risk: [a11y][scope] — must respect master-mute + per-channel opt-out + not become always-on · ✅ offline (all synth), opt-in-respecting` > **★ SIGNATURE MOMENT (Area F):** each machine **sounds like itself** — NV's hum crackles like a > scavenged uplink, FO4's is an unnervingly clean tone — and every physical action (seat a > cartridge, tune a subsystem, turn the dial) has its own foley. You can tell which machine you're > on with your eyes closed. --- ## 8. AREA G — MOBILE-NATIVE IMMERSION (the phone AS the device) **Current reality:** the desktop shell is gated on `(min-width:1000px) and (hover:hover) and (pointer:fine)`; mobile is a stacked single column with a sticky tab bar. Mobile *works* but is "the desktop app, narrower." The phone is the biggest opportunity in the whole overhaul: **held in the hand, it can literally BE the Pip-Boy / terminal.** ### (a) EXPANDED IDEAS **G-1 · THE PHONE IS THE DEVICE.** On mobile, the machine's **casing fills the screen edges** — the bezel (§1.1) becomes the phone's frame, so you're literally holding the terminal. FO3 especially: the Pip-Boy wrist casing wraps the viewport; you're holding a Pip-Boy. This is the single most powerful mobile idea and it's *native to a phone in a way it can't be on desktop*. **G-2 · HARDWARE CONTROLS AS THUMB-ZONE PHYSICAL BUTTONS.** The bezel's subsystem selector, dial, and latches sit in the **thumb reach zone** at the bottom — operated like real device buttons, not tapped like web links. Big tap targets (≥28px), no hover-dependence. **G-3 · DEVICE-MOTION & HAPTICS AS INPUT (the Pip-Boy fantasy).** - **Haptics** (already wired, WU-F2) do more: a *seat* thunks, a *fault* buzzes, an *incoming intercept* pulses. - **Optional device-tilt** parallax on the bezel/glass (DeviceOrientation, opt-in, reduced-motion off) — the light on the casing shifts as you tilt the phone. Pure wow, strictly optional. - **Wake Lock** (WU-F1) keeps the "device" lit — already there. **G-4 · MOBILE NAV = SLIDE-OVER SUBSYSTEMS.** Subsystems slide over the Overseer home (§A-2) like drawers on a handheld, not stacked panels. One subsystem visible at a time, swipe/tap between — a *handheld* interaction, not a scroll-a-long-page webpage. ### (b) RECOMMENDATIONS - **G-1 (casing fills the edges) is the mobile signature** — recommend strongly. It's what makes the phone build feel like the *actual device* and it's the biggest differentiator from "responsive webapp." - **G-4 (slide-over subsystems)** should be the mobile expression of the §A nav model — recommend as the mobile IA. - **G-3 device-tilt is a delightful opt-in** — ship it as a Module-Bay chip, off by default, reduced-motion/perf aware. Don't make anything depend on it. - **HARD: none of this may break the PWA** — installable, standalone, offline all intact. The casing is CSS chrome, not a new shell. ### (c) NEW FEATURES / ELEMENTS - **Edge-filling per-game casing** (mobile bezel). - **Thumb-zone hardware control cluster.** - **Extended haptic vocabulary** (per §1.2 verb). - **Opt-in device-tilt parallax** chip. - **Slide-over subsystem drawers.** ### (d) BUILDING ON CURRENT IDEAS - Builds on the shipped mobile invariants (Protocol 17: ≥16px inputs, ≥28px targets, no 360px overflow), **WU-F1 wake lock**, **WU-F2 haptics**, and the existing responsive breakpoints. - The **centering rule (§0.4)** matters most here — narrow grids (chips, macro pad, save slots) must center their last-row remainder so mobile never shows an off-center gap. `⏱ Effort: L · ⚡ Impact: ★★★★★ (on mobile) · ⚑ Risk: [mobile][perf][pwa][a11y] — must not overflow 360px, must not break standalone/offline, tilt must be opt-in + reduced-motion · ✅ mobile+desktop both work (differ intentionally), PWA-intact, ≥28px targets` > **★ SIGNATURE MOMENT (Area G):** on a phone, the **casing fills the screen edges** and you are > physically holding the Pip-Boy / terminal — tilt it and the light plays across the chassis. --- ## 9. AREA H — FIRST-BOOT / GAME-SWITCH CEREMONIES (Unlock 4) **Current reality:** boot is a ~2–3s POST sequence (3 flavors), and `onGameContextChange()` does a hard `location.reload()` on game switch. First-boot is gated by `robco_booted_before`. The Module Bay has a first-visit hatch ceremony (the proof-of-concept that ceremonies work). Game-switch is currently a *jarring reload* — the biggest wasted ceremony opportunity in the app. ### (a) EXPANDED IDEAS **H-1 · COLD-START: "THIS UNIT HAS NEVER BEEN POWERED ON."** The once-per-device first boot becomes a real **salvage-and-power-on ceremony**: a cold tube warming up, a RobCo corporate handshake, memory count, a "NO PRIOR OPERATOR ON RECORD — INITIALIZING" — then the machine *chooses/greets its operator*. This is the "unboxing a 200-year-old terminal" moment. Per-game flavored (§B signatures: NV modem-handshake, FO3 Vault-Tec POST, FO4 holo-assembly). **H-2 · GAME-SWITCH AS A CARTRIDGE SWAP (kill the raw reload).** Switching FNV↔FO3 stops being a white-flash reload and becomes **ejecting one data cartridge and seating another**: the current machine powers down (§I SHUTDOWN motion), a cartridge ejects with a *clunk*, the new game's cartridge seats with a *thunk-and-spin*, and the *new machine boots in its own identity* (§B). The reload still happens under the hood (data-layer requirement) — it's just *wrapped* in a ceremony so it reads as swapping hardware, not refreshing a page. **H-3 · THE OPERATOR HANDSHAKE.** First boot (or new campaign) does a brief diegetic "operator clearance" beat — not real auth (Protocol 30/31 untouched), just a roleplay handshake that seats you as the Courier / Lone Wanderer / Sole Survivor. Skippable, persistent (never nags after the first). **H-4 · NEW-CAMPAIGN CEREMONY.** `WIPE TERMINAL → NEW CAMPAIGN` currently double-confirms and wipes. Wrap the *aftermath* in a purge-and-reinitialize ceremony (the machine scrubs itself and cold-boots fresh) so starting over *feels* like a fresh unit, not a form submit. (The destructive confirm gate stays exactly as-is — ceremony is cosmetic, on top.) ### (b) RECOMMENDATIONS - **H-2 (cartridge-swap game-switch) is the highest-impact ceremony** — it turns the app's ugliest transition (a raw reload) into a signature moment, and it *sells* the per-game-machine concept every time you switch. Recommend strongly. - **H-1 (cold-start) is the emotional front door** — recommend; it's the first thing a new user sees and it sets the entire fiction. Build on the existing cold-boot flavor. - **Keep all ceremonies SKIPPABLE + reduced-motion-instant + never-nag.** A ceremony that can't be skipped becomes friction on the 100th boot. Persist "seen it" (device pref). - **The data-layer reload/save paths are untouched** — ceremonies wrap them, never alter them (save layer is sacred). ### (c) NEW FEATURES / ELEMENTS - **Cold-start salvage ceremony** (per-game). - **Cartridge eject/seat game-switch** wrapping `onGameContextChange`. - **Operator handshake** (roleplay, non-auth). - **New-campaign purge-and-reinit** cosmetic wrapper. - **"Seen ceremony" device flags** (skippable/never-nag). ### (d) BUILDING ON CURRENT IDEAS - Builds on **WU-F6 boot flavors**, the **Module Bay hatch** (ceremony proof), the existing first-boot gate, and **IMMERSION #11 (diegetic cold-boot onboarding)**. - H-2 wraps the *existing* `onGameContextChange()` reload — no change to the switch mechanics or the per-game data load, just choreography around it. `⏱ Effort: M–L · ⚡ Impact: ★★★★★ · ⚑ Risk: [scope][a11y][pwa] — must be skippable, reduced-motion -instant, and must not delay/replace the real reload+data-load · ✅ save-boundary (cosmetic only), reduced-motion, PWA (reload path intact)` > **★ SIGNATURE MOMENT (Area H):** switching games is a **cartridge swap** — the current machine > powers down, a data cartridge *ejects with a clunk*, the next seats with a *thunk*, and a > *different machine boots up* in front of you. --- ## 10. AREA I — MOTION & MICRO-INTERACTIONS **Current reality:** ~20 `@keyframes` (flicker, refresh-bar, header-pulse, rad-pulse, vats-scan, map-blink, badge-pop, karma flashes, crit-hp-flash, boot type-out) — all now reduced-motion-gated (WU-C1). Panel toggles, tab switches, chip pulls, dial cycles all have some feedback. The motion is *present* but *generic* — it doesn't yet speak the §1.2 per-game language. ### (a) EXPANDED IDEAS **I-1 · EVERY INTERACTION SPEAKS A MOTION VERB (§1.2).** Systematize it: seating a chip, loading a cartridge, committing a stat, adding an item, completing a quest — each maps to SEAT / SWEEP / WAKE / FAULT / BREATHE, tuned per game. No more generic transitions; every action *feels* like operating that specific machine. **I-2 · PHYSICAL STATE TRANSITIONS.** When a value changes it *moves like hardware*: HP bar drains with a phosphor lag, a level-up *sweeps* the screen, a faction cross *jolts*, a limb cripple *sags* (the weight-sag keyframe already exists — extend the vocabulary). Reduced-motion collapses each to its instant final state. **I-3 · FOCUS AS A TRAVELING LIGHT.** Keyboard/selection focus is a *phosphor sweep that travels* between elements (per-game texture) — not a static outline. (Keep the literal `:focus-visible` outline underneath for a11y.) **I-4 · THE CENTERING RULE AS MOTION-SAFE (§0.4 tie-in).** When a grid's last row re-centers (e.g., after deleting an item leaves an odd remainder), the re-center *animates* gently (items glide to center) rather than snapping — so the centering reads as intentional, not a reflow glitch. Reduced-motion → instant recenter. ### (b) RECOMMENDATIONS - **I-1 (verb systematization) is the cohesion payoff** — recommend building it as a small class/token system so all three machines share the grammar. This is what makes 2–3× bolder feel *designed* rather than *busy*. - **I-2/I-3 are polish that punches above its weight** — recommend, but sequence after the structural areas. - **Discipline: motion serves legibility.** Never animate text into illegibility; every verb has a reduced-motion resting state; low-power/coarse-pointer can dial motion down. ### (c) NEW FEATURES / ELEMENTS - **Motion-verb token/class system** (SEAT/SWEEP/WAKE/FAULT/BREATHE × per-game texture). - **Physical value-transition set** (HP lag, level sweep, faction jolt, limb sag). - **Traveling-light focus.** - **Animated re-center** for the centering rule. ### (d) BUILDING ON CURRENT IDEAS - Extends the existing keyframe library + WU-C1 reduced-motion gating + WU-C2 `:focus-visible`. - Ties every §A/§C/§H/§K interaction into one motion vocabulary (§1.2). `⏱ Effort: M (system) / S each (per verb) · ⚡ Impact: ★★★★ · ⚑ Risk: [perf][a11y] — reduced-motion + legibility discipline · ✅ reduced-motion resting states, AA legibility` > **★ SIGNATURE MOMENT (Area I):** focus **travels as a phosphor sweep** and every commit > *seats with a thunk* — the whole interface moves like hardware, in each machine's own hand. --- ## 11. AREA J — EMPTY / LOADING STATES **Current reality:** empty states are being canonized (`ARCHIVE EMPTY` / `NO ENTRIES IN MEMORY` / `NO ACTIVE DIRECTIVES`) but many are still sentence-case generic ("No perks acquired", "Loading saves…", "No matches"). Loading is mostly instant (offline) except AI calls (a wait) and cloud pulls (`RETRIEVING ARCHIVES…`). These are the *seams* where the fiction most often slips. ### (a) EXPANDED IDEAS **J-1 · EMPTY STATES ARE THE MACHINE TELLING YOU IT'S EMPTY, in character.** Not "No items" — `> BACKPACK SENSOR RETURNS NO MASS · ARCHIVE EMPTY`. Per-game voiced (`identity` bank): NV wry, FO3 institutional, FO4 clinically precise. An empty screen is a chance for character, not a dead end. **J-2 · LOADING IS A DIEGETIC PROCESS.** Every wait (AI call §C-4, cloud pull, save load, cartridge swap) becomes a *machine process readout* — `DECRYPTING TELEMETRY……… [OK]`, period-leader progress, the Overseer presence animating. No spinners; the machine is *doing work you can watch*. **J-3 · FIRST-TIME EMPTY = AN INVITATION.** A brand-new campaign's empty panels *invite* the first action in character — `NO DIRECTIVES ON FILE · AWAITING FIRST TRANSMISSION FROM THE DIRECTOR`. Onboarding hidden inside empty states, no tutorial modal needed. ### (b) RECOMMENDATIONS - **J-1 + J-2 are cheap, high-consistency wins** — recommend as an early sweep. They close the most frequent "looks like a webapp" leaks and they ride the existing `emptyState()` helper (one place to reframe) + the period-leader loading convention already in boot. - **Per-game voice via `identity`** — same data block as everything else. ### (c) NEW FEATURES / ELEMENTS - **Per-game empty-state voice bank** (`identity.emptyStates`). - **Diegetic loading-process readouts** (period-leader, presence-linked). - **Empty-as-onboarding** invitations. ### (d) BUILDING ON CURRENT IDEAS - Reuses the shared `emptyState()` helper, the canon empty vocabulary (HOUSE_STANDARD §4), the boot period-leader progress style, and the §C Overseer presence for loading. - Absorbs **DIEGETIC_AUDIT MN-7 / MJ-3** (the empty/loading reframes already catalogued). `⏱ Effort: S–M · ⚡ Impact: ★★★ · ⚑ Risk: [none] (copy + a helper) · ✅ diegetic, offline` > **★ SIGNATURE MOMENT (Area J):** an empty backpack says `> SENSOR RETURNS NO MASS` and a loading > screen *decrypts telemetry you can watch tick* — the machine is never idle-blank, it's always > *doing something*. --- ## 12. AREA K — DEVICE CHROME / PHYSICALITY (Unlock 5) **Current reality:** a `.crt-overlay` (scanlines + refresh bar + flicker + vignette) over a flat webpage. No bezel, no casing, no device body — the "physicality" is a screen filter, not a machine. This is §1.1 made concrete and it's where "the whole app is a physical device" lives. ### (a) EXPANDED IDEAS **K-1 · THE BEZEL / CASING (the core of §1.1).** Render the machine's *body* around the screen — per-game material (NV scavenged plates, FO3 Vault-Tec molding, FO4 seamless glass), with real hardware *on* it: the subsystem selector, the immersion dial, the power lamp, the cartridge slot, hardware-life LEDs. The single biggest "device not webpage" move. **K-2 · SCREEN CURVATURE + GLASS DEPTH.** Subtle convex glass (frame vignette + edge barrel), a faint reflection sheen, the phosphor sitting *behind* glass. Reduced-motion/low-power static. Never distorts text. **K-3 · THE CARTRIDGE SLOT (ties §H-2, §K, saves).** A physical slot on the bezel where the *game cartridge* seats (per-game), where *save cartridges* load/eject, and where the game-switch ceremony (§H-2) plays out. Saves stop being a list of buttons and become *cartridges you handle*. **K-4 · CUSTOM CURSOR (§1.1).** Per-machine cursor (amber block / Pip-Boy reticle / Institute pointer); system-cursor fallback on touch. **K-5 · THE POWER STATE IS PHYSICAL.** The existing SHUTDOWN→OFF + power-on button becomes a real *powered-off device* — dark glass, a single standby LED, the `▶ PRESS TO POWER ON` as a physical button on the bezel. (The A3 shutdown-crt + power-on affordance already exist — this dresses them as hardware.) ### (b) RECOMMENDATIONS - **K-1 (bezel/casing) is THE physicality investment** — recommend as a flagship, desktop-first (where the space exists) with a disciplined mobile expression (§G-1, casing → edge band/frame). Heavy Protocol-10/17 render burden (3 machines × 3 breakpoints); budget for it. - **K-3 (cartridge slot) unifies saves + game-switch + physicality** into one satisfying object — recommend; it makes §H-2 land and gives saves a diegetic home. - **K-2/K-4/K-5 are the finishing coats** — recommend, all reduced-motion/perf/touch-aware. - **HARD guardrail: none of the chrome may break the PWA or overflow mobile.** Chrome is CSS around the app, not a new container; standalone/offline/installable stay intact. ### (c) NEW FEATURES / ELEMENTS - **Per-game bezel/casing chrome** (with live hardware controls on it). - **Curved-glass frame + reflection layer.** - **Cartridge slot** (game + save cartridges). - **Custom cursor set.** - **Physical power-off/standby dressing.** ### (d) BUILDING ON CURRENT IDEAS - Builds on the `.crt-overlay`, the A3 SHUTDOWN/power-on affordance, the Module Bay (which becomes the CHASSIS accessed *through the bezel*), and the per-game `identity`/`framing` hooks. - The **centering rule** governs how hardware controls array on the bezel (an odd control count centers). `⏱ Effort: XL · ⚡ Impact: ★★★★★ · ⚑ Risk: [perf][mobile][a11y][pwa][scope] — heaviest render-verify surface in the overhaul; must not overflow 360px or break standalone · ✅ mobile+desktop (differ), PWA-intact, reduced-motion, no-text-distortion` > **★ SIGNATURE MOMENT (Area K):** the webpage disappears — you're looking at a **physical machine > with a body**: a bezel you can read at a glance, a dial you turn, a cartridge slot, glass with > depth. The "site" is gone; the *device* is all that's left. --- ## 13. RE-EXAMINING EVERY REMAINING SURFACE (nothing left behind) The areas above are the big movements. Per the brief, **every** surface from the inventory gets an overhaul touch — including the just-shipped Module Bay (baseline, not frozen). Compact treatment here; each rides the §1–§12 language. ### 13.1 THE MODULE BAY / SETTINGS (re-examined — baseline, not frozen) - **It's already the bar — so make it the CHASSIS subsystem (§A) accessed through the bezel (§K), not a tab-buried panel.** Keep the boards/chips/dial exactly (they're perfect); reframe *entry* as opening the machine's service hatch *from the device body*. - **Apply the centering rule to the chip grid + tube rack + tool tray** — the 13-chip grid's last row and the 7-tube rack must center their remainder (7 tubes = one leftover → centered). - **Per-game bezel material** flows into the bay's chassis view. - `⏱ S–M · ⚡ ★★★ · ⚑ [none] · ✅ Protocol 25 (reframe entry, don't relocate controls)` ### 13.2 BIO-METRICS / SPECIAL / BIO-SCAN & LIMB STATUS (the OPERATOR subsystem) - The `[████] OK / [▒▒▒▒] CRIPPLED` limb readout is already diegetic gold — extend it: the whole BIO-METRICS panel becomes a **medical telemetry readout** on the machine, SPECIAL as *tuning gauges*, HP/rads as *live meters* with physical drain motion (§I-2). - Limb cripple already sags + sounds — tie to §I/§F verbs. - `⏱ M · ⚡ ★★★★ · ⚑ [a11y] · ✅ ARIA literal underneath` ### 13.3 SKILL MATRIX / SKILL BOOKS / MAGAZINES / PERKS / TRAITS - Skills become a **tuning matrix** (physical sliders/gauges); the tracker rows stay but read as *punch-card / index-card* records seated in the machine. Books/magazines = *microfiche* you file. - Centering rule on the skills grid. - `⏱ M · ⚡ ★★★ · ⚑ [none] · ✅ game-agnostic (FNV/FO3 skill sets differ)` ### 13.4 BACKPACK INVENTORY / AMMO / COLLECTIBLES / CRAFTING / BARTER (the OPERATIONS subsystem) - Inventory = a **cargo manifest** on the machine; type badges become physical tags; USE/DELETE are *hardware actions*. Ammo = *reserve gauges*. Collectibles = *display case*. - BARTER (§already native) + CRAFTING get diegetic "workbench terminal" framing. - Centering on the inventory filter row + collectible grid. - `⏱ M–L · ⚡ ★★★ · ⚑ [mobile] (dense lists) · ✅ mobile overflow discipline` ### 13.5 SQUAD STATUS - Companion rows become **crew-manifest cards** with the affinity bar as a *signal-strength meter*; the +/- affinity nudges are physical dials. `⏱ S–M · ⚡ ★★★ · ⚑ [none]` ### 13.6 FACTION STANDING / KARMA CENTER (per-game) - Faction rep = a **standing board** with physical fame/infamy meters; the ±5 nudges are dials. Karma (FO3) = a single centered gauge. Reputation crossings jolt (§I-2) + sound (§F). - Centering rule: FO3 shows Karma (one gauge → centered); FNV shows the faction board. - `⏱ M · ⚡ ★★★ · ⚑ [none] · ✅ game-agnostic (FNV factions vs FO3 karma)` ### 13.7 QUEST LOG / DATABANK / CAMPAIGN NOTES (the DATABANK subsystem) - Quests = **active-directive strips** with physical status flags (ACTIVE lit / COMPLETE / FAILED). Databank = the machine's **reference terminal** (already a good native surface). Notes = an *operator's logbook*. `⏱ M · ⚡ ★★★ · ⚑ [none]` ### 13.8 OVERSEER'S LOG / SESSION STATS (→ SYSTEM STATUS, §E-3) - Fold into the SYSTEM STATUS machine-vitals surface (§E-3): device telemetry + campaign stats as *hardware gauges + a running log*. `⏱ M · ⚡ ★★★ · ⚑ [none] · ✅ device/save boundary preserved` ### 13.9 WORLD MAP / WORLD GRID - The parked **RECON GRID rework** (radar sweep, coord-placed cells, tap-to-travel, fog-of-war) is the right move — a real **spatial recon screen**, not a scroll list. Radar sweep = a §1.2 SWEEP verb. Centering rule on the grid's last row. - `⏱ L · ⚡ ★★★★ · ⚑ [mobile][a11y] — 6×6 tap grid at 360px is the known hard problem; needs zoom-to-region · ✅ mobile tap targets ≥28px` ### 13.10 CAMPAIGN CONFIGURATION (game/playstyle/RNG/wipe) - Campaign config **stays campaign-side** (not device hardware — boundary), reframed as the *cartridge's configuration plate*. Game-switch → §H-2 cartridge ceremony. WIPE → §H-4 (confirm gate untouched). `⏱ M · ⚡ ★★★ · ⚑ [save-boundary] · ✅ confirm gates intact` ### 13.11 ACCOUNT / CLOUD (UPLINK framing) - Reframe auth copy diegetically (DIEGETIC_AUDIT MJ-2: `ESTABLISH GOOGLE UPLINK` / `UPLINK ACTIVE`) — **mechanics untouched (Protocol 30/31, popup-only, redirect banned)**. Cloud saves = *remote archive cartridges*. `⏱ S–M · ⚡ ★★ · ⚑ [auth] — copy only, no mechanic change` ### 13.12 SAVES / IMPORT / EXPORT / BACKUP / EJECT HOLOTAPE - Saves become **cartridges in the slot (§K-3)**; export/import = *holotape eject/insert*; backup = *redundant archive*. The `.txt/.md/.html` exports = *printouts*. **Save integrity path untouched** — pure reframing over the sacred layer. `⏱ M · ⚡ ★★★ · ⚑ [save-boundary] · ✅ sacred save layer not touched` ### 13.13 COMM-LINK CHAT / MACRO PAD / NATIVE TERMINALS (VATS/THREAT/TRADE/LOOT/CONSULT/BIO-SCAN/TERMLINK) - The chat becomes the **Overseer presence (§C)**; the macro pad + native terminals become the machine's **console command deck** (physical labeled keys). VATS/THREAT/etc. modals get diegetic "subsystem overlay" framing. Centering rule on the 2×2 macro grid + terminal button rows. - `⏱ M–L · ⚡ ★★★★ · ⚑ [none] · ✅ Protocol 22 (reuse routers)` ### 13.14 MODALS (sysModal / update / help / changelog / save-help) - All modals become **machine dialog overlays** (the machine surfacing a subsystem), per-game framed. The **update modal** stays a deliberate blocking exception (Suite 65). Changelog = *FIRMWARE REVISION LOG* (already framed). `⏱ S–M · ⚡ ★★ · ⚑ [none]` ### 13.15 HEADER / UPTIME / VERSION / TAB BAR - The header + uptime + version migrate onto the **bezel telemetry line (§A-4/§K)**; the tab bar becomes the **bezel subsystem selector (§A)**. This is where "the chrome stops being a web header" happens. `⏱ M · ⚡ ★★★★ · ⚑ [mobile] · ✅ keep hotkeys + a11y` --- ## 14. CROSS-CUTTING — QUICK WINS SHORTLIST (low-effort, high-payoff, land early) Order = build-early candidates that de-risk and *show* the direction fast: 1. **Per-game sonic identity (§F-1)** — parameterize the existing synth into `identity.audio`. `⏱ S–M · ⚡ ★★★★`. The three machines instantly *sound* different. 2. **Per-game empty-state + loading voice (§J-1/J-2)** — one `emptyState()` reframe + period-leader loaders. `⏱ S–M · ⚡ ★★★`. Closes the most frequent "webapp" leaks. 3. **Bezel telemetry "you are here" line (§A-4)** — a status line. `⏱ S · ⚡ ★★★`. 4. **VOX opt-in voice chip (§C-3)** — SpeechSynthesis behind a Module-Bay chip. `⏱ S · ⚡ ★★★★` (huge wow-per-byte) *once the presence exists*. 5. **Custom cursor per machine (§K-4)** — CSS, touch-fallback. `⏱ S · ⚡ ★★★`. 6. **Motion-verb tokenization (§I-1) as a class system** — front-load the grammar so every later area inherits it. `⏱ M · ⚡ ★★★★`. 7. **Centering-rule sweep (§0.4)** — apply to existing chip/tube/macro/save/map grids. `⏱ S · ⚡ ★★★` (owner-locked rule; cheap, visible correctness). 8. **Deeds-as-news templates (§D-2)** on the live Ambient Runtime — read-only, no new substrate. `⏱ M · ⚡ ★★★★`. --- ## 15. CROSS-CUTTING — CUT / SIMPLIFY LIST (trim, don't only add) Being bold means also *removing* scope that's redundant, over-engineered, or gimmick-risk: 1. **CUT day/night / dusk-dawn cycle entirely** — owner already removed it; don't let it creep back into §D. Weather (rad-storms) only. 2. **SIMPLIFY the FO4 machine to design-spec + data block this cycle** — do NOT build the holographic renderer now. Prove the abstraction; build at 3.0. (Charter-aligned.) 3. **CUT the standalone SESSION STATISTICS surface** — already merged into Overseer's Log; fold fully into SYSTEM STATUS (§E-3), don't maintain two telemetry homes. 4. **SIMPLIFY emergent-wear (§E-1) to a whisper** — a long, subtle ramp with 2–3 stages, not a granular per-hour system. The gimmick risk outweighs granularity's value. 5. **DON'T over-build the filesystem nav (§A-3) as the ONLY route this cycle** — ship it as a power-user command layer; promoting it to primary IA is a 3.0 decision (discoverability/mobile risk). 6. **CUT device-tilt parallax (§G-3) from the critical path** — keep it as an off-by-default chip; never let anything depend on it. 7. **SIMPLIFY hardware quirks (§E-2) to a tiny curated set** — a handful of tasteful quirks, not a quirk engine. Overdone = "the app is broken." 8. **DON'T re-open the Module Bay's internal board/chip/dial design** — it's the bar; re-frame its *entry* and *housing* (§13.1), leave the boards themselves alone (Protocol 25 muscle memory). 9. **AVOID per-game FONTS** (GAME_THEMING SKIP) — fragments the diegetic voice; phosphor + framing + material carry identity, not typefaces. 10. **RESIST making the Overseer presence heavy** — a canvas waveform, not a rigged 3D avatar. The presence's *behavior* (idle/think/speak) matters more than fidelity, and it must stay reduced-motion + perf-safe. --- ## 16. CROSS-CUTTING — SIGNATURE MOMENTS (one per area/game, at a glance) | Area / Machine | THE defining moment | |---|---| | **A · Navigation** | Tab bar dies → **illuminated bezel subsystem buttons**; switching *sweeps* like tuning a channel. | | **B · NV machine** | The **MOJAVE UPLINK modem-handshake** — a salvaged terminal dialing into the wasteland. | | **B · FO3 machine** | The **Pip-Boy wrist casing** wrapping the screen — a device held to your face. | | **B · FO4 machine** | The **holographic assembly boot** — UI coalescing from projected light, silent (3.0 build). | | **C · Overseer** | The AI **grows a face** — a waveform that listens, spikes, and speaks in each game's voice. | | **D · Living world** | The machine **echoes your deeds back as wasteland news** — the world noticed you. | | **E · Hardware Life** | A faint **phosphor burn-in ghost** of the header — your terminal wears your hours. | | **F · Sound** | Each machine **sounds like itself**; every physical action has its own foley. | | **G · Mobile** | The **casing fills the screen edges** — you're physically holding the Pip-Boy. | | **H · Ceremony** | Game-switch is a **cartridge swap** — eject, seat, a different machine boots. | | **I · Motion** | **Focus travels as a phosphor sweep**; every commit *seats with a thunk*. | | **J · Empty/Loading** | Empty backpack: `> SENSOR RETURNS NO MASS`; loading *decrypts telemetry you watch tick*. | | **K · Physicality** | The webpage vanishes — you're looking at a **physical machine with a body**. | --- ## 17. CROSS-CUTTING — INTERCONNECTIONS & COHESION (how it all reinforces) The overhaul is not 12 features — it's **one machine** with parts that feed each other: - **`GAME_DEFS[ctx].identity` is the spine** (§B). Every area reads from it: bezel material (§K), Overseer persona (§C), motion texture (§I), audio params (§F), empty-state voice (§J), boot ceremony (§H), structural mode (§B FO4). *One data block per machine → the whole site re-skins coherently.* This is the architectural keystone; get it right and everything else is a consumer. - **The Ambient Runtime is the heartbeat** (§D/§E/§C-5). The living world, hardware life, and the Overseer's idle presence are all *observers* on the one runtime that already ships — dial-gated, no-durable-write. One substrate, many atmospheric consumers. - **The motion-verb grammar (§1.2) + the bezel (§1.1) are the cohesion glue.** Three machines feel like one product line because they share SEAT/SWEEP/WAKE/FAULT/BREATHE and the same bezel *grammar* — only the *texture/material* differs. - **The cartridge slot (§K-3) unifies** game-switch (§H-2), saves (§13.12), and physicality (§K) into one object you handle. - **The Overseer presence (§C) is where the AI, the living world, and loading states all visibly converge** — it listens (§C), it receives intercepts (§D), it animates while thinking (§J), it idles alive when quiet (§E). It's the emotional center that ties reactive and ambient layers together. - **The centering rule (§0.4) is a house-wide correctness pass** touching every grid — a small, constant discipline that makes the whole thing read as *designed*. - **HOUSE_STANDARD voice + the diegetic/literal split** run under everything so cohesion never costs accessibility. **The through-line in one sentence:** *one company's hardware, three salvaged machines, each alive, each with a face and a body and a voice — and it all runs on the systems already built.* --- ## 18. CROSS-CUTTING — ALIGNMENT + RISK LEDGER (every area, checked against the held constraints) | Area | Player-authority | Free/Offline | PWA-intact | Mobile+PC | Save-sacred | Diegetic | Top risk | |---|---|---|---|---|---|---|---| | A · Nav | ✅ router reuse | ✅ | ⚠ must keep deep-links/back/hotkeys | ⚠ mobile slide-over | ✅ | ✅ | **[scope]** load-bearing IA | | B · Machines | ✅ | ✅ | ✅ | ⚠ 3×3 render matrix | ✅ | ✅ | **[scope][mobile]** | | C · Overseer | ✅ presentation only; AI still opt-in | ✅ presence works keyless | ✅ | ✅ | ✅ writes nothing | ✅ | **[perf][a11y]** canvas + aria | | D · Living world | ✅ changes nothing you didn't | ✅ deterministic | ✅ | ✅ | ✅ **no-durable-write invariant** | ✅ | **[save-boundary][perf]** | | E · Hardware Life | ✅ | ✅ | ✅ | ✅ | ✅ device state only | ✅ | **[a11y]** gimmick/reduced-motion | | F · Sound | ✅ | ✅ all synth | ✅ | ✅ | ✅ | ✅ | **[a11y]** opt-in/master-mute | | G · Mobile | ✅ | ✅ | ⚠ **must not break standalone** | ✅ native | ✅ | ✅ | **[pwa][mobile][perf]** | | H · Ceremony | ✅ cosmetic | ✅ | ⚠ wraps reload, mustn't replace it | ✅ | ✅ save paths intact | ✅ | **[a11y]** skippable/never-nag | | I · Motion | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | **[a11y]** reduced-motion/legibility | | J · States | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | **[none]** | | K · Chrome | ✅ | ✅ | ⚠ **CSS around app, not a new shell** | ⚠ no 360 overflow | ✅ | ✅ | **[perf][pwa][mobile][scope]** | **Legend:** ✅ clean · ⚠ needs explicit care (named). No area is red; every ⚠ has a stated mitigation in its section. The two constraints to watch hardest across the whole overhaul: **PWA-intact** (§G/§K/§A — chrome and nav are CSS/routing over the working shell, never a replacement) and the **atmosphere↔save boundary** (§D/§E — gate-guarded no-durable-write, as the parked plans already require). --- ## 19. TOP RECOMMENDATIONS (if the owner builds a subset, build these) In priority order — the spine that delivers "total transformation" with the least wasted motion: 1. **`GAME_DEFS[ctx].identity` — the expanded per-machine data spine (§B).** Everything else is a consumer; do this first and right. *Without it the overhaul fragments.* 2. **The bezel / device chrome (§K-1) + the subsystem-nav reframe (§A-1/A-2).** Together these are what make it *stop looking like the same site* — the headline transformation. 3. **The Overseer presence (§C-1/C-4) with per-game personas (§C-2).** Turns "a chat box" into "an entity." The emotional center. 4. **The cartridge-swap game-switch ceremony (§H-2) + cartridge slot (§K-3).** Sells the per-game fantasy every time you switch and gives saves a home. 5. **The Wasteland Uplink deeds-as-news + weather on the live runtime (§D-1/D-2).** The world comes alive; already-built substrate. 6. **Per-game sonic identity (§F-1) + motion-verb grammar (§I-1) + centering-rule sweep (§0.4).** The cohesion layer — relatively cheap, makes the bold moves feel *designed*. 7. **Mobile casing (§G-1).** The phone becomes the device — the single biggest mobile win. **Sequencing logic:** land `identity` (1) → chrome + nav (2) → Overseer (3) as the three structural pillars; then ceremonies (4) and the living world (5) as the atmosphere; then the cohesion/polish layer (6) and mobile physicality (7) throughout. FO4 stays design-only, validating the spine. --- ## 20. WHAT STAYS SACRED (the "do not touch" list, restated for the builder) - The `robco_v8` container, migrate/sanitize path, and every save/cloud mechanic — **skinned, never altered.** - The Tri-Node AI contract + opt-in/non-authoritative posture — **presented, never changed.** - Popup-only auth (redirect banned), guarded anonymous sign-in — **reframed in copy only.** - The PWA (installable / offline / service worker / standalone) — **wrapped in chrome, never replaced.** - The accessibility floor — **carried under every diegetic skin.** - The Ambient Runtime's no-durable-write boundary — **the load-bearing invariant of the whole atmospheric layer.** --- *END — DESIGN_OVERHAUL_SLATE.md. Ideation only. No app code written, nothing committed or pushed. `planning/` is gitignored. This is a menu for the owner — nothing here is decided.*
STAMP · generated for RELEASE v2.8.5 commit 06e5180 (06e51801b38a) · archive input-tree hash c07fbfbdd2e1ddeb · 754 files · no wall-clock timestamp (regenerates identically when nothing changed).