diff --git a/packages/core/src/runtime/timeline.ts b/packages/core/src/runtime/timeline.ts index f8246f2e8..bca68a0eb 100644 --- a/packages/core/src/runtime/timeline.ts +++ b/packages/core/src/runtime/timeline.ts @@ -473,6 +473,7 @@ export function collectRuntimeTimelinePayload(params: { targets?: () => Element[]; startTime?: () => number; duration?: () => number; + totalDuration?: () => number; parent?: GsapTween; }; const tlWithChildren = masterTimeline as typeof masterTimeline & { @@ -513,7 +514,9 @@ export function collectRuntimeTimelinePayload(params: { tweenStart += parent.startTime(); parent = parent.parent; } - const tweenEnd = tweenStart + tween.duration(); + const tweenDuration = + typeof tween.totalDuration === "function" ? tween.totalDuration() : tween.duration(); + const tweenEnd = tweenStart + tweenDuration; if (!Number.isFinite(tweenStart) || !Number.isFinite(tweenEnd)) continue; for (const target of tween.targets()) { if (!(target instanceof Element)) continue; diff --git a/packages/studio/data/projects/codex-tetris/DESIGN.md b/packages/studio/data/projects/codex-tetris/DESIGN.md new file mode 100644 index 000000000..d4b6a410e --- /dev/null +++ b/packages/studio/data/projects/codex-tetris/DESIGN.md @@ -0,0 +1,29 @@ +## Style Prompt + +Retro gaming CRT aesthetic. Phosphor green terminal glow on deep space-dark backgrounds. +Pixel-perfect grid layouts with scanline overlays. Neon accents for alerts and scores. +The feeling of a 1989 Game Boy boot sequence crossed with cyberpunk data visualization. +Everything snaps, nothing floats. Digital precision with analog warmth from CRT glow. + +## Colors + +- Background: `#0B0E17` (deep space dark) +- Foreground: `#E8E6E3` (warm white) +- Accent 1: `#00FF41` (phosphor green — primary game UI, grid, cursor trail) +- Accent 2: `#FF2E63` (hot magenta — alerts, score highlights, game over) +- Accent 3: `#08F7FE` (electric cyan — Penrose cursor, UI chrome) +- Grid: `#1a1f2e` (subtle grid lines on tetris board) +- Piece colors: cyan `#08F7FE`, yellow `#FFD670`, purple `#B5179E`, green `#0EAD69`, red `#FF2E63`, orange `#FF9770`, blue `#4E71FF` + +## Typography + +- Display: `"Press Start 2P"` (pixel font for game headers, score, GAME OVER) +- UI/labels: `"JetBrains Mono"` (monospaced for stats, debug text, timestamps) + +## What NOT to Do + +- No gradient text or background-clip effects +- No rounded, soft, or friendly shapes — everything sharp, grid-locked, rectangular +- No warm ambient tones — only brief flashes of warm color on line-clear SFX +- No slow luxury-style motion — everything snappy, digital, precise +- No centered-and-floating web layouts — anchor to CRT frame and grid structure diff --git a/packages/studio/data/projects/codex-tetris/bake-audio.ts b/packages/studio/data/projects/codex-tetris/bake-audio.ts new file mode 100644 index 000000000..9b9142f51 --- /dev/null +++ b/packages/studio/data/projects/codex-tetris/bake-audio.ts @@ -0,0 +1,319 @@ +/** + * Offline audio baking for Codex Tetris composition. + * + * WebAudio synth (oscillators, noise) can't be captured by HyperFrames' + * headless renderer — it only picks up file-based