166ec351b1
Add collapsible card sections with name filtering
...
Introduces CardSection class that wraps each card grid with a collapsible
header and inline filter input. Collapse state persists in localStorage,
filter value survives auto-refresh re-renders. When filter is active the
add-card button is hidden. Applied to all 13 sections across Targets,
Sources, and Profiles tabs.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-24 00:46:14 +03:00
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
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