# 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 `