diff --git a/CURRENT.md b/CURRENT.md index 62c5033..ab2b136 100644 --- a/CURRENT.md +++ b/CURRENT.md @@ -40,6 +40,14 @@ mobile draft at 390px. - [x] C11 preview caching: Discord-hosted image/GIF previews (WebP 320px, hash-addressed, 5 MiB cap, one attempt) run after every walk in both modes. Live run `...-20260916090722`: `previewed: 2`; thumbs served over `/api/media///thumb` (200). + - [x] C74 Nocturne fidelity pass from the third party. Integrated the applied tree from + `Debug WebUI mockups(1).zip`: `tokens-status.css` (danger/warn/ok roles and the data + scale), `style-overrides.css`, `settings-popups.css`, `polish.js`, the Phosphor + `icons.js`, and the token cleanup in `media.css`. `index.html` loads them in their order + (the two override sheets last, `polish.js` after `icons.js`). The writeup lives in + [docs/ui-changes.md](docs/ui-changes.md). Their tree matched ours file-for-file apart + from those files, so nothing regressed. UI smoke test passes; the TTS panel renders the + voice-processing block correctly under the new sheets. - [x] C73 Echo on the vox voice. `aecho`'s `in_gain`/`out_gain` scale the dry signal as well as the repeats, so a low echo level quieted the whole line (the classic path's loudnorm hid it; the streaming path has no measurement, so vox + stream word mode just diff --git a/docs/INDEX.md b/docs/INDEX.md index 9c72101..d8db315 100644 --- a/docs/INDEX.md +++ b/docs/INDEX.md @@ -20,6 +20,7 @@ This file lists the project documents. | [auth.md](auth.md) | QR login and token persistence | | [testing.md](testing.md) | Tests and the live test setup | | [decisions.md](decisions.md) | Design decisions and their reasons | +| [ui-changes.md](ui-changes.md) | The Nocturne fidelity pass over the web UI (third-party writeup) | ## Documents outside `docs/` diff --git a/docs/ui-changes.md b/docs/ui-changes.md new file mode 100644 index 0000000..e538ab8 --- /dev/null +++ b/docs/ui-changes.md @@ -0,0 +1,255 @@ +# 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 `