TITLE: Terrazzo Lab — Composite Stone Study PROMPT: Build a single self-contained HTML page (system fonts only, no external assets) titled "Terrazzo Lab — Composite Stone Study": a warm editorial pattern laboratory on a paper background (radial wash #fffdf9 to #f6f1ea over #e6ddd0) with charcoal #2f2a26 text. Layout is a 1520px max-width grid: a full-width masthead with "Terrazzo Lab" in system-ui 800, clamp(30px,6.2vw,74px), -0.035em tracking, the word "Lab" in terracotta #c97b5a, a hairline rule beneath, and a right-aligned monospace meta block ("composite stone study / specimen no. 057 · cast & polish"). Below: a two-column body — left, a 16/9 slab frame (border-radius 14px, 1px rgba(47,42,38,.16) border, layered warm shadow, perspective 1100px) containing a DPR-scaled canvas on #efe9e1 plus four overlays (a conic-gradient sheen on screen blend, a 104deg linear gloss sweep, a 3px multiply dot-grain, and a 340px radial specular that follows the pointer), with a floating monospace pill badge "slab live · seamless tile"; under the frame a 3×3 seamless proof tile (clamp(96px,11vw,150px) canvas) and a monospace caption. Right column: a cream control panel with density and chip-size range inputs (custom 3px charcoal-to-terracotta track, 19px radial thumb), a 2×2 palette grid of four aggregate palettes (classic, warm, cool, mono) each rendered as clipped-polygon chip swatches (clip-path: polygon(14% 0%,100% 6%,92% 100%,0% 88%)) with uppercase monospace names and a selected state (charcoal border + inset ring), SCATTER and POLISH buttons, and a monospace readout showing seed, coverage and cast. JS in one IIFE: mulberry32 seeded RNG places 40–300 (180 by default) irregular 5–7 sided chips in normalized coordinates with per-chip rotation, spawn delay, spin and optional white speckle; a 44-frame pop-in animation (about 0.7s at 60fps) uses easeOutBack so chips overshoot into place; each chip is drawn up to nine times with ±width/±height offsets when it touches an edge, making the tile genuinely seamless; the slab canvas is blitted 3×3 into the preview canvas so it updates live; dirty-gated rAF (idle = zero draws); POLISH toggles the sheen and a 3.4s gloss sweep; pointermove tilts the stack ±7deg via CSS variables and moves the specular; sliders rebuild with the same seed so density and size re-scatter deterministically; SCATTER rolls a new seed. prefers-reduced-motion stops the sheen/sweep and disables tilt. Responsive: single column under 640px, 4/3 slab on narrow screens, no console errors, all lookups guarded. DESCRIPTION: A pattern laboratory that treats terrazzo as a live material study rather than a texture file. Chips are cast in real time from a seeded generator, popping into place with a springy overshoot and rotating as they settle, then proved seamless by a 3×3 tiled preview fed directly from the same canvas. The surface reads like a physical sample board: matte stone slab with a fine dot grain, a terracotta-to-mustard aggregate palette, and an optional polish that slides a conic sheen and a diagonal gloss sweep across the stone while the whole stack tilts under the cursor. Controls are instrument-like monospace on cream panels, keeping the eye on the slab. TECHNIQUES: - mulberry32 seeded RNG for deterministic chip placement, rotation, delay and palette pick - Irregular 5–7 sided polygon chips drawn with canvas paths plus white speckle highlights - Edge-aware 9-way wrap drawing so the tile is genuinely seamless - easeOutBack pop-in stagger over 1s, driven by a dirty-gated rAF loop - Live 3×3 seamless preview via canvas drawImage blitting (no data URIs) - POLISH state: conic-gradient sheen on screen blend + 3.4s linear gloss sweep - Pointer tilt with CSS variables and a pointer-following radial specular - DPR-aware canvas sizing with setTransform, custom range-input styling, clip-path swatches INTERACTION: Drag the density and chip-size sliders — the slab re-scatters immediately from the same seed, so chips pop back in with their spring animation and the tiled preview updates live. Click any of the four palette cards to swap the aggregate colours and re-cast. Press SCATTER to roll a new seed and get a fresh arrangement. Press POLISH to add the moving conic sheen and the diagonal gloss sweep; hovering the slab tilts the whole surface up to ±7 degrees and drags a soft specular highlight across the stone, which fades on pointer-leave. Everything re-measures on window resize.