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>
This commit is contained in:
2026-02-20 01:18:29 +03:00
parent 2b90fafb9c
commit 3ae20761a1
41 changed files with 355 additions and 248 deletions

View File

@@ -40,7 +40,7 @@ section {
}
.add-device-card:hover .add-device-icon {
color: var(--primary-color);
color: var(--primary-text-color);
}
.add-device-label {
@@ -86,7 +86,7 @@ section {
.card-tutorial-btn:hover {
border-color: var(--primary-color);
color: var(--primary-color);
color: var(--primary-text-color);
}
@@ -119,7 +119,7 @@ section {
}
.card-power-btn:hover {
color: var(--primary-color);
color: var(--primary-text-color);
background: rgba(76, 175, 80, 0.1);
}
@@ -319,7 +319,7 @@ section {
}
.primary-star {
color: var(--primary-color);
color: var(--primary-text-color);
font-size: 1.2rem;
}
@@ -400,7 +400,7 @@ section {
position: absolute;
top: 2px;
right: 4px;
color: var(--primary-color);
color: var(--primary-text-color);
font-size: 1.5rem;
line-height: 1;
text-shadow: 0 0 4px rgba(0, 0, 0, 0.4);
@@ -511,7 +511,7 @@ ul.section-tip li {
.metric-value {
font-size: 0.9rem;
font-weight: 700;
color: var(--primary-color);
color: var(--primary-text-color);
}
.metric-label {
@@ -535,7 +535,7 @@ ul.section-tip li {
.timing-total {
font-size: 0.8rem;
color: var(--primary-color);
color: var(--primary-text-color);
}
.timing-bar {