TITLE: Sector 7 — a cold-war passive sonar scope PROMPT: Hand-author one self-contained HTML file (no external assets, no occurrence of the substring "http") that renders a cold-war sonar operator console. Ground: near-black green #04100a with a phosphor #39ff88 / mint #0affc3 / amber #ffb000 palette, a fixed CRT overlay of repeating horizontal scanlines plus a heavy vignette, and ui-monospace type everywhere. Layout: a tracked-caps header row (Sonar Array SECTOR 7 · Passive / Uptime T+00:00:00), a two-column deck, and a tracked-caps status footer (Sweep 12 rpm / Filter ALL / Contacts n / local clock). Left column: a square scope (max 62vmin, centred) whose outer ring carries eight counter-rotated bearing labels (000…315) placed by rotate(var(--a)) boxes, with the circular screen inset 7% and clipped by overflow:hidden. The screen stacks a CSS conic-gradient sweep layer (transparent for 180deg, ramping to 0.72 alpha at the leading edge) rotated by a --sw custom property, a DPR-scaled canvas (canvas.width = cssW * devicePixelRatio, ctx.setTransform) that draws four range rings, 24 bearing spokes, a crosshair, pulsing ring highlights, phosphor noise specks that scale with gain, and the contact blips as radial-gradient glows with a hard 1.8px core; plus a glass highlight overlay. Right column: a bordered panel with an oversized tabular-nums bearing readout (clamp 38px–74px), range/ID line, strength meter, a live contact list, a range input and a draggable gain knob. Contacts are a 12-slot array (id, bearing, drift, km, strength, kind, ttl) with phosphor decay brightness exp(-angleSinceSweep/62), polar-to-cartesian mapping x = cx + sin(b)*r, y = cy - cos(b)*r, slot reuse on ttl expiry and DOM rows re-sorted by bearing every 2.2s. Interaction: hover a contact row highlights its blip, click a blip or row locks it (amber crosshair, readout updates), F or 1-4 cycles ALL/NEAR/FAR/STRONG filters, the range slider rescales the scope, the knob drags vertically to change gain, arrows nudge gain, Escape clears the lock. Respect prefers-reduced-motion by halving sweep speed. DESCRIPTION: A sonar room rendered as an interface: a phosphor-green scope with a trailing sweep beam, decaying contact blips and a live contact list that re-sorts itself as bearings drift. The instrument panel is built entirely from monospace type and hairline rules, with an oversized bearing readout and a machined gain knob, while a scanline-and-vignette overlay gives the whole screen the weight of a CRT. Cold, precise and legible — every number on screen is derived from the same simulated contact array that the canvas draws. TECHNIQUES: CSS conic-gradient rotating sweep with a 180-degree trailing fade; canvas blips drawn as radial gradients (phosphor glow) with DPR-scaled backing store and setTransform; polar-to-cartesian mapping with north-up bearing convention; exponential phosphor decay based on angular distance from the sweep; per-slot contact lifecycle with ttl respawn and DOM row reuse plus periodic bearing sort; hit-testing in CSS pixels against projected blip positions; noise speck generation scaled by receiver gain; counter-rotated CSS bearing labels; custom-property driven transforms (--sw, --k, --sc, --v); styled range input and a pointer-captured rotary knob; 1Hz dirty-gated clock/uptime/row refresh; fixed scanline + vignette overlay; reduced-motion sweep damping. INTERACTION: Hovering a contact row (or a blip) draws a pulsing ring and bearing line to that blip. The strongest contact is locked on load so the readout starts populated; clicking any blip or list row locks that contact instead, showing its bearing, range, id and strength, giving the blip an amber crosshair and marking its row in the list. The range slider rescales the display so distant contacts fall off the scope; the gain knob is dragged vertically (or nudged with ArrowUp/ArrowDown) and changes blip brightness and the amount of noise on the scope; pressing F cycles the filter and 1/2/3/4 select ALL, NEAR, FAR or STRONG, dimming and dropping non-matching contacts from the scope and the count; Escape clears the lock. The sweep rotates continuously, blips fade after the beam passes, and contacts expire and are replaced as the list re-sorts by bearing.