TITLE: Cursor Comet — Light Drawn by Hand PROMPT: Build a single self-contained HTML page (system fonts only, no external assets) titled "Cursor Comet — Light Drawn by Hand": a full-bleed interactive light painting on a #05060a space canvas. The canvas is fixed inset 0 at 100% width/height, DPR-scaled (min(devicePixelRatio,2)) with ctx.setTransform on every resize. Background is baked once per resize into an offscreen canvas: a diagonal linear gradient (#06070d to #04050a), four huge low-alpha radial nebulas (violet rgba(167,139,250,.13) at 18%/22%, cyan rgba(56,189,248,.11) at 82%/72%, pink rgba(244,114,182,.09) at 52%/102%, yellow rgba(253,224,71,.05) at 94%/14%), then 120–430 stars (radius 0.5–2.3, alpha .14–.76, 20% of them tinted 200–260 hue) with soft halos on the brightest; 70 of them are kept in a live list and twinkled additively each frame with a sine alpha. The comet itself is a particle system drawn with globalCompositeOperation 'lighter': pointer movement spawns particles interpolated along the segment from the previous to the current position, spacing 2.2–5.6px, with velocity inherited from the pointer direction plus jitter, size 1.6–4.2, life 26–56 frames and a per-particle hue jitter of ±13°. Speed maps to hue: 195° (cyan) at rest through violet to 335° (pink) at 2.4px/ms; above 1.5px/ms random yellow sparkle particles (hue 46–62, small, short-lived) are emitted. Particles are drawn from a bank of 36 pre-rendered 48px radial-gradient sprites (one per hue bucket) so the frame loop never builds a gradient. Drag is 0.945^dt, life decays 0.06/frame, alpha is life^1.5, and the pointer head draws a large soft sprite sized 10–36px by speed (×1.5 while held). HUD in a fixed pointer-events-none layer: a wide-tracked "COMET" title with a monospace subtitle top-left; a bottom-left monospace readout (velocity px/ms, hue, particle count, trail) updated only when values change; a bottom-right key legend; and a centred monospace hint that scales up and fades out on the first pointer move. A fixed radial vignette sits above the canvas. Interactions: move to draw, hold the pointer to intensify (2.6× spawn cap, bigger/faster particles), click or tap for a 110-particle radial burst plus a white flash that decays 0.9^dt, wheel changes trail length between 8 and 90 (preventDefault), space clears all particles with a flash, pointer capture for touch, and pointerleave stops spawning. prefers-reduced-motion drops the star twinkle, cuts bursts to 34 particles and skips the flash. One IIFE, `let`/`var` loops only, every lookup guarded, no console errors. DESCRIPTION: A pure-play instrument for drawing with light. The pointer becomes a comet head whose colour is a direct readout of speed — slow hands leave a cyan wake, fast ones burn pink and throw off yellow sparks — over a hand-baked starfield with four soft nebulas and seventy twinkling stars. The trail is additive, so overlapping strokes bloom where they cross, and the whole thing is built for 60fps: pre-rendered gradient sprites, a baked background, dt-scaled drag and decay, and a HUD that only writes to the DOM when a number actually changes. The interface stays out of the way — a wide-tracked title, a monospace instrument readout, a key legend and a hint that dissolves the moment you move. TECHNIQUES: - Additive ('lighter') particle compositing over a baked offscreen starfield with nebula gradients - 36 pre-rendered hue-bucket radial sprites (no per-frame gradient construction) - Velocity-to-hue mapping (195° cyan → 335° pink) with a yellow sparkle band above 1.5px/ms - Segment interpolation spawning (spacing tied to speed) so the trail is continuous, not dotted - dt-scaled drag, life decay and flash falloff for frame-rate independence - DPR-aware canvas with setTransform on every resize; pointer capture for touch - Dirty-gated HUD writes (only when a value changes) and a decayed speed readout - Frozen-clock-safe UI: the hint starts visible and only leaves on interaction INTERACTION: Move the pointer (mouse or touch) to draw an additive light streak; the colour follows your speed and the head glow grows with it. Hold the pointer down to intensify the comet — spawn cap, particle size and speed all increase. Click or tap for a 110-particle radial burst with a brief white flash. Use the wheel to change trail density between 8 and 90 particles per frame. Press space to clear every particle and flash the canvas. Leaving the window stops the spawning; resizing rebuilds the starfield and re-applies DPR scaling. The readout in the bottom-left live-updates velocity, hue, particle count and trail length.