# Veskslop UI — Nocturne fidelity pass The shell (header, rail, call strip, composer, TTS box, console, right column) is faithful to the design. The drift is all in the layer added since: the Media archive and Bot tabs, plus a few spots in `style.css`. **Part two** (icons, settings, menus, dialogs, toasts) starts further down. ## Install ```html ``` `tokens-status.css`, `style-overrides.css`, `settings-popups.css` and `polish.js` are new files. `media.css` and `icons.js` are your files with the changes applied — diff them, don't assume. --- ## The root cause Nocturne ships one accent and a neutral ramp. It has **no error / warning / success role and no categorical data scale.** So every feature that needed one invented its own: `#e5484d`, `#ffaa33`, `#44cc88`, `#ff5555`, `#ff8080`, `#c04040`, `#4f8cff`, `#8a6cff`, `#ff7a45`, `#2fbf71`, `#6b7280`, `#d29922`. Eighteen hexes, four different reds, none on the system's lightness scale. `tokens-status.css` fills that hole properly — danger, warn, ok and a five-step data scale, generated in OKLCH on Nocturne's **own** shared lightness scale, so step 400 of danger carries the same visual weight as step 400 of accent. Chroma stays low; the accent is still the loudest thing on screen. Everything else in this patch is downstream of having those tokens. --- ## What changed ### 1. Colour - 18 hard-coded hexes replaced with tokens. Zero remain. - **Wrong-hue fallbacks removed.** `var(--color-accent-400, #4f8cff)` appeared six times. `#4f8cff` is blue; Nocturne's accent is blurple `#9184d9`. Any time that fallback fired — a load-order slip, a scoping mistake — the Media and Bot tabs turned a different colour than the rest of the app. Silent, and hard to spot because it only happens when something else is already broken. - The storage bar's five saturated hues become the low-chroma `--color-data-*` family. Nocturne's rule is that contrast comes from the tonal ramps, not from saturation; five alarm colours in a 10px bar broke it harder than anything else on screen. - `--color-mention: #d29922` was declared in a stray second `:root` block 400 lines into `style.css`. It now lives with the other tokens as `--color-warn-400`. ### 2. Floods Nocturne outlines; it does not fill. - `.vk-toggle-half.vk-toggle-on` was a solid `accent-400` panel with `#fff` text — the one thing the guide names as a don't. Now tinted and outlined, the same treatment `.vk-scope-btn.active` already uses. - `.vk-media-badge` was `#e5484d` with white text at 9px. Now a `danger-800` tint with `danger-200` ink at 10px. - `.vk-bot-state-*` pills moved from alpha washes over saturated hues to deep ramp fills with full-opacity ink — an alpha wash over an unknown backdrop is how small text loses contrast without anyone noticing. ### 3. Weight Nocturne heads cap at 500; hierarchy is size and space. Removed 11 instances of `font: 600` and `font-weight: 600` in `media.css`, plus `font-weight: 700` on the speaking state in `style.css`. That last one also **reflowed the row every time someone started or stopped talking** — the names jittered. Speaking now reads in `accent-200`, with the level meter beside it doing the loud work. ### 4. Edges and radii `border: 1px solid` → the system's `inset 0 0 0 1px` edge, so elevation stays "hairline plus ambient darkness" rather than a drawn box. Literal `3px / 5px / 6px / 7px` radii → `--radius-sm` / `--radius-md`. Six different corner radii were in play across the Bot tab. ### 5. Focus `nocturne.css` sets a 2px accent `:focus-visible` ring, but every control built from a bare `