From 2255ec55c8fa7b0066e2be21e57810e06a2f74a3 Mon Sep 17 00:00:00 2001 From: posimai Date: Sun, 19 Apr 2026 21:36:27 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20address=20review=20findings=20=E2=80=94?= =?UTF-8?q?=20icons,=20a11y,=20quiz=20state,=20SW,=20scores?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - C-1: move saveScore() out of resultScore getter into _onAllAnswered to prevent repeated localStorage writes on every reactive access - C-2: $watch('search') → createIcons() so sidebar Lucide icons are re-converted after x-for re-render on search filter/clear - T-8: replace x-show Lucide chevrons with inline SVG in .concept-chevron-wrap; Alpine x-show was orphaned after createIcons() replaced with , causing stale display - H-1: remove quizState={} from stepGoBack() Step3 branch so going back no longer silently destroys quiz answers - H-2: add role=button tabindex=0 and Enter/Space keydown handlers to sidebar-item divs for keyboard navigation - M-3: move skipWaiting() inside Promise.all in install waitUntil - M-4: return 503 Response in SW fetch catch when cache also unavailable - M-6: call saveScore() in nextWeakDrillUnit() so weak-drill results persist to localStorage the same as regular quiz - UI: fix .unit-cat-badge vertical misalignment in flex badge-row (was display:inline-block margin-bottom:6px, now inline-flex) - SW: bump cache version to v19 to retire old worker Co-Authored-By: Claude Sonnet 4.6 --- index.html | 16 ++++++++++++---- js/app.js | 7 +++++-- sw.js | 14 ++++++++------ 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/index.html b/index.html index f684e91..9f5b62e 100644 --- a/index.html +++ b/index.html @@ -153,7 +153,7 @@ header{display:flex;align-items:center;justify-content:space-between;padding:0 1 /* Unit header */ .unit-header{margin-bottom:18px} .unit-meta{min-width:0} -.unit-cat-badge{font-size:10px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--accent);background:var(--accent-dim);border:1px solid var(--accent-border);border-radius:20px;padding:3px 9px;display:inline-block;margin-bottom:6px} +.unit-cat-badge{font-size:10px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--accent);background:var(--accent-dim);border:1px solid var(--accent-border);border-radius:20px;padding:3px 9px;display:inline-flex;align-items:center} .unit-title{font-size:19px;font-weight:600;letter-spacing:-.01em;line-height:1.3} /* Concept text */ @@ -369,6 +369,7 @@ header{display:flex;align-items:center;justify-content:space-between;padding:0 1 /* Concept expand */ .concept-expand-btn{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:var(--accent);background:none;border:none;cursor:pointer;padding:4px 0 0;font-family:'Geist',sans-serif;font-weight:500} .concept-expand-btn:hover{opacity:.75} +.concept-chevron-wrap{display:inline-flex;min-width:11px;height:11px;align-items:center;justify-content:center;flex-shrink:0} @@ -425,8 +426,11 @@ header{display:flex;align-items:center;justify-content:space-between;padding:0 1