docs(product): DS-2 revised — three-accent pastel palette + REAPER-grey neutrals
Replace the single electric-cyan accent with a pastel lime/teal/purple three-accent system; shift neutral surfaces + text from near-black to REAPER's mid-grey theme family. Font upgrade declined (no bundling). L3 conformed to the new look; gate intact.
This commit is contained in:
+75
-22
@@ -1373,12 +1373,38 @@ LICE's actual ceiling — which REAPER's own themed UI and SWS prove is a modern
|
||||
object model wholesale (its controls own their hit-test internally, which would move
|
||||
geometry into untestable shell code and undercut the pure/shell split).
|
||||
- **DS-2 — visual direction: Direction B ("Neon Console") + Direction C's spectral
|
||||
keyboard strip.** Near-black base (`~18,18,22`) with a single vivid accent (electric cyan
|
||||
leads) for the live/active/selected layer only; everything else calm neutral gray. The
|
||||
**spectral (hue-mapped) keyboard strip** — low notes cool → high notes hot, glow-on-active
|
||||
as a static drawn state — is the signature surface (it turns the multi-zone-in-one-instance
|
||||
advantage into a visual identity). The kit palette is **abstract** (role→color, one
|
||||
constants block), so the direction is a single-file change.
|
||||
keyboard strip. SETTLED 2026-07-26, REVISED 2026-07-26 (Daniel) — three-accent pastel
|
||||
accents AND REAPER-grey neutrals (palette-only).** *Neutral surfaces (revised):* the
|
||||
neutral ladder moved **from near-black up into REAPER's mid-grey theme family** so the
|
||||
dock reads as *part of REAPER, not a black slab* — `bg/base` ≈ `#2b2b2b` (REAPER chrome),
|
||||
`bg/panel` ≈ `#333333`, `bg/cell` ≈ `#3a3a3a` (REAPER track bg), `line/hairline` ≈
|
||||
`#4a4a4a`, `text/primary` ≈ `#dcdcdc`, `text/dim` ≈ `~#a0a0a0`+. Elevation-ladder
|
||||
discipline unchanged (base < panel < cell by a few %, micro-gradient + inner
|
||||
highlight/shadow carry elevation, not hard borders). *Accent layer (revised):* changed
|
||||
from **one electric cyan** to **three pastel accents**: `accent/primary` = **pastel lime
|
||||
green** (`~176,224,152`, the
|
||||
live/active/selected signal), `accent/secondary` = **pastel teal** (`~132,214,208`,
|
||||
categorical role A), `accent/tertiary` = **pastel purple** (`~194,170,232`, categorical
|
||||
role B); `accent/hot` is a lighter pastel-lime tint (`~200,236,178`). These are *starting*
|
||||
values — the implementer locks final hex against the theme module's WCAG tests, staying
|
||||
**within the pastel intent** ("soft-side" floor: the most pastel value that still clears,
|
||||
not re-saturated toward neon). The **spectral (hue-mapped) keyboard strip** — signature
|
||||
surface, glow-on-active as a static drawn state — is now a **pastel** sweep anchored on the
|
||||
three accents (pastel-lime low → pastel-teal mid → pastel-purple high). **A stylish/bundled
|
||||
font upgrade was considered and DECLINED (Daniel, 2026-07-26)** — no font bundling or
|
||||
redistribution; the kit keeps its **current** cached-font face and no new typeface is
|
||||
specified (§3.1). The kit palette stays **abstract** (role→color, one constants block —
|
||||
now three accent roles), so the direction is a single-file change. *Tight pairs flagged for
|
||||
the implementer (re-verify against the GREY ladder, not near-black):* **`text/dim` on
|
||||
grey** (mid-grey-on-mid-grey — lands ~4:1 at start, must be lifted toward `~#a8a8a8`+ to
|
||||
clear AA 4.5:1 body on `#333`/`#3a3a3a`, the classic floor failure); **the three pastels
|
||||
as state indicators / active fills on `bg/cell`** (the pastel cushion shrank from ~15:1 on
|
||||
near-black to ~6:1–7:1 on grey — still clears 3:1 but must be re-checked; if any drops
|
||||
below floor, nudge that hue slightly deeper within the pastel intent); body text **on a
|
||||
pastel fill** (light-grey on a light pastel can drop below AA 4.5:1 — use dark labels on
|
||||
pastel fills or darken the fill); and **secondary vs. tertiary** distinguishability (both
|
||||
cool/desaturated — verify they read as distinct categories). Full reasoning:
|
||||
`docs/product/visual-design-language.md` §2.1 + §4 + §6.
|
||||
- **DS-3 — dock-panel scope: a thorough layout redesign, not a light re-skin.** L2 lays out
|
||||
the *full* button/affordance inventory — including M11's action-trigger buttons +
|
||||
keybinding-help labels — intuitively, uncluttered, and useful, then applies the kit.
|
||||
@@ -1386,17 +1412,32 @@ LICE's actual ceiling — which REAPER's own themed UI and SWS prove is a modern
|
||||
|
||||
## Palette + the "punch" rule (Daniel's standing taste)
|
||||
|
||||
Dark, modern, **visual punch over conservative contrast.** The palette is defined by
|
||||
**role**, not hardcoded hue: `bg/base`, `bg/panel`, `bg/cell`, `line/hairline`,
|
||||
`text/primary`, `text/dim`, `accent`, `accent/hot`, `warn`. A modern dark UI is built from
|
||||
**elevation layers**, not borders — surfaces gain a **micro-gradient** (`LICE_GradRect`,
|
||||
a few percent lighter at the top) + a 1px inner top-highlight / bottom-shadow (the vwnd
|
||||
trick) instead of flat fills. **WCAG-floor discipline:** for each text-on-surface pair,
|
||||
take the *most* vibrant accent that still clears its floor (AA 4.5:1 body / 3:1 large +
|
||||
state indicators) — the floor approached from the vibrant side, never a retreat to safe
|
||||
gray. The `warn` role (red/amber) is reserved *only* for byte-deleting or clip states
|
||||
(prune, delete). Because the palette is role-based in one constants block, the settled
|
||||
B+spectral direction (DS-2) is one file.
|
||||
Dark, modern, **visual punch over conservative contrast — now pastel, on REAPER-grey.** The
|
||||
palette is defined by **role**, not hardcoded hue: `bg/base`, `bg/panel`, `bg/cell`,
|
||||
`line/hairline`, `text/primary`, `text/dim`, `accent/primary`, `accent/secondary`,
|
||||
`accent/tertiary`, `accent/hot`, `warn`. **Neutral surfaces (DS-2 revised, 2026-07-26):**
|
||||
the neutral ladder sits in **REAPER's mid-grey theme family**, not near-black, so the dock
|
||||
reads as *part of REAPER* — `bg/base` ≈ `#2b2b2b`, `bg/panel` ≈ `#333333`, `bg/cell` ≈
|
||||
`#3a3a3a`, `line/hairline` ≈ `#4a4a4a`, `text/primary` ≈ `#dcdcdc`, `text/dim` ≈ `~#a0a0a0`+.
|
||||
A modern dark UI is built from **elevation layers**, not borders — surfaces gain a
|
||||
**micro-gradient** (`LICE_GradRect`, a few percent lighter at the top) + a 1px inner
|
||||
top-highlight / bottom-shadow (the vwnd trick) instead of flat fills; the grey ladder keeps
|
||||
this discipline (base < panel < cell by a few %, subtle steps like REAPER, not hard
|
||||
outlines). The three accents carry categorical meaning: **primary (pastel lime) =
|
||||
live/active/selected**, **secondary (pastel teal) + tertiary (pastel purple) = supporting
|
||||
categorical distinctions** (kinds, not intensity — primary is always "what's live now").
|
||||
**WCAG-floor discipline (pastel + grey re-read):** moving neutrals *up* into grey makes two
|
||||
pairs *harder* — (1) **`text/dim` on `bg/panel`/`bg/cell`** is the classic
|
||||
mid-grey-on-mid-grey floor failure (must be lifted light enough to clear AA 4.5:1 body on
|
||||
the greyest surface it draws on), and (2) **the three pastels as state indicators on grey**
|
||||
have a shrunken contrast cushion (~6:1–7:1 vs. ~15:1 on near-black — still clear 3:1 but
|
||||
re-verify; nudge a hue slightly deeper within the pastel intent if it drops below floor).
|
||||
Text-on-a-pastel-fill (AA 4.5:1) remains a tight pair. Take the *most pastel* value that
|
||||
still clears the floor **on grey** — approached from the **soft side**, never re-saturated
|
||||
toward neon "to be safe," except where the grey floor forces a small deepening. The `warn`
|
||||
role (red/amber) is reserved *only* for byte-deleting or clip states (prune, delete).
|
||||
Because the palette is role-based in one constants block, the settled-and-revised
|
||||
B+pastel+grey+spectral direction (DS-2) is one file.
|
||||
|
||||
## "Speed is the selling point" — a design constraint, not a tagline
|
||||
|
||||
@@ -1413,8 +1454,18 @@ already does). Direction C's glow/bloom is a **static drawn state, never a pulse
|
||||
|
||||
Pure (no LICE, no REAPER types, unit-tested — the mirror of `mode_switch`/`bank_grid`):
|
||||
- **`theme`/palette module** — role→color mapping, direction-selectable via one constants
|
||||
block (the B+spectral values). Pure; unit-tested that each text-on-surface pair clears
|
||||
its WCAG floor (the "punch" rule made testable).
|
||||
block (the B + REAPER-grey-neutral + three-accent-pastel + pastel-spectral values). Pure;
|
||||
unit-tested that each text-on-surface pair clears its WCAG floor (the "punch" rule made
|
||||
testable). *DS-2 revision (2026-07-26):* (a) the neutral ladder moves from near-black up
|
||||
into REAPER's mid-grey family (`bg/base` `#2b2b2b` / `bg/panel` `#333333` / `bg/cell`
|
||||
`#3a3a3a` / `line/hairline` `#4a4a4a` / `text/primary` `#dcdcdc` / `text/dim` `~#a0a0a0`+),
|
||||
and (b) the accent role expands from one to three (`accent/primary` lime, `accent/secondary`
|
||||
teal, `accent/tertiary` purple) with the spectral ramp a pastel sweep anchored on those
|
||||
three — all still confined to the one constants block + the shell's font lifecycle. **The
|
||||
WCAG test must be re-run against the GREY ladder** — it gains the newly-tight grey pairs:
|
||||
`text/dim`-on-grey (AA 4.5:1) and each pastel-as-state-indicator on `bg/cell` (3:1), plus
|
||||
the existing text-on-pastel-fill pairs. (No font change: a bundled-font upgrade was
|
||||
declined — the cached-font set keeps the kit's current face.)
|
||||
- **Component geometry/hit-test helpers** — button rect, slider track/handle geometry,
|
||||
list-row rect + hover hit-test, and any new layout module L2 needs (an action-bar layout
|
||||
module). No LICE, no host types; CTest-covered. Existing pure modules
|
||||
@@ -1475,9 +1526,11 @@ the **current** drawing and **adopt the L1 kit when it is available — they are
|
||||
Phase L.** Whichever lands first (the L1 kit or the S10–S13 UX), the kit is the **one source
|
||||
of drawing**: if S10–S13 reach dev before L1, they draw in the current language and L3
|
||||
restyles them; if L1 lands first, they are born in the kit. Either way there is one kit and
|
||||
one look; L3 completes the VST/embed adoption and applies the settled B+spectral treatment
|
||||
(with C's spectral keyboard strip as the signature surface). The VST3 class UID is
|
||||
unchanged — a visual refresh is not a compat event.
|
||||
one look; L3 completes the VST/embed adoption and applies the settled-and-revised **B +
|
||||
three-accent pastel** treatment (with C's **pastel** spectral keyboard strip as the
|
||||
signature surface), routing text through the kit's cached-font `text()` (§3.1 — the kit's
|
||||
current face; no font change). The VST3 class UID is unchanged — a visual refresh is not a
|
||||
compat event.
|
||||
|
||||
## Precision / invariant implications (what Phase L does NOT change)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user