Lucas Berger
f7575ea2c3
fix(17): IN-02 document hand-maintained favicon.ico coupling
2026-06-18 13:56:48 -04:00
Lucas Berger
7578d48d3d
fix(17): IN-01 pull focus back into dialog when activeElement escapes
2026-06-18 13:56:32 -04:00
Lucas Berger
5b4625b41d
fix(17): WR-01 exclude hidden/zero-size nodes from focus-trap boundaries
2026-06-18 13:56:23 -04:00
Lucas Berger
4bc1e2a820
fix(17): IN-05 normalize AdminPage JSX formatting with Prettier
2026-06-18 13:48:34 -04:00
Lucas Berger
11b6b36cb9
fix(17): IN-07 memoize Intl.DateTimeFormat timezone resolution
2026-06-18 13:47:37 -04:00
Lucas Berger
2317833b74
fix(17): IN-04 remove dead brand placeholder tokens
2026-06-18 13:46:47 -04:00
Lucas Berger
3f4b7eac73
fix(17): IN-02 useCallback handleClose, drop exhaustive-deps disables
2026-06-18 13:46:27 -04:00
Lucas Berger
dd0b76128d
fix(17): WR-08 replace cp icon chain with cross-platform Node copy script
2026-06-18 13:45:36 -04:00
Lucas Berger
1c0f35748d
fix(17): WR-06 WR-07 clamp tz combobox active index; Tab-to-commit, blur-timer unmount cleanup
2026-06-18 13:44:44 -04:00
Lucas Berger
f601c0c408
fix(17): WR-02 WR-03 WR-04 IN-06 admin tab Home/End+wrap; toast re-announce, wrap, z-index 400
2026-06-18 13:43:10 -04:00
Lucas Berger
fb30800e9a
fix(17): WR-01 trap focus in modal dialogs via useFocusTrap
2026-06-18 13:41:33 -04:00
Lucas Berger
a4a7438641
fix(17): WR-05 IN-03 IN-01 resize-aware useIsPhone hook; OidcRedirect side-effect in effect
2026-06-18 13:40:00 -04:00
Lucas Berger
c2ceebf130
docs(17): add deep code review report
2026-06-18 13:35:10 -04:00
Lucas Berger and Claude Opus 4.8
a986c74963
docs(phase-17): mark phase complete (pending human verification)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-18 13:11:35 -04:00
Lucas Berger and Claude Opus 4.8
fcc02e3833
docs(17): add phase verification report (10/10 decisions delivered; human_needed for device-only checks)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-18 13:11:23 -04:00
Lucas Berger and Claude Opus 4.8
9730d3dcdb
docs(17): add code review report
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-18 13:06:20 -04:00
Lucas Berger and Claude Opus 4.8
ea49a4dc83
docs(phase-17): update tracking after wave 2
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-18 13:03:12 -04:00
Lucas Berger and Claude Opus 4.8
b5fcd1d172
fix(17): resolve post-merge wave 2 integration issues
...
- SettingsSheet: void the navigate('/login') promise (react-router v7 returns Promise) — eslint no-floating-promises
- InstructionSheet.test: wrap SettingsSheet render in MemoryRouter — 17-05 added useNavigate() which needs Router context
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-18 13:01:39 -04:00
Lucas Berger
4887ba1b5f
chore: merge executor worktree (worktree-agent-a12887546a61a8053)
2026-06-18 12:58:59 -04:00
Lucas Berger
aaf754d938
chore: merge executor worktree (worktree-agent-a65077bbd9885bf7e)
2026-06-18 12:58:58 -04:00
Lucas Berger
9e39a5c492
chore: merge executor worktree (worktree-agent-ad448992e936c77aa)
2026-06-18 12:58:57 -04:00
Lucas Berger
29f3d62312
chore: merge executor worktree (worktree-agent-a1f3ad1ab5d67e70c)
2026-06-18 12:58:56 -04:00
Lucas Berger
f4c65d478a
docs(17-06): complete admin polish plan — toasts + two-tab ARIA nav + e2e assertions
2026-06-18 12:58:06 -04:00
Lucas Berger
944045cd7e
test(17-06): add admin two-tab ARIA and keyboard assertions to admin.spec.ts
...
- Add 'Admin two-tab ARIA strip (D-10)' describe block: tablist visible,
both named tabs visible, ArrowRight/ArrowLeft keyboard switching,
panel aria-labelledby, phone overflow check
- Add 'Admin success toast structure (D-08)' describe: role=status absent on load
- Satisfies Wave 0 admin-ARIA CI requirement — 12/12 tests pass on pixel profile
2026-06-18 12:56:34 -04:00
Lucas Berger
caff8b4b0a
docs(17-05): complete logout control + sheet centering plan
...
- Sign out control (D-07): LogOut icon, handleSignOut fire-and-best-effort, navigate /login
- Desktop centering (D-09): phone/desktop style branch on SettingsSheet, ChangePasswordSheet, LinkOidcSheet, CredentialSheet
- playwright-cli verified: centered modal @1280x720, bottom-sheet @390x844, Sign out redirects to /login
2026-06-18 12:54:43 -04:00
Lucas Berger
28e9ca9840
docs(17-03): complete phone layout overlap fix plan — SUMMARY.md
...
FAB lifted above BottomTabBar, phone content padding added, D-01
regression guard committed to layout.spec.ts; 3-profile e2e sweep green.
2026-06-18 12:54:30 -04:00
Lucas Berger
620d64138a
feat(17-06): add success toasts to admin create-member and reset-password
...
- Add toast state + 3000ms auto-dismiss useEffect to AdminPage
- Set toast 'Member added.' in createMemberMutation.onSuccess
- Propagate 'Password reset.' up from ResetPasswordSheet via onSuccess callback
- Render role=status/aria-live=polite toast with CheckCircle icon
- Phone toast offset uses calc(var(--bottom-chrome-h) + var(--space-4)) to clear BottomTabBar
2026-06-18 12:53:12 -04:00
Lucas Berger
b71238634f
feat(17-05): add phone/desktop style branch to CredentialSheet (D-09)
...
- Add window.matchMedia('(max-width: 767px)') phone check
- Desktop branch: position fixed, top/left 50%, translate(-50%, -50%), maxWidth 480px, borderRadius 12px
- Phone branch: unchanged bottom-sheet (bottom 0, left 0, right 0, borderRadius 12px 12px 0 0)
- role=dialog, aria-modal, aria-label unchanged — only position CSS branched
- SettingsSheet, ChangePasswordSheet, LinkOidcSheet centering in prior commit (Task 1)
2026-06-18 12:52:59 -04:00
Lucas Berger
132a5e4eae
feat(17-05): add Sign out control with handleSignOut to SettingsSheet (D-07)
...
- Add LogOut icon (lucide-react) and fetchLocalLogout (api/client) imports
- Add useNavigate (react-router) for post-logout redirect
- Implement handleSignOut: fire-and-best-effort try/catch, navigate to /login in both branches
- Add Sign out button row at bottom of sheet (44px tap target, var(--color-destructive), divider separator)
- Always navigates to /login even on API failure (server cookie cleared or expired)
2026-06-18 12:52:48 -04:00
Lucas Berger
4cb16f8271
docs(17-04): complete brand wiring plan — BrandSlot logo, favicons, maskable icon fix, accent
...
- BrandSlot: placeholder div replaced with decorative logo img (ce95aa3 )
- tokens.css: --brand-logo-border-radius 0, --color-member-0 #e8915a (df578fd )
- index.html: favicon.svg + favicon.ico links, theme-color #e8915a (df578fd )
- vite.config.ts: maskable icon fixed to /icon-maskable-512.png, theme_color #e8915a (df578fd )
- Build: green; manifest.webmanifest verified correct
2026-06-18 12:51:58 -04:00
Lucas Berger
85a803fba6
test(17-03): add FAB↔BottomTabBar overlap regression guard to layout.spec.ts
...
- New test: "New Event FAB does not overlap BottomTabBar (A — phone only)"
- Skips on desktop profile; runs iphone + pixel (the profiles that exposed D-01)
- Asserts fabBox.y + fabBox.height <= navBox.y (FAB bottom ≤ bar top)
- Confirms Task 1 fix resolves the seed defect — passes green on both profiles
2026-06-18 12:51:32 -04:00
Lucas Berger
df578fd7b7
feat(17-04): wire favicons + theme-color in index.html, fix maskable icon + accent in manifest
...
- index.html: add favicon.svg (SVG, modern browsers first) + favicon.ico (legacy) links
- index.html: update theme-color from #4A90D9 to approved #e8915a (warm amber)
- vite.config.ts: fix maskable icon — reference /icon-maskable-512.png (separate file) not /icon-512.png
- vite.config.ts: update manifest theme_color to #e8915a to match index.html
- tokens.css: update --color-member-0 to #e8915a (warm amber, Variant B, operator-approved 17-02)
- --sx-color-primary follows automatically via var(--color-member-0)
2026-06-18 12:50:50 -04:00
Lucas Berger
ce95aa3e6b
feat(17-04): wire logo img into BrandSlot, set --brand-logo-border-radius 0
...
- Replace placeholder FS div with decorative <img src="/logo.svg" alt="" aria-hidden>
- Apply Surface B-1 style (width/height brand-logo-size, borderRadius token, contain/block)
- Update --brand-logo-border-radius from 50% to 0 (SVG draws its own rx=104 shape)
- h1 FamilySync and tagline p unchanged; LoginPage.tsx untouched (seam contract honored)
- No dangerouslySetInnerHTML (T-05-24 invariant maintained)
2026-06-18 12:48:55 -04:00
Lucas Berger
5e1c714894
fix(17-03): lift FAB above BottomTabBar and reserve phone content padding
...
- CalendarShell.tsx: FAB bottom changed from var(--space-6) to
calc(var(--bottom-chrome-h) + var(--space-6)) — sits 24px above bar
- App.tsx: contentStyle gains phone-only paddingBottom: var(--bottom-chrome-h)
via spread pattern ...(phone ? {...} : {}) — desktop unchanged
2026-06-18 12:48:35 -04:00
Lucas Berger
9e080fb22a
docs(phase-17): update tracking after wave 1
2026-06-18 12:45:49 -04:00
Lucas Berger
65e6222944
chore: merge executor worktree (worktree-agent-af89750bf86857964)
2026-06-18 12:44:24 -04:00
Lucas Berger
58d11caee0
chore: merge executor worktree (worktree-agent-a1fb88aa75fd00c8f)
2026-06-18 12:44:23 -04:00
Lucas Berger
d917157c63
docs(17-02): complete branding assets plan summary
...
Records approved brand decisions for plan 17-04:
- logo art approved (family-house redesign)
- brand accent #e8915a (warm amber)
- --brand-logo-border-radius: 0
2026-06-18 12:43:45 -04:00
Lucas Berger
4c99470c1a
feat(17-02): apply approved family-house logo + regenerate icon set
...
- Overwrite logo.svg with approved higher-contrast family-house SVG
(warm peach gradient bg, amber roof, bold white walls, heart finial,
three clearly-spaced family figures in rose/gold/blue)
- Regenerate full icon/favicon set from new art:
favicon.svg, favicon.ico (967 B), icon-192.png (192x192),
icon-512.png (512x512), icon-maskable-512.png (512x512 safe-zone),
apple-touch-icon.png (180x180)
- Approved brand decisions recorded for plan 17-04:
accent #e8915a, --brand-logo-border-radius: 0
2026-06-18 12:42:43 -04:00
Lucas Berger
d01ec2388c
docs(17-01): complete token groundwork plan — SUMMARY
...
tokens.css restructured to :root,[data-theme=light] combined selector;
--bottom-chrome-h added; all --sx-color-* overrides intact; build green;
layout.spec.ts pixel profile 15/15 pass; Schedule-X colors verified.
2026-06-18 12:14:45 -04:00
Lucas Berger
b364573285
feat(17-02): generate full icon/favicon set from logo.svg (Task 2)
...
- Run @vite-pwa/assets-generator minimal2023Preset against public/logo.svg
- Produce: favicon.ico (861 B, non-trivial), favicon.svg, icon-192.png (1617 B),
icon-512.png (4221 B), icon-maskable-512.png (3353 B, 512x512 distinct maskable
with safe-zone padding), apple-touch-icon.png (1110 B, 180x180)
- Replace 3 placeholder stubs with real generated assets
- Update pwa:icons script to include post-generation canonical rename step
- Add generator intermediate output filenames to .gitignore
2026-06-18 12:13:50 -04:00
Lucas Berger
c2f89bd55f
feat(17-01): restructure tokens.css to combined :root,[data-theme=light] selector + add --bottom-chrome-h
...
- Change :root { to :root, [data-theme="light"] { (D-06 combined selector)
- Add --bottom-chrome-h: calc(56px + env(safe-area-inset-bottom, 0px)) to spacing scale
- Keep all 12 --sx-color-* overrides inside the combined block (cascade unchanged)
- Keep --brand-logo-* tokens inside the combined block (verbatim, no value changes)
- Add dark-theme stub as comment-only (Phase 999.20 fills values; no live rule)
- All existing values unchanged; PWA build passes; Schedule-X colors verified via playwright-cli
2026-06-18 12:12:42 -04:00
Lucas Berger
7db9005645
feat(17-02): install @vite-pwa/assets-generator, author logo.svg, add pwa-assets.config.ts
...
- Add @vite-pwa/assets-generator@1.0.2 as devDependency in apps/pwa
- Add pwa:icons script (pwa-assets-generator generate) to apps/pwa/package.json
- Approve sharp build scripts in pnpm-workspace.yaml (required for @vite-pwa/assets-generator)
- Hand-author apps/pwa/public/logo.svg: warm/rounded/at-home family scene with house, two adults, child, heart — square 512x512 viewBox, self-contained, text-free
- Create apps/pwa/pwa-assets.config.ts with minimal2023Preset, images: ['public/logo.svg'], no overrideManifestIcons
2026-06-18 12:12:17 -04:00
Lucas Berger
eb0db8beef
docs(17): create phase plan
2026-06-18 11:36:21 -04:00
Lucas Berger
280438b2d3
docs(17): create phase plan (6 plans, 2 waves) — UI optimization & polish
2026-06-18 11:34:04 -04:00
Lucas Berger
28cf79754a
docs(17): add validation strategy
2026-06-18 11:19:24 -04:00
Lucas Berger
f789a67f95
docs(17): research phase domain
2026-06-18 11:17:44 -04:00
Lucas Berger
a1457a5b30
docs(17): UI design contract
2026-06-18 10:59:25 -04:00
Lucas Berger
efeee02a36
Merge remote-tracking branch 'origin/main' into gsd/phase-17-ui-optimization-polish
...
# Conflicts:
# .planning/STATE.md
2026-06-18 10:08:45 -04:00
Lucas Berger and Claude Opus 4.8
cfe84715d5
docs: add developer profile section to CLAUDE.md
...
Publish / publish (push) Successful in 11s
Generated by /gsd-profile-user from session analysis (8 dimensions).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-18 10:07:03 -04:00