diff --git a/UI_UPDATE.MD b/UI_UPDATE.MD index 7a06d9f..8d58f45 100644 --- a/UI_UPDATE.MD +++ b/UI_UPDATE.MD @@ -461,9 +461,9 @@ All utilities follow the established pattern of using CSS custom properties from ### Sub-task 4.2: Interactive States and Feedback #### 4.2.1: State Implementation -- [ ] Design comprehensive hover states -- [ ] Implement focus indicators meeting WCAG standards -- [ ] Add active and pressed state styling +- [x] Design comprehensive hover states +- [x] Implement focus indicators meeting WCAG standards +- [x] Add active and pressed state styling #### 4.2.2: Form Validation - [ ] Implement visual form validation feedback diff --git a/static/css/components.css b/static/css/components.css index 9056ff8..ea1c1d0 100644 --- a/static/css/components.css +++ b/static/css/components.css @@ -123,10 +123,11 @@ background: rgba(var(--color-primary-rgb), 0.1); } -/* Focus states for accessibility */ +/* Focus states for accessibility - WCAG AA compliant */ .btn:focus-visible { - outline: 2px solid var(--color-focus); + outline: 3px solid var(--color-focus); outline-offset: 2px; + box-shadow: 0 0 0 1px var(--color-surface), 0 0 0 4px var(--dodgers-blue-100); } /* Loading state */ @@ -225,8 +226,68 @@ } .card:focus-visible { - outline: 2px solid var(--color-focus); + outline: 3px solid var(--color-focus); outline-offset: 2px; + box-shadow: 0 0 0 2px var(--dodgers-blue-100); +} + +/* Form focus states - WCAG AA compliant */ +.form-control:focus, +.form-input:focus, +.form-textarea:focus, +.form-select:focus { + outline: 3px solid var(--color-focus); + outline-offset: 2px; + box-shadow: 0 0 0 2px var(--dodgers-blue-100); + border-color: var(--color-focus); +} + +.chat__input input:focus { + outline: 3px solid var(--color-focus); + outline-offset: 2px; + box-shadow: 0 0 0 2px var(--dodgers-blue-100); +} + +/* Link focus states */ +a:focus-visible { + outline: 3px solid var(--color-focus); + outline-offset: 2px; + text-decoration: underline; +} + +/* Dashboard and control focus states */ +.dashboard__toggle-btn:focus-visible { + outline: 3px solid var(--dodgers-white); + outline-offset: 2px; + background: rgba(255,255,255,0.3); +} + +.video-player__quality-selector:focus-visible, +.video-player__toggle-chat-btn:focus-visible, +.stream-stats__refresh-btn:focus-visible { + outline: 3px solid var(--dodgers-white); + outline-offset: 2px; + background: rgba(255,255,255,0.3); +} + +/* Chat admin controls focus */ +.chat__admin-btn:focus-visible { + outline: 3px solid var(--dodgers-gold); + outline-offset: 1px; +} + +/* Mobile navigation focus */ +.mobile-nav-btn:focus-visible { + outline: 3px solid var(--dodgers-white); + outline-offset: 2px; + background: rgba(255,255,255,0.15); +} + +/* FAB focus */ +.fab:focus-visible { + outline: 3px solid var(--dodgers-white); + outline-offset: 2px; + box-shadow: 0 0 0 1px var(--dodgers-blue-400), var(--elevation-5); } /* Card variants */ @@ -1754,6 +1815,78 @@ .chat__input button:active { transform: translateY(0); + box-shadow: var(--elevation-1); +} + +/* Active states for links and form elements */ +a:active { + transform: scale(0.98); +} + +/* Form elements pressed states */ +.form-control:active { + transform: translateY(0); +} + +.form-input:active, +.form-textarea:active, +.form-select:active { + transform: translateY(0); + box-shadow: 0 0 0 2px var(--dodgers-blue-200); +} + +/* Dashboard controls active states */ +.dashboard__toggle-btn:active { + transform: translateY(0); + background: rgba(255,255,255,0.4); +} + +.stats-card:active { + transform: translateY(-1px); + box-shadow: var(--elevation-2); +} + +/* Video controls pressed states */ +.video-player__quality-selector:active, +.video-player__toggle-chat-btn:active, +.stream-stats__refresh-btn:active { + transform: translateY(0); + background: rgba(255,255,255,0.3); +} + +/* Chat admin controls active states */ +.chat__admin-btn:active { + transform: translateY(0); + background: rgba(255,215,0,0.6); +} + +/* Message actions pressed states */ +.delete-btn:active, .ban-btn:active { + transform: scale(0.95); +} + +/* Mobile navigation active states */ +.mobile-nav-btn:active { + transform: scale(0.95) translateY(0); + background: rgba(255,255,255,0.15); +} + +/* FAB active states */ +.fab:active, .fab.secondary:active { + transform: scale(1.05); + box-shadow: var(--elevation-3); +} + +/* Toast notifications active states */ +.toast:active { + transform: translateX(-50%) scale(0.95); +} + +/* Activity and user item active states */ +.activity-item:active, +.user-item:active { + transform: scale(0.98); + background: var(--color-surface-variant); } .chat__empty-state { diff --git a/static/css/variables.css b/static/css/variables.css index 1f9d341..7ff7468 100644 --- a/static/css/variables.css +++ b/static/css/variables.css @@ -109,6 +109,7 @@ --hover-overlay: rgba(255, 255, 255, 0.1); --active-overlay: rgba(255, 255, 255, 0.2); --focus-ring: rgba(0, 90, 156, 0.5); + --color-focus: var(--dodgers-blue-400); /* WCAG AA compliant focus color */ /* Borders & Dividers */ --border-color: #1a2332;