Write the style pack of the "squeekchain-sleep" station of Intelligent Dance Market: exactly one new file, packages/synth/src/stations/squeekchain-sleep.ts. Change nothing else in the repository.
Read first: packages/synth/src/stations/README.md (the brief: contract, sound fields, taste, gate), packages/synth/src/stations/example.ts (the reference pack: copy its shape), packages/synth/src/styledata.ts (every field and its range), packages/synth/src/pack.ts (validatePack) and the house tables and SOUND_DEFAULTS at the end of packages/synth/src/engine.ts.
The pack:
- export default { key: "squeekchain-sleep", name, genres: ["ambientidm", "drone"], styles, patches? } satisfies StationPack; the only import is
import type { StationPack } from "../pack.ts".
- genres in this order: ambientidm, drone. 3 ambientidm styles, 2 drone styles, ids prefixed "squeekchain-sleep-", each on a base the README table lists for its genre.
- Data only: one object literal. No functions, loops, computed values, randomness or other imports. No engine edits.
The owner's vibe: "Sleep mode of the Squeekchain station: a real hamster's wheel drives the music; while the hamster sleeps (up to 20 h a day) one style plays for 30 minutes at a time. It already has 10 sleep styles, all soft lullabies at 44..88 bpm: Tape Dream, Nap Beat (dusty boc beats), Music Box, Snow Globe (crystal bells), Lullaby (celesta), Rain Wall, Cloud Choir (classic walls), Burrow (dark warm sub), Overtone Glow, Nest Hum (pulse partials). Write 5 that sound like none of them and not like each other. Put each style somewhere else on these axes: tempo, register, density, timbre family, space (dry and close vs a huge hall), home chord, drums or none. One idea per style: ambientidm 1 "REM": the dreaming phase, 100..112 bpm, a light twitching arp and a soft quick pocket, still gentle. ambientidm 2 "Seed Stash": wooden and dry, plucked marimba or kalimba tones, a small close room, almost no echo. ambientidm 3 "Moon Over the Cage": cold and high, very sparse, long silences between notes, no drums. drone 4 "Hibernation": the lowest and slowest thing on the station, felt more than heard, almost still. drone 5 "First Light": open fifths and high bright partials lifting slowly, the hour before the hamster wakes. Always calm: nothing harsh, no risers, no noise sweeps, no busy glints. ambientidm on classic or crystal only (boc is not deterministic yet)."
Taste:
- Keep each genre recognisable (ambientidm: slow chords on a soft dusty pocket, a few long melodic notes; drone: held, slowly breathing layers with no beat). Change the producer, not the genre.
- One idea per style, committed; contrast the styles with each other and with the house. Use the sound fields (kit, bass, the genre's voices: pad/strings/voice/bassTone/stabTone/hoover..., fx, mix, vinyl, the pack's own lead patches), not only notes and rhythm.
- ambientidm: harmony in chords/progressions, the phrase material in figures (Tape Keys), phrases (Tape Haze) or arps (Crystal), tiers for how fast it gets busy, notes for the blips; sound in kit (each base its own parts), pad, bass, lead, line, glass, bell, shimmer.
- drone: the layers in voicing/colours/busy and bars (phrase length), the Overtone Pulse series in partials/figures, glints for the bell pitches; sound in wall/pad (waves, detune, breathing), bed (beating subs), overtone, glint, kick, breath, rumble, swell. Keep it beatless and slow.
- Avoid harshness: hats under ~0.6 level, snare noise q under ~2, never resonance and drive both at the top of their ranges, fx.master.crush under 8 bits only on purpose.
- One thing owns the sub. Send snares, leads, pads and percussion to the echo and the room, not the kick and the bass.
The gate (it must pass before you finish):
npm ci && npx playwright install chromium
node web/scripts/station-check-pack.mjs squeekchain-sleep --diff 3346e5278a5264cc0d1952e1da672628ea47be0b
It must end with "PASS: the pack is ready for the owner to listen". Too quiet or too loud: change that style's trim by the dB difference (trim *= 10 ** (dB / 20)) and run it again.
Deliver only packages/synth/src/stations/squeekchain-sleep.ts; the WAVs under sim/ are gitignored, do not commit them.