`--depth-{plane}-scrim` was declared (DepthPlane field, DEPTH_CUES, validation,
applyDepth) but never seeded, emitted or read — a write-surface with no reader
(applyDepth({p:{scrim}}) silently no-op'd; never present in generated base.css).
Analyzed via workflow (state map + 4 dispositions + adversarial stress). The
four collapse to prune vs promote-to-z-parity: wire-and-unify SINKS (contradicts
the test-locked z open-cage precedent + the MD3/Radix/Vaul consensus that the
veil is component-owned, not an elevation cue), relocate flips its verb to
retain, and complete-to-z-parity would mint a third alias of the --color-overlay
backdrop role. Unlike z (kept as an exposed open cage — it varies per plane and
is unpaintable-forever), scrim has no per-plane variance and no value to seed.
Prune: remove scrim from DepthPlane / DEPTH_CUES / validation / emitter +
applyDepth doc. Amend rfc-depth.md (token contract + Phase-4 note + atmosphere
rows), reference.md cue list, changelog, pendiente. The modal veil stays where
MD3/Radix/Vaul + the standing decision put it: --{component}-overlay-* tinted by
--color-overlay.
Zero observable change (never emitted). Tests 71/71; npm run check src/ = 9
baseline, 0 new; base.css unchanged.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
| **layer-4** (`--{c}-{role}-{slot}`) | **KEEP** | Tier deliberado del modelo de 7 capas (`reference.md:387-425`), config-backed. La premisa del audit («sin consumidores», §9:424) es **STALE**: lo consumen banner (06-01), toast (10 tokens `color-mix` sin equivalente en L3), avatar-ring, editable, words + el fallback THM-2. MD3 `comp.*`/SLDS/DTCG mantienen el tier 1:1. El ataque «slim» sobre-generalizó (lo confundió con la purga de font-size de accordion/Field). |
| **jaula depth-z** | **KEEP** (reserved) | Proyección de `--z-index-*` sobre planos; excluido del bundle a propósito (stacking va por `--{c}-content-z`). Deuda real = 1 comentario falso en `render-css.ts:1170` → ✅ **corregido** este pase. |
| **jaula container-queries** | **KEEP** (open cage) | `[data-container]{container-type}` + emisor `@container` por-recipe, ya en `tsc.md` como eje reservado (Tailwind v4 envía CQ en core). Opcional: dogfoodear 1 recipe → «tested end-to-end». |
| **jaula scrim** | ⏳ **decisión de diseño** | Único medio-cableado (write sin reader). El fix «lector en `[data-depth]`» es **incorrecto** (dobla-atenúa el backdrop del componente). (a) completar-consistente — sembrar valor en planos overlay/modal + doc «expuesto, lo consume el backdrop, nunca `[data-depth]`» + test espejo (como depth-z); (b) deprecar-out. Requiere saber si el atmosphere-scrim Fase-4 es un eje real. |
| **jaula scrim** | ✅ **PODADO** (07-12) | Analizado con workflow (mapa + 4 disposiciones + estrés): las 4 colapsan en podar vs promover-a-paridad-z; C (cablear) **se hunde** (contradice el precedente z test-lockeado + consenso MD3/Radix/Vaul), D-reubicar invierte el verbo a retener. **Decisión: podar** — scrim NO gana el open-cage de z (z varía por-plano + es impintable-para-siempre; scrim ni varía ni tiene valor que sembrar, su jaula solo duplicaría `--color-overlay` → alias). Quitado de `DepthPlane`/`DEPTH_CUES`/validación/emisor + `applyDepth` doc; RFC enmendado (contrato + Phase-4 + atmósfera). El veil queda en `--{component}-overlay-*` / `--color-overlay` (= referencia). Cambio observable: cero (nunca se emitió). |
| **cascada-vs-firmas** (motion) | Documentar + fijar por orden | La cascada stagger sombrea la firma genérica en ítems de menú, solo por **orden de emisión** (tie 0,3,0), sin doc ni test. Fijar por orden (NO `!important`, que sabotea una futura `@layer`) + test; `@layer` completo = iniciativa L futura. ⏳ **Decisión de diseño pendiente**: ¿la firma de interacción gana a la entrada residual (Framer) o al revés? — los dos análisis discreparon. **No ejecutado** (para no fijar la dirección equivocada). |
**Límites deliberados registrados** (gap-log §7 — sin código, todos confirmados NO-bug):
One level coheres surface + shadow + z + (blur/scrim) at once. Named by
One level coheres surface + shadow + z + (blur) at once. Named by
**role in the attention hierarchy**, not by millimeters.
2. **Mode-adapted, _computed_ multi-signal mix** — light leans on shadow; dark
on surface tint + halo (the shadow lies in dark). Shadows derived from the
@ -62,8 +62,10 @@ everyone picks a side: Tailwind = flexible **without opinion**; Material =
3. **_Eventful_ depth (the genuinely new part)** — a channel the **sema** engine
fires, like sound/haptic: `emerge`→rises, `contact`→sinks, `signal/threat`→
pushes to the front; coordinated with motion's **two-moments** model.
4. **Atmosphere / presence** — backdrop-blur (frost) + scrim: what is in front
blurs/dims what recedes (overlap with the *presence* channel).
4. **Atmosphere / presence** — backdrop-blur (frost) on the plane; the modal
*veil* is component-owned (`--{component}-overlay-*` / `--color-overlay`), not
a plane cue: what is in front blurs/dims what recedes (overlap with the
*presence* channel).
## 3.bis The two moments of depth
@ -91,7 +93,7 @@ the two moments, never collapsed into one. The depth channel is a new channel
| **planes** | canonical set (5) | the **set is config-driven** (`EidosConfig.depth.planes`); add `sheet`/`peek`, rename — not a closed enum |
| **mix** | computed mix per plane | **retune the mix per plane** in config; **per-component override** of any signal; the **primitives stay** (`--shadow-N`, `z-index`, raw `box-shadow` one step away) |
| **eventful channel** | `emerge↑ / contact↓` | **opt-in/opt-out** (like sound+haptic); rules in **sema's open registry** (declaration merging + appendable cascade → the app adds/overrides the event→depth map); **degrades with `prefers-reduced-motion`**; static depth **works without the channel** (eventful is additive, never a wall) |
| **atmosphere** | frost+scrim on overlays | amount/opacity in config; per-overlay **opt-out** (cost/preference) |
| **atmosphere** | frost (blur) on the plane, opt-in via `data-frost` | amount in config; per-overlay **opt-out**. The modal *veil* is component-owned (`--{component}-overlay-*` / `--color-overlay`), not a plane cue — scrim cue pruned 2026-07-12 |