alexei.dolgolyov
7479b1fb8d
CSS: add GradientColorStripSource with visual editor
...
- Backend: GradientColorStripSource storage model, GradientColorStripStream
with numpy interpolation (bidirectional stops, auto-size from device LED count),
ColorStop Pydantic schema, API create/update/guard routes
- Frontend: gradient editor modal (canvas preview, draggable markers, stop rows),
CSS hard-edge card swatch, locale keys (en + ru)
- Fixes: stop row mousedown no longer rebuilds DOM (buttons now clickable),
position input max-width, bidir/remove button static width
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-02-20 19:35:41 +03:00
alexei.dolgolyov
a3aeafef13
CSS: add led_count field; calibration dialog improvements; color corrections collapsible section
...
- Add explicit led_count to PictureColorStripSource (0 = auto from calibration)
- Stream pads with black or truncates to match led_count exactly
- Calibration dialog: show led_count input above visual editor in CSS mode
- Calibration dialog: pre-populate led_count with effective count (cal sum) when stored value is 0
- Calibration dialog: sync preview label live as led_count input changes
- CSS editor: group brightness/saturation/gamma into collapsible "Color Corrections" section
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-02-20 16:42:32 +03:00
alexei.dolgolyov
c3b1d3edd9
Fix header z-index overlaying modal dialogs
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-20 01:19:22 +03:00
alexei.dolgolyov
3ae20761a1
Frontend: structured error handling, state fixes, accessibility, i18n
...
- Enhance fetchWithAuth with auto-401, retry w/ exponential backoff, timeout
- Remove ~40 manual 401 checks across 10 feature files
- Fix state: brightness cache setter, manual edit flag resets, static import
- Add ARIA: role=dialog/tablist, aria-modal, aria-labelledby, aria-selected
- Add focus trapping in Modal base class, aria-expanded on hint toggles
- Fix WCAG AA color contrast with --primary-text-color variable
- Add i18n pluralization (CLDR rules for en/ru), getCurrentLocale export
- Replace hardcoded strings in dashboard.js and profiles.js
- Add data-i18n-aria-label support, 20 new keys in en.json and ru.json
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-20 01:18:29 +03:00
alexei.dolgolyov
2b90fafb9c
Split monolithic index.html and style.css for maintainability
...
- Extract 15 modals and 3 partials from index.html into Jinja2 templates
(templates/modals/*.html, templates/partials/*.html)
- Split style.css (3,712 lines) into 11 feature-scoped CSS files under
static/css/ (base, layout, components, cards, modal, calibration,
dashboard, streams, patterns, profiles, tutorials)
- Switch root route from FileResponse to Jinja2Templates
- Add jinja2 dependency
- Consolidate duplicate @keyframes spin definition
- Browser receives identical assembled HTML — zero JS changes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-20 00:42:50 +03:00