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
|
object model wholesale (its controls own their hit-test internally, which would move
|
||||||
geometry into untestable shell code and undercut the pure/shell split).
|
geometry into untestable shell code and undercut the pure/shell split).
|
||||||
- **DS-2 — visual direction: Direction B ("Neon Console") + Direction C's spectral
|
- **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
|
keyboard strip. SETTLED 2026-07-26, REVISED 2026-07-26 (Daniel) — three-accent pastel
|
||||||
leads) for the live/active/selected layer only; everything else calm neutral gray. The
|
accents AND REAPER-grey neutrals (palette-only).** *Neutral surfaces (revised):* the
|
||||||
**spectral (hue-mapped) keyboard strip** — low notes cool → high notes hot, glow-on-active
|
neutral ladder moved **from near-black up into REAPER's mid-grey theme family** so the
|
||||||
as a static drawn state — is the signature surface (it turns the multi-zone-in-one-instance
|
dock reads as *part of REAPER, not a black slab* — `bg/base` ≈ `#2b2b2b` (REAPER chrome),
|
||||||
advantage into a visual identity). The kit palette is **abstract** (role→color, one
|
`bg/panel` ≈ `#333333`, `bg/cell` ≈ `#3a3a3a` (REAPER track bg), `line/hairline` ≈
|
||||||
constants block), so the direction is a single-file change.
|
`#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
|
- **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 +
|
the *full* button/affordance inventory — including M11's action-trigger buttons +
|
||||||
keybinding-help labels — intuitively, uncluttered, and useful, then applies the kit.
|
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)
|
## Palette + the "punch" rule (Daniel's standing taste)
|
||||||
|
|
||||||
Dark, modern, **visual punch over conservative contrast.** The palette is defined by
|
Dark, modern, **visual punch over conservative contrast — now pastel, on REAPER-grey.** The
|
||||||
**role**, not hardcoded hue: `bg/base`, `bg/panel`, `bg/cell`, `line/hairline`,
|
palette is defined by **role**, not hardcoded hue: `bg/base`, `bg/panel`, `bg/cell`,
|
||||||
`text/primary`, `text/dim`, `accent`, `accent/hot`, `warn`. A modern dark UI is built from
|
`line/hairline`, `text/primary`, `text/dim`, `accent/primary`, `accent/secondary`,
|
||||||
**elevation layers**, not borders — surfaces gain a **micro-gradient** (`LICE_GradRect`,
|
`accent/tertiary`, `accent/hot`, `warn`. **Neutral surfaces (DS-2 revised, 2026-07-26):**
|
||||||
a few percent lighter at the top) + a 1px inner top-highlight / bottom-shadow (the vwnd
|
the neutral ladder sits in **REAPER's mid-grey theme family**, not near-black, so the dock
|
||||||
trick) instead of flat fills. **WCAG-floor discipline:** for each text-on-surface pair,
|
reads as *part of REAPER* — `bg/base` ≈ `#2b2b2b`, `bg/panel` ≈ `#333333`, `bg/cell` ≈
|
||||||
take the *most* vibrant accent that still clears its floor (AA 4.5:1 body / 3:1 large +
|
`#3a3a3a`, `line/hairline` ≈ `#4a4a4a`, `text/primary` ≈ `#dcdcdc`, `text/dim` ≈ `~#a0a0a0`+.
|
||||||
state indicators) — the floor approached from the vibrant side, never a retreat to safe
|
A modern dark UI is built from **elevation layers**, not borders — surfaces gain a
|
||||||
gray. The `warn` role (red/amber) is reserved *only* for byte-deleting or clip states
|
**micro-gradient** (`LICE_GradRect`, a few percent lighter at the top) + a 1px inner
|
||||||
(prune, delete). Because the palette is role-based in one constants block, the settled
|
top-highlight / bottom-shadow (the vwnd trick) instead of flat fills; the grey ladder keeps
|
||||||
B+spectral direction (DS-2) is one file.
|
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
|
## "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`):
|
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
|
- **`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
|
block (the B + REAPER-grey-neutral + three-accent-pastel + pastel-spectral values). Pure;
|
||||||
its WCAG floor (the "punch" rule made testable).
|
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,
|
- **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
|
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
|
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
|
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
|
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
|
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
|
one look; L3 completes the VST/embed adoption and applies the settled-and-revised **B +
|
||||||
(with C's spectral keyboard strip as the signature surface). The VST3 class UID is
|
three-accent pastel** treatment (with C's **pastel** spectral keyboard strip as the
|
||||||
unchanged — a visual refresh is not a compat event.
|
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)
|
## Precision / invariant implications (what Phase L does NOT change)
|
||||||
|
|
||||||
|
|||||||
@@ -303,23 +303,40 @@ build:** the `IReaperUIEmbedInterface` contract + embed message/lifecycle agains
|
|||||||
> settled bare-SDK+LICE build shape). Keep hit-test geometry in pure CTest-covered
|
> settled bare-SDK+LICE build shape). Keep hit-test geometry in pure CTest-covered
|
||||||
> modules — do not import vwnd's retained-mode object model wholesale.
|
> modules — do not import vwnd's retained-mode object model wholesale.
|
||||||
> - **DS-2 — visual direction: Direction B ("Neon Console") + Direction C's spectral
|
> - **DS-2 — visual direction: Direction B ("Neon Console") + Direction C's spectral
|
||||||
> keyboard strip.** Near-black + one vivid accent everywhere; a hue-mapped spectral
|
> keyboard strip. SETTLED 2026-07-26, REVISED 2026-07-26 (Daniel) — palette-only.**
|
||||||
> keyboard strip as the signature surface. The kit palette is abstract (roles, one
|
> *Neutral surfaces (revised):* the neutral ladder moved **from near-black up into REAPER's
|
||||||
> constants block), so the direction is a single-file change.
|
> mid-grey theme family** so the dock reads as part of REAPER, not a black slab — `bg/base`
|
||||||
|
> ≈ `#2b2b2b`, `bg/panel` ≈ `#333333`, `bg/cell` ≈ `#3a3a3a`, `line/hairline` ≈ `#4a4a4a`,
|
||||||
|
> `text/primary` ≈ `#dcdcdc`, `text/dim` ≈ `~#a0a0a0`+ (elevation-ladder discipline
|
||||||
|
> unchanged). *Accent layer (revised):* now a **three-accent pastel system** —
|
||||||
|
> `accent/primary` pastel lime green (live/active/selected), `accent/secondary` pastel teal
|
||||||
|
> + `accent/tertiary` pastel purple (categorical distinctions) — replacing the original
|
||||||
|
> single electric cyan. The spectral keyboard strip is a **pastel** sweep anchored on the
|
||||||
|
> three accents. *Tight WCAG pairs to re-verify against the grey ladder:* `text/dim`-on-grey
|
||||||
|
> (mid-grey-on-mid-grey, AA 4.5:1) and the three pastels-as-indicators on `bg/cell` (shrunk
|
||||||
|
> from ~15:1 to ~6:1–7:1). **A stylish/bundled-font upgrade was considered and DECLINED
|
||||||
|
> (Daniel):** no font bundling/redistribution — the kit keeps its current cached-font face,
|
||||||
|
> no new typeface. The kit palette stays abstract (roles, one constants block — three accent
|
||||||
|
> roles + grey neutrals), so the direction is a single-file change; final hex is locked
|
||||||
|
> against the theme WCAG tests within the pastel intent. Detail:
|
||||||
|
> `docs/product/visual-design-language.md` §2.1/§4/§6 + CONTEXT.md §Phase L.
|
||||||
> - **DS-3 — dock-panel scope: a thorough layout redesign, not a light re-skin.** L2 lays
|
> - **DS-3 — dock-panel scope: a thorough layout redesign, not a light re-skin.** L2 lays
|
||||||
> out the full button inventory (including M11's action-button additions) intuitively,
|
> out the full button inventory (including M11's action-button additions) intuitively,
|
||||||
> uncluttered, and useful — then applies the kit. Sequenced after M11 merges.
|
> uncluttered, and useful — then applies the kit. Sequenced after M11 merges.
|
||||||
|
|
||||||
## L3 — VST editor + embed-strip restyle (GATED on Phase S landing on dev)
|
## L3 — VST editor + embed-strip restyle (GATED on Phase S landing on dev)
|
||||||
**Goal:** Bring the ReaSampler 9000 VST editor (`IPlugView` LICE surface) and the S6 embed
|
**Goal:** Bring the ReaSampler 9000 VST editor (`IPlugView` LICE surface) and the S6 embed
|
||||||
strip up to the settled B+spectral look via the L1 kit: cached-font text, kit component
|
strip up to the settled-and-revised **B + three-accent pastel** look via the L1 kit: kit
|
||||||
draws, the Neon-Console palette, the **spectral keyboard strip** as the signature surface
|
cached-font text (§3.1 — the kit's current face, no font change), kit component draws, the
|
||||||
(DS-2), and hover/pressed/drag states throughout. CONTEXT.md §Phase L (VST restyle + the
|
Neon-Console palette with **REAPER-grey neutrals** (`#2b2b2b`/`#333333`/`#3a3a3a`) and the
|
||||||
|
**three pastel accents** (primary lime / secondary teal / tertiary purple), the **pastel
|
||||||
|
spectral keyboard strip** as the signature surface (DS-2
|
||||||
|
revised), and hover/pressed/drag states throughout. CONTEXT.md §Phase L (VST restyle + the
|
||||||
Phase S coordination contract). Product framing: `docs/product/visual-design-language.md` §5.3.
|
Phase S coordination contract). Product framing: `docs/product/visual-design-language.md` §5.3.
|
||||||
**Verify (in DAW):** the VST editor + embed strip render in the settled B+spectral language
|
**Verify (in DAW):** the VST editor + embed strip render in the settled B + three-accent
|
||||||
through the L1 kit — AA cached-font text, gradient/rounded kit components, the spectral
|
pastel language through the L1 kit — kit AA cached-font text, gradient/rounded kit
|
||||||
keyboard strip, working hover/pressed/drag; the VST3 class UID is unchanged (a visual
|
components, the pastel spectral keyboard strip, working hover/pressed/drag; the VST3 class
|
||||||
refresh is not a compat event).
|
UID is unchanged (a visual refresh is not a compat event).
|
||||||
**Depends on:** L1 (the kit) **AND — GATE — Phase S landing on dev.** The VST editor, embed
|
**Depends on:** L1 (the kit) **AND — GATE — Phase S landing on dev.** The VST editor, embed
|
||||||
strip, and keyboard strip live in Phase S, which is **not on dev yet** (it exists on the
|
strip, and keyboard strip live in Phase S, which is **not on dev yet** (it exists on the
|
||||||
phase-s worktree). **L3 cannot be built on dev until Phase S's editor/embed surfaces
|
phase-s worktree). **L3 cannot be built on dev until Phase S's editor/embed surfaces
|
||||||
@@ -335,14 +352,18 @@ work.
|
|||||||
> Either way there is one kit and one look, and L3 is the point that completes the VST/embed
|
> Either way there is one kit and one look, and L3 is the point that completes the VST/embed
|
||||||
> adoption and applies the settled B+spectral treatment.
|
> adoption and applies the settled B+spectral treatment.
|
||||||
|
|
||||||
- [ ] Route the VST editor's + embed strip's text through the kit's cached-font `text()`;
|
- [ ] Route the VST editor's + embed strip's text through the kit's cached-font `text()`
|
||||||
retire their raw GDI `DrawTextA` path. (Gated — Phase S surfaces must be on dev.)
|
(the kit's current face — §3.1, no font change); retire their raw GDI `DrawTextA` path.
|
||||||
|
(Gated — Phase S surfaces must be on dev.)
|
||||||
- [ ] Restyle the editor + embed components through the kit (buttons, sliders/ADSR, list
|
- [ ] Restyle the editor + embed components through the kit (buttons, sliders/ADSR, list
|
||||||
rows, waveform, segmented controls) in the B (Neon Console) palette; add hover/pressed/
|
rows, waveform, segmented controls) in the B (Neon Console) palette — **REAPER-grey
|
||||||
drag states. (Gated.)
|
neutrals** (`bg/base` `#2b2b2b` / `bg/panel` `#333333` / `bg/cell` `#3a3a3a`) with the
|
||||||
- [ ] Apply **Direction C's spectral treatment to the keyboard strip** (hue-mapped zones,
|
**three pastel accents** (primary lime = live layer; secondary teal / tertiary purple =
|
||||||
glow-on-active as a static drawn state — never a pulse, per the speed constraint) as the
|
categorical); add hover/pressed/drag states. (Gated.)
|
||||||
signature surface; VST3 class UID unchanged. (Gated.)
|
- [ ] Apply **Direction C's pastel spectral treatment to the keyboard strip** (hue-mapped
|
||||||
|
zones as a pastel sweep anchored on the three accents, glow-on-active as a static drawn
|
||||||
|
state — never a pulse, per the speed constraint) as the signature surface; VST3 class UID
|
||||||
|
unchanged. (Gated.)
|
||||||
|
|
||||||
## Phase L — sequencing
|
## Phase L — sequencing
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -12,11 +12,15 @@ written after Daniel DAW-tested the S1–S6 instrument:
|
|||||||
> Cockos have a toolkit for this type of visual design?"
|
> Cockos have a toolkit for this type of visual design?"
|
||||||
|
|
||||||
**Status:** framed by product-designer (2026-07-26); the DS-1/DS-2/DS-3 forks are
|
**Status:** framed by product-designer (2026-07-26); the DS-1/DS-2/DS-3 forks are
|
||||||
**SETTLED (Daniel, 2026-07-26)** — recorded in §6 with the reasoning preserved. The
|
**SETTLED (Daniel, 2026-07-26)** — recorded in §6 with the reasoning preserved. **DS-2 was
|
||||||
build points it feeds live in **PLAN.md §Phase L** (**L1** the shared LICE drawing kit,
|
revised 2026-07-26 (Daniel)** from the single electric-cyan accent to a **three-accent
|
||||||
**L2** the dock-panel layout redesign, **L3** the VST editor + embed-strip restyle) and
|
pastel system** (primary/secondary/tertiary = pastel lime green / pastel teal / pastel
|
||||||
**CONTEXT.md §Phase L** (the design-system spec). Toolkit facts below are **verified
|
purple) — see §6. (A stylish-font upgrade was considered and **declined** by Daniel — no
|
||||||
against the vendored `vendor/WDL` tree**, not lore.
|
font bundling/redistribution; the kit keeps its current cached-font face.) The build points it feeds live in
|
||||||
|
**PLAN.md §Phase L** (**L1** the shared LICE drawing kit, **L2** the dock-panel layout
|
||||||
|
redesign, **L3** the VST editor + embed-strip restyle) and **CONTEXT.md §Phase L** (the
|
||||||
|
design-system spec). Toolkit facts below are **verified against the vendored `vendor/WDL`
|
||||||
|
tree**, not lore.
|
||||||
|
|
||||||
> **Phase-boundary note (2026-07-26).** This look-and-feel effort was originally drafted
|
> **Phase-boundary note (2026-07-26).** This look-and-feel effort was originally drafted
|
||||||
> as Phase S points **S0-DS** (the shared kit) and **S14** (the panel refresh). It was
|
> as Phase S points **S0-DS** (the shared kit) and **S14** (the panel refresh). It was
|
||||||
@@ -51,10 +55,14 @@ against the vendored `vendor/WDL` tree**, not lore.
|
|||||||
- **The real work is L1 — a shared drawing kit** — one small LICE-based
|
- **The real work is L1 — a shared drawing kit** — one small LICE-based
|
||||||
component/palette/type layer that the VST editor, the embed strip, and the bank panel
|
component/palette/type layer that the VST editor, the embed strip, and the bank panel
|
||||||
all draw through. It is the one source of drawing for the whole system.
|
all draw through. It is the one source of drawing for the whole system.
|
||||||
- **DS-2 SETTLED (2026-07-26): Direction B ("Neon Console") + Direction C's spectral
|
- **DS-2 SETTLED (2026-07-26), REVISED (2026-07-26): Direction B ("Neon Console") + Direction
|
||||||
keyboard strip** as the signature surface. Three visual directions are in §4; B+spectral
|
C's spectral keyboard strip** as the signature surface — now with a **three-accent pastel
|
||||||
is the settled target. "Speed is the selling point" is a **design constraint**, not a
|
system** (primary = pastel lime green, secondary = pastel teal, tertiary = pastel purple)
|
||||||
tagline: the UI must *feel* instant (§3.5).
|
in place of the original single electric-cyan accent. (A stylish-font upgrade was
|
||||||
|
considered and **declined** — no font bundling; the kit keeps its current face.) Three
|
||||||
|
visual directions are in §4; B+spectral with the pastel accents is the settled target.
|
||||||
|
"Speed is the selling point" is a **design constraint**, not a tagline: the UI must *feel*
|
||||||
|
instant (§3.5).
|
||||||
- **DS-3 SETTLED (2026-07-26): the dock-panel work is a real, thorough layout design, not
|
- **DS-3 SETTLED (2026-07-26): the dock-panel work is a real, thorough layout design, not
|
||||||
a light reskin.** L2 lays out the *full button inventory* (including M11's additions)
|
a light reskin.** L2 lays out the *full button inventory* (including M11's additions)
|
||||||
intuitively, uncluttered, and useful — §5.2.
|
intuitively, uncluttered, and useful — §5.2.
|
||||||
@@ -156,25 +164,93 @@ background `RGB(28,28,30)`, waveform/accent `RGB(120,200,160)`, cell `RGB(44,44,
|
|||||||
### 2.1 Structural roles (direction-independent)
|
### 2.1 Structural roles (direction-independent)
|
||||||
|
|
||||||
A modern dark UI is built from **elevation layers**, not borders. Define the palette by
|
A modern dark UI is built from **elevation layers**, not borders. Define the palette by
|
||||||
role, then let the direction set the accent:
|
role, then let the direction set the accent.
|
||||||
|
|
||||||
| Role | Purpose | Current | Direction |
|
**Neutral surfaces — REAPER-theme-matching mid-grey (DS-2 revised, 2026-07-26, Daniel).**
|
||||||
|
The neutral role ladder is **not near-black** — it sits in **REAPER's own mid-grey theme
|
||||||
|
family** so the dock reads as *part of REAPER*, not a black slab bolted on beside it.
|
||||||
|
Ground truth from Daniel's theme: REAPER's arrange/track background is a mid grey
|
||||||
|
(`~#373737`), window chrome / ruler / transport a touch darker (`~#2b2b2b`), body text a
|
||||||
|
light grey (`~#c8c8c8`–white). The DS-2 neutral ladder below matches that family. **The
|
||||||
|
elevation-ladder discipline is unchanged:** base < panel < cell, each a few percent
|
||||||
|
lighter, with the micro-gradient (§2.2) + 1px inner highlight/shadow still doing the
|
||||||
|
elevation work — REAPER differentiates surfaces by subtle steps, not hard borders, which
|
||||||
|
is exactly DS-2's "elevation layers, not borders" principle. Only the *values* moved up
|
||||||
|
from near-black into the grey range; the *structure* is identical:
|
||||||
|
|
||||||
|
| Role | Purpose | Current | Direction (DS-2 revised — REPER-grey neutrals) |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| `bg/base` | window canvas | `28,28,30` | deepen slightly + a **subtle top-down `LICE_GradRect`** (base look, not flat) |
|
| `bg/base` | window canvas | `28,28,30` | **REAPER chrome grey ≈ `43,43,43` (`#2b2b2b`)** + a **subtle top-down `LICE_GradRect`** (base look, not flat) |
|
||||||
| `bg/panel` | a raised region (list, waveform pane) | — (implicit) | one step lighter than base; elevation reads without a border |
|
| `bg/panel` | a raised region (list, waveform pane) | — (implicit) | **≈ `51,51,51` (`#333333`)** — one step lighter than base; elevation reads without a border |
|
||||||
| `bg/cell` | a control/row surface | `44,44,48` | as now, but with a 1px inner top highlight (the vwnd trick) |
|
| `bg/cell` | a control/row surface | `44,44,48` | **≈ `58,58,58` (`#3a3a3a`)** (matches REAPER track bg `~#373737`–`#3c3c3c`), with a 1px inner top highlight (the vwnd trick) |
|
||||||
| `line/hairline` | separators | `60,60,66` | keep, use sparingly — elevation should carry most separation |
|
| `line/hairline` | separators | `60,60,66` | **≈ `74,74,74` (`#4a4a4a`)** — a subtle step above cell; use sparingly, elevation should carry most separation |
|
||||||
| `text/primary` | labels, values | `210,230,220` | near-white, **must clear WCAG AA (4.5:1) on `bg/panel`** |
|
| `text/primary` | labels, values | `210,230,220` | **REAPER body light grey ≈ `220,220,220` (`#dcdcdc`)**, **must clear WCAG AA (4.5:1) on `bg/panel`/`bg/cell`** (clears ~8:1 — comfortable) |
|
||||||
| `text/dim` | secondary / units | — | a dimmer step, still **AA-large (3:1) minimum** — the WCAG floor, not below it |
|
| `text/dim` | secondary / units | — | a dimmer light-grey step ≈ `~160,160,160` (`#a0a0a0`), **must clear AA 4.5:1 on the greyer surfaces if used for body** (see §2.1 WCAG note — this is the newly tight pair) |
|
||||||
| `accent` | selection, active, focus | `120,200,160` | **Direction B: one vivid hue** (§4) — this is where the punch lives |
|
| `accent/primary` | live / active / selected layer | `120,200,160` | **pastel lime green** (§4) — the one that means "this is live"; where the punch lives |
|
||||||
| `accent/hot` | hover / live / drag feedback | — (absent) | a brighter accent tint; **today there is no hover color at all** |
|
| `accent/secondary` | supporting categorical role A | — | **pastel teal** — a second categorical hue (e.g. secondary zones, non-primary selection state) |
|
||||||
|
| `accent/tertiary` | supporting categorical role B | — | **pastel purple** — a third categorical hue (e.g. tertiary zones, a distinct affordance class) |
|
||||||
|
| `accent/hot` | hover / live / drag feedback | — (absent) | a brighter tint **of the primary accent**; **today there is no hover color at all** |
|
||||||
| `warn` | clip / destructive (prune, delete) | — | a red/amber reserved *only* for byte-deleting or clip states |
|
| `warn` | clip / destructive (prune, delete) | — | a red/amber reserved *only* for byte-deleting or clip states |
|
||||||
|
|
||||||
**WCAG-floor discipline (the "punch" rule, concretely):** for each text-on-surface pair,
|
**Three-accent role assignment (DS-2 revised).** The accent layer is now *three* pastel
|
||||||
pick the *most* saturated/vibrant accent that still clears its contrast floor — AA 4.5:1
|
hues, not one, so the palette can carry categorical meaning without leaning on saturation
|
||||||
for body text, 3:1 for large text and for UI-state indicators (selection borders, active
|
Daniel finds too loud. The coherent assignment:
|
||||||
fills). Do not retreat to safe grays "to be sure." The floor is the target, approached
|
- **`accent/primary` = pastel lime green** — the single "this is live/active/selected"
|
||||||
from the vibrant side.
|
signal. It does the same job the old single cyan did: it is the eye-magnet, used with
|
||||||
|
discipline for the live layer only (selection, active fill, focus-adjacent, the active
|
||||||
|
zone's glow). One primary keeps the "accent = live, never chrome" rule intact.
|
||||||
|
- **`accent/secondary` = pastel teal** and **`accent/tertiary` = pastel purple** — the
|
||||||
|
*categorical* distinctions that a single-accent palette had to fake with brightness. They
|
||||||
|
mark **kinds** of thing, not intensity: e.g. non-active zone bands on the keyboard strip,
|
||||||
|
a second/third action-cluster identity, or a supporting-state fill. They never out-shout
|
||||||
|
primary — primary is always the "what's live now" answer; secondary/tertiary are "what
|
||||||
|
category is this." The three read as a family (all pastel, adjacent-ish in the cool→warm
|
||||||
|
band), so the UI stays coherent, not carnival.
|
||||||
|
|
||||||
|
Primary/secondary/tertiary is a **role trio in the same constants block** as the rest —
|
||||||
|
adding two accents did not change the "one file, one direction" property (§2.1 opener).
|
||||||
|
|
||||||
|
**WCAG-floor discipline (the "punch" rule, re-read for pastels):** for each text-on-surface
|
||||||
|
pair, pick the value that still clears its contrast floor — AA 4.5:1 for body text, 3:1 for
|
||||||
|
large text and UI-state indicators (selection borders, active fills). With the old vivid
|
||||||
|
cyan the rule was "push to the floor *from the vibrant side*." **Pastels are the inverse
|
||||||
|
approach:** a pastel is intrinsically less saturated and (as a light-ish tint on a dark
|
||||||
|
surface) usually *brighter* than a vivid accent, so it clears the *large/state* floor more
|
||||||
|
easily than a vivid hue — though on the DS-2-revised **grey** surfaces the cushion is much
|
||||||
|
smaller than on near-black (see the grey re-read below). The tight case flips — **text
|
||||||
|
drawn on a pastel fill** (dark text on a light pastel, or the pastel as fill behind
|
||||||
|
`text/primary`) is where contrast can fail. So the rule becomes:
|
||||||
|
**take the most *pastel* (softest, least-saturated) value that still clears the floor,
|
||||||
|
approached from the soft side** — do not over-saturate a pastel back toward neon "to be
|
||||||
|
safe," and do not wash it out so far it drops a text pair below floor. The implementer runs
|
||||||
|
the theme module's WCAG tests and nudges each accent *within the pastel intent* until every
|
||||||
|
drawn pair clears. See §4 for concrete starting values and the pairs expected to be tight.
|
||||||
|
|
||||||
|
**WCAG re-read for the greyer neutrals (DS-2 revised — the load-bearing check).** Moving
|
||||||
|
the neutral surfaces *up* from near-black into REAPER's mid-grey makes two pairs *harder*,
|
||||||
|
because contrast against a lighter surface is smaller. Both must be re-verified against the
|
||||||
|
new grey ladder, not the old near-black:
|
||||||
|
- **`text/dim` on `bg/panel`/`bg/cell` — the classic mid-grey-on-mid-grey floor failure.**
|
||||||
|
A mid-grey dim text against a mid-grey surface is exactly where AA fails. At the starting
|
||||||
|
values a `~#9a9a9a`-`#a0a0a0` dim on `#333333`/`#3a3a3a` lands around **~4:1–4.4:1** — under
|
||||||
|
the AA 4.5:1 body floor and only just clearing the 3:1 large floor. **`text/dim` must be
|
||||||
|
lifted light enough (toward `~#a8a8a8`+) to clear AA 4.5:1 on the greyest surface it draws
|
||||||
|
body text on**, or be confined to large/UI-label use where the 3:1 floor applies. The
|
||||||
|
implementer locks the exact value against the test; the intent is "dim, but never below
|
||||||
|
the floor it is actually drawn against."
|
||||||
|
- **The three pastel accents on the greyer surfaces — the cushion shrank.** Pastels have
|
||||||
|
*less* contrast against mid-grey than against near-black. On near-black the three cleared
|
||||||
|
the 3:1 large/indicator floor by a huge margin (~15:1); on `bg/cell` `#3a3a3a` the same
|
||||||
|
pastels land around **~6:1–7:1** — still clearing 3:1, but the comfortable cushion is
|
||||||
|
gone. Every pastel used as a **state indicator / active fill** (selection border, active
|
||||||
|
zone, focus-adjacent) **must be re-verified to still clear the 3:1 large/indicator floor
|
||||||
|
on `bg/cell`, not on the old near-black.** If any pastel would drop below floor on grey,
|
||||||
|
the "punch from the soft side" rule now means **nudge that hue slightly deeper / more
|
||||||
|
saturated until it clears** — the hues stay pastel lime / teal / purple; only their
|
||||||
|
value/chroma may move a little. This is a real tension: the greyer background pulls the
|
||||||
|
pastels *toward* the floor at the same time the "keep it soft" rule pulls them away from
|
||||||
|
saturation. The implementer resolves it per-hue against the test, staying within the
|
||||||
|
pastel intent.
|
||||||
|
|
||||||
### 2.2 Motion of color, not just color
|
### 2.2 Motion of color, not just color
|
||||||
|
|
||||||
@@ -198,11 +274,14 @@ and it's exactly what `virtwnd`'s button/slider drawing does. Bake it into the k
|
|||||||
typographic variety: `title` (~15px semibold), `label` (~12px regular), `value`/`mono`
|
typographic variety: `title` (~15px semibold), `label` (~12px regular), `value`/`mono`
|
||||||
(~12px, tabular for note numbers / ms / dB so digits don't jitter during a drag),
|
(~12px, tabular for note numbers / ms / dB so digits don't jitter during a drag),
|
||||||
`micro` (~10px, dim, for units/counts). Four cached fonts total.
|
`micro` (~10px, dim, for units/counts). Four cached fonts total.
|
||||||
- **Font choice:** a clean UI sans is available on every Windows target (Segoe UI is the
|
- **Font face — keep the kit's current cached-font face (DS-2: no font change).** A
|
||||||
safe system default; the kit takes an `HFONT`, so the exact face is a one-line change).
|
stylish/bundled-font upgrade was considered and **declined by Daniel** — he does not want
|
||||||
For the numeric `value` role, a tabular/mono face (Consolas is universally present)
|
to bundle and redistribute a font. So the kit keeps its **current** face; this doc
|
||||||
keeps dragged numbers from reflowing. Windows-only (D5) means no cross-platform
|
specifies no new typeface. The win at §3.1 is entirely the *mechanism* — routing all text
|
||||||
font-fallback worry.
|
through a `LICE_CachedFont` (AA glyph cache, one weight/size scale, optional soft shadow
|
||||||
|
on titles) instead of raw GDI `DrawTextA` — not a new type family. The `HFONT` fed to
|
||||||
|
`SetFromHFont` stays the kit's existing choice; the "temple os → modern" jump is the AA
|
||||||
|
cached-glyph pipeline plus the type scale above, not the face.
|
||||||
- **Soft shadow on title/accent text only** (`LICE_FONT_FLAG_FX_SHADOW`) — subtle depth,
|
- **Soft shadow on title/accent text only** (`LICE_FONT_FLAG_FX_SHADOW`) — subtle depth,
|
||||||
used sparingly; body text stays crisp and flat for legibility.
|
used sparingly; body text stays crisp and flat for legibility.
|
||||||
|
|
||||||
@@ -264,7 +343,8 @@ house discipline). The set:
|
|||||||
- **Keyboard strip** — the bespoke S10 surface: white/black key lanes, zone bars as
|
- **Keyboard strip** — the bespoke S10 surface: white/black key lanes, zone bars as
|
||||||
translucent colored overlays, root markers. No prior art in the kit; it *defines* new
|
translucent colored overlays, root markers. No prior art in the kit; it *defines* new
|
||||||
kit primitives (key-lane fill, zone overlay). **Direction C's spectral treatment
|
kit primitives (key-lane fill, zone overlay). **Direction C's spectral treatment
|
||||||
(§4, DS-2 settled) lives here** — the hue-mapped keyboard is the signature surface.
|
(§4, DS-2 settled + revised) lives here** — the hue-mapped keyboard is the signature
|
||||||
|
surface, now a **pastel** sweep anchored on the three accent hues (§4).
|
||||||
|
|
||||||
### 3.5 Motion policy — "speed is the selling point," read as a constraint
|
### 3.5 Motion policy — "speed is the selling point," read as a constraint
|
||||||
|
|
||||||
@@ -292,12 +372,17 @@ instant, and no decoration may cost that.** Concretely —
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 4. Three visual directions (DS-2 SETTLED: B + C's spectral keyboard strip)
|
## 4. Three visual directions (DS-2 SETTLED: B + C's spectral keyboard strip; REVISED to pastel accents)
|
||||||
|
|
||||||
Each is a complete palette + treatment, not a shade of the same thing. All three are
|
Each is a complete palette + treatment, not a shade of the same thing. All three are
|
||||||
LICE-drawable today (no new dependency); all three honor the WCAG-floor "punch" rule.
|
LICE-drawable today (no new dependency); all three honor the WCAG-floor "punch" rule.
|
||||||
Ordered safe → bold. **Daniel settled (2026-07-26) on Direction B as the target, with
|
Ordered safe → bold. **Daniel settled (2026-07-26) on Direction B as the target, with
|
||||||
Direction C's spectral keyboard strip as the signature surface.**
|
Direction C's spectral keyboard strip as the signature surface** — then **revised the
|
||||||
|
accent layer (2026-07-26) from a single electric cyan to a three-accent pastel system**
|
||||||
|
(primary pastel lime green / secondary pastel teal / tertiary pastel purple), and
|
||||||
|
**revised the neutral surfaces (2026-07-26) from near-black up into REAPER's mid-grey theme
|
||||||
|
family** so the dock reads as part of REAPER, not a black slab (§2.1). Only the accent layer
|
||||||
|
and the neutral ladder changed; the direction (B + C's spectral strip) is unchanged.
|
||||||
|
|
||||||
### Direction A — "Studio Rack" (evolutionary; not selected)
|
### Direction A — "Studio Rack" (evolutionary; not selected)
|
||||||
|
|
||||||
@@ -311,49 +396,104 @@ controls get the vwnd inner-highlight/shadow treatment.
|
|||||||
make anyone say "sleek." Retained as the fallback if B/C ever feel too loud for a
|
make anyone say "sleek." Retained as the fallback if B/C ever feel too loud for a
|
||||||
pro-audio context, but Daniel's taste points away from it.
|
pro-audio context, but Daniel's taste points away from it.
|
||||||
|
|
||||||
### Direction B — "Neon Console" (contemporary synth; SETTLED default)
|
### Direction B — "Neon Console" (contemporary synth; SETTLED default, REVISED to pastel accents)
|
||||||
|
|
||||||
A modern soft-synth / plugin look: near-black background (`~18,18,22`) with a **single
|
A modern soft-synth / plugin look: **REAPER-theme mid-grey neutrals** (`bg/base` ≈
|
||||||
vivid accent** (electric cyan `~60,200,235` leads; hot magenta `~235,70,170` is the
|
`#2b2b2b`, `bg/panel` ≈ `#333333`, `bg/cell` ≈ `#3a3a3a` — the grey ladder in §2.1, matching
|
||||||
bolder sub-option), used with intent for the *live/active/selected* layer only. Everything
|
Daniel's REAPER theme so the dock is not a black box beside it), and the **accent layer
|
||||||
else is a calm neutral gray scale; the accent does all the punch. Waveforms and the
|
carries all the punch** — used with intent for the *live/active/selected* layer and for a
|
||||||
keyboard strip's active zone glow in the accent; inactive elements are quiet gray. This is
|
small number of categorical distinctions only. Everything else stays quiet grey. Waveforms
|
||||||
the "Serum / Vital / modern Arturia" idiom — vivid-accent-on-near-black.
|
and the keyboard strip's active zone glow in the **primary** accent; inactive/categorical
|
||||||
|
elements pick up secondary/tertiary. This is the "Serum / Vital / modern Arturia" idiom —
|
||||||
|
accent-on-dark — but **pastel, not neon,** and on **REAPER-grey rather than near-black**.
|
||||||
|
|
||||||
- **Feel:** a 2026 instrument. Sleek, focused, the accent guides the eye to what's live.
|
**Accent layer (DS-2 revised — three pastel accents, replacing the single electric cyan):**
|
||||||
- **Accent:** one vivid hue (cyan leads). Clears WCAG-large comfortably at full saturation
|
Daniel's call — "it's too CYAN, I prefer pastel hues" — swaps the one vivid cyan for a
|
||||||
on near-black — "push to the floor from the vibrant side." A second dimmer tint for
|
**three-hue pastel family**. Concrete *starting* values (the implementer locks final hex
|
||||||
hover. **This is the settled target** — the strong-but-safe center; the single-accent
|
against the WCAG tests — §2.1):
|
||||||
discipline is easy to keep coherent across VST + embed + panel.
|
|
||||||
- **Watch:** a single vivid accent can feel "gamer" if over-applied — discipline required
|
|
||||||
(accent = live only, never chrome). One hue is a commitment; changing it later is a
|
|
||||||
palette sweep (cheap in the shared kit — one constants block — but a sweep).
|
|
||||||
|
|
||||||
### Direction C — "Spectral" (bold; SETTLED for the keyboard strip)
|
| Role | Pastel | Starting RGB (hex) | Job |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `accent/primary` | pastel lime green | `~176,224,152` (`#B0E098`) | the live/active/selected signal — the eye-magnet |
|
||||||
|
| `accent/secondary` | pastel teal | `~132,214,208` (`#84D6D0`) | categorical role A (non-active zones, a second cluster) |
|
||||||
|
| `accent/tertiary` | pastel purple | `~194,170,232` (`#C2AAE8`) | categorical role B (tertiary zones, a distinct affordance class) |
|
||||||
|
| `accent/hot` | brighter primary tint | `~200,236,178` (`#C8ECB2`) | hover / live / drag feedback (a lighter pastel-lime) |
|
||||||
|
|
||||||
Lean *all the way* into vibrancy and depth. Near-black base, but the accent is a
|
These are light-ish, low-saturation tints. On the **REAPER-grey surfaces** (`bg/cell` ≈
|
||||||
**two-color gradient** — zones and the waveform aren't a flat accent, they're a
|
`#3a3a3a`) they still clear **AA-large (3:1)** and the **state-indicator** floor — but the
|
||||||
**hue-mapped gradient** (e.g. low notes cool-blue → high notes hot-magenta across the
|
margin is **much smaller than it was on near-black** (roughly ~6:1–7:1 on grey vs. ~15:1
|
||||||
keyboard strip; the waveform filled with a vertical accent gradient). Selection glows; the
|
on `#12121x`). This is a real DS-2-revision tension: **the greyer background pulls the
|
||||||
active zone has a soft outer bloom (`LICE_GradRect` halo). Multi-zone keymaps become
|
pastels toward the floor** at the same time the "keep it soft" rule pulls them away from
|
||||||
genuinely *beautiful* — each zone a band of the spectrum — which is exactly the
|
saturation. Approach from the **soft side** (§2.1) — keep them as pastel as possible while
|
||||||
"multi-zone-in-one-instance" capability that RS5K structurally lacks (the sharpest
|
still clearing the floor on **grey, not near-black** — but **if any pastel used as a state
|
||||||
"better than RS5K" claim, made *visual*).
|
indicator / active fill drops below 3:1 on `bg/cell`, nudge that hue slightly deeper /
|
||||||
|
more saturated until it clears** (hue stays lime/teal/purple; only value/chroma moves a
|
||||||
|
little). Re-verify against the grey ladder, not the old near-black values.
|
||||||
|
|
||||||
- **Feel:** premium, almost visualizer-grade. The keyboard strip becomes a signature — a
|
- **Feel:** a 2026 instrument, softer and calmer than a neon single-accent — the pastel
|
||||||
spectrum you play across.
|
family guides the eye to what's live (primary) and quietly categorizes the rest.
|
||||||
|
- **Watch — the tight pairs (flag for the implementer):**
|
||||||
|
- **Body text *on* a pastel fill.** When a pastel accent is a *fill* and `text/primary`
|
||||||
|
(light-grey `~220,220,220` / `#dcdcdc`) or a dark label sits on top, the pair can drop
|
||||||
|
below **AA 4.5:1** — pastels are mid-to-light, so light-grey-on-pastel is the risky
|
||||||
|
combination.
|
||||||
|
Where an accent is used as a filled surface behind body text, either (a) use a *dark*
|
||||||
|
near-black label on the light pastel (which clears easily) or (b) darken that specific
|
||||||
|
pastel fill until near-white clears 4.5:1. The theme test must cover every actual
|
||||||
|
text-on-accent-fill pair the kit draws.
|
||||||
|
- **Secondary vs. tertiary distinguishability.** Pastel teal and pastel purple are both
|
||||||
|
cool-ish and desaturated; verify they read as *distinct* categories, not two greys,
|
||||||
|
when adjacent (e.g. neighboring zone bands). Nudge tertiary warmer/more-violet if they
|
||||||
|
muddy.
|
||||||
|
- **Three pastels can drift "candy" if over-applied** — same discipline as before: accent
|
||||||
|
= live + a few categorical marks, never chrome. Coherence rule: keep all three clearly
|
||||||
|
in the pastel family (no one of them creeping back to full saturation).
|
||||||
|
- **Reversibility:** unchanged — all three accents live in the one constants block, so a
|
||||||
|
future re-pick (or a saturation nudge) is still a single-file change.
|
||||||
|
|
||||||
|
### Direction C — "Spectral" (bold; SETTLED for the keyboard strip; REVISED to a pastel sweep)
|
||||||
|
|
||||||
|
Lean into depth via a **hue-mapped gradient** across the signature surface: zones and the
|
||||||
|
waveform aren't a flat accent — the keyboard strip is a **spectrum you play across** (low
|
||||||
|
notes cool → high notes hot), the waveform filled with a vertical accent gradient. Selection
|
||||||
|
glows; the active zone has a soft outer bloom (`LICE_GradRect` halo, a *static* drawn state
|
||||||
|
— §3.5). Multi-zone keymaps become genuinely *beautiful* — each zone a band of the
|
||||||
|
spectrum — which is exactly the "multi-zone-in-one-instance" capability that RS5K
|
||||||
|
structurally lacks (the sharpest "better than RS5K" claim, made *visual*).
|
||||||
|
|
||||||
|
**How the spectral ramp relates to the three pastel accents (DS-2 revised).** The strip
|
||||||
|
keeps a **full low→high sweep**, but it is now a **pastel spectral ramp anchored on the
|
||||||
|
three accent hues** rather than a neon cool-blue→hot-magenta gradient — so the signature
|
||||||
|
surface stays coherent with "pastel, not neon" and visibly belongs to the same palette as
|
||||||
|
the rest of the UI. Concretely: the ramp runs **pastel-lime (primary, low) → pastel-teal
|
||||||
|
(secondary, mid) → pastel-purple (tertiary, high)** as a three-stop gradient through the
|
||||||
|
accent constants (or a slightly wider pastel arc that passes *through* those three anchor
|
||||||
|
points), keeping every stop in the pastel band. This ties the spectrum to the palette:
|
||||||
|
the same three hues that mean "live / category A / category B" elsewhere are the endpoints
|
||||||
|
and midpoint of the spectrum here, so the strip reads as an extension of the accent system,
|
||||||
|
not a separate neon flourish. The **active** zone still lifts to `accent/primary` +
|
||||||
|
its bloom, so "which zone is live" stays unambiguous over the categorical spectral bands.
|
||||||
|
|
||||||
|
- **Feel:** premium, almost visualizer-grade — but soft and cohesive, a pastel spectrum
|
||||||
|
rather than a rave. The keyboard strip is the signature; it is unmistakably the same
|
||||||
|
palette as the panel.
|
||||||
- **Settled scope:** **C's spectral treatment lands on the keyboard strip** (the signature
|
- **Settled scope:** **C's spectral treatment lands on the keyboard strip** (the signature
|
||||||
surface), over Direction B's Neon-Console chrome everywhere else. This is the
|
surface), over Direction B's Neon-Console chrome (now pastel-accented) everywhere else.
|
||||||
"modern-sleek center with one bold, identity-defining surface" Daniel chose — dial the
|
This is the "modern-sleek center with one bold, identity-defining surface" Daniel chose —
|
||||||
spectrum up (full C across more surfaces) or down (pure B) after seeing it on the DAW.
|
dial the spectrum wider (a broader pastel arc) or narrower (tight to the three anchors)
|
||||||
|
after seeing it on the DAW.
|
||||||
- **Watch:** gradients/bloom are easy to overdo into "toy"; the glow must stay a static
|
- **Watch:** gradients/bloom are easy to overdo into "toy"; the glow must stay a static
|
||||||
drawn state, never a pulse (§3.5); risks reading as *flashy* over *fast* if the speed
|
drawn state, never a pulse (§3.5); a pastel ramp has *less* inter-note contrast than a
|
||||||
|
neon one, so verify adjacent zone bands stay distinguishable (the same secondary-vs-
|
||||||
|
tertiary caution as Direction B); risks reading as *flashy* over *fast* if the speed
|
||||||
discipline slips.
|
discipline slips.
|
||||||
|
|
||||||
**Settled recommendation, now spec:** build the **kit palette abstractly** (roles, not
|
**Settled recommendation, now spec:** build the **kit palette abstractly** (roles, not
|
||||||
hardcoded colors — §2.1) so the direction is *one file of constants*; **default to
|
hardcoded colors — §2.1) so the direction is *one file of constants*; **default to
|
||||||
Direction B (Neon Console)** with **Direction C's spectral keyboard strip** as the
|
Direction B (Neon Console) with the three-accent pastel system** (primary lime / secondary
|
||||||
signature surface. Because the palette is abstract, a later re-pick is one file.
|
teal / tertiary purple) and **Direction C's pastel spectral keyboard strip** as the
|
||||||
|
signature surface. Because the palette is abstract, a later re-pick — or a saturation nudge
|
||||||
|
within the pastel intent — is one file.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -445,8 +585,10 @@ not a forecast of them. If L2 starts before M11 lands, it designs against a movi
|
|||||||
### 5.3 `L3` — VST editor + embed-strip restyle (GATED on Phase S landing on dev)
|
### 5.3 `L3` — VST editor + embed-strip restyle (GATED on Phase S landing on dev)
|
||||||
|
|
||||||
The ReaSampler 9000 VST editor (`IPlugView` LICE surface) and the S6 embed strip get the
|
The ReaSampler 9000 VST editor (`IPlugView` LICE surface) and the S6 embed strip get the
|
||||||
full kit treatment: cached-font text, kit component draws, the B+spectral palette, the
|
full kit treatment: kit cached-font text (§3.1 — the kit's current face, no bundled font),
|
||||||
spectral keyboard strip as the signature surface, hover/pressed/drag states everywhere.
|
kit component draws, the **B palette with the three-accent pastel system**
|
||||||
|
(primary lime / secondary teal / tertiary purple), the **pastel spectral keyboard strip**
|
||||||
|
as the signature surface, hover/pressed/drag states everywhere.
|
||||||
|
|
||||||
**L3 is explicitly GATED: these surfaces do not exist on dev yet.** The VST editor, the
|
**L3 is explicitly GATED: these surfaces do not exist on dev yet.** The VST editor, the
|
||||||
embed strip, and the keyboard strip live in Phase S, which has landed on the phase-s
|
embed strip, and the keyboard strip live in Phase S, which has landed on the phase-s
|
||||||
@@ -495,18 +637,49 @@ is gated on Phase S reaching dev. Phase S feature work proceeds in parallel, ung
|
|||||||
"temple os" look is drawing at LICE's floor, not hitting its ceiling. No new dependency,
|
"temple os" look is drawing at LICE's floor, not hitting its ceiling. No new dependency,
|
||||||
fully consistent with D-A.
|
fully consistent with D-A.
|
||||||
|
|
||||||
**Fork DS-2 — visual direction. SETTLED: Direction B (Neon Console) + Direction C's
|
**Fork DS-2 — visual direction. SETTLED 2026-07-26: Direction B (Neon Console) + Direction
|
||||||
spectral keyboard strip.**
|
C's spectral keyboard strip. REVISED 2026-07-26 (Daniel): three-accent pastel system.**
|
||||||
|
|
||||||
- **Settled:** **B** (near-black + one vivid accent, modern soft-synth idiom) as the
|
- **Settled (original):** **B** (near-black + one vivid accent, modern soft-synth idiom) as
|
||||||
system-wide target, with **C's spectral, hue-mapped keyboard strip** as the signature
|
the system-wide target, with **C's spectral, hue-mapped keyboard strip** as the signature
|
||||||
surface — the multi-zone-in-one-instance advantage made visual.
|
surface — the multi-zone-in-one-instance advantage made visual. The single accent was
|
||||||
|
**electric cyan**.
|
||||||
|
- **Revised (2026-07-26, Daniel) — accent layer:** the accent layer changes from **one
|
||||||
|
electric cyan** to a **three-accent pastel system** — **primary = pastel lime green,
|
||||||
|
secondary = pastel teal, tertiary = pastel purple**. The spectral keyboard strip becomes
|
||||||
|
a **pastel** sweep anchored on the three accents (§4 Direction C). This revision is
|
||||||
|
**palette-only.** *Rationale (Daniel, verbatim intent):* "the layout is a huge
|
||||||
|
improvement… the only thing I want to change is the cyan — it's too CYAN, I prefer pastel
|
||||||
|
hues… a three-color accent system, primary / secondary / tertiary as pastel lime green /
|
||||||
|
pastel teal / pastel purple" — too cyan; prefers pastel; wants three-accent
|
||||||
|
primary/secondary/tertiary.
|
||||||
|
- **Revised (2026-07-26, Daniel) — neutral surfaces:** the neutral role ladder moves
|
||||||
|
**from near-black up into REAPER's mid-grey theme family**, so the dock reads as *part of
|
||||||
|
REAPER, not a black slab bolted on beside it*. Concrete starting ladder (§2.1): `bg/base`
|
||||||
|
≈ `#2b2b2b` (REAPER chrome), `bg/panel` ≈ `#333333`, `bg/cell` ≈ `#3a3a3a` (REAPER track
|
||||||
|
bg), `line/hairline` ≈ `#4a4a4a`, `text/primary` ≈ `#dcdcdc`, `text/dim` ≈ `~#a0a0a0`+.
|
||||||
|
The **elevation-ladder discipline is unchanged** (base < panel < cell by a few %, micro-
|
||||||
|
gradient + inner highlight/shadow carry elevation, not hard borders). This shifts the WCAG
|
||||||
|
burden (§2.1 re-read): **`text/dim` on grey** and **the three pastels as state indicators
|
||||||
|
on grey** are now the tight pairs — mid-grey-on-mid-grey for dim text, shrunken pastel
|
||||||
|
cushion for the accents — the implementer re-verifies both against the grey ladder, not
|
||||||
|
near-black. *Rationale (Daniel, verbatim):* "we should adjust the neutral colors to be
|
||||||
|
more grey to match my REAPER theme… Text and surfaces should match" — the dock should
|
||||||
|
read as part of REAPER, not a black box.
|
||||||
|
- **Font upgrade — considered and DECLINED (Daniel, 2026-07-26).** A stylish/bundled-font
|
||||||
|
upgrade was on the table in an earlier draft of this revision and Daniel **declined it**:
|
||||||
|
he does not want to bundle and redistribute a font. The kit keeps its **current**
|
||||||
|
cached-font face; no new typeface is specified (§3.1). Recorded here so the question is
|
||||||
|
not re-raised — the §3.1 win is the AA cached-glyph mechanism, not the face.
|
||||||
- **Not selected:** **A Studio Rack** (evolutionary green — retained only as a fallback if
|
- **Not selected:** **A Studio Rack** (evolutionary green — retained only as a fallback if
|
||||||
B/C read too loud for pro-audio).
|
B/C read too loud for pro-audio).
|
||||||
- **Reasoning preserved:** modern-sleek center + one bold identity surface; Daniel reacts
|
- **Reasoning preserved:** modern-sleek center + one bold identity surface; the revision
|
||||||
better to bold than to conservative. The kit palette is abstract (roles, one constants
|
keeps that shape but trades neon punch for pastel calm (Daniel's taste, stated on seeing
|
||||||
block), so this is **reversible for ~one file** — a starting direction, not a permanent
|
the landed layout) and adds categorical meaning via the accent trio. The kit palette is
|
||||||
lock.
|
abstract (roles, one constants block — now three accent roles instead of one), so this is
|
||||||
|
still **reversible for ~one file** — a starting direction, not a permanent lock. The final
|
||||||
|
hex is the implementer's to lock against the theme module's WCAG tests, staying within the
|
||||||
|
pastel intent (the "soft-side" floor discipline, §2.1).
|
||||||
|
|
||||||
**Fork DS-3 — panel refresh scope. SETTLED: thorough layout redesign (not a light
|
**Fork DS-3 — panel refresh scope. SETTLED: thorough layout redesign (not a light
|
||||||
re-skin).**
|
re-skin).**
|
||||||
@@ -539,7 +712,9 @@ re-skin).**
|
|||||||
- **Read-only-over-bank untouched** — this is look-and-feel; no data-ownership change.
|
- **Read-only-over-bank untouched** — this is look-and-feel; no data-ownership change.
|
||||||
- **The instrument keeps the same VST3 class UID / component-state contract** — a visual
|
- **The instrument keeps the same VST3 class UID / component-state contract** — a visual
|
||||||
refresh is not a compat event (Phase S concern; noted for when L3 runs).
|
refresh is not a compat event (Phase S concern; noted for when L3 runs).
|
||||||
- **Windows-only (D5)** — the font/GDI/HFONT choices assume Windows; no cross-platform
|
- **Windows-only (D5)** — the extension's GDI/HFONT path assumes Windows; no cross-platform
|
||||||
font fallback concern.
|
font-fallback concern. The kit keeps its current cached-font face (no bundled font — DS-2
|
||||||
|
declined the font upgrade), so §3.1 introduces no new redistribution or cross-platform
|
||||||
|
font obligation.
|
||||||
- **Phase S is not gated on Phase L** — S7–S13 proceed in parallel; they adopt the kit
|
- **Phase S is not gated on Phase L** — S7–S13 proceed in parallel; they adopt the kit
|
||||||
when it lands. Phase L (L1/L2) is the live work on dev; L3 waits for Phase S to reach dev.
|
when it lands. Phase L (L1/L2) is the live work on dev; L3 waits for Phase S to reach dev.
|
||||||
|
|||||||
Reference in New Issue
Block a user