Skip to content

Feat/liquidglass safari - #6

Merged
AndSanG merged 8 commits into
masterfrom
feat/liquidglass
May 29, 2026
Merged

Feat/liquidglass safari#6
AndSanG merged 8 commits into
masterfrom
feat/liquidglass

Conversation

@AndSanG

@AndSanG AndSanG commented May 29, 2026

Copy link
Copy Markdown
Owner

Performance & mobile Safari fixes
What changed
11-second blank screen on iPhone Safari (root cause found and fixed)
CSS animation-timeline: scroll(root) on a position: fixed element (the scroll-progress bar) caused Safari 18 on iPhone to block its initial composite/paint step until the document scroll range was fully computed. With Safari's collapsible toolbar, this took ~11 seconds. iPad and iOS Chrome were unaffected (former on Safari 17 which ignores the property, latter using an older WebKit config). Replaced with a passive JS scroll listener that sets transform: scaleX() directly on the element.

Bundle and hydration size reduction

Removed "use client" from AnimatedMarquee and PageTransition — neither used hooks or browser APIs, making them needlessly client components
Replaced useLayoutEffect with useEffect in ExperienceList and ProjectList — the title-height equalizer doesn't need synchronous DOM measurement before paint
Halved marquee item duplication (4× → 2×) — the CSS animation uses translateX(-50%) so 2× is sufficient for a seamless loop; saves ~7KB of RSC payload
Theme toggle correctness

Fixed icon showing wrong state when OS is in dark mode: theme returns "system" when following the OS preference, not "dark". Switched to resolvedTheme which always returns the actual applied value
Fixed sticky hover/focus on iOS Safari after tap: replaced hover: with active: so the highlight only shows while the finger is down
CV dialog

Fixed close button and download PDF being clipped when Safari's tab bar is visible: max-h-[92vh] → max-h-[92dvh] so the dialog tracks the actual visible height dynamically
Added 150ms fade-out on close so the dismiss feels instant — the GPU takes time to release backdrop-blur layers, previously leaving the dialog visually frozen after the tap
Polish

Rounded corners (rounded-3xl) on hero and More About Me photos

AndSanG added 8 commits May 28, 2026 22:27
…ffects

- Remove "use client" from AnimatedMarquee and PageTransition — pure
  rendering, no browser APIs needed
- Replace useLayoutEffect with useEffect in ExperienceList and
  ProjectList — avoids forcing synchronous layout before browser paint
- Remove animation-timeline: scroll(root) from .scroll-progress — this
  CSS scroll-driven animation on a position:fixed element blocked Safari
  18's initial composite/paint step on iPhone, causing an 11-second
  blank screen. Replace with a passive scroll listener in Navbar that
  applies transform: scaleX() directly.

- Change CV dialog max-h-[92vh] → max-h-[92dvh] so the dialog
  respects the dynamic viewport height (shrinks correctly when Safari
  tab bar / address bar are visible, preventing close button and
  footer from being clipped).
…stem' when following OS preference, resolvedTheme is the actual value
…ri after tap, active clears immediately on release
@AndSanG
AndSanG merged commit 8a1274b into master May 29, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant