From 8116eee6c160abe07c8e03429223e751b9300756 Mon Sep 17 00:00:00 2001 From: zhukang <274546966@qq.com> Date: Fri, 27 Mar 2026 23:16:34 +0800 Subject: [PATCH] feat(landing): glassmorphism visual upgrade with dark/light theme toggle Comprehensive visual overhaul of the Atlas Landing Site: - Dual-theme token system with light mode support via [data-theme="light"] - Glassmorphism + glow effects across all components (blur, gradient borders, glow shadows) - Theme toggle in navbar with localStorage persistence and system preference detection - Hero section: aurora glow orbs, gradient headline, floating screenshot animation - Animated gradient CTA buttons, glass card hover effects with gradient border reveal - Stagger scroll reveal animations, noise texture overlay, section gradient backgrounds - All 18 component files updated, no new files created --- .../src/components/ChannelBadge.astro | 8 +- .../src/components/CtaButton.astro | 35 ++++++- .../src/components/DeveloperSection.astro | 13 ++- .../src/components/FaqSection.astro | 28 +++++- .../src/components/FeatureCard.astro | 33 ++++++- .../src/components/FooterSection.astro | 20 +++- Apps/LandingSite/src/components/Hero.astro | 65 +++++++++++- .../src/components/HowItWorks.astro | 41 ++++++-- Apps/LandingSite/src/components/NavBar.astro | 63 +++++++++++- .../src/components/OpenSourceSection.astro | 12 ++- .../src/components/ProblemOutcome.astro | 37 ++++++- .../src/components/SafetySection.astro | 13 ++- .../src/components/ScreenshotGallery.astro | 37 +++++-- .../src/components/TrustStrip.astro | 31 +++++- Apps/LandingSite/src/layouts/BaseLayout.astro | 24 ++++- Apps/LandingSite/src/styles/global.css | 31 ++++++ Apps/LandingSite/src/styles/tokens.css | 48 ++++++++- Apps/LandingSite/src/styles/utilities.css | 98 +++++++++++++++++++ 18 files changed, 581 insertions(+), 56 deletions(-) diff --git a/Apps/LandingSite/src/components/ChannelBadge.astro b/Apps/LandingSite/src/components/ChannelBadge.astro index 5544106..77e8264 100644 --- a/Apps/LandingSite/src/components/ChannelBadge.astro +++ b/Apps/LandingSite/src/components/ChannelBadge.astro @@ -29,6 +29,9 @@ const { channel, label, version, date } = Astro.props; padding: var(--atlas-space-xxs) var(--atlas-space-sm); border-radius: var(--atlas-radius-sm); line-height: 1.4; + background: var(--atlas-glass-bg); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); } .badge__dot { @@ -47,27 +50,26 @@ const { channel, label, version, date } = Astro.props; } .badge--stable { - background: rgba(20, 144, 133, 0.15); color: var(--atlas-color-accent); border: 1px solid rgba(20, 144, 133, 0.3); } .badge--stable .badge__dot { background-color: var(--atlas-color-accent); + animation: pulse-dot 2s ease-in-out infinite; } .badge--prerelease { - background: rgba(245, 158, 11, 0.15); color: var(--atlas-color-warning); border: 1px solid rgba(245, 158, 11, 0.3); } .badge--prerelease .badge__dot { background-color: var(--atlas-color-warning); + animation: pulse-dot 2s ease-in-out infinite; } .badge--none { - background: rgba(148, 163, 184, 0.1); color: var(--atlas-color-text-secondary); border: 1px solid rgba(148, 163, 184, 0.2); } diff --git a/Apps/LandingSite/src/components/CtaButton.astro b/Apps/LandingSite/src/components/CtaButton.astro index dc4e95b..4685a20 100644 --- a/Apps/LandingSite/src/components/CtaButton.astro +++ b/Apps/LandingSite/src/components/CtaButton.astro @@ -49,8 +49,10 @@ const linkAttrs = external ? { target: '_blank', rel: 'noopener noreferrer' } : .cta--primary { color: #ffffff; padding: var(--atlas-space-md) var(--atlas-space-xxl); - background-color: var(--atlas-color-brand); + background: var(--atlas-gradient-brand); + background-size: 200% 100%; box-shadow: var(--atlas-shadow-cta); + animation: gradient-shift 3s ease infinite; } .cta--primary:hover { @@ -64,17 +66,40 @@ const linkAttrs = external ? { target: '_blank', rel: 'noopener noreferrer' } : } .cta--secondary { - color: var(--atlas-color-brand); + color: var(--atlas-color-accent); padding: var(--atlas-space-md) var(--atlas-space-xxl); - background-color: rgba(20, 144, 133, 0.04); - border: 1.5px solid rgba(20, 144, 133, 0.3); + background: var(--atlas-glass-bg); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + border: 1.5px solid transparent; + background-clip: padding-box; + position: relative; + } + + .cta--secondary::before { + content: ''; + position: absolute; + inset: 0; + border-radius: inherit; + padding: 1.5px; + background: var(--atlas-gradient-brand); + -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); + mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); + -webkit-mask-composite: xor; + mask-composite: exclude; + pointer-events: none; + opacity: 0.4; } .cta--secondary:hover { - background-color: rgba(20, 144, 133, 0.08); + background: var(--atlas-color-bg-raised); transform: translateY(-1px); } + .cta--secondary:hover::before { + opacity: 0.7; + } + .cta--secondary:active { transform: scale(0.97); } diff --git a/Apps/LandingSite/src/components/DeveloperSection.astro b/Apps/LandingSite/src/components/DeveloperSection.astro index 6a57a87..2f4f6d4 100644 --- a/Apps/LandingSite/src/components/DeveloperSection.astro +++ b/Apps/LandingSite/src/components/DeveloperSection.astro @@ -61,9 +61,18 @@ const copy = t(locale); .dev__card { padding: var(--atlas-space-xl); - background: var(--atlas-color-bg-base); - border: 1px solid var(--atlas-color-border); + background: var(--atlas-glass-bg); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); + border: 1px solid var(--atlas-glass-border); border-radius: var(--atlas-radius-lg); + transition: box-shadow var(--atlas-motion-standard), + transform var(--atlas-motion-fast); + } + + .dev__card:hover { + box-shadow: var(--atlas-glow-card-hover); + transform: translateY(-2px); } .dev__card-title { diff --git a/Apps/LandingSite/src/components/FaqSection.astro b/Apps/LandingSite/src/components/FaqSection.astro index 1f9778c..4a997c5 100644 --- a/Apps/LandingSite/src/components/FaqSection.astro +++ b/Apps/LandingSite/src/components/FaqSection.astro @@ -48,17 +48,38 @@ const copy = t(locale); } .faq__item { - border: 1px solid var(--atlas-color-border); + border: 1px solid var(--atlas-glass-border); border-radius: var(--atlas-radius-lg); - background: var(--atlas-color-bg-base); + background: var(--atlas-glass-bg); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); overflow: hidden; - transition: border-color var(--atlas-motion-fast); + transition: border-color var(--atlas-motion-fast), + box-shadow var(--atlas-motion-standard); + position: relative; + } + + .faq__item::before { + content: ''; + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 3px; + background: var(--atlas-gradient-brand); + opacity: 0; + transition: opacity var(--atlas-motion-standard); + border-radius: 3px 0 0 3px; } .faq__item[open] { border-color: var(--atlas-color-border-emphasis); } + .faq__item[open]::before { + opacity: 1; + } + .faq__question { display: flex; justify-content: space-between; @@ -83,6 +104,7 @@ const copy = t(locale); .faq__item[open] .faq__chevron { transform: rotate(180deg); + color: var(--atlas-color-brand); } .faq__answer { diff --git a/Apps/LandingSite/src/components/FeatureCard.astro b/Apps/LandingSite/src/components/FeatureCard.astro index f51f3e3..7a2b82e 100644 --- a/Apps/LandingSite/src/components/FeatureCard.astro +++ b/Apps/LandingSite/src/components/FeatureCard.astro @@ -24,17 +24,40 @@ const { title, value, example, trustCue } = Astro.props; diff --git a/Apps/LandingSite/src/components/NavBar.astro b/Apps/LandingSite/src/components/NavBar.astro index 4da67cb..dc3caf7 100644 --- a/Apps/LandingSite/src/components/NavBar.astro +++ b/Apps/LandingSite/src/components/NavBar.astro @@ -38,6 +38,22 @@ const navItems = [