# NEXT11 V6.22A — Environment plate owns floor / runway markings overlay

Base: **V6.21C WIP**.

## Decision

The sport environment plate is the complete visual world, including the visible floor. The existing 3D runway no longer draws an opaque or tinted floor slab over that world. Only the runway guidance geometry remains above the image floor:

- edge lines
- side ticks
- vertical posts
- sport motif markers

This is deliberately the simplest hybrid architecture: **environment plate = world + floor; runway = markings only**.

## Runtime architecture

- Sport remains the authority for the underlying environment image asset.
- Theme/accent remains the authority for color treatment of that same sport image.
- The environment plate is still loaded inside the Nex / Three.js render world through `NEX_WORKOUT_ENVIRONMENT_BACKDROP_V1`.
- `scene.background` remains a neutral safety clear, not the premium plate.
- Runway geometry/travel/perspective is unchanged.
- Former runway floor mesh remains structurally present to avoid disturbing geometry ownership, but its material opacity is exactly `0`.

## Surgical diff vs V6.21C

Only `assets/js/app.js` is behaviorally changed:

1. runway floor material opacity: previous sport-specific value -> `0`
2. presentation diagnostics add:
   - `environmentPlateOwnsFloor=true`
   - `runwayMarkingsOverlayOnly=true`
   - `runwayFloorOpacity=0`

No camera, travel, IK, resolved motion, model, media routing, exercise profile or timing code was changed.

## Frozen guard

`PASS | core=22 | profiles_locked=18 | motion/model=66`

The frozen manifest differs from V6.21C in exactly one locked hash: `assets/js/app.js`, intentionally relocked for this presentation-only change.

## Real Chromium QA

Actual `preview.html?workout=dynamic-warmup#pass` player, 390×844 viewport, WebGL2 via ANGLE/SwiftShader.

### General Athlete + NEXT Blue

- same sport plate: `general-athlete-environment-premium-portrait.webp`
- environment plate inside Nex world: PASS
- runway floor opacity = 0: PASS
- runway marker meshes remain: 648
- Chromium/WebGL2/SwiftShader: PASS

### General Athlete + Energy Purple

- exact same sport plate: `general-athlete-environment-premium-portrait.webp`
- theme changes only runtime color treatment: PASS
- runway floor opacity = 0: PASS
- runway marker meshes remain: 648
- Chromium/WebGL2/SwiftShader: PASS

## Status

**WIP architecture checkpoint, visually preferred over V6.21C.**

Do not art-lock the final sport worlds yet. Hockey / Football / Downhill still need their own portrait-safe premium source plates, but they should use this exact floor/runway layering architecture.
