Skip to content

Landing page: glass cards with pointer edge glow and subtle entrance motion#111

Merged
mkayander merged 13 commits intomainfrom
cursor/-bc-971310c0-0f13-4bc0-ae96-59a097209ab1-d15e
Apr 6, 2026
Merged

Landing page: glass cards with pointer edge glow and subtle entrance motion#111
mkayander merged 13 commits intomainfrom
cursor/-bc-971310c0-0f13-4bc0-ae96-59a097209ab1-d15e

Conversation

@mkayander
Copy link
Copy Markdown
Owner

@mkayander mkayander commented Apr 6, 2026

Summary

Landing section cards and headings use scroll-triggered reveal and pointer-linked glow styling.

Entrance motion (latest)

CSS keyframe animations caused a visible jump on load (first frame at translateY, then animate). Replaced with useLandingReveal + IntersectionObserver:

  • In viewport on first layout → no motion (stays at final position).
  • Below the fold → starts hidden (opacity: 0, slight offset, transition: none), then eases in when scrolled into view.
  • prefers-reduced-motion: reduce → always static.
  • matchMedia / IntersectionObserver guards for jsdom tests and edge environments.

LandingGlowCard uses an outer reveal wrapper + inner .landing-glow-card-root so scroll reveal transform and hover lift stay independent.

Testing

  • pnpm exec tsc --noEmit
  • pnpm exec vitest run src/__tests__/index.test.tsx
Open in Web Open in Cursor 

Introduce LandingGlowCard with radial border highlight tied to pointer
position, frosted glass styling, and optional hover lift for demo tiles.
Add subtle staggered entrance and section heading animations respecting
prefers-reduced-motion.

Co-authored-by: Max Kayander <mkayander@users.noreply.github.com>
@vercel
Copy link
Copy Markdown

vercel bot commented Apr 6, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
dstruct Ready Ready Preview, Comment Apr 6, 2026 10:30pm

Use MuiCard theme borderRadius for wrapper and Card so the edge ring
matches the card corners. Stop resetting glow center on leave so the
highlight fades out in place; sync position on pointerenter.

Co-authored-by: Max Kayander <mkayander@users.noreply.github.com>
Apply translateY on the LandingGlowCard root for interactive tiles so the
edge highlight moves with the card instead of only the inner Card.

Co-authored-by: Max Kayander <mkayander@users.noreply.github.com>
Add a soft inner radial gradient for interactive tiles using the same
CSS variables as the border glow; fade in on hover. Keep CardActionArea
full-height under flex layout.

Co-authored-by: Max Kayander <mkayander@users.noreply.github.com>
@mkayander mkayander marked this pull request as ready for review April 6, 2026 19:36
Copy link
Copy Markdown

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6383633. Configure here.

@cursor
Copy link
Copy Markdown

cursor bot commented Apr 6, 2026

You have used all of your free Bugbot PR reviews.

To receive reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.

- Use transform-only entrance keyframes with forwards (not both) so stagger
  delays do not apply opacity:0 from the first keyframe.
- Gate interactive hover lift, glow fades, and shadow transitions behind
  prefers-reduced-motion; static border tint on hover when reduced.
- Hide edge/ambient decorative layers when reduced motion.
- Scope Card flex layout to interactive tiles only.
- Deduplicate section heading entrance styles via helper.

Co-authored-by: Max Kayander <mkayander@users.noreply.github.com>
Replace CSS keyframe entrances with IntersectionObserver + opacity/transform
transitions so in-viewport content stays put on first paint and below-fold
blocks animate when scrolled into view. Add useLandingReveal + LandingReveal;
wrap section headings; nest glow cards in reveal wrapper with separate inner
root for pointer/hover transforms. Guard matchMedia and IntersectionObserver
for tests/SSR.

Co-authored-by: Max Kayander <mkayander@users.noreply.github.com>
Pending state no longer applies opacity:0; only below-fold elements hide
after useLayoutEffect measures. SSR and first client paint stay in sync.

Co-authored-by: Max Kayander <mkayander@users.noreply.github.com>
Wrap FAQ heading and each accordion in LandingReveal; stagger delay
per row (capped) for a wave when the section enters view.

Co-authored-by: Max Kayander <mkayander@users.noreply.github.com>
Keep LandingGlowCard + LandingReveal; adopt main stable React keys (id)
and i18n landingDemoSlug(LL, id). Core loop card tint stays branch 0.72 alpha.

Co-authored-by: Max Kayander <mkayander@users.noreply.github.com>
480ms cap collapsed indices 9–11 to the same delay; cap at 11*55ms so
demoIndex+8 through +11 each get a distinct stagger.

Co-authored-by: Max Kayander <mkayander@users.noreply.github.com>
Integrate HomeLandingPythonDecor and main section layout (z-index wrapper,
py blocks) while keeping LandingGlowCard, LandingReveal, and i18n demo slugs.

Co-authored-by: Max Kayander <mkayander@users.noreply.github.com>
@mkayander mkayander merged commit 0095fe6 into main Apr 6, 2026
6 checks passed
@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 6, 2026

🎉 This PR is included in version 1.374.1 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants