- Bottom sheet starts collapsed (handle bar only), swipe up to expand
- Tabs visible when collapsed in puzzle view, content hidden
- Swipe down or tap handle to collapse
- Add usePinchZoom hook: two-finger pinch gesture controls canvas zoom
- Pinch zoom wired into both Sandbox and Puzzle View canvases
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add touch-action: none on canvas to prevent browser scroll hijack
- Single-finger touch on empty canvas now triggers pan (pointerType check)
- Fix page bounce on mobile with position: fixed and 100dvh height
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The zoom panel was offset 220px from the right (legacy offset for a
non-existent right sidebar). Now sits flush at right:12px matching
the puzzle view layout.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add ⌂ button to zoom bar (sandbox + puzzle) that centers camera on
all modules
- Fix sequencer _steps array not growing when step count param increases
(e.g. 8→32 now properly adds new empty steps)
- Make piano roll width dynamic based on bar count (BEAT_PX constant
density instead of fixed ROLL_W)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Module width now adapts to step/bar count so extra steps are never
hidden. Sequencer width scales with numSteps, piano roll width scales
with bar count using a fixed BEAT_PX density.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace shared global Tone.Transport with per-instance Tone.Clock so
multiple sequencers and pianorolls run independently without interfering
with each other's timing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix pianoroll/sequencer Transport not resetting on stop/restart (notes
were scheduled in the past and never fired)
- Stop and cancel Transport in stopAudio() to prevent stale events
- Add zoom +/- buttons to scope widget (6 levels, 64–2048 samples)
- Increase scope analyser buffer from 256 to 2048 for wider time view
- Add vertical grid lines to scope display
- Add "Limpiar" clear canvas button to PuzzleView
- Skip audio-graph connection for keyboard/seq/pianoroll freq→osc freq
(direct frequency setting prevents inaudible ultrasonic values)
- Auto-trigger envelopes without gate connections for noise/ambient levels
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Enhance targetAudio.js with envelope (ADSR), LFO modulation, effects
(delay/reverb/distortion), and retrigger patterns for rhythmic sounds
- Fill in target audio configs for 87 levels (worlds 3-12) that had empty
build arrays, making the "Objetivo" preview button functional everywhere
- Increase base sizes for modules, sidebar, ports, knobs, and typography
so the UI feels less empty at 100% zoom
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace the bypass auto-solve (which just set passed: true on all checks)
with a legitimate solver that loads actual module configurations and
connections via deserialize(), then validates through handleCheck().
Each solution defines the exact modules, parameters, and wiring needed
to pass all 3-star checks for every level across all 12 worlds.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Search by level name, subtitle, ID, or world name. Shows filtered
results as a flat grid with world.level numbering and world color.
Escape key clears search, clear button resets and refocuses input.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Flex children with default flex-shrink:1 were compressing to fit,
hiding the Mision panel content. Force flex-shrink:0 on all sidebar
children so they keep their natural size and the sidebar scrolls.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add adminMode toggle in AdminPanel (green "Admin ON/OFF" button)
- Pass adminMode through GameApp → PuzzleView
- Show purple "🛠 Resolver" button in puzzle toolbar when admin is active
- Auto-solve gives 3 stars instantly and shows completion overlay
- Lets admin skip through all 96 levels for rapid testing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add min-height: 0 to .gm-puzzle-content and .gm-puzzle-sidebar so
flexbox allows shrinking below content size, enabling overflow-y scroll.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add procedural UI sound effects (connect/disconnect, engine start/stop,
level complete/fail, star earned, hint, navigation) via Tone.js
- Live LFO modulation visualization: knobs animate in real-time showing
modulated value, ghost dot shows base value, number glows cyan
- Fix wire recalculation on zoom/pan/level re-entry (post-layout refresh)
- Fix retry button to keep current patch instead of reloading level
- Fix default param detection: newly added modules now populate all
default params so level checkers work without manual param changes
- Add worlds 7-12: Secuencias y Ritmos, Texturas de Ruido, Síntesis
Sustractiva, Espacio y Stereo, Técnicas Avanzadas, Gran Final
(48 new levels, 144 new possible stars, 288 total stars)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix LFO→Filter cutoff: add scaling Gain nodes so LFO (-1..1) maps to
meaningful Hz modulation (±cutoff value). Same fix for LFO→Osc freq.
Mod scale updates dynamically when user changes the base param value.
- Visual modulation indicator: knobs receiving LFO/modulation show a
pulsing dashed ring animation (spin + pulse) around the knob arc
- Persist hint usage per level: using a hint permanently caps that level
at 2 stars — survives reload/restart. No more cheating by restarting!
- Hint state stored in separate localStorage key (synthquest-hints)
- Admin reset also clears hint history
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- World 2 (Filtros): 8 levels teaching filters, resonance, LFO modulation, acid bass
- World 3 (Envelopes): 8 levels teaching VCA, ADSR, pluck, tremolo, full synth lead
- Star-based world unlock system (12 stars for W2, 24 for W3)
- Level patch persistence: auto-saves player patches, restores on revisit
- Google Maps-style zoom controls (+/−/reset) in both puzzle and sandbox views
- Multi-world navigation in GameApp and WorldMap
- Target audio now supports filter chain for World 2 levels
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Double-clicking a knob opens an inline text input for precise value
entry. Enter confirms, Escape cancels, blur auto-commits. Value is
clamped to the knob's min/max range. Styled to match the synth theme.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace elementFromPoint with bounding rect distance search for port
detection. The SVG wire overlay was intercepting pointer events,
requiring users to wait for animations before connecting. Now finds
the closest port-dot within 18px radius regardless of z-index.
- Add hint system: concept text hidden behind "Mostrar Pista" button.
Using the hint permanently caps the level at 2 stars max. Reiniciar
resets the penalty. Visual feedback in objectives and completion screen.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Gamified synth learning inspired by Turing Complete. Progressive puzzle
system teaches oscillators, waveforms, frequency, and mixing through
hands-on module patching. Includes world map, level progression with
3-star rating, target audio playback, solution validation, and
localStorage persistence. Sandbox mode still accessible via button.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The Part events were pre-converted to seconds via Tone.Time().toSeconds(),
making the BPM setting ineffective. Now uses bars:quarters:sixteenths
notation so the Transport BPM actually controls playback speed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix mouse coordinate scaling in piano roll when canvas is zoomed
(getBoundingClientRect returns visual size, now dividing by scale ratio)
- Replace Megaman melody with Super Mario Bros overworld theme
- Tune chiptune preset: faster BPM (200), snappier envelopes, brighter
filter, less delay/distortion for cleaner NES sound
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix wires not recalculating positions on zoom until panning
- Add MIDI file import button to Piano Roll (parses .mid files)
- Allow envelope release to go to 0 (was clamped at 0.001)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add step sequencer (16-step with note/gate editing) and piano roll
(canvas-based MIDI editor with draw/erase tools). Includes a Megaman-style
melody in C minor. Chiptune preset now uses piano roll instead of keyboard.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace fragile DOM position matching in finishConnection with
data-module-id/data-port-name/data-port-direction attributes
- Add nearby port detection (8px radius) for easier connections
- Wire glow effects with drop-shadow filters
- Port dots z-index above wires for reliable click targeting
- Chiptune demo preset: 2x square osc, envelopes, VCAs, mixer,
filter, delay, distortion, scope — full 8-bit signal chain
- "Chiptune Demo" toolbar button to load the example
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>