diff --git a/Pages/Index.cshtml b/Pages/Index.cshtml index 7af0de6..37c178b 100644 --- a/Pages/Index.cshtml +++ b/Pages/Index.cshtml @@ -12,11 +12,11 @@ Development Build Available -

Elevate Your
Cycling Journey

+

Train Smarter.
Ride Further.

- The smart training platform for cyclists who demand excellence. - AI-powered plans, real-time analytics, and community-driven motivation. + The intelligent training platform built for cyclists who refuse to settle. + AI-powered training plans, real-time performance analytics, and a community that pushes you further — all in one place.

@@ -27,14 +27,14 @@ placeholder="Enter your email" required /> - +
-

Join the newsletter for feature updates and early access.

+

Join 200+ early adopters. Get feature updates and early access.

- Access Development Build + Try the Development Build @@ -42,19 +42,19 @@
-
+
Q4 2026
Launch Target
-
+
6+
Core Features
-
+
AI
Powered Training
-
+
100%
Data Privacy
diff --git a/Pages/Shared/_Layout.cshtml b/Pages/Shared/_Layout.cshtml index 9c43c7c..7a61e22 100644 --- a/Pages/Shared/_Layout.cshtml +++ b/Pages/Shared/_Layout.cshtml @@ -39,7 +39,7 @@ @await RenderSectionAsync("Head", required: false) -
- -
+ +
-

Current Development Status

-

- RideAware is actively being built. This development build lets you experience the platform early - and help us refine it. Some features are still in progress. -

+
+ +

Current Development Status

+

+ RideAware is actively being built. This development build lets you experience the platform early + and help us refine it. Here's where we stand across all feature areas. +

+
+
✓ Live

User Authentication

-

Sign up, login, and user profiles fully functional

+

Signup, login, JWT tokens, password recovery, user profiles with bio, zones, FTP & weight

✓ Live

Equipment Management

-

Add and manage your bikes and cycling gear

+

Bike/gear CRUD, auto mileage tracking, service intervals & reminders

✓ Live

Training Zones

-

HR and power zone calculations

+

7-zone power model (Recovery → Neuromuscular) with color-coded visualization

-
- 🔨 In Progress -

Workout Planning

-

Structured workout builder with interval support

+
+ ✓ Live +

Workout Planning & Builder

+

Structured interval builder (warmup/main/cooldown), %FTP targets, cadence, repeats, live chart preview

-
- 🔨 In Progress + +
+ ✓ Live +

Workout Templates Library

+

11 built-in templates (Recovery → Ramp Test) with category browsing & instant scheduling

+
+ +
+ ✓ Live +

Workout Export

+

Export to .zwo (Zwift) and FIT (Garmin-compatible) formats

+
+ +
+ ✓ Live +

Activity Import

+

Import FIT/TCX/GPX files with metric extraction (power, HR, cadence, elevation)

+
+ +
+ ✓ Live +

Device Integrations

+

Garmin Connect (OAuth2 PKCE), Wahoo Cloud API, Intervals.icu — push workouts & sync activities

+
+ + +
+ ✓ Live

Performance Analytics

-

Detailed performance tracking and metrics

+

Summary, weekly, monthly stats, personal bests, TSS/IF calculation, training load (CTL/ATL/TSB)

+
+ +
+ ✓ Live +

Goal Setting & Tracking

+

SMART goals (distance, frequency, power, weight, custom) with real-time progress tracking

+
+ +
+ ✓ Live +

Race/Event Planner

+

Target events with taper builder, distance, priority, and gear checklist

+
+ +
+ ✓ Live +

Nutrition Planning

+

BMR/TDEE calculation, macro targets, weekly meal planning with workout calorie adjustment

+
+ + +
+ ✓ Live +

AI-Powered Training Plans

+

DeepSeek integration generates personalized plans based on goals, fitness level, events & nutrition context

+
+ +
+ ✓ Live +

Workout Library

+

Browse, search, filter workouts; favorites, star ratings, custom workout creation

+
+ +
+ 🔨 In Progress +

OAuth Login

+

Google & Apple sign-in — Garmin & Wahoo OAuth complete, Google/Apple/Strava pending

+
+ +
+ 🔨 In Progress +

Tags & Notes System

+

RPE & Notes fields implemented; mood, conditions, injuries & tag system pending

+
+ + +
+ 📋 Planned +

Platform Sync

+

Strava activity sync, TrainingPeaks calendar sync, COROS / Apple Health / Google Fit

📋 Planned -

Device Integration

-

Sync with wearables and cycling computers

+

Coaching & Athlete Management

+

Coach portal, athlete assignments, plan reviews, messaging & comments

📋 Planned -

Community Features

-

Social sharing and competitive leaderboards

+

Virtual Training

+

Zwift/Rouvy/RGT integration, video routes, real-time ride simulation

📋 Planned -

Advanced Training

-

AI-powered coaching and personalized plans

+

Community & Social

+

Social sharing, community forum, leaderboards, clubs/groups, challenges & streaks

+
+ +
+ 📋 Planned +

Gamification

+

Achievements, badges, milestones, rewards store, partner discounts

+
+ +
+ 📋 Planned +

Notifications

+

Email/push/SMS reminders, weekly digests, real-time overtraining & weather alerts

+
+ +
+ 📋 Planned +

Mobile & PWA

+

Offline mode, native app shell, background sync, wearable bridge

+
+ +
+ 📋 Planned +

Admin & Billing

+

Admin console, Stripe subscriptions (Free/Pro/Coach), feature flags, audit logs

+
+ +
+ 📋 Planned +

Content Library

+

Exercise library (strength/mobility), knowledge base, route library with GPX planner

+
+ +
+ 📋 Planned +

Accessibility & i18n

+

WCAG 2.2 AA compliance, localization framework, imperial/metric units, color-blind safe palettes

@@ -294,4 +413,4 @@
{{end}} -{{end}} \ No newline at end of file +{{end}} diff --git a/wwwroot/css/styles.css b/wwwroot/css/styles.css index d0f1030..13000fb 100644 --- a/wwwroot/css/styles.css +++ b/wwwroot/css/styles.css @@ -1,524 +1,517 @@ -/* ======================= - DARK GLASSMORPHISM DESIGN SYSTEM - RideAware Landing Page - ======================= */ +/* ============================================================ + RideAware — Dark Glassmorphism Theme + ============================================================ + Design System: + - Background: #09090b (near-black) + - Primary glass: rgba(255,255,255,0.03–0.08) + - Accent: #a78bfa (purple) → #06b6d4 (cyan) gradient + - Text: #f1f5f9 (primary), #94a3b8 (secondary), #64748b (tertiary) + - Font: Inter + ============================================================ */ -* { +/* ---------- CSS Custom Properties ---------- */ +:root { + --bg-primary: #09090b; + --bg-secondary: #111113; + --bg-card: rgba(255, 255, 255, 0.04); + --bg-glass: rgba(255, 255, 255, 0.06); + --bg-glass-hover: rgba(255, 255, 255, 0.10); + --border-glass: rgba(255, 255, 255, 0.08); + --border-glass-hover: rgba(255, 255, 255, 0.16); + + --accent-start: #a78bfa; + --accent-mid: #7c3aed; + --accent-end: #06b6d4; + --accent-gradient: linear-gradient(135deg, var(--accent-start), var(--accent-end)); + --accent-glow: rgba(167, 139, 250, 0.35); + + --text-primary: #f1f5f9; + --text-secondary: #94a3b8; + --text-tertiary: #64748b; + + --font-primary: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; + + --radius-sm: 8px; + --radius-md: 12px; + --radius-lg: 16px; + --radius-xl: 24px; + + --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.3); + --shadow-md: 0 4px 20px rgba(0, 0, 0, 0.4); + --shadow-lg: 0 8px 40px rgba(0, 0, 0, 0.5); + --shadow-glow: 0 0 30px var(--accent-glow); + + --transition-fast: 200ms cubic-bezier(0.4, 0, 0.2, 1); + --transition-base: 300ms cubic-bezier(0.4, 0, 0.2, 1); + --transition-slow: 500ms cubic-bezier(0.4, 0, 0.2, 1); + + --max-width: 1100px; + --nav-height: 72px; +} + +/* ---------- Reset & Base ---------- */ +*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; } -:root { - /* Backgrounds */ - --bg-primary: #09090b; - --bg-secondary: #18181b; - --bg-tertiary: #27272a; - - /* Glass */ - --glass: rgba(255, 255, 255, 0.03); - --glass-hover: rgba(255, 255, 255, 0.06); - --glass-border: rgba(255, 255, 255, 0.08); - --glass-border-hover: rgba(255, 255, 255, 0.14); - - /* Text */ - --text-primary: #fafafa; - --text-secondary: #a1a1aa; - --text-tertiary: #71717a; - - /* Accents */ - --accent: #6366f1; - --accent-light: #818cf8; - --accent-cyan: #06b6d4; - --accent-green: #22c55e; - --accent-amber: #f59e0b; - --gradient: linear-gradient(135deg, #6366f1, #06b6d4); - --gradient-text: linear-gradient(135deg, #818cf8, #22d3ee); - - /* Effects */ - --glow: 0 0 80px rgba(99, 102, 241, 0.12); - --glow-sm: 0 0 40px rgba(99, 102, 241, 0.08); - --shadow: 0 8px 32px rgba(0, 0, 0, 0.4); - - /* Layout */ - --navbar-height: 60px; - --radius: 12px; - --radius-lg: 16px; - --radius-xl: 24px; - --transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); - --max-width: 1200px; -} - html { scroll-behavior: smooth; - font-size: 15px; -} - -@media (min-width: 768px) { - html { font-size: 16px; } + -webkit-text-size-adjust: 100%; + scroll-padding-top: var(--nav-height); } body { - font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; - line-height: 1.6; - color: var(--text-primary); + font-family: var(--font-primary); background: var(--bg-primary); + color: var(--text-primary); + line-height: 1.6; overflow-x: hidden; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } -/* ======================= - UTILITIES - ======================= */ +img { max-width: 100%; height: auto; display: block; } +a { color: inherit; text-decoration: none; } +ul { list-style: none; } + +/* ---------- Custom Scrollbar ---------- */ +::-webkit-scrollbar { width: 8px; } +::-webkit-scrollbar-track { background: var(--bg-primary); } +::-webkit-scrollbar-thumb { + background: rgba(167, 139, 250, 0.3); + border-radius: 4px; +} +::-webkit-scrollbar-thumb:hover { + background: rgba(167, 139, 250, 0.5); +} + +/* ---------- Animated Background Canvas ---------- */ +body::before { + content: ''; + position: fixed; + inset: 0; + z-index: -1; + background: + radial-gradient(ellipse 80% 60% at 20% 10%, rgba(167, 139, 250, 0.10) 0%, transparent 60%), + radial-gradient(ellipse 60% 50% at 80% 20%, rgba(6, 182, 212, 0.08) 0%, transparent 50%), + radial-gradient(ellipse 50% 40% at 50% 80%, rgba(124, 58, 237, 0.06) 0%, transparent 50%), + var(--bg-primary); + pointer-events: none; +} + +/* Mesh grid texture overlay */ +body::after { + content: ''; + position: fixed; + inset: 0; + z-index: -1; + background-image: + linear-gradient(rgba(255,255,255,0.02) 1px, transparent 1px), + linear-gradient(90deg, rgba(255,255,255,0.02) 1px, transparent 1px); + background-size: 60px 60px; + pointer-events: none; +} + +/* ---------- Container ---------- */ .container { max-width: var(--max-width); margin: 0 auto; - padding: 0 1.25rem; + padding: 0 24px; } -@media (min-width: 768px) { - .container { padding: 0 2rem; } -} - -.glass { - background: var(--glass); - backdrop-filter: blur(20px); - -webkit-backdrop-filter: blur(20px); - border: 1px solid var(--glass-border); - border-radius: var(--radius-lg); -} - -.glass:hover { - background: var(--glass-hover); - border-color: var(--glass-border-hover); -} - -.gradient-text { - background: var(--gradient-text); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; -} - -.section-label { - display: inline-flex; - align-items: center; - gap: 0.5rem; - font-size: 0.8rem; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 1.5px; - color: var(--accent-light); - margin-bottom: 1rem; -} - -.section-title { - font-size: clamp(1.75rem, 4vw, 2.5rem); - font-weight: 700; +/* ---------- Selection ---------- */ +::selection { + background: rgba(167, 139, 250, 0.3); color: var(--text-primary); - margin-bottom: 1rem; - line-height: 1.15; } -.section-subtitle { - font-size: 1.05rem; - color: var(--text-secondary); - max-width: 600px; - line-height: 1.6; -} - -/* ======================= +/* ============================================================ NAVBAR - ======================= */ + ============================================================ */ .navbar { position: fixed; - top: 0; - left: 0; - right: 0; - background: rgba(9, 9, 11, 0.8); - backdrop-filter: blur(20px); - -webkit-backdrop-filter: blur(20px); + top: 0; left: 0; right: 0; z-index: 1000; - border-bottom: 1px solid var(--glass-border); - min-height: var(--navbar-height); + height: var(--nav-height); + display: flex; + align-items: center; + background: transparent; + transition: var(--transition-base); } .navbar.scrolled { - background: rgba(9, 9, 11, 0.95); - box-shadow: 0 4px 30px rgba(0, 0, 0, 0.3); + background: rgba(9, 9, 11, 0.85); + backdrop-filter: blur(20px) saturate(1.2); + -webkit-backdrop-filter: blur(20px) saturate(1.2); + border-bottom: 1px solid var(--border-glass); + box-shadow: 0 1px 20px rgba(0, 0, 0, 0.3); } .nav-container { max-width: var(--max-width); margin: 0 auto; - padding: 0 1.25rem; + padding: 0 24px; display: flex; + align-items: center; justify-content: space-between; - align-items: center; - height: var(--navbar-height); -} - -@media (min-width: 768px) { - .nav-container { padding: 0 2rem; } -} - -.logo { - font-size: 1.1rem; - font-weight: 700; - color: var(--text-primary); - text-decoration: none; - display: flex; - align-items: center; - gap: 0.4rem; - flex-shrink: 0; + width: 100%; } +.logo { display: flex; align-items: center; flex-shrink: 0; } .logo-img { - display: block; - height: 24px; + height: 28px; width: auto; - filter: brightness(0) invert(1); + filter: brightness(0) invert(0.85) sepia(0.3) saturate(0.5); } .nav-links { - display: none; - list-style: none; + display: flex; + align-items: center; + gap: 8px; } .nav-links a { - text-decoration: none; - color: var(--text-secondary); + padding: 8px 16px; + font-size: 0.875rem; font-weight: 500; - font-size: 0.9rem; - transition: color 0.2s ease; + color: var(--text-secondary); + border-radius: var(--radius-sm); + transition: var(--transition-fast); position: relative; } +.nav-links a::after { + content: ''; + position: absolute; + bottom: 4px; left: 50%; + width: 0; height: 2px; + background: var(--accent-gradient); + border-radius: 2px; + transform: translateX(-50%); + transition: var(--transition-base); + opacity: 0; +} + .nav-links a:hover { color: var(--text-primary); + background: var(--bg-glass); } +.nav-links a:hover::after { + width: 60%; + opacity: 1; +} + +/* ---------- Nav Toggle (Mobile) ---------- */ .nav-toggle { - display: flex; + display: none; flex-direction: column; justify-content: center; align-items: center; gap: 5px; - width: 40px; - height: 40px; - border: 1px solid var(--glass-border); - border-radius: 8px; - background: transparent; + width: 40px; height: 40px; + background: var(--bg-glass); + border: 1px solid var(--border-glass); + border-radius: var(--radius-sm); cursor: pointer; - transition: var(--transition); + transition: var(--transition-fast); } -.nav-toggle:hover { - background: var(--glass-hover); - border-color: var(--glass-border-hover); -} +.nav-toggle:hover { background: var(--bg-glass-hover); } -.nav-toggle .bar { - width: 18px; - height: 2px; - background: var(--text-secondary); +.bar { + display: block; + width: 20px; height: 2px; + background: var(--text-primary); border-radius: 2px; - transition: transform 0.25s ease, opacity 0.25s ease; + transition: var(--transition-base); } .nav-toggle.active .bar:nth-child(1) { transform: translateY(7px) rotate(45deg); } .nav-toggle.active .bar:nth-child(2) { opacity: 0; } .nav-toggle.active .bar:nth-child(3) { transform: translateY(-7px) rotate(-45deg); } -.nav-links.open { - display: flex; - position: fixed; - top: var(--navbar-height); - left: 0; - right: 0; - flex-direction: column; - background: rgba(9, 9, 11, 0.98); - backdrop-filter: blur(20px); - border-bottom: 1px solid var(--glass-border); - padding: 0.75rem; - z-index: 999; -} - -.nav-links.open a { - display: block; - padding: 0.85rem 1rem; - border-radius: 8px; - color: var(--text-secondary); -} - -.nav-links.open a:hover { - background: var(--glass-hover); - color: var(--text-primary); -} - -@media (min-width: 768px) { - .nav-toggle { display: none; } - .nav-links { - display: flex; - gap: 2rem; - } - .nav-links a::after { - content: ''; - position: absolute; - bottom: -4px; - left: 0; - width: 0; - height: 2px; - background: var(--gradient); - transition: width 0.3s ease; - border-radius: 1px; - } - .nav-links a:hover::after { width: 100%; } -} - -/* ======================= +/* ============================================================ HERO - ======================= */ + ============================================================ */ .hero { min-height: 100vh; display: flex; align-items: center; justify-content: center; + position: relative; + padding: calc(var(--nav-height) + 48px) 24px 80px; text-align: center; - padding: calc(var(--navbar-height) + 2rem) 1.25rem 4rem; - position: relative; - overflow: hidden; - background: var(--bg-primary); } -.hero::before { - content: ''; - position: absolute; - top: -40%; - left: 50%; - transform: translateX(-50%); - width: 800px; - height: 800px; - background: radial-gradient(circle, rgba(99, 102, 241, 0.15) 0%, rgba(6, 182, 212, 0.08) 40%, transparent 70%); - pointer-events: none; - animation: heroGlow 8s ease-in-out infinite alternate; -} - -.hero::after { - content: ''; - position: absolute; - bottom: -20%; - right: -10%; - width: 600px; - height: 600px; - background: radial-gradient(circle, rgba(6, 182, 212, 0.1) 0%, transparent 60%); - pointer-events: none; - animation: heroGlow 10s ease-in-out infinite alternate-reverse; -} - -@keyframes heroGlow { - 0% { opacity: 0.6; transform: translateX(-50%) scale(1); } - 100% { opacity: 1; transform: translateX(-50%) scale(1.1); } -} - -.hero-content { - max-width: 720px; - margin: 0 auto; - position: relative; - z-index: 1; -} +.hero-content { max-width: 720px; margin: 0 auto; } .hero-badge { display: inline-flex; align-items: center; - gap: 0.5rem; - padding: 0.45rem 1rem; - border-radius: 50px; - border: 1px solid var(--glass-border); - background: var(--glass); - backdrop-filter: blur(10px); - font-size: 0.8rem; + gap: 8px; + padding: 8px 16px; + background: var(--bg-glass); + border: 1px solid var(--border-glass); + border-radius: 100px; + font-size: 0.8125rem; font-weight: 500; - color: var(--accent-light); - margin-bottom: 1.5rem; - letter-spacing: 0.3px; + color: var(--text-secondary); + margin-bottom: 32px; + animation: fadeUp 0.6s ease forwards; } -.hero-badge .pulse-dot { - width: 8px; - height: 8px; +.pulse-dot { + width: 8px; height: 8px; border-radius: 50%; - background: var(--accent-green); - animation: pulseDot 2s ease-in-out infinite; + background: #22c55e; + display: inline-block; + animation: pulse-dot 2s ease-in-out infinite; } -@keyframes pulseDot { - 0%, 100% { opacity: 1; box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.4); } - 50% { opacity: 0.8; box-shadow: 0 0 0 6px rgba(34, 197, 94, 0); } +@keyframes pulse-dot { + 0%, 100% { box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.5); } + 50% { box-shadow: 0 0 0 6px rgba(34, 197, 94, 0); } } .hero h1 { - font-size: clamp(2.25rem, 6vw, 3.75rem); + font-size: clamp(2.5rem, 6vw, 4rem); font-weight: 800; - line-height: 1.08; - margin-bottom: 1.25rem; + line-height: 1.1; letter-spacing: -0.03em; + margin-bottom: 20px; + animation: fadeUp 0.6s ease 0.1s forwards; + opacity: 0; +} + +.gradient-text { + background: var(--accent-gradient); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + background-size: 200% 200%; + animation: gradient-shift 8s ease infinite; +} + +@keyframes gradient-shift { + 0%, 100% { background-position: 0% 50%; } + 50% { background-position: 100% 50%; } } .hero .subtitle { - font-size: clamp(1rem, 2.5vw, 1.2rem); + font-size: clamp(1rem, 2vw, 1.2rem); color: var(--text-secondary); - margin-bottom: 2.5rem; - line-height: 1.6; - max-width: 540px; - margin-left: auto; - margin-right: auto; + line-height: 1.7; + max-width: 580px; + margin: 0 auto 36px; + animation: fadeUp 0.6s ease 0.2s forwards; + opacity: 0; } .hero-cta { display: flex; - flex-direction: column; - gap: 0.75rem; - max-width: 440px; - margin: 0 auto; + gap: 10px; + justify-content: center; + align-items: center; + flex-wrap: wrap; + margin-bottom: 16px; + animation: fadeUp 0.6s ease 0.3s forwards; + opacity: 0; } -@media (min-width: 480px) { - .hero-cta { - flex-direction: row; - } -} - -.hero-cta .email-input { - flex: 1; - padding: 0.85rem 1.25rem; - border: 1px solid var(--glass-border); - border-radius: 50px; - background: var(--glass); - backdrop-filter: blur(10px); +.email-input { + padding: 14px 20px; + font-size: 0.9375rem; + font-family: var(--font-primary); color: var(--text-primary); - font-size: 0.95rem; + background: var(--bg-glass); + border: 1px solid var(--border-glass); + border-radius: var(--radius-sm); outline: none; - transition: var(--transition); - min-width: 0; + min-width: 260px; + transition: var(--transition-base); } -.hero-cta .email-input::placeholder { - color: var(--text-tertiary); +.email-input:focus { + border-color: var(--accent-start); + box-shadow: 0 0 0 3px var(--accent-glow); + background: var(--bg-glass-hover); } -.hero-cta .email-input:focus { - border-color: var(--accent); - box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.15); -} +.email-input::placeholder { color: var(--text-tertiary); } -.hero-cta .btn-primary { - padding: 0.85rem 1.75rem; - background: var(--gradient); - color: white; - border: none; - border-radius: 50px; +.btn-primary { + padding: 14px 28px; + font-size: 0.9375rem; font-weight: 600; - font-size: 0.95rem; + font-family: var(--font-primary); + color: #fff; + background: var(--accent-gradient); + border: none; + border-radius: var(--radius-sm); cursor: pointer; - transition: var(--transition); - white-space: nowrap; - box-shadow: 0 4px 20px rgba(99, 102, 241, 0.3); + transition: var(--transition-base); + position: relative; + overflow: hidden; } -.hero-cta .btn-primary:hover { - box-shadow: 0 8px 30px rgba(99, 102, 241, 0.4); - transform: translateY(-1px); +.btn-primary::before { + content: ''; + position: absolute; + inset: 0; + background: linear-gradient(135deg, rgba(255,255,255,0.15), transparent); + opacity: 0; + transition: var(--transition-fast); } -.hero-cta .btn-primary:active { - transform: scale(0.98); +.btn-primary:hover::before { opacity: 1; } + +.btn-primary:hover { + transform: translateY(-2px); + box-shadow: var(--shadow-glow); } +.btn-primary:active { transform: translateY(0); } + .hero-note { - margin-top: 1.25rem; - font-size: 0.8rem; + font-size: 0.8125rem; color: var(--text-tertiary); + margin-bottom: 24px; } -/* ======================= +.action-btn { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 12px 24px; + font-size: 0.9375rem; + font-weight: 500; + border-radius: var(--radius-sm); + transition: var(--transition-base); +} + +.action-btn.primary { + background: var(--accent-gradient); + color: #fff; + box-shadow: var(--shadow-md); +} + +.action-btn.primary:hover { + transform: translateY(-2px); + box-shadow: var(--shadow-glow); +} + +.action-btn.secondary { + background: var(--bg-glass); + color: var(--text-secondary); + border: 1px solid var(--border-glass); +} + +.action-btn.secondary:hover { + background: var(--bg-glass-hover); + color: var(--text-primary); + border-color: var(--border-glass-hover); +} + +@keyframes fadeUp { + from { opacity: 0; transform: translateY(20px); } + to { opacity: 1; transform: translateY(0); } +} + +/* ============================================================ SOCIAL PROOF BAR - ======================= */ + ============================================================ */ .proof-bar { - padding: 3rem 0; - border-top: 1px solid var(--glass-border); - border-bottom: 1px solid var(--glass-border); + padding: 48px 0; + border-top: 1px solid var(--border-glass); + border-bottom: 1px solid var(--border-glass); background: var(--bg-secondary); } .proof-bar .container { display: flex; - flex-wrap: wrap; - justify-content: center; + justify-content: space-around; align-items: center; - gap: 2rem 3rem; + flex-wrap: wrap; + gap: 32px; } -.proof-item { - text-align: center; -} +.proof-item { text-align: center; } .proof-item .number { - font-size: 1.5rem; - font-weight: 700; - background: var(--gradient-text); + font-size: 1.75rem; + font-weight: 800; + background: var(--accent-gradient); -webkit-background-clip: text; - -webkit-text-fill-color: transparent; background-clip: text; + -webkit-text-fill-color: transparent; + margin-bottom: 4px; } .proof-item .label { - font-size: 0.8rem; + font-size: 0.8125rem; color: var(--text-tertiary); text-transform: uppercase; - letter-spacing: 1px; - margin-top: 0.25rem; + letter-spacing: 0.08em; + font-weight: 500; } -/* ======================= - FEATURES - BENTO GRID - ======================= */ -.features { - padding: 5rem 0; - background: var(--bg-primary); -} +/* ============================================================ + SECTION COMMON STYLES + ============================================================ */ +section { padding: 100px 0; } -.features .section-header { +.section-header { text-align: center; - margin-bottom: 3.5rem; + max-width: 640px; + margin: 0 auto 60px; } -.features .section-subtitle { - margin-left: auto; - margin-right: auto; +.section-label { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 6px 14px; + background: var(--bg-glass); + border: 1px solid var(--border-glass); + border-radius: 100px; + font-size: 0.8125rem; + font-weight: 500; + color: var(--text-secondary); + margin-bottom: 16px; } +.section-title { + font-size: clamp(1.75rem, 4vw, 2.5rem); + font-weight: 700; + letter-spacing: -0.02em; + line-height: 1.2; + margin-bottom: 16px; +} + +.section-subtitle { + font-size: 1.05rem; + color: var(--text-secondary); + line-height: 1.7; +} + +/* ============================================================ + FEATURES GRID (Bento) + ============================================================ */ .features-grid { display: grid; - grid-template-columns: 1fr; - gap: 1rem; -} - -@media (min-width: 640px) { - .features-grid { grid-template-columns: repeat(2, 1fr); } -} - -@media (min-width: 1024px) { - .features-grid { grid-template-columns: repeat(3, 1fr); } + grid-template-columns: repeat(3, 1fr); + gap: 20px; } .feature-card { - background: var(--glass); - border: 1px solid var(--glass-border); + background: var(--bg-card); + border: 1px solid var(--border-glass); border-radius: var(--radius-lg); - padding: 1.75rem; - transition: var(--transition); + padding: 36px 28px; + transition: var(--transition-base); position: relative; overflow: hidden; } @@ -526,281 +519,225 @@ body { .feature-card::before { content: ''; position: absolute; - top: 0; - left: 0; - right: 0; - height: 1px; - background: linear-gradient(90deg, transparent, var(--accent), var(--accent-cyan), transparent); + top: 0; left: 0; right: 0; + height: 2px; + background: var(--accent-gradient); opacity: 0; - transition: opacity 0.3s ease; -} - -.feature-card:hover { - background: var(--glass-hover); - border-color: var(--glass-border-hover); - transform: translateY(-2px); - box-shadow: var(--glow-sm); + transition: var(--transition-base); + transform: scaleX(0); } .feature-card:hover::before { opacity: 1; + transform: scaleX(1); +} + +.feature-card:hover { + background: var(--bg-glass); + border-color: var(--border-glass-hover); + transform: translateY(-4px); + box-shadow: var(--shadow-lg); } .feature-icon { - width: 44px; - height: 44px; - border-radius: 10px; - background: var(--gradient); + width: 48px; height: 48px; display: flex; align-items: center; justify-content: center; - margin-bottom: 1.25rem; - font-size: 1.1rem; - color: white; - box-shadow: 0 4px 16px rgba(99, 102, 241, 0.25); + background: var(--bg-glass); + border: 1px solid var(--border-glass); + border-radius: var(--radius-md); + margin-bottom: 20px; + font-size: 1.25rem; + color: var(--accent-start); + transition: var(--transition-base); +} + +.feature-card:hover .feature-icon { + background: rgba(167, 139, 250, 0.12); + border-color: rgba(167, 139, 250, 0.2); + box-shadow: 0 0 20px rgba(167, 139, 250, 0.15); } .feature-card h3 { - font-size: 1.1rem; + font-size: 1.125rem; font-weight: 600; - color: var(--text-primary); - margin-bottom: 0.5rem; + margin-bottom: 10px; + letter-spacing: -0.01em; } .feature-card p { - font-size: 0.9rem; + font-size: 0.9375rem; color: var(--text-secondary); - line-height: 1.5; + line-height: 1.7; } -/* ======================= +/* First feature card spans 2 cols */ +.feature-card:first-child { grid-column: span 2; } + +/* ============================================================ HOW IT WORKS - ======================= */ -.how-it-works { - padding: 5rem 0; - background: var(--bg-secondary); -} - -.how-it-works .section-header { - text-align: center; - margin-bottom: 3.5rem; -} - -.how-it-works .section-subtitle { - margin-left: auto; - margin-right: auto; -} + ============================================================ */ +.how-it-works { background: var(--bg-secondary); } .steps-grid { display: grid; - grid-template-columns: 1fr; - gap: 1.5rem; -} - -@media (min-width: 768px) { - .steps-grid { grid-template-columns: repeat(3, 1fr); gap: 2rem; } + grid-template-columns: repeat(3, 1fr); + gap: 24px; } .step-card { + background: var(--bg-card); + border: 1px solid var(--border-glass); + border-radius: var(--radius-lg); + padding: 40px 32px; text-align: center; - padding: 2rem 1.5rem; - position: relative; + transition: var(--transition-base); } -.step-number { - width: 48px; - height: 48px; - border-radius: 50%; - background: var(--glass); - border: 1px solid var(--glass-border); - display: flex; - align-items: center; - justify-content: center; - font-size: 1.1rem; - font-weight: 700; - background: var(--gradient-text); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; - margin: 0 auto 1.25rem; +.step-card:hover { + background: var(--bg-glass); + border-color: var(--border-glass-hover); + transform: translateY(-4px); + box-shadow: var(--shadow-lg); } .step-number-ring { - width: 48px; - height: 48px; - border-radius: 50%; - border: 1px solid var(--glass-border); - background: var(--glass); + width: 56px; height: 56px; display: flex; align-items: center; justify-content: center; - margin: 0 auto 1.25rem; + background: var(--bg-glass); + border: 2px solid var(--border-glass); + border-radius: 50%; + margin: 0 auto 20px; + font-size: 1.25rem; + font-weight: 700; + transition: var(--transition-base); +} + +.step-card:hover .step-number-ring { + border-color: var(--accent-start); + box-shadow: 0 0 20px rgba(167, 139, 250, 0.15); } .step-card h3 { - font-size: 1.1rem; + font-size: 1.125rem; font-weight: 600; - color: var(--text-primary); - margin-bottom: 0.5rem; + margin-bottom: 10px; } .step-card p { - font-size: 0.9rem; + font-size: 0.9375rem; color: var(--text-secondary); - line-height: 1.5; -} - -@media (min-width: 768px) { - .step-card:not(:last-child)::after { - content: ''; - position: absolute; - top: 3.5rem; - right: -1rem; - width: 2rem; - height: 1px; - background: var(--glass-border); - } -} - -/* ======================= - ROADMAP / DEV STATUS - ======================= */ -.roadmap { - padding: 5rem 0; - background: var(--bg-primary); -} - -.roadmap .section-header { - text-align: center; - margin-bottom: 3.5rem; -} - -.roadmap .section-subtitle { - margin-left: auto; - margin-right: auto; + line-height: 1.7; } +/* ============================================================ + ROADMAP / TIMELINE + ============================================================ */ .timeline { + position: relative; max-width: 640px; margin: 0 auto; - position: relative; } .timeline::before { content: ''; position: absolute; - top: 0; - left: 18px; - width: 1px; - height: 100%; - background: linear-gradient(to bottom, var(--accent), var(--accent-cyan), var(--glass-border)); -} - -@media (min-width: 768px) { - .timeline::before { left: 22px; } + left: 8px; top: 0; bottom: 0; + width: 2px; + background: var(--border-glass); } .timeline-item { position: relative; - padding-left: 52px; - padding-bottom: 2rem; -} - -@media (min-width: 768px) { - .timeline-item { padding-left: 60px; } + padding-left: 40px; + padding-bottom: 36px; } .timeline-item:last-child { padding-bottom: 0; } .timeline-dot { position: absolute; - left: 10px; - top: 4px; - width: 18px; - height: 18px; + left: 0; top: 4px; + width: 18px; height: 18px; border-radius: 50%; - border: 2px solid var(--glass-border); background: var(--bg-primary); -} - -@media (min-width: 768px) { - .timeline-dot { left: 14px; } + border: 2px solid var(--border-glass); + z-index: 1; } .timeline-item.live .timeline-dot { - border-color: var(--accent-green); - background: var(--accent-green); - box-shadow: 0 0 12px rgba(34, 197, 94, 0.4); + border-color: #22c55e; + background: rgba(34, 197, 94, 0.15); + box-shadow: 0 0 10px rgba(34, 197, 94, 0.3); } .timeline-item.in-progress .timeline-dot { - border-color: var(--accent-amber); - background: var(--accent-amber); - box-shadow: 0 0 12px rgba(245, 158, 11, 0.3); + border-color: var(--accent-start); + background: rgba(167, 139, 250, 0.15); + box-shadow: 0 0 10px var(--accent-glow); } .timeline-item.planned .timeline-dot { border-color: var(--text-tertiary); - background: var(--bg-tertiary); } .timeline-badge { display: inline-block; - padding: 0.2rem 0.6rem; - border-radius: 50px; + padding: 3px 10px; font-size: 0.7rem; font-weight: 600; text-transform: uppercase; - letter-spacing: 0.5px; - margin-bottom: 0.35rem; + letter-spacing: 0.06em; + border-radius: 4px; + margin-bottom: 6px; } .timeline-item.live .timeline-badge { - background: rgba(34, 197, 94, 0.1); - color: var(--accent-green); - border: 1px solid rgba(34, 197, 94, 0.2); + background: rgba(34, 197, 94, 0.15); + color: #22c55e; + border: 1px solid rgba(34, 197, 94, 0.25); } .timeline-item.in-progress .timeline-badge { - background: rgba(245, 158, 11, 0.1); - color: var(--accent-amber); - border: 1px solid rgba(245, 158, 11, 0.2); + background: rgba(167, 139, 250, 0.12); + color: var(--accent-start); + border: 1px solid rgba(167, 139, 250, 0.2); } .timeline-item.planned .timeline-badge { - background: rgba(113, 113, 122, 0.1); + background: var(--bg-glass); color: var(--text-tertiary); - border: 1px solid rgba(113, 113, 122, 0.2); + border: 1px solid var(--border-glass); } .timeline-item h4 { font-size: 1rem; font-weight: 600; - color: var(--text-primary); - margin-bottom: 0.25rem; + margin-bottom: 4px; } .timeline-item p { - font-size: 0.85rem; + font-size: 0.875rem; color: var(--text-secondary); + line-height: 1.6; } -/* ======================= +/* ============================================================ CTA SECTION - ======================= */ -.cta-section { - padding: 5rem 0; - background: var(--bg-secondary); -} - + ============================================================ */ .cta-card { max-width: 640px; margin: 0 auto; - padding: 3rem 2rem; + padding: 60px 40px; text-align: center; + background: var(--bg-glass); + border: 1px solid var(--border-glass); border-radius: var(--radius-xl); - background: var(--glass); - border: 1px solid var(--glass-border); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); position: relative; overflow: hidden; } @@ -808,1117 +745,257 @@ body { .cta-card::before { content: ''; position: absolute; - top: 0; - left: 0; - right: 0; - height: 1px; - background: var(--gradient); + inset: 0; + background: + radial-gradient(ellipse at 30% 20%, rgba(167, 139, 250, 0.10) 0%, transparent 60%), + radial-gradient(ellipse at 70% 80%, rgba(6, 182, 212, 0.08) 0%, transparent 50%); + pointer-events: none; } .cta-card h2 { - font-size: clamp(1.5rem, 3.5vw, 2rem); + font-size: clamp(1.5rem, 3vw, 2rem); font-weight: 700; - margin-bottom: 0.75rem; - color: var(--text-primary); + letter-spacing: -0.02em; + margin-bottom: 12px; + position: relative; } .cta-card p { color: var(--text-secondary); - margin-bottom: 2rem; - font-size: 1rem; + margin-bottom: 28px; + font-size: 1.05rem; + position: relative; } .cta-card .hero-cta { - max-width: 400px; -} - -/* ======================= - PAGE HEADER (ABOUT, CONTACT, NEWSLETTERS) - ======================= */ -.page-hero { - padding: calc(var(--navbar-height) + 4rem) 0 3rem; - text-align: center; position: relative; - overflow: hidden; + animation: none; + opacity: 1; } -.page-hero::before { - content: ''; - position: absolute; - top: -20%; - left: 50%; - transform: translateX(-50%); - width: 600px; - height: 400px; - background: radial-gradient(circle, rgba(99, 102, 241, 0.1) 0%, transparent 60%); - pointer-events: none; -} - -.page-hero h1 { - font-size: clamp(2rem, 5vw, 3rem); - font-weight: 800; - color: var(--text-primary); - margin-bottom: 0.75rem; - letter-spacing: -0.02em; - position: relative; -} - -.page-hero > p { - font-size: 1.1rem; - color: var(--text-secondary); - position: relative; -} - -/* ======================= - ABOUT PAGE - ======================= */ -.about-mission { - padding: 4rem 0; -} - -.about-mission .container { - display: grid; - grid-template-columns: 1fr; - gap: 2.5rem; - align-items: center; -} - -@media (min-width: 768px) { - .about-mission .container { - grid-template-columns: 1fr 1fr; - gap: 4rem; - } -} - -.mission-text h2 { - font-size: 1.75rem; - font-weight: 700; - color: var(--text-primary); - margin-bottom: 1.25rem; -} - -.mission-text p { - color: var(--text-secondary); - margin-bottom: 1rem; - line-height: 1.7; -} - -.mission-text ul { - list-style: none; - margin-top: 1.5rem; -} - -.mission-text ul li { - padding: 0.5rem 0; - color: var(--text-secondary); - display: flex; - align-items: center; - gap: 0.75rem; -} - -.mission-text ul li::before { - content: ''; - width: 6px; - height: 6px; - border-radius: 50%; - background: var(--accent); - flex-shrink: 0; -} - -.mission-visual { - width: 100%; - height: 320px; - border-radius: var(--radius-xl); - background: var(--gradient); - display: flex; - align-items: center; - justify-content: center; - color: rgba(255, 255, 255, 0.9); - font-size: 4rem; - position: relative; - overflow: hidden; -} - -@media (min-width: 768px) { - .mission-visual { height: 400px; } -} - -.values-section { - padding: 4rem 0; - background: var(--bg-secondary); -} - -.values-section .section-header { - text-align: center; - margin-bottom: 3rem; -} - -.values-grid { - display: grid; - grid-template-columns: 1fr; - gap: 1rem; -} - -@media (min-width: 640px) { - .values-grid { grid-template-columns: repeat(2, 1fr); } -} - -@media (min-width: 1024px) { - .values-grid { grid-template-columns: repeat(3, 1fr); } -} - -.value-card { - background: var(--glass); - border: 1px solid var(--glass-border); - border-radius: var(--radius-lg); - padding: 1.75rem; - transition: var(--transition); -} - -.value-card:hover { - background: var(--glass-hover); - border-color: var(--glass-border-hover); -} - -.value-icon { - width: 44px; - height: 44px; - border-radius: 10px; - background: var(--gradient); - display: flex; - align-items: center; - justify-content: center; - margin-bottom: 1rem; - font-size: 1.1rem; - color: white; -} - -.value-card h3 { - font-size: 1.05rem; - font-weight: 600; - color: var(--text-primary); - margin-bottom: 0.5rem; -} - -.value-card p { - font-size: 0.9rem; - color: var(--text-secondary); - line-height: 1.5; -} - -/* Team */ -.team-section { - padding: 4rem 0; -} - -.team-section .section-header, -.team-header { - text-align: center; - margin-bottom: 3rem; -} - -.team-header h2 { - font-size: clamp(1.5rem, 3vw, 2rem); - font-weight: 700; - color: var(--text-primary); - margin-bottom: 0.5rem; -} - -.team-header p { - color: var(--text-secondary); -} - -.team-grid { - display: grid; - grid-template-columns: 1fr; - gap: 1rem; - max-width: 900px; - margin: 0 auto; -} - -@media (min-width: 768px) { - .team-grid { grid-template-columns: repeat(3, 1fr); } -} - -.team-member { - background: var(--glass); - border: 1px solid var(--glass-border); - border-radius: var(--radius-lg); - padding: 2rem 1.5rem; - text-align: center; - transition: var(--transition); -} - -.team-member:hover { - background: var(--glass-hover); - border-color: var(--glass-border-hover); -} - -.team-member-image { - font-size: 3rem; - color: var(--text-tertiary); - margin-bottom: 1rem; -} - -.team-member-info h3 { - font-size: 1.05rem; - font-weight: 600; - color: var(--text-primary); - margin-bottom: 0.25rem; -} - -.team-member-info > p { - font-size: 0.85rem; - color: var(--accent-light); - margin-bottom: 0.75rem; -} - -.bio { - font-size: 0.85rem; - color: var(--text-secondary); - line-height: 1.5; -} - -/* Stats */ -.stats-section { - padding: 4rem 0; - background: var(--bg-secondary); -} - -.stats-section .section-header { - text-align: center; - margin-bottom: 3rem; -} - -.stats-section .section-header h2 { - font-size: clamp(1.5rem, 3vw, 2rem); - font-weight: 700; - color: var(--text-primary); - margin-bottom: 0.5rem; -} - -.stats-section .section-header p { - color: var(--text-secondary); -} - -.stats-grid { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 1rem; - max-width: 700px; - margin: 0 auto; -} - -@media (min-width: 640px) { - .stats-grid { grid-template-columns: repeat(4, 1fr); } -} - -.stat-box { - background: var(--glass); - border: 1px solid var(--glass-border); - border-radius: var(--radius-lg); - padding: 1.75rem 1rem; - text-align: center; -} - -.stat-box .stat-number { - font-size: 1.5rem; - font-weight: 800; - background: var(--gradient-text); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; - margin-bottom: 0.25rem; -} - -.stat-box .stat-label { - font-size: 0.8rem; - color: var(--text-tertiary); - text-transform: uppercase; - letter-spacing: 0.5px; -} - -/* FAQ */ -.faq-section { - padding: 4rem 0; -} - -.faq-section .section-header { - text-align: center; - margin-bottom: 2.5rem; -} - -.faq-section .section-header h2 { - font-size: clamp(1.5rem, 3vw, 2rem); - font-weight: 700; - color: var(--text-primary); -} - -.faq-container { - max-width: 700px; - margin: 0 auto; -} - -.faq-item { - border-bottom: 1px solid var(--glass-border); -} - -.faq-question { - display: flex; - justify-content: space-between; - align-items: center; - padding: 1.25rem 0; - cursor: pointer; - gap: 1rem; -} - -.faq-question h3 { - font-size: 1rem; - font-weight: 600; - color: var(--text-primary); -} - -.faq-question i { - color: var(--text-tertiary); - font-size: 0.8rem; - transition: transform 0.3s ease; - flex-shrink: 0; -} - -.faq-item.open .faq-question i { - transform: rotate(180deg); -} - -.faq-answer { - max-height: 0; - overflow: hidden; - transition: max-height 0.3s ease, padding 0.3s ease; -} - -.faq-item.open .faq-answer { - max-height: 300px; - padding-bottom: 1.25rem; -} - -.faq-answer p { - font-size: 0.9rem; - color: var(--text-secondary); - line-height: 1.6; -} - -/* ======================= - CONTACT PAGE - ======================= */ -.contact-layout { - padding: 2rem 0 4rem; -} - -.contact-layout .container { - display: grid; - grid-template-columns: 1fr; - gap: 2.5rem; -} - -@media (min-width: 768px) { - .contact-layout .container { - grid-template-columns: 1fr 1fr; - gap: 3rem; - } -} - -.contact-info-side h2 { - font-size: 1.5rem; - font-weight: 700; - color: var(--text-primary); - margin-bottom: 1rem; -} - -.contact-info-side > p { - color: var(--text-secondary); - margin-bottom: 1.5rem; - line-height: 1.6; -} - -.contact-info-side ul { - list-style: none; - margin-bottom: 2rem; -} - -.contact-info-side ul li { - padding: 0.4rem 0; - color: var(--text-secondary); - display: flex; - align-items: center; - gap: 0.75rem; - font-size: 0.9rem; -} - -.contact-info-side ul li::before { - content: ''; - width: 6px; - height: 6px; - border-radius: 50%; - background: var(--accent); - flex-shrink: 0; -} - -.contact-info { - display: flex; - flex-direction: column; - gap: 1rem; - margin-top: 1rem; -} - -.info-card { - background: var(--glass); - border: 1px solid var(--glass-border); - border-radius: var(--radius); - padding: 1.25rem; - display: flex; - align-items: center; - gap: 1rem; - transition: var(--transition); -} - -.info-card:hover { - background: var(--glass-hover); - border-color: var(--glass-border-hover); -} - -.info-card-icon { - width: 40px; - height: 40px; - border-radius: 10px; - background: var(--gradient); - display: flex; - align-items: center; - justify-content: center; - color: white; - font-size: 0.9rem; - flex-shrink: 0; -} - -.info-card h3 { - font-size: 0.85rem; - font-weight: 600; - color: var(--text-primary); - margin-bottom: 0.15rem; -} - -.info-card p { - font-size: 0.85rem; - color: var(--text-secondary); - line-height: 1.4; -} - -.info-card a { - color: var(--accent-light); - text-decoration: none; -} - -.info-card a:hover { - text-decoration: underline; -} - -/* Contact Form */ -.contact-form { - background: var(--glass); - border: 1px solid var(--glass-border); - border-radius: var(--radius-lg); - padding: 2rem; -} - -.contact-form h2 { - font-size: 1.25rem; - font-weight: 600; - color: var(--text-primary); - margin-bottom: 1.5rem; -} - -.form-group { - margin-bottom: 1.25rem; -} - -.form-group label { - display: block; - font-size: 0.85rem; - font-weight: 500; - color: var(--text-secondary); - margin-bottom: 0.5rem; -} - -.required { - color: var(--accent-light); -} - -.form-group input, -.form-group textarea, -.form-group select { - width: 100%; - padding: 0.75rem 1rem; - background: var(--bg-primary); - border: 1px solid var(--glass-border); - border-radius: var(--radius); - color: var(--text-primary); - font-family: inherit; - font-size: 0.9rem; - outline: none; - transition: var(--transition); -} - -.form-group input::placeholder, -.form-group textarea::placeholder { - color: var(--text-tertiary); -} - -.form-group input:focus, -.form-group textarea:focus, -.form-group select:focus { - border-color: var(--accent); - box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1); -} - -.form-group select { - cursor: pointer; - appearance: none; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23a1a1aa' d='M6 8L1 3h10z'/%3E%3C/svg%3E"); - background-repeat: no-repeat; - background-position: right 1rem center; -} - -.form-group select option { - background: var(--bg-primary); - color: var(--text-primary); -} - -.form-group textarea { - min-height: 120px; - resize: vertical; -} - -.form-group small { - display: block; - margin-top: 0.35rem; - font-size: 0.75rem; - color: var(--text-tertiary); -} - -.newsletter-opt-in { - margin-bottom: 1.25rem; -} - -.checkbox-label { - display: flex; - align-items: flex-start; - gap: 0.75rem; - cursor: pointer; -} - -.checkbox-input { - width: 18px; - height: 18px; - margin-top: 2px; - accent-color: var(--accent); - flex-shrink: 0; -} - -.checkbox-text { - font-size: 0.85rem; - color: var(--text-secondary); -} - -.checkbox-text i { - color: var(--accent-light); - margin-right: 0.25rem; -} - -.form-submit { - width: 100%; - padding: 0.85rem 1.5rem; - background: var(--gradient); - color: white; - border: none; - border-radius: var(--radius); - font-weight: 600; - font-size: 0.95rem; - cursor: pointer; - transition: var(--transition); - display: flex; - align-items: center; - justify-content: center; - gap: 0.5rem; - box-shadow: 0 4px 16px rgba(99, 102, 241, 0.25); -} - -.form-submit:hover { - box-shadow: 0 6px 24px rgba(99, 102, 241, 0.35); - transform: translateY(-1px); -} - -.form-success { - display: none; - padding: 1rem; - background: rgba(34, 197, 94, 0.1); - border: 1px solid rgba(34, 197, 94, 0.2); - border-radius: var(--radius); - color: var(--accent-green); - font-size: 0.9rem; - margin-bottom: 1.5rem; -} - -.form-success.show { - display: block; -} - -/* ======================= - NEWSLETTERS - ======================= */ -.page-header { - padding: calc(var(--navbar-height) + 4rem) 0 3rem; - text-align: center; - position: relative; - overflow: hidden; -} - -.page-header::before { - content: ''; - position: absolute; - top: -20%; - left: 50%; - transform: translateX(-50%); - width: 600px; - height: 400px; - background: radial-gradient(circle, rgba(99, 102, 241, 0.1) 0%, transparent 60%); - pointer-events: none; -} - -.page-header-content { - position: relative; -} - -.header-icon { - font-size: 2.5rem; - background: var(--gradient-text); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; - margin-bottom: 1rem; -} - -.page-header h1 { - font-size: clamp(2rem, 5vw, 3rem); - font-weight: 800; - color: var(--text-primary); - margin-bottom: 0.75rem; - letter-spacing: -0.02em; -} - -.page-header p { - font-size: 1.05rem; - color: var(--text-secondary); - max-width: 540px; - margin: 0 auto; -} - -.main-content { - padding: 0 1.25rem 4rem; - max-width: var(--max-width); - margin: 0 auto; -} - -@media (min-width: 768px) { - .main-content { padding: 0 2rem 4rem; } -} - -.newsletters-grid { - display: grid; - grid-template-columns: 1fr; - gap: 1rem; -} - -@media (min-width: 640px) { - .newsletters-grid { grid-template-columns: repeat(2, 1fr); } -} - -@media (min-width: 1024px) { - .newsletters-grid { grid-template-columns: repeat(3, 1fr); } -} - -.newsletter-card { - background: var(--glass); - border: 1px solid var(--glass-border); - border-radius: var(--radius-lg); - padding: 1.75rem; - transition: var(--transition); - display: flex; - flex-direction: column; -} - -.newsletter-card:hover { - background: var(--glass-hover); - border-color: var(--glass-border-hover); - transform: translateY(-2px); -} - -.newsletter-header { - display: flex; - align-items: flex-start; - gap: 0.75rem; - margin-bottom: 1rem; -} - -.newsletter-icon { - width: 40px; - height: 40px; - border-radius: 10px; - background: var(--gradient); - display: flex; - align-items: center; - justify-content: center; - color: white; - font-size: 0.9rem; - flex-shrink: 0; -} - -.newsletter-info h2 { - font-size: 1.05rem; - font-weight: 600; - line-height: 1.3; -} - -.newsletter-info h2 a { - color: var(--text-primary); - text-decoration: none; - transition: color 0.2s ease; -} - -.newsletter-info h2 a:hover { - color: var(--accent-light); -} - -.newsletter-date { - display: flex; - align-items: center; - gap: 0.5rem; - font-size: 0.8rem; - color: var(--text-tertiary); - margin-bottom: 0.75rem; -} - -.newsletter-excerpt { - font-size: 0.85rem; - color: var(--text-secondary); - line-height: 1.5; - margin-bottom: 1.25rem; - flex-grow: 1; -} - -.read-more-btn { - display: inline-flex; - align-items: center; - gap: 0.5rem; - font-size: 0.85rem; - font-weight: 600; - color: var(--accent-light); - text-decoration: none; - transition: gap 0.2s ease; -} - -.read-more-btn:hover { - gap: 0.75rem; -} - -/* Empty state */ -.empty-state { - text-align: center; - padding: 4rem 1rem; -} - -.empty-icon { - font-size: 3rem; - color: var(--text-tertiary); - margin-bottom: 1.5rem; -} - -.empty-state h3 { - font-size: 1.25rem; - font-weight: 600; - color: var(--text-primary); - margin-bottom: 0.75rem; -} - -.empty-state p { - color: var(--text-secondary); - max-width: 420px; - margin: 0 auto 1.5rem; -} - -.subscribe-prompt { - display: inline-flex; - align-items: center; - gap: 0.5rem; - padding: 0.75rem 1.5rem; - background: var(--gradient); - color: white; - text-decoration: none; - border-radius: 50px; - font-weight: 600; - font-size: 0.9rem; - transition: var(--transition); -} - -.subscribe-prompt:hover { - box-shadow: 0 8px 24px rgba(99, 102, 241, 0.3); -} - -/* ======================= - NEWSLETTER DETAIL / ARTICLE - ======================= */ -.article-wrap { - display: flex; - flex-direction: column; - max-width: var(--max-width); - margin: 0 auto; - padding: calc(var(--navbar-height) + 2rem) 1.25rem 4rem; - gap: 2rem; -} - -@media (min-width: 900px) { - .article-wrap { - flex-direction: row; - padding-top: calc(var(--navbar-height) + 3rem); - gap: 3rem; - } -} - -.article-aside { - flex-shrink: 0; -} - -@media (min-width: 900px) { - .article-aside { - width: 260px; - position: sticky; - top: calc(var(--navbar-height) + 2rem); - max-height: calc(100vh - var(--navbar-height) - 4rem); - overflow-y: auto; - } -} - -.back-link { - display: inline-flex; - align-items: center; - gap: 0.5rem; - font-size: 0.85rem; - color: var(--text-secondary); - text-decoration: none; - margin-bottom: 1.5rem; - transition: color 0.2s ease; -} - -.back-link:hover { - color: var(--accent-light); -} - -.article-meta { - margin-bottom: 1.5rem; -} - -.article-title { - font-size: 1.1rem; - font-weight: 600; - color: var(--text-primary); - margin-bottom: 0.75rem; - line-height: 1.3; -} - -.meta-row { - display: flex; - align-items: center; - gap: 0.5rem; - font-size: 0.8rem; - color: var(--text-tertiary); -} - -.toc { - padding-top: 1rem; - border-top: 1px solid var(--glass-border); -} - -.toc-title { - font-size: 0.75rem; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 1px; - color: var(--text-tertiary); - margin-bottom: 0.75rem; -} - -#toc-list { - list-style: none; - padding-left: 0; -} - -#toc-list li { - margin-bottom: 0.4rem; -} - -#toc-list li a { - font-size: 0.8rem; - color: var(--text-secondary); - text-decoration: none; - transition: color 0.2s ease; -} - -#toc-list li a:hover { - color: var(--accent-light); -} - -.toc-h3 { - padding-left: 1rem; -} - -.article-main { - flex: 1; - min-width: 0; -} - -.article-hero { - display: flex; - align-items: center; - gap: 1rem; - margin-bottom: 2rem; - padding-bottom: 1.5rem; - border-bottom: 1px solid var(--glass-border); -} - -.article-hero h1 { - font-size: clamp(1.5rem, 3vw, 2rem); - font-weight: 700; - color: var(--text-primary); - line-height: 1.2; -} - -.newsletter-content { - color: var(--text-secondary); - line-height: 1.8; - font-size: 0.95rem; -} - -.newsletter-content h2 { - font-size: 1.35rem; - font-weight: 700; - color: var(--text-primary); - margin: 2rem 0 1rem; -} - -.newsletter-content h3 { - font-size: 1.1rem; - font-weight: 600; - color: var(--text-primary); - margin: 1.5rem 0 0.75rem; -} - -.newsletter-content p { - margin-bottom: 1rem; -} - -.newsletter-content a { - color: var(--accent-light); - text-decoration: underline; - text-decoration-color: rgba(129, 140, 248, 0.3); - text-underline-offset: 2px; -} - -.newsletter-content a:hover { - text-decoration-color: var(--accent-light); -} - -.newsletter-actions { - display: flex; - flex-wrap: wrap; - gap: 0.75rem; - margin-top: 2.5rem; - padding-top: 2rem; - border-top: 1px solid var(--glass-border); -} - -.action-btn { - display: inline-flex; - align-items: center; - gap: 0.5rem; - padding: 0.65rem 1.25rem; - border-radius: var(--radius); - font-size: 0.85rem; - font-weight: 600; - text-decoration: none; - cursor: pointer; - transition: var(--transition); - border: none; - font-family: inherit; -} - -.action-btn.primary { - background: var(--gradient); - color: white; - box-shadow: 0 4px 16px rgba(99, 102, 241, 0.2); -} - -.action-btn.primary:hover { - box-shadow: 0 6px 24px rgba(99, 102, 241, 0.3); -} - -.action-btn.secondary { - background: var(--glass); - color: var(--text-secondary); - border: 1px solid var(--glass-border); -} - -.action-btn.secondary:hover { - background: var(--glass-hover); - color: var(--text-primary); - border-color: var(--glass-border-hover); -} - -/* ======================= - FOOTER - ======================= */ .footer { - padding: 2rem 0; - border-top: 1px solid var(--glass-border); + padding: 40px 24px; + border-top: 1px solid var(--border-glass); text-align: center; + background: var(--bg-secondary); } .footer p { - font-size: 0.8rem; + font-size: 0.875rem; + color: var(--text-tertiary); +} +======= +/* ============================================================ + FOOTER + ============================================================ */ +.footer { + padding: 60px 24px 0; + border-top: 1px solid var(--border-glass); + background: var(--bg-secondary); +} + +.footer-grid { + display: grid; + grid-template-columns: 1.8fr 1fr 1fr 1fr; + gap: 40px; + padding-bottom: 40px; +} + +.footer-logo { + height: 28px; + width: auto; + filter: brightness(0) invert(0.85) sepia(0.3) saturate(0.5); + margin-bottom: 12px; +} + +.footer-tagline { + font-size: 0.875rem; + color: var(--text-tertiary); + line-height: 1.7; + max-width: 260px; +} + +.footer-heading { + font-size: 0.8125rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--text-primary); + margin-bottom: 16px; +} + +.footer-links { + display: flex; + flex-direction: column; + gap: 10px; +} + +.footer-links a { + font-size: 0.875rem; + color: var(--text-tertiary); + transition: var(--transition-fast); +} + +.footer-links a:hover { + color: var(--accent-start); +} + +.footer-social { + display: flex; + gap: 12px; +} + +.social-link { + width: 36px; + height: 36px; + display: flex; + align-items: center; + justify-content: center; + background: var(--bg-glass); + border: 1px solid var(--border-glass); + border-radius: var(--radius-sm); + color: var(--text-tertiary); + font-size: 1rem; + transition: var(--transition-base); +} + +.social-link:hover { + background: var(--bg-glass-hover); + border-color: var(--accent-start); + color: var(--accent-start); + transform: translateY(-2px); +} + +.footer-bottom { + padding: 24px 0; + border-top: 1px solid var(--border-glass); + text-align: center; +} + +.footer-bottom p { + font-size: 0.8125rem; color: var(--text-tertiary); } -/* ======================= - ANIMATIONS & A11Y - ======================= */ +/* Footer responsive */ +@media (max-width: 900px) { + .footer-grid { + grid-template-columns: 1fr 1fr; + gap: 32px; + } +} + +@media (max-width: 640px) { + .footer-grid { + grid-template-columns: 1fr; + gap: 28px; + } + + .footer-tagline { + max-width: 100%; + } +} + ============================================================ */ +.footer { + padding: 40px 24px; + border-top: 1px solid var(--border-glass); + text-align: center; + background: var(--bg-secondary); +} + +.footer p { + font-size: 0.875rem; + color: var(--text-tertiary); +} + +/* ============================================================ + FADE-IN ANIMATIONS (Intersection Observer) + ============================================================ */ .fade-in { opacity: 0; - transform: translateY(20px); - transition: opacity 0.6s ease, transform 0.6s ease; + transform: translateY(30px); + transition: + opacity 0.7s cubic-bezier(0.4, 0, 0.2, 1), + transform 0.7s cubic-bezier(0.4, 0, 0.2, 1); } -.fade-in.is-visible { - opacity: 1; - transform: translateY(0); +.fade-in.is-visible { opacity: 1; transform: translateY(0); } + +.fade-in:nth-child(2) { transition-delay: 0.1s; } +.fade-in:nth-child(3) { transition-delay: 0.2s; } +.fade-in:nth-child(4) { transition-delay: 0.3s; } +.fade-in:nth-child(5) { transition-delay: 0.4s; } +.fade-in:nth-child(6) { transition-delay: 0.5s; } + +/* ============================================================ + RESPONSIVE + ============================================================ */ + +/* Tablet */ +@media (max-width: 900px) { + .features-grid { grid-template-columns: repeat(2, 1fr); } + .feature-card:first-child { grid-column: span 2; } + section { padding: 80px 0; } + .section-header { margin-bottom: 44px; } } -@media (prefers-reduced-motion: reduce) { - *, *::before, *::after { - animation-duration: 0.01ms !important; - animation-iteration-count: 1 !important; - transition-duration: 0.01ms !important; +/* Mobile */ +@media (max-width: 640px) { + :root { --nav-height: 64px; } + + .nav-links { + position: fixed; + top: var(--nav-height); + left: 0; right: 0; + flex-direction: column; + gap: 4px; + padding: 16px; + background: rgba(9, 9, 11, 0.95); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); + border-bottom: 1px solid var(--border-glass); + transform: translateY(-110%); + opacity: 0; + transition: var(--transition-base); + pointer-events: none; + } + + .nav-links.open { + transform: translateY(0); + opacity: 1; + pointer-events: all; + } + + .nav-links a { + width: 100%; + text-align: center; + padding: 12px 16px; + } + + .nav-links a::after { display: none; } + .nav-toggle { display: flex; } + + .features-grid { grid-template-columns: 1fr; } + .feature-card:first-child { grid-column: span 1; } + .steps-grid { grid-template-columns: 1fr; } + + .proof-bar .container { + flex-direction: row; + gap: 24px; + } + + .proof-item .number { font-size: 1.375rem; } + + .hero-cta { flex-direction: column; } + .email-input { min-width: 0; width: 100%; } + .btn-primary { width: 100%; text-align: center; } + + .cta-card { padding: 40px 24px; } + section { padding: 60px 0; } + + .hero { + padding-top: calc(var(--nav-height) + 32px); + padding-bottom: 60px; } - .fade-in { opacity: 1; transform: none; } - html { scroll-behavior: auto; } } -/* Scroll margin for fixed navbar */ -[id] { - scroll-margin-top: calc(var(--navbar-height) + 1rem); -}