From 21057c398f9468b0dec7f4e024e9989ab3b2ef95 Mon Sep 17 00:00:00 2001 From: dev Date: Fri, 5 Jun 2026 23:21:14 +0200 Subject: [PATCH] =?UTF-8?q?feat(demos):=20capstone=20=E2=80=94=20/temas/or?= =?UTF-8?q?questa=20+=20CHANNELS=5FSYNTHESIS=20(one=20event,=20N=20channel?= =?UTF-8?q?s)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The book thesis, playable: ONE press fires the firma across channels, with a mixer to mute each and watch them layer. The 4 visible channels (color · motion · depth · shape) compose from one event with REAL eidos tokens — verified: press -> primary->affirm-solid + scale(0.93) + shadow overlay->raised + --shape-smoothing 2->3.4. Sound + haptic via Web Audio / Vibration (in-app the sema engine emits them from the same event). + the two-moment model section. CHANNELS_SYNTHESIS.md ties the five channel RFCs: two moments x N channels from one event, the layer ownership (sema runs sound/haptic + projects data-event-*; eidos materializes the visual channels), the cross-modal firma, the runtime-builder quintet. Verified: check 0 errors. Browser: all four visible channels compose on press. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/uix/eidos/CHANNELS_SYNTHESIS.md | 81 +++++++ web/routes/temas/orquesta/+page.svelte | 281 +++++++++++++++++++++++++ 2 files changed, 362 insertions(+) create mode 100644 src/uix/eidos/CHANNELS_SYNTHESIS.md create mode 100644 web/routes/temas/orquesta/+page.svelte diff --git a/src/uix/eidos/CHANNELS_SYNTHESIS.md b/src/uix/eidos/CHANNELS_SYNTHESIS.md new file mode 100644 index 000000000..b3bc01542 --- /dev/null +++ b/src/uix/eidos/CHANNELS_SYNTHESIS.md @@ -0,0 +1,81 @@ +# Los canales como un solo sistema — síntesis ("Diseñando lo que ocurre") + +> **Capstone** de los RFCs por canal. La tesis del libro *Diseñando lo que ocurre*: una +> interacción **no es** color, ni movimiento, ni sonido — es **un solo suceso perceptual +> repartido en N canales**, bajo el modelo de **dos momentos**. Esto ata +> `COLOR_ENGINE_RFC` · `TYPOGRAPHY_ENGINE_RFC` · `DEPTH_ENGINE_RFC` · `SHAPE_ENGINE_RFC` · +> `STRUCTURE_ENGINE_RFC`. Demo vivo: **`/temas/orquesta`** (el mezclador). + +## 1. El modelo de dos momentos (transversal) + +Todo canal —no solo motion— respeta el mismo eje doble: + +| Momento | Atributo | Qué es | Quién | +|---|---|---|---| +| **estado** | `data-state` | lo que el elemento **es** (persistente): color de reposo, plano, forma, posición | soma / morfo | +| **evento** | `data-event-*` | lo que le **ocurre** (transitorio, durante el `hold`): el tinte que pulsa, la sombra que recede, la esquina que se afirma, el tick, la vibración | sema (proyecta) → eidos (materializa visual) | + +El orden entre ambos lo fija `sequence` (`pre` / `coincident` / `post`). Eidos lee **los dos**: +`presets` sobre `data-state`, `signatures` sobre `data-event-*`. + +## 2. Los 8 canales del libro → sistemas Eidos + +| Canal (libro) | Sistema | RFC / motor | +|---|---|---| +| tiempo + movimiento | **motion** | `arts/motion` + `eidos/lib/motion` (firma + presets) | +| presencia + profundidad | **depth** | `DEPTH_ENGINE_RFC` | +| **forma** | **shape** | `SHAPE_ENGINE_RFC` | +| color | **color** | `COLOR_ENGINE_RFC` | +| sonido | **sema · sound** | `sema/chans/sound` | +| háptica | **sema · haptic** | `sema/chans/haptic` | + +Más el **espacio** (`STRUCTURE_ENGINE_RFC`) — estructural, **solo-estado** (el escenario, no el +suceso): no tiene momento-evento, y eso es deliberado. + +## 3. Quién posee qué (la narrativa de capas) + +- **Sema** ejecuta **2 canales runtime** (`sound` + `haptic`) y **proyecta el meta-canal visual** + (estampa `data-event-*` durante el hold). El motor no conoce DOM/CSS. +- **Eidos** materializa los **canales visuales** (motion · depth · shape · color) reaccionando en + CSS a `data-event-*` + `data-state`. Es el único dueño visual. + +(Narrativa canónica completa en `CLAUDE.md` → "Sema: open channel registry".) + +## 4. La composición — un evento, N canales + +La **firma** (`BUILTIN_SIGNATURES` + `BUILTIN_KEYFRAMES`) es **cross-modal**: un solo keyframe +lleva varias modalidades. Ejemplo real (`press-squeeze`, familia `contact`): + +``` +contact · press → scale 0.96 (motion) + + box-shadow → plano (depth recede) + + --shape-smoothing 2→3 (shape: la esquina se afirma) + + tick (sema sound) + + vibración (sema haptic) +``` + +Un `engine.emit(...)` estampa `data-event-*` (los canales visuales reaccionan) **y** dispara +sound + haptic — desde el **mismo** evento. No hay 6 sistemas coordinándose a mano; hay un +suceso que se expresa en 6 dimensiones. + +## 5. Builders runtime — el quinteto (jaula abierta) + +Cada eje retunable en runtime, mismo patrón (semilla → bloque gestionado), opt-in sobre la +escala authored: + +`applyColorScheme` · `applyTypeScale` · `applyDepth` · `applyShape` · `applySpacing` + +(Futuro: `applyTheme(seed)` que componga varios desde una semilla compartida.) + +## 6. Posición frente a referentes + +Ningún referente reúne los canales bajo **un modelo único**. Material tiene morph de forma + +motion (ad-hoc, sin sonido/háptica integrados); Apple, continuidad + materiales (atado a +plataforma); todos, color. **Eidos los reúne** —los 6 perceptuales + el estructural— sobre el +modelo de dos momentos, disparados desde un evento, con builders runtime y registro abierto. +Eso es el framework, no la suma de sus partes. + +## 7. Demo + +`/temas/orquesta` — el mezclador: pulsa un control y silencia cada canal para oír su parte. Los +4 visibles usan tokens reales; sound + haptic los aproxima el demo (en la app, motor sema). diff --git a/web/routes/temas/orquesta/+page.svelte b/web/routes/temas/orquesta/+page.svelte new file mode 100644 index 000000000..32fefeab0 --- /dev/null +++ b/web/routes/temas/orquesta/+page.svelte @@ -0,0 +1,281 @@ + + +La orquesta · Eidos + +
+
+
+

Eidos · diseñando lo que ocurre

+ +
+

Un evento, seis canales

+

+ Una interacción no es color, ni movimiento, ni sonido — es un solo suceso + perceptual repartido en varios canales, a la vez. Hemos construido los seis. Aquí + tocan juntos: pulsa, y silencia cada uno para oír su parte. +

+
+ + +
+
+

El mezclador

+

+ Pulsa el botón: los canales activos disparan desde un evento. Apaga la forma y la + esquina deja de afirmarse; apaga la profundidad y la sombra no recede. Un instrumento + menos, el mismo gesto. +

+
+ +
+
+ + pulsa → +
+ +
+ {#each CHANNELS as c} + + {/each} +
+
+ +
+ último evento + 1 press → {lastFired.length} canal(es){lastFired.length ? `: ${lastFired.join(' · ')}` : ' — pulsa'} + · + activos{activeCount}/6 + · + presses{pressCount} +
+
+ + +
+
+

Dos momentos, un solo modelo

+

+ Todo canal respeta el mismo rigor: lo que el elemento es (estado, persistente) vs + lo que le ocurre (evento, durante el hold). El mezclador de arriba dispara el + momento-evento; el reposo es el momento-estado. +

+
+
+
+ estado · data-state +

color de reposo · plano de profundidad · forma en reposo · posición. Persistente — soma/morfo.

+
+
+ evento · data-event-* +

el tinte que pulsa · la sombra que recede · la esquina que se afirma · el tick · la vibración. Transitorio — sema, durante el hold.

+
+
+
+ +
+

+ Esto es el framework, no seis sistemas sueltos. Cada canal tiene su motor y + su demo (/temas/{'{'}color · tipografia · profundidad · forma · estructura{'}'}), + pero la tesis del libro es que componen: un evento sema reparte la firma por + motion + depth + shape + color (visual) y sound + haptic (sema), bajo el modelo de dos + momentos. Aquí los cuatro visibles usan tokens reales de eidos; sonido y háptica los + aproxima el demo (en la app los emite el motor sema desde el mismo evento). Ningún referente + reúne los seis canales sobre un modelo único. +

+
+
+ +