Comprehensive WebUI review: 41 UX/feature/CSS improvements

Safety & Correctness:
- Add confirmation dialogs to Stop All, turnOffDevice
- i18n confirm dialog (title, yes, no buttons)
- Fix duplicate tutorial-overlay ID
- Define missing CSS variables (--radius, --text-primary, --hover-bg, --input-bg)
- Fix toast z-index conflict with confirm dialog (2500 → 3000)

UX Consistency:
- Add backdrop-close to test modals
- Add device clone feature (only entity without it)
- Add sync clocks to command palette
- Replace 20+ hardcoded accent colors with CSS vars/color-mix()
- Remove dead .badge duplicate from components.css
- Make calibration elements keyboard-accessible (div → button)
- Add aria-labels to color picker swatches
- Fix pattern canvas mobile horizontal scroll
- Fix graph editor mobile bottom clipping

Polish:
- Add empty-state messages to all CardSection instances
- Convert 21 px font-sizes to rem
- Add scroll-behavior: smooth with reduced-motion override
- Add @media print styles
- Add :focus-visible to 4 missing interactive elements
- Fix settings modal close label (Cancel → Close)
- Fix api-key submit button i18n

New Features:
- Command palette actions: start/stop targets, activate scenes, enable/disable
- Bulk start/stop API endpoints (POST /output-targets/bulk/start|stop)
- OS notification history viewer modal
- Scene "used by" automation reference count on cards
- Clock elapsed time display on Streams tab cards
- Device "last seen" relative timestamp on cards
- Audio device refresh button in edit modal
- Composite layer drag-to-reorder
- MQTT settings panel (broker config with JSON persistence)
- WebSocket log viewer with level filtering and ring buffer
- Runtime log-level adjustment (GET/PUT endpoints + settings UI)
- Animated value source waveform canvas preview
- Gradient custom preset save/delete (localStorage)
- API key read-only display in settings
- Backup metadata (file size, auto/manual badges)
- Server restart button with confirm + overlay
- Partial config export/import per entity type
- Progressive disclosure in target editor (Advanced section)

CSS Architecture:
- Define radius scale tokens (--radius-sm/md/lg/pill)
- Scope .cs-filter selectors to remove 7 !important overrides
- Consolidate duplicate toggle switch (filter-list → settings-toggle)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-16 18:46:38 +03:00
parent a4a0e39b9b
commit 304fa24389
47 changed files with 2594 additions and 250 deletions

View File

@@ -12,6 +12,11 @@
--warning-color: #ff9800;
--info-color: #2196F3;
--font-mono: 'Cascadia Code', 'Fira Code', 'JetBrains Mono', 'SF Mono', 'Consolas', 'Liberation Mono', monospace;
--radius: 8px;
--radius-sm: 4px;
--radius-md: 8px;
--radius-lg: 12px;
--radius-pill: 100px;
}
/* ── SVG icon base ── */
@@ -34,6 +39,7 @@
--bg-secondary: #242424;
--card-bg: #2d2d2d;
--text-color: #e0e0e0;
--text-primary: #e0e0e0;
--text-secondary: #999;
--text-muted: #777;
--border-color: #404040;
@@ -41,6 +47,8 @@
--primary-text-color: #66bb6a;
--success-color: #28a745;
--shadow-color: rgba(0, 0, 0, 0.3);
--hover-bg: rgba(255, 255, 255, 0.05);
--input-bg: #1a1a2e;
color-scheme: dark;
}
@@ -50,6 +58,7 @@
--bg-secondary: #eee;
--card-bg: #ffffff;
--text-color: #333333;
--text-primary: #333333;
--text-secondary: #666;
--text-muted: #999;
--border-color: #e0e0e0;
@@ -57,6 +66,8 @@
--primary-text-color: #3d8b40;
--success-color: #2e7d32;
--shadow-color: rgba(0, 0, 0, 0.12);
--hover-bg: rgba(0, 0, 0, 0.05);
--input-bg: #f0f0f0;
color-scheme: light;
}
@@ -69,6 +80,7 @@ body {
html {
background: var(--bg-color);
overflow-y: scroll;
scroll-behavior: smooth;
}
body {
@@ -184,4 +196,16 @@ header {
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
html { scroll-behavior: auto; }
}
@media print {
[data-theme] {
--bg-color: #fff;
--card-bg: #fff;
--text-color: #000;
--text-secondary: #333;
--border-color: #ccc;
}
.tab-bar, .app-header, .scroll-to-top, .toast-container { display: none; }
}