diff --git a/COMPLETED.md b/COMPLETED.md index cc9d507..b263fa5 100644 --- a/COMPLETED.md +++ b/COMPLETED.md @@ -1249,6 +1249,113 @@ CONTEXT.md §Prune (Settled forks). > by the M/D/B/R/V/S pillars. Authoritative spec: **CONTEXT.md §Phase L**. Product > framing + settled decisions (DS-1/DS-2/DS-3): `docs/product/visual-design-language.md`. +> **New pillar, own lettered namespace, taken up by a parallel team.** Phase L is the +> whole-system look-and-feel effort: a shared LICE drawing kit and the surfaces that +> adopt it, so ReaSampler and ReaSampler 9000 shed the flat "temple os" drawing for a +> modern, sleek 2026 dark synth look. It answers Daniel's post-DAW-test verdict on the +> instrument ("this looks like temple os… the VST is dogshit… scope it for the whole +> system… does Cockos have a toolkit?"). Namespaced **`L` (Look-and-feel)** so it is +> orthogonal to and ungated by the M/D/B/R/V/S pillars — a parallel team owns it while +> Phase S feature work proceeds independently. Authoritative spec: **CONTEXT.md §Phase L +> — visual design language (design-system spec)**. Product framing, the settled decision +> record (DS-1/DS-2/DS-3 all SETTLED 2026-07-26), palette, and the three visual +> directions: `docs/product/visual-design-language.md`. +> +> **L1 (shared LICE drawing kit — the foundation), L2 (dock-panel layout redesign), L3 +> (VST editor + embed-strip restyle), L4 (dock-panel button layout enhancement), L5 +> (dock-panel button refinements), L6 (toolbar polish), and L7 (capture ordering, card +> metadata, and selection styling) have all landed** — +> `theme`/palette module, `component_geometry` geometry/hit-test helpers, `draw_kit` shell, GDI +> `DrawText` retirement in `bank_panel` (L1); `action_bar` pure task-grouped layout module, full +> M11-aware button inventory placed by task cluster, `bank_panel` redesigned through the L1 kit +> (L2); VST editor (`reasampler_editor.cpp`) + embed strip (`reasampler_embed.cpp`) restyled +> through the L1 kit — REAPER-grey neutrals + three pastel accents, pastel spectral keyboard +> strip + zone bars, hover/pressed/drag states, local `kCol*` forest-green palette retired (L3); +> three-zone layout (top capture/placement/maintenance toolbar, bottom Design-View toolbar, +> footer toggle + Tail button + Prune), `footer_bar` pure module, `ActionCluster::Tagging`/ +> `Switching` in `action_bar` (L4); top-bar overflow menu (`overflow_menu` pure module), +> custom LICE-kit hover-delay tooltips (`tooltip` pure module), opposite-mode Item/Track tag +> buttons + Show Both, Toggle + Activate-Arrange/Design buttons removed, grouping spacing +> widened (`mode_enable` pure module) (L5); single-row button faces, keybinding in tooltip, +> Cancel RT moved to overflow, top-bar cluster order tidied (L6); per-bank `SlotMap` +> (id→slot) in `bank_book`, sparse-grid rendering, `card_drag` + `card_meta` pure modules, +> `captureTimeSigNum`/`captureTimeSigDenom` on `Sample`, tertiary-border selection (L7). See +> individual entries above. **Phase L is complete.** +> +> **This section is self-contained for a team without Phase S context.** Where a point +> touches a Phase S surface (the VST editor, the embed strip, the keyboard strip), the +> gate is stated explicitly so the team does not chase files that are not on dev yet. +> +> **Settled decisions (Daniel, 2026-07-26 — see `docs/product/visual-design-language.md` +> §6):** +> - **DS-1 — toolkit: LICE + WDL free game, no external frameworks.** Draw the modern +> look with LICE directly; reuse any useful WDL/vwnd piece (skin/image helpers, draw +> idioms, a control like the scroll listbox) where it beats re-deriving — "don't +> reinvent the wheel." Reject iPlug2 / JUCE / VSTGUI (external frameworks re-opening the +> 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. +> - **DS-2 — visual direction: Direction B ("Neon Console") + Direction C's spectral +> keyboard strip. SETTLED 2026-07-26, REVISED 2026-07-26 (Daniel) — 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`, `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 +> out the full button inventory (including M11's action-button additions) intuitively, +> uncluttered, and useful — then applies the kit. Sequenced after M11 merges. + +## Phase L — sequencing +``` +L1 (shared kit) ──► L2 (dock-panel layout redesign) [LANDED] + ├─────────► L3 (VST editor + embed-strip restyle) [LANDED] + └─────────► L4 (dock-panel button layout enhancement) [LANDED] + └────► L5 (dock-panel button refinements; ungated, after L4) [LANDED] + └────► L6 (toolbar polish; ungated, after L5) [LANDED] + └────► L7 (capture ordering + card metadata + selection styling; ungated, after L6) [LANDED] +``` +L1, L2, L3, L4, L5, L6, and L7 have all landed. **Phase L is complete.** + +## Phase L — must-verify-before-build +- **LICE design-kit surfaces (L1)** — `LICE_GradRect`, `LICE_RoundRect`, AA + `LICE_Line`/`LICE_FLine`/`LICE_ThickFLine`/`LICE_Circle`/`LICE_FillCircle`/ + `LICE_DrawCBezier`, `LICE_FillTriangle`/`FillTrapezoid`/`FillConvexPolygon`, and the + `LICE_CachedFont`/`LICE_IFont` font engine (`SetFromHFont`, AA `DrawText`, shadow/outline/ + glow FX flags). Verified *present* in `vendor/WDL/WDL/lice/lice.h` + `lice_text.h` + (design-language doc §1.1); **confirm exact signatures + the `LICE_CachedFont`↔`HFONT` + lifecycle at build.** +- **WDL/vwnd reuse assessment (DS-1)** — at build time, evaluate whether a vwnd piece beats + re-deriving it: `virtwnd-slider.cpp` / `vwnd_slider_drawknobstack` as the slider/knob + drawing reference, `virtwnd-listbox.cpp` as a candidate scroll listbox, `virtwnd-controls.h` + for `WDL_STYLE_*` gradient hooks, `virtwnd-skin.h` for image-skin helpers. Reuse where + useful; keep hit-test geometry pure regardless. +- **M11 button inventory (L2)** — resolved at L2 build: inventory taken against dev after + M11 merged; all buttons placed by task cluster in the landed `action_bar` module. +- **L4 re-home surface (L4)** — resolved at L4 build: three-zone layout confirmed against the + post-palette-revision `bank_panel`; `action_bar` extended with `ActionCluster::Tagging` + + `Switching`; new pure `footer_bar` module covers footer layout/hit-test. +- **L5 refinement surface (L5)** — resolved at L5 build: `TrackPopupMenu` overflow menu + confirmed; tooltip mechanism resolved as **custom LICE-kit hover-delay tooltip** (`tooltip` + pure module; sourced from the registered action phrase, prefix stripped at draw time); item-move + and track-tag action ids confirmed; active-mode read confirmed via the same + `view().activeModeId()` the footer toggle uses. +- **L7 model + tempo surface (L7)** — **RESOLVED at build (L7 landed).** Forks F1/F2/F3 all + confirmed: `TimeMap_GetTimeSigAtTime` confirmed at build for the meter stamp; SWELL stock + cursors chosen for drop-result cues (Reorder→IDC_SIZEALL, Move→IDC_HAND, Copy→IDC_UPARROW, + Replace→IDC_SIZEWE); existing pool-privilege guard reused as-is for Alt-replace. Gap navigation + in the grid = skip gaps (arrow keys skip empty slots). See individual entries §L7 above. + ## L1 — shared LICE drawing kit (the foundation) **Goal:** Stand up the shared LICE-based drawing kit that every Phase L surface (L2 dock panel, L3 VST editor) consumes — palette/theme module, pure component geometry/hit-test @@ -2441,3 +2548,67 @@ interaction grammar (snapshot-at-grab → off-audio-thread commit). Shell: `reas - [x] Snapshot-at-grab → off-audio-thread commit, matching S-VIEW-3 envelope-node pattern. - [x] Reads/writes existing `velocityCurve` on `PerformanceZone`; zones payload remains v7 — no schema change. + +--- + +## Phase S — product name (ReaSampler 9000) +The MIDI-playback instrument's product name is **ReaSampler 9000** (Daniel, 2026-07-26, +on DAW-testing the S1–S6 instrument). The extension remains **ReaSampler**; the instrument +is **ReaSampler 9000**. Framing + propagation surfaces: +`docs/product/midi-playback.md` §Product name. + +- [x] Propagate the display name **ReaSampler 9000** across user-visible surfaces: the VST3 + class **display name** string (in the factory registration), the `IPlugView` editor title + band (currently "ReaSampler Instrument"), the S6 embed-strip label, and the Phase S docs. + **Do NOT change the VST3 class UID** — instances in already-saved projects key off it; a + UID change orphans every existing instance. +- [x] **Rename the binary filename too (S-NAME-1 SETTLED, Daniel 2026-07-26):** rename the + built VST3 module (CMake `OUTPUT_NAME` / target artifact — e.g. `reasampler_9000.vst3`) + alongside the display strings, so the on-disk name matches the product name. Record the + full rename surface: **CMake output name** (the second VST3 target's artifact name), the + **factory vendor/name strings**, the **`IPlugView` editor title**, and the **S6 embed + label**. Do NOT touch the **VST3 class UID** (unchanged — the compat anchor). + +--- + +## Phase S — S-VIEW-1 through S-VIEW-10 (rolled-up) + +- [x] **S-VIEW-1 through S-VIEW-10** — all landed (Wave 1 core + Wave 2 shell + Wave 3 velocity-curve editor UI). See entries §S-VIEW-1 through §S-VIEW-10 above for the full entry set. + +--- + +# Phase D2 — Two-canvas (item-level mode projection; additive to D1) + +> **Design View sub-phase.** Extends D1's track-level mode projection to **item +> level** via REAPER 7 fixed lanes: on a track present in both stances, each mode +> owns a fixed lane — the active mode's lane shows and plays, the inactive mode's is +> hidden and silenced — so a Design take and an Arrange take can share the same +> track and time position without colliding on the view. Nothing in D1 changes. +> Runtime floor rises to **REAPER 7** for this sub-phase (no version-gate branch; +> below v7 it is simply unavailable). Authoritative spec: **CONTEXT.md §Two-canvas +> sub-phase (Phase D2 / Phase E)** and the surrounding §Design View — additive phase +> spec. Product framing: `docs/product/design-view.md` §Two-canvas direction. +> +> **D2-W1 (pure lane extension), D2-W2 (shell: lane application + new-content +> detection), D2-W3-A (lane minting + item→lane assignment + persist round-trip), +> and D2-W3-B (item-level mode actions + W3-A polish) have all landed** — see +> individual entries above. **Phase D2 is functionally complete.** +> +> **Deferred:** panel UI indicator for per-track lane/mode state (a per-track +> lane-split marker). The mode switch already shows the active mode; no natural +> cheap home for a per-track indicator was found in the bank panel. Explicitly +> deferred — not silently dropped. Can be picked up later if wanted. + +--- + +## Milestone 9 — slots (MPC-style) + +> **Abandoned (Daniel, 2026-07-27) — will not be built.** + +**Goal:** "Capture to slot N" / "insert slot N", MIDI-bindable. CONTEXT-ARCHIVE.md +Build order 9. +**Verify (in DAW):** Slot capture and slot insert fire from MIDI bindings; slot +state persists via the index. + +Slot model + slot↔sample assignment. +"Capture to slot N" / "insert slot N" actions, MIDI-bindable. diff --git a/PLAN.md b/PLAN.md index e3f5bc9..b28d112 100644 --- a/PLAN.md +++ b/PLAN.md @@ -14,18 +14,6 @@ it here and appends it to `COMPLETED.md`. --- -## Milestone 9 — slots (MPC-style) - -> **Abandoned (Daniel, 2026-07-27) — will not be built.** - -**Goal:** "Capture to slot N" / "insert slot N", MIDI-bindable. CONTEXT-ARCHIVE.md -Build order 9. -**Verify (in DAW):** Slot capture and slot insert fire from MIDI bindings; slot -state persists via the index. - -- [ ] Slot model + slot↔sample assignment. -- [ ] "Capture to slot N" / "insert slot N" actions, MIDI-bindable. - ## Open questions to resolve during build Carried from CONTEXT.md §Open questions — keep visible until each is closed by a landed milestone. @@ -40,21 +28,7 @@ landed milestone. # Phase D2 — Two-canvas (item-level mode projection; additive to D1) -> **Design View sub-phase.** Extends D1's track-level mode projection to **item -> level** via REAPER 7 fixed lanes: on a track present in both stances, each mode -> owns a fixed lane — the active mode's lane shows and plays, the inactive mode's is -> hidden and silenced — so a Design take and an Arrange take can share the same -> track and time position without colliding on the view. Nothing in D1 changes. -> Runtime floor rises to **REAPER 7** for this sub-phase (no version-gate branch; -> below v7 it is simply unavailable). Authoritative spec: **CONTEXT.md §Two-canvas -> sub-phase (Phase D2 / Phase E)** and the surrounding §Design View — additive phase -> spec. Product framing: `docs/product/design-view.md` §Two-canvas direction. When a -> point lands, doc-keeper moves it to `COMPLETED.md`. -> -> **D2-W1 (pure lane extension), D2-W2 (shell: lane application + new-content -> detection), D2-W3-A (lane minting + item→lane assignment + persist round-trip), -> and D2-W3-B (item-level mode actions + W3-A polish) have all landed** — see -> `COMPLETED.md`. **Phase D2 is functionally complete.** +> **Phase D2 is functionally complete** — D2-W1, D2-W2, D2-W3-A, D2-W3-B all landed; see `COMPLETED.md`. > > **Deferred:** panel UI indicator for per-track lane/mode state (a per-track > lane-split marker). The mode switch already shows the active mode; no natural @@ -90,58 +64,12 @@ landed milestone. ingest path. Requires (a) a new instrument WRITE seam into ext-state and (b) an extension-side timer poller + claim/clear nonce. A future wave when the design is ready. -## Phase S — held and optional-forever (noted, not specified) - -> S3–S11 have landed; archived in `COMPLETED.md`. S12 and S13 (partial) have also -> landed; archived in `COMPLETED.md`. The cross-artifact relay (S13) remains deferred — see §S13 above. - -> S8 has landed; archived in `COMPLETED.md`. - -> S9 has landed; archived in `COMPLETED.md`. - -> **S0-DS moved to Phase L (2026-07-26).** The shared LICE drawing kit that stood here is -> now **Phase L point L1** on `dev` — see PLAN.md §Phase L + CONTEXT.md §Phase L and -> `docs/product/visual-design-language.md` (all on `dev`). S10–S13 below build with the -> current drawing and **adopt the L1 kit when it lands — not gated on Phase L.** - -> S10, S10-Z, and S11 have landed; archived in `COMPLETED.md`. - -> S12 has landed; archived in `COMPLETED.md`. - -> S13 (drop-to-load) has partially landed; archived in `COMPLETED.md`. Cross-artifact relay remains deferred — see §S13 above. - -> S15 has landed; archived in `COMPLETED.md`. - -> S16 has landed; archived in `COMPLETED.md`. - -> S17 has landed; archived in `COMPLETED.md`. - -> S18 has landed; archived in `COMPLETED.md`. - -> **S14 moved to Phase L (2026-07-26).** The dock-panel refresh that stood here is now -> **Phase L point L2** on `dev` — and, per Daniel's DS-3 call, expanded from a light re-skin -> into a **thorough dock-panel layout redesign** that lays out the full M11-aware button -> inventory before applying the kit. See PLAN.md §Phase L + CONTEXT.md §Phase L and -> `docs/product/visual-design-language.md` (all on `dev`). The design-system forks DS-1/ -> DS-2/DS-3 are all **SETTLED (2026-07-26)** and recorded in the Phase L docs on `dev`. - ## Phase S — product name (ReaSampler 9000) The MIDI-playback instrument's product name is **ReaSampler 9000** (Daniel, 2026-07-26, on DAW-testing the S1–S6 instrument). The extension remains **ReaSampler**; the instrument is **ReaSampler 9000**. Framing + propagation surfaces: `docs/product/midi-playback.md` §Product name. -- [ ] Propagate the display name **ReaSampler 9000** across user-visible surfaces: the VST3 - class **display name** string (in the factory registration), the `IPlugView` editor title - band (currently "ReaSampler Instrument"), the S6 embed-strip label, and the Phase S docs. - **Do NOT change the VST3 class UID** — instances in already-saved projects key off it; a - UID change orphans every existing instance. -- [ ] **Rename the binary filename too (S-NAME-1 SETTLED, Daniel 2026-07-26):** rename the - built VST3 module (CMake `OUTPUT_NAME` / target artifact — e.g. `reasampler_9000.vst3`) - alongside the display strings, so the on-disk name matches the product name. Record the - full rename surface: **CMake output name** (the second VST3 target's artifact name), the - **factory vendor/name strings**, the **`IPlugView` editor title**, and the **S6 embed - label**. Do NOT touch the **VST3 class UID** (unchanged — the compat anchor). - [ ] **Compat verification (must-DAW-verify before shipping the rename):** the working assumption is that REAPER **rebinds a saved instance by its VST3 class UID, not by the module filename**, so a filename rename with an unchanged UID keeps saved projects working @@ -153,6 +81,8 @@ is **ReaSampler 9000**. Framing + propagation surfaces: state. If REAPER does key partly on filename, fall back to keeping the current filename (display-strings-only) and record that as the shipped choice. +## Phase S — held and optional-forever (noted, not specified) + - **Tier 2 — "expressive" (HELD).** Velocity layers, round-robin (anti-machine-gun), full ADSR, per-sample tuning/gain trim, sustain loops. The next depth increment once Tier 0–1 proves the instrument belongs — **its points are not drawn up here.** @@ -207,9 +137,6 @@ fenced root + preview-trigger + control strip) with no scroll; Browse opens as a Sample, select+confirm loads a new capture; Zone opens on its own button, key-tracking + the piano-key pattern work; drop-a-capture-onto-FX instantiates a playing instance. -- [x] **S-VIEW-1 through S-VIEW-10** — all landed (Wave 1 core + Wave 2 shell + Wave 3 velocity-curve editor UI). See `COMPLETED.md` - §S-VIEW for the full entry set. - ### Phase S editor Wave B — Sample-face recomposition (r11; Daniel, 2026-07-27) > Daniel's post-landing DAW pass on the S-VIEW editor: **all linear sliders → small radial @@ -251,12 +178,6 @@ piano-key pattern work; drop-a-capture-onto-FX instantiates a playing instance. fork ledger: **R11-F1** hero height vs. default window (lean: elastic hero, keep 840×620); **R11-F2** Zone-panel parity (lean: yes — one grammar). -### Phase S editor prerequisites — routed to staff-engineer (bug + default; NOT design forks) - -> Framed in CONTEXT.md §S-VIEW; both are functional prerequisites with the SDK swept and no -> platform ceiling — a diagnosis and a one-line default, not product decisions. -> **S-VIEW-BUG-1 and S-VIEW-SIZE-1 have both landed (Wave 1) — see `COMPLETED.md`.** - ### Phase S editor redesign — forks (Daniel's to call) *(r9/r10 forks all settled: S-VIEW-F1 and S-VIEW-F2 SETTLED 2026-07-27 — folded into S-VIEW-4 / S-VIEW-3. F1: preview velocity persists via envelope-v6 `ComponentState`. F2: envelope nodes are @@ -267,117 +188,6 @@ full-window modal over Sample (landed in S-VIEW-1/S-VIEW-5). **r11 opens two new --- -# Phase L — Look-and-feel (system-wide visual design language) - -> **New pillar, own lettered namespace, taken up by a parallel team.** Phase L is the -> whole-system look-and-feel effort: a shared LICE drawing kit and the surfaces that -> adopt it, so ReaSampler and ReaSampler 9000 shed the flat "temple os" drawing for a -> modern, sleek 2026 dark synth look. It answers Daniel's post-DAW-test verdict on the -> instrument ("this looks like temple os… the VST is dogshit… scope it for the whole -> system… does Cockos have a toolkit?"). Namespaced **`L` (Look-and-feel)** so it is -> orthogonal to and ungated by the M/D/B/R/V/S pillars — a parallel team owns it while -> Phase S feature work proceeds independently. Authoritative spec: **CONTEXT.md §Phase L -> — visual design language (design-system spec)**. Product framing, the settled decision -> record (DS-1/DS-2/DS-3 all SETTLED 2026-07-26), palette, and the three visual -> directions: `docs/product/visual-design-language.md`. When a point lands, doc-keeper -> moves it to `COMPLETED.md`. -> -> **L1 (shared LICE drawing kit — the foundation), L2 (dock-panel layout redesign), L3 -> (VST editor + embed-strip restyle), L4 (dock-panel button layout enhancement), L5 -> (dock-panel button refinements), L6 (toolbar polish), and L7 (capture ordering, card -> metadata, and selection styling) have all landed** — -> `theme`/palette module, `component_geometry` geometry/hit-test helpers, `draw_kit` shell, GDI -> `DrawText` retirement in `bank_panel` (L1); `action_bar` pure task-grouped layout module, full -> M11-aware button inventory placed by task cluster, `bank_panel` redesigned through the L1 kit -> (L2); VST editor (`reasampler_editor.cpp`) + embed strip (`reasampler_embed.cpp`) restyled -> through the L1 kit — REAPER-grey neutrals + three pastel accents, pastel spectral keyboard -> strip + zone bars, hover/pressed/drag states, local `kCol*` forest-green palette retired (L3); -> three-zone layout (top capture/placement/maintenance toolbar, bottom Design-View toolbar, -> footer toggle + Tail button + Prune), `footer_bar` pure module, `ActionCluster::Tagging`/ -> `Switching` in `action_bar` (L4); top-bar overflow menu (`overflow_menu` pure module), -> custom LICE-kit hover-delay tooltips (`tooltip` pure module), opposite-mode Item/Track tag -> buttons + Show Both, Toggle + Activate-Arrange/Design buttons removed, grouping spacing -> widened (`mode_enable` pure module) (L5); single-row button faces, keybinding in tooltip, -> Cancel RT moved to overflow, top-bar cluster order tidied (L6); per-bank `SlotMap` -> (id→slot) in `bank_book`, sparse-grid rendering, `card_drag` + `card_meta` pure modules, -> `captureTimeSigNum`/`captureTimeSigDenom` on `Sample`, tertiary-border selection (L7). See -> `COMPLETED.md`. **Phase L is complete.** -> -> **This section is self-contained for a team without Phase S context.** Where a point -> touches a Phase S surface (the VST editor, the embed strip, the keyboard strip), the -> gate is stated explicitly so the team does not chase files that are not on dev yet. -> -> **Settled decisions (Daniel, 2026-07-26 — see `docs/product/visual-design-language.md` -> §6):** -> - **DS-1 — toolkit: LICE + WDL free game, no external frameworks.** Draw the modern -> look with LICE directly; reuse any useful WDL/vwnd piece (skin/image helpers, draw -> idioms, a control like the scroll listbox) where it beats re-deriving — "don't -> reinvent the wheel." Reject iPlug2 / JUCE / VSTGUI (external frameworks re-opening the -> 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. -> - **DS-2 — visual direction: Direction B ("Neon Console") + Direction C's spectral -> keyboard strip. SETTLED 2026-07-26, REVISED 2026-07-26 (Daniel) — 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`, `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 -> out the full button inventory (including M11's action-button additions) intuitively, -> uncluttered, and useful — then applies the kit. Sequenced after M11 merges. - -## Phase L — sequencing -``` -L1 (shared kit) ──► L2 (dock-panel layout redesign) [LANDED] - ├─────────► L3 (VST editor + embed-strip restyle) [LANDED] - └─────────► L4 (dock-panel button layout enhancement) [LANDED] - └────► L5 (dock-panel button refinements; ungated, after L4) [LANDED] - └────► L6 (toolbar polish; ungated, after L5) [LANDED] - └────► L7 (capture ordering + card metadata + selection styling; ungated, after L6) [LANDED] -``` -L1, L2, L3, L4, L5, L6, and L7 have all landed. **Phase L is complete.** - -## Phase L — must-verify-before-build -- **LICE design-kit surfaces (L1)** — `LICE_GradRect`, `LICE_RoundRect`, AA - `LICE_Line`/`LICE_FLine`/`LICE_ThickFLine`/`LICE_Circle`/`LICE_FillCircle`/ - `LICE_DrawCBezier`, `LICE_FillTriangle`/`FillTrapezoid`/`FillConvexPolygon`, and the - `LICE_CachedFont`/`LICE_IFont` font engine (`SetFromHFont`, AA `DrawText`, shadow/outline/ - glow FX flags). Verified *present* in `vendor/WDL/WDL/lice/lice.h` + `lice_text.h` - (design-language doc §1.1); **confirm exact signatures + the `LICE_CachedFont`↔`HFONT` - lifecycle at build.** -- **WDL/vwnd reuse assessment (DS-1)** — at build time, evaluate whether a vwnd piece beats - re-deriving it: `virtwnd-slider.cpp` / `vwnd_slider_drawknobstack` as the slider/knob - drawing reference, `virtwnd-listbox.cpp` as a candidate scroll listbox, `virtwnd-controls.h` - for `WDL_STYLE_*` gradient hooks, `virtwnd-skin.h` for image-skin helpers. Reuse where - useful; keep hit-test geometry pure regardless. -- **M11 button inventory (L2)** — resolved at L2 build: inventory taken against dev after - M11 merged; all buttons placed by task cluster in the landed `action_bar` module. -- **L4 re-home surface (L4)** — resolved at L4 build: three-zone layout confirmed against the - post-palette-revision `bank_panel`; `action_bar` extended with `ActionCluster::Tagging` + - `Switching`; new pure `footer_bar` module covers footer layout/hit-test. -- **L5 refinement surface (L5)** — resolved at L5 build: `TrackPopupMenu` overflow menu - confirmed; tooltip mechanism resolved as **custom LICE-kit hover-delay tooltip** (`tooltip` - pure module; sourced from the registered action phrase, prefix stripped at draw time); item-move - and track-tag action ids confirmed; active-mode read confirmed via the same - `view().activeModeId()` the footer toggle uses. -- **L7 model + tempo surface (L7)** — **RESOLVED at build (L7 landed).** Forks F1/F2/F3 all - confirmed: `TimeMap_GetTimeSigAtTime` confirmed at build for the meter stamp; SWELL stock - cursors chosen for drop-result cues (Reorder→IDC_SIZEALL, Move→IDC_HAND, Copy→IDC_UPARROW, - Replace→IDC_SIZEWE); existing pool-privilege guard reused as-is for Alt-replace. Gap navigation - in the grid = skip gaps (arrow keys skip empty slots). See `COMPLETED.md` §L7. ---- - # Phase Q — Quality (structural reorganization; zero-runtime-cost) > **New pillar, own lettered namespace, and — uniquely — the LAST structural pillar.** Phase