@@ -64,6 +64,252 @@ Detailed per-round entries below.
6464
6565---
6666
67+ ## Unreleased — 2026-05-01 (build 637, dark-only theme + final palette unification)
68+
69+ ### Theme: dark-only (light-theme support removed)
70+
71+ The app has been dark-first for its entire history; light-mode paths
72+ were half-implemented (the modal-overlay had its own duplicate
73+ ` --wl-bg ` block, several inline-styled elements assumed dark bg, and
74+ no test passes covered the light-bg case). Rather than complete the
75+ light-theme work, removed it:
76+
77+ - Collapsed ` :root ` (light defaults) and ` body.wl-dark ` (dark
78+ overrides) into a single ` :root ` block in
79+ ` whitelist_manager.css ` . Net: ~ 70 lines deleted, no duplication.
80+ - Removed the ` body.wl-dark > .wl-modal-overlay ` re-tightening block
81+ (modals now inherit all vars from ` :root ` directly).
82+ - Simplified ` wl_ui.js :: detectDarkTheme() ` to unconditionally
83+ apply ` wl-dark ` to ` <body> ` and return ` true ` . The 19 existing
84+ ` .wl-dark X ` selectors in ` whitelist_manager.css ` continue to
85+ match because the class is always present — they're functionally
86+ redundant but harmless and can be flattened in a follow-up.
87+
88+ Rationale: open-source release target, no paying customers, no
89+ demand for light theme. Collapsing the parallel theme system
90+ removes a class of failure modes (the half-converted state seen
91+ during the build-636 light-theme test) and simplifies the CSS.
92+
93+ Reversal cost: medium — re-introduce ` :root ` light vars, re-add
94+ the ` body.wl-dark ` selector wrapping, restore the brightness check
95+ in ` detectDarkTheme() ` .
96+
97+ ### UI consistency: drift sweep across Audit Trail + Control Panel
98+
99+ Beyond the modal hygiene shipped in build 636, this build sweeps
100+ remaining inline-style drift in the dashboards:
101+
102+ ** Audit Trail** (` default/data/ui/views/audit.xml ` + ` audit_trail.js ` ):
103+
104+ - "Close Details" span had hardcoded inline ` background:#c0392b `
105+ (vivid Bootstrap red) and was missing keyboard a11y. Migrated to
106+ ` class="btn btn-danger" role="button" tabindex="0" ` matching the
107+ rest of the app's destructive-button styling. Added ` keydown `
108+ handler in ` audit_trail.js ` for Enter/Space activation.
109+ - Splunk strips ` <button> ` from SimpleXML ` <html> ` panels (CLAUDE.md
110+ documented Splunk quirk), so this control has to remain a ` <span> `
111+ — the role/tabindex/key-handler combo gives it minimal a11y parity.
112+
113+ ** Control Panel** (` control_panel.js ` ):
114+
115+ - Lockdown banner: vivid ` #c0392b ` → muted ` #a93226 ` (matches
116+ ` .btn-danger ` family).
117+ - "Show Data" buttons (queue list, history list): removed inline
118+ ` background:#3498db;color:#fff ` so they default to Splunk's ` .btn `
119+ grey. Show Data is a neutral inspection action — doesn't fit
120+ primary/danger/warning roles.
121+ - "Save as Default" / "Reset to Factory Defaults": same treatment —
122+ removed vivid blue/grey inline backgrounds, default to ` .btn ` grey.
123+ - LIMIT badge / RESET badge: vivid ` #e74c3c ` → muted ` #a93226 ` .
124+ - LIMIT-reached count text: stays at vivid ` #e74c3c ` (text on dark
125+ bg needs higher contrast — muted red would fail AA).
126+ - FACTORY badge (grey ` #95a5a6 ` ): unchanged, doesn't conflict.
127+
128+ ### Modal hygiene round 2
129+
130+ Two more modals had inline-style "actions row" divs replicating
131+ ` .wl-modal-actions ` styling:
132+
133+ - ` wl_modals.js:159 ` — Remove rule/CSV modal actions row
134+ - ` wl_save.js:451 ` — Audit Comment Required modal actions row
135+
136+ Migrated both to ` class="wl-modal-actions" ` . Now ALL 19+ dialog
137+ modals render their button row through the shared class.
138+
139+ ### Focus ring colour: harmonized with Splunk's accent
140+
141+ ` .btn:focus-visible ` outline changed from ` #2962ff ` (vivid blue)
142+ to ` #2196f3 ` (Material Blue 500). Splunk's bundled accent is
143+ ` #006eaa ` but contrast on our dark bg is only 2.97:1 — just below
144+ WCAG 1.4.11's 3:1 minimum for focus indicators. ` #2196f3 ` stays in
145+ the Splunk-blue family, gives 6.0:1 contrast, and is distinct from
146+ every button colour (green/red/orange) so the focus ring never
147+ visually merges with the button it surrounds.
148+
149+ ### Notification badge unified with ` .btn-danger ` palette
150+
151+ ` .wl-notif-badge ` background changed from ` #e74c3c ` (vivid Bootstrap
152+ red) to ` #a93226 ` (muted, matches ` .btn-danger ` ). Single-red-family
153+ palette across buttons + badges + banners. Contrast against white
154+ text: 7.66:1 (excellent for the 16x16 px badge).
155+
156+ ### ` .btn-warning ` semantic role documented
157+
158+ Reviewed the 4 ` .btn-warning ` callsites — all "Cancel pending
159+ approval request" actions. Decision: KEEP ` .btn-warning ` for these
160+ sites because they have external impact (admins watching the queue
161+ see the request disappear), which fits the "reversible but
162+ consequential" semantic that warns/oranges traditionally signal.
163+ The CSS comment now spells out: reserve ` .btn-warning ` for actions
164+ that affect more than the immediate dialog; use plain ` .btn ` grey
165+ for dismiss-this-modal interactions.
166+
167+ ### Migration / rollback
168+
169+ - Light-theme: re-add ` :root ` light vars, re-add ` body.wl-dark `
170+ override block, restore brightness check in ` detectDarkTheme() ` .
171+ Estimated 30 minutes if reverting becomes necessary.
172+ - Drift sweep: per-callsite single-line revert. All edits are
173+ surface-level visual changes — no behaviour change beyond colour.
174+ - Focus ring: revert one hex value in CSS.
175+
176+ ---
177+
178+ ## Unreleased — 2026-05-01 (build 636, audit follow-up: contrast + modal hygiene)
179+
180+ ### Accessibility: ` .btn-warning ` AA contrast (gap 2)
181+
182+ The build-634 desaturation pass set ` .btn-warning ` to ` #bf6516 ` for less
183+ eye-fatigue, which improved the visual but DROPPED the contrast against
184+ white text from 5.9:1 (vivid ` #e65100 ` ) to 4.04:1 — below WCAG AA's
185+ 4.5:1 floor for normal text. Hover (` #d67828 ` ) was even worse at 3.0:1.
186+ Fixed by darkening to ` #a85710 ` (5.20:1) and ` #b25d12 ` (4.69:1). Border
187+ darkened to ` #7a3f0c ` to keep the visual hierarchy.
188+
189+ The button stays muted (still distinguishable from ` .btn-danger ` 's
190+ muted red ` #a93226 ` via hue) and now passes AA on both default and
191+ hover states. Disabled state is intentionally below AA per WCAG 1.4.3
192+ exemption for inactive UI components — that lower contrast IS the
193+ "disabled" signal.
194+
195+ ### Modal hygiene: 3 header drifts → standard structure (gap 4)
196+
197+ Three modals were rendering their title via ` <h3 style="margin-top:0"> `
198+ inline-styled tag instead of the standard ` .wl-modal-header ` class:
199+
200+ - ` wl_modals.js:130 ` — Remove rule/CSV modal
201+ - ` wl_modals.js:365 ` — "Approval Required" reason prompt
202+ - ` wl_save.js:439 ` — "Audit Comment Required" save prompt
203+
204+ These rendered with subtly-different font size (browser-default ` <h3> `
205+ ~ 18px) than the rest of the app's modals (` .wl-modal-header ` is 15px,
206+ 600 weight). All three migrated to ` <div class="wl-modal-header"> ` .
207+ Width-tuning inline styles (` max-width:520px ` etc.) were preserved
208+ since they're per-modal sizing, not drift.
209+
210+ ### Button-order audit (gap 5)
211+
212+ After the build-634 ` showCpPrompt ` fix, ALL 19 dialog modals across
213+ ` control_panel.js ` , ` wl_modals.js ` , ` wl_versions.js ` , ` wl_presence.js ` ,
214+ ` wl_save.js ` , ` wl_csv_io.js ` , ` wl_table.js ` follow the
215+ ` [Primary] [Cancel] ` DOM order. The Import-CSV modal at
216+ ` wl_csv_io.js:694 ` uses ` [Replace] [Merge] [Cancel] ` (3 buttons,
217+ destructive option leftmost) — deliberate UX choice, not drift.
218+
219+ ### E2E test impact (gap 3)
220+
221+ Zero E2E test files (` tests/e2e/*.cjs ` ) reference ` btn-success ` . The
222+ build-635 class rename is safe.
223+
224+ ### Light-theme verification (gap 1)
225+
226+ Button colours (` .btn.btn-primary ` , ` .btn.btn-danger ` , ` .btn.btn-warning ` )
227+ use explicit hex values, NOT CSS variables — they render identically
228+ in light and dark themes. Brand colours for "destructive red" and
229+ "warning orange" should not flip between themes. Modal backgrounds
230+ DO use ` var(--wl-bg) ` etc. and switch correctly via the existing
231+ ` body.wl-dark ` override.
232+
233+ ### Migration / rollback
234+
235+ - Revert this change set: revert the CHANGELOG entry, revert
236+ ` whitelist_manager.css ` warning hex values to ` #bf6516 ` /` #d67828 ` ,
237+ revert the 3 ` <h3 style=...> ` → ` <div class="wl-modal-header"> `
238+ edits, bump back to the previous build (originally build 635).
239+
240+ ---
241+
242+ ## Unreleased — 2026-05-01 (build 635, kill ` .btn-success ` parallel taxonomy)
243+
244+ ### UI consistency: collapse green buttons to Splunk's ` .btn-primary `
245+
246+ Build 634 originally desaturated ` .btn-success ` to ` #388e3c ` , but ` .btn-primary `
247+ (used for "+ Add Row", "+ Add Column") stayed at Splunk's bundled vivid
248+ ` #1a8929 ` . Result: same toolbar showed two slightly-different greens
249+ (Save Changes vs Add Row) — the user flagged this as visible drift.
250+
251+ Fixed by killing ` .btn-success ` entirely and migrating all 5 callsites
252+ to ` .btn-primary ` :
253+
254+ - ` appserver/static/control_panel.js:474 ` — Approve button (queue list)
255+ - ` appserver/static/modules/wl_approval_ui.js:418 ` — Approve (notification panel)
256+ - ` appserver/static/modules/wl_modals.js:883 ` — Approve modal
257+ - ` appserver/static/modules/wl_table.js:334 ` — Save Changes button
258+ - ` appserver/static/whitelist_manager.css:1306-1352 ` — ` .btn.btn-success `
259+ rule + hover + disabled-state selector removed
260+
261+ All green buttons in the app now share Splunk's bundled ` .btn-primary `
262+ (` #1a8929 ` ). Same playbook as the 2026-05-01 ` .wl-btn ` kill: don't
263+ maintain a parallel CSS taxonomy if a Splunk-bundled equivalent works.
264+
265+ ` .btn-danger ` (muted brick red ` #a93226 ` ) and ` .btn-warning ` (muted
266+ orange ` #bf6516 ` — historical, superseded in build 636) remain in CSS because
267+ Splunk's bundle ships these classes unstyled.
268+
269+ ### Migration / rollback
270+
271+ - Revert: re-add the ` .btn.btn-success ` rule (with desired shade) to
272+ ` whitelist_manager.css ` , revert the 5 callsite class strings.
273+
274+ ---
275+
276+ ## Unreleased — 2026-05-01 (build 634, separator fix + modal refactor + initial desaturation)
277+
278+ ### Bug 1: Save Changes separator rendering inside button
279+
280+ The build-632 toolbar separator used ` ::before ` with ` display:inline-block `
281+ which rendered the vertical bar INSIDE the button content box (visible
282+ as a stray ` | ` to the left of "Save Changes" text). Fixed by switching
283+ to ` position: absolute ` with ` left: -14px ` , taking the separator
284+ OUTSIDE the button. Required adding ` position: relative ` to ` #btn-save ` .
285+
286+ ### Bug 2: Lockdown prompt modal incoherence + reversed button order
287+
288+ ` showCpPrompt ` (used by Activate Emergency Lockdown and similar
289+ text-input prompts) was rendered with heavy inline styles overriding
290+ the standard ` .wl-modal ` styling AND had button order ` [Cancel] [OK] `
291+ — reversed from every other modal in the app (` [Primary] [Cancel] ` ).
292+
293+ Refactored to use the standard ` wl-modal-header ` / ` wl-modal-body ` /
294+ ` wl-modal-actions ` structure (matching ` showCpConfirm ` reference
295+ pattern at ` control_panel.js:110-125 ` ) and swapped to ` [OK] [Cancel] ` .
296+
297+ ### Bug 3: Desaturate destructive button palette (initial pass)
298+
299+ User-reported eye fatigue from the vivid ` .btn-danger ` red (` #c62828 ` )
300+ across high-density screens (Approval Queue, Trash, Admin Settings).
301+ Muted to Material-Design-style brick red ` #a93226 ` . Same desaturation
302+ applied to ` .btn-warning ` (` #e65100 ` → ` #bf6516 ` ) and ` .btn-success `
303+ (` #1a8929 ` → ` #388e3c ` ). Build 635 reverted ` .btn-success ` ; build 636
304+ re-tightened ` .btn-warning ` for AA contrast.
305+
306+ ### Migration / rollback
307+
308+ - All three changes revert by reverting CSS hex values and the
309+ ` showCpPrompt ` refactor in ` control_panel.js ` .
310+
311+ ---
312+
67313## Unreleased — 2026-05-01 (build 633, accessibility + L1/L2 follow-up)
68314
69315### Accessibility: span → button migration (audit finding L3)
0 commit comments