diff --git a/.jules/palette.md b/.jules/palette.md index 0bbf5248..7edfe9de 100644 --- a/.jules/palette.md +++ b/.jules/palette.md @@ -115,3 +115,6 @@ ## $(date +%Y-%m-%d) - Prevent accidental data loss in inline editors **Learning:** Forms that take a long time to fill out (like a WBS editor) are prone to accidental closure by users pressing `Escape` or clicking cancel. This causes immediate data loss without any warning, resulting in frustration. **Action:** When working on editors that can be dismissed, track whether the user has modified any fields compared to their initial state. If there are changes, intercept the close action and present a confirmation dialog (`window.confirm`) to ensure they really want to discard their edits. Bypass this for intentional saves or explicit data overrides. +## 2026-08-06 - Keyboard Accessibility for Non-Interactive Tooltips +**Learning:** Adding `tabindex="0"` to non-interactive elements (`div`, `span`) to expose `title` tooltips to keyboard users creates an accessibility anti-pattern if a valid ARIA role isn't provided, as screen readers will announce the element without context, confusing users. +**Action:** When adding `tabindex="0"` to non-interactive elements for tooltip accessibility, always include an appropriate ARIA role (e.g., `role="note"`, `role="region"`) to provide semantic context for screen readers, and ensure `:focus-visible` styles are applied. diff --git a/app.js b/app.js index a04aae71..6965eb97 100644 --- a/app.js +++ b/app.js @@ -999,6 +999,8 @@ function createStatusCellContent(progressState) { if (progressState.description) { badge.title = progressState.description; badge.setAttribute('aria-label', `${progressState.label} - ${progressState.description}`); + badge.tabIndex = 0; + badge.setAttribute('role', 'note'); } return badge; } diff --git a/index.html b/index.html index a7f4b49c..c5627a8b 100644 --- a/index.html +++ b/index.html @@ -28,18 +28,18 @@

ScopeWeave Planner

기준일 -
+
전체일수 0일
-
+
계획진척률(누적) 0.00%
-
+
실적진척률(누적) 0.00%
diff --git a/styles.css b/styles.css index 9d715f00..ff662db3 100644 --- a/styles.css +++ b/styles.css @@ -360,7 +360,9 @@ button { .secondary-button:focus-visible, input:focus-visible, select:focus-visible, -.gantt-bar:focus-visible { +.gantt-bar:focus-visible, +.meta-value-card:focus-visible, +.status-badge:focus-visible { outline: 3px solid rgba(37, 99, 235, 0.5); outline-offset: 2px; }