diff --git a/dist/css/styles.css b/dist/css/styles.css index af02dec..dc939c2 100644 --- a/dist/css/styles.css +++ b/dist/css/styles.css @@ -1,1379 +1,1973 @@ -[data-theme="dark"] { - --text-primary: var(--gray-50); - --text-secondary: var(--gray-300); - --text-tertiary: var(--gray-400); - --text-muted: var(--gray-500); - --bg-primary: var(--gray-900); - --bg-secondary: var(--gray-800); - --bg-tertiary: var(--gray-700); - --bg-elevated: var(--gray-800); - --border-primary: var(--gray-700); - --border-secondary: var(--gray-600); - --primary: #818cf8; - --primary-hover: #a5b4fc; - --primary-light: #c7d2fe; - --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / .4), 0 1px 2px -1px rgb(0 0 0 / .4); - --shadow-md: 0 4px 6px -1px rgb(0 0 0 / .4), 0 2px 4px -2px rgb(0 0 0 / .4); - --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .4), 0 4px 6px -4px rgb(0 0 0 / .4); - --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / .4), 0 8px 10px -6px rgb(0 0 0 / .4); - --shadow-focus: 0 0 0 3px rgb(129 140 248 / .2) +/* ===== 1. CSS VARIABLES & THEMING ===== */ +:root { + /* Core Colors */ + --primary: #6366f1; + --primary-hover: #4f46e5; + --primary-light: #a5b4fc; + --primary-dark: #3730a3; + --accent: #8b5cf6; + --success: #10b981; + --warning: #66512e; + --error: #ef4444; + --info: #2c6ace; + + /* Grayscale */ + --gray-50: #f8fafc; + --gray-100: #f1f5f9; + --gray-200: #e2e8f0; + --gray-300: #cbd5e1; + --gray-400: #94a3b8; + --gray-500: #64748b; + --gray-600: #475569; + --gray-700: #334155; + --gray-800: #1e293b; + --gray-900: #0f172a; + + /* Text Colors */ + --text-primary: var(--gray-900); + --text-secondary: var(--gray-600); + --text-tertiary: var(--gray-500); + --text-muted: var(--gray-400); + + /* Background Colors */ + --bg-primary: #fff; + --bg-secondary: var(--gray-50); + --bg-tertiary: var(--gray-100); + --bg-elevated: #fff; + + /* Borders */ + --border-primary: var(--gray-200); + --border-secondary: var(--gray-300); + --border-focus: var(--primary); + + /* Layout */ + --container-max: 1400px; + --header-height: 5rem; + --content-max: 1200px; + + /* Spacing (using CSS custom properties for consistency) */ + --space-xs: 0.25rem; + --space-sm: 0.5rem; + --space-md: 0.75rem; + --space-lg: 1rem; + --space-xl: 1.25rem; + --space-2xl: 1.5rem; + --space-3xl: 2rem; + --space-4xl: 2.5rem; + --space-5xl: 3rem; + --space-6xl: 4rem; + --space-7xl: 5rem; + --space-8xl: 6rem; + + /* Typography */ + --text-xs: 0.75rem; + --text-sm: 0.875rem; + --text-base: 1rem; + --text-lg: 1.125rem; + --text-xl: 1.25rem; + --text-2xl: 1.5rem; + --text-3xl: 1.875rem; + --text-4xl: 2.25rem; + --text-5xl: 3rem; + --text-6xl: 3.75rem; + + /* Font Weights */ + --font-light: 300; + --font-normal: 400; + --font-medium: 500; + --font-semibold: 600; + --font-bold: 700; + --font-extrabold: 800; + + /* Radius */ + --radius-sm: 0.25rem; + --radius-md: 0.5rem; + --radius-lg: 0.75rem; + --radius-xl: 1rem; + --radius-2xl: 1.5rem; + --radius-full: 9999px; + + /* Shadows */ + --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05); + --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); + --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); + --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); + --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); + --shadow-focus: 0 0 0 3px rgb(99 102 241 / 0.15); + + /* Transitions */ + --transition-fast: 0.15s ease; + --transition-normal: 0.3s ease; + --transition-slow: 0.5s ease; } -img, -video, -canvas { - max-width: 100%; - height: auto +/* Dark Theme Variables */ +[data-theme="dark"] { + --text-primary: var(--gray-50); + --text-secondary: var(--gray-300); + --text-tertiary: var(--gray-400); + --text-muted: var(--gray-500); + --bg-primary: var(--gray-900); + --bg-secondary: var(--gray-800); + --bg-tertiary: var(--gray-700); + --bg-elevated: var(--gray-800); + --border-primary: var(--gray-700); + --border-secondary: var(--gray-600); + --primary: #818cf8; + --primary-hover: #a5b4fc; + --primary-light: #c7d2fe; + --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.4), 0 1px 2px -1px rgb(0 0 0 / 0.4); + --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.4), 0 2px 4px -2px rgb(0 0 0 / 0.4); + --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.4), 0 4px 6px -4px rgb(0 0 0 / 0.4); + --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.4), 0 8px 10px -6px rgb(0 0 0 / 0.4); + --shadow-focus: 0 0 0 3px rgb(129 140 248 / 0.2); +} + +/* ===== 2. RESET & BASE STYLES ===== */ +*, *::before, *::after { + box-sizing: border-box; +} + +html { + scroll-behavior: smooth; + font-size: 16px; + line-height: 1.6; + -webkit-text-size-adjust: 100%; +} + +body { + font-family: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; + font-feature-settings: 'cv01', 'cv03', 'cv04', 'cv11'; + background: var(--bg-primary); + color: var(--text-primary); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; + min-height: 100vh; + margin: 0; + overflow-x: hidden; + display: flex; + flex-direction: column; + min-height: 100vh; +} + +svg { + max-width: 100%; + height: auto; +} + +img, video, canvas { + max-width: 100%; + height: auto; +} + +a { + color: var(--primary); + text-decoration: none; } a:hover { - color: var(--primary-hover) + color: var(--primary-hover); +} + +:focus { + outline: 2px solid var(--border-focus); + outline-offset: 2px; } :focus:not(:focus-visible) { - outline: none + outline: none; +} + +/* Accessibility */ +.skip-link { + position: absolute; + left: -9999px; + top: auto; + width: 1px; + height: 1px; + overflow: hidden; } .skip-link:focus { - position: fixed; - left: var(--space-lg); - top: var(--space-lg); - width: auto; - height: auto; - padding: var(--space-sm) var(--space-md); - background: var(--bg-primary); - color: var(--text-primary); - border: 2px solid var(--border-focus); - border-radius: var(--radius-lg); - box-shadow: var(--shadow-md); - z-index: 9999 + position: fixed; + left: var(--space-lg); + top: var(--space-lg); + width: auto; + height: auto; + padding: var(--space-sm) var(--space-md); + background: var(--bg-primary); + color: var(--text-primary); + border: 2px solid var(--border-focus); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-md); + z-index: 9999; +} + +/* Layout */ +.page-wrapper { + min-height: 100vh; + display: flex; + flex-direction: column; +} + +.container { + max-width: var(--container-max); + margin: 0 auto; + padding: 0 var(--space-2xl); + width: 100%; +} + +.content-container { + max-width: var(--content-max); + margin: 0 auto; +} + +/* ===== 3. HEADER & NAVIGATION ===== */ +.site-header { + position: sticky; + top: 0; + z-index: 100; + background: rgba(255, 255, 255, 0.85); + backdrop-filter: blur(16px) saturate(180%); + border-bottom: 1px solid var(--border-primary); + height: var(--header-height); } [data-theme="dark"] .site-header { - background: rgba(15, 23, 42, .85) + background: rgba(15, 23, 42, 0.85); +} + +.header-content { + display: flex; + align-items: center; + justify-content: space-between; + position: relative; /* Important for containing absolutely positioned children */ + height: var(--header-height); + gap: var(--space-4xl); +} + +.site-title { + display: flex; + flex-shrink: 0; /* Prevent shrinking */ + align-items: center; + gap: var(--space-md); + font-size: var(--text-xl); + font-weight: var(--font-bold); + color: var(--text-primary); + text-decoration: none; + padding: var(--space-sm) var(--space-lg); + border-radius: var(--radius-lg); + transition: all var(--transition-fast); } .site-title:hover { - color: var(--primary); - background: var(--bg-secondary); - transform: translateY(-1px) + color: var(--primary); + background: var(--bg-secondary); + transform: translateY(-1px); } .logo-icon { - transition: transform var(--transition-normal) + width: 28px; + height: 28px; + color: var(--primary); + transition: transform var(--transition-normal); } .site-title:hover .logo-icon { - transform: rotate(-5deg) scale(1.1) + transform: rotate(-5deg) scale(1.1); +} + +/* Main Navigation (Desktop) */ +.header-nav { + display: flex; + align-items: center; + gap: var(--space-xs); + /* Fix for potential flexbox glitches with absolutely positioned children */ + position: relative; + z-index: 1; /* Ensure it's above other header content but below mobile nav */ } .nav-link { - transition: all var(--transition-fast) -} - -/* Active state (scrollspy) */ -.nav-link.active { - color: var(--primary); - background: var(--bg-secondary); - font-weight: var(--font-semibold); -} - -/* Improved hover/focus visible states */ -.nav-link:focus-visible, .btn:focus-visible, .referral-card:focus-visible, .speed-card:focus-visible, .status-card:focus-visible, .benefit-card:focus-visible { - outline: 2px solid var(--primary); - outline-offset: 2px; - box-shadow: 0 0 0 4px rgba(99 102 241 / .25); -} - -.nav-link:hover:not(.active) { - background: var(--bg-tertiary); - color: var(--text-primary); + position: relative; + display: inline-flex; + align-items: center; + padding: var(--space-md) var(--space-xl); + font-size: var(--text-sm); + font-weight: var(--font-medium); + color: var(--text-secondary); + border-radius: var(--radius-lg); + white-space: nowrap; + transition: all var(--transition-fast); } .nav-link::before { - transition: all var(--transition-fast) + content: ''; + position: absolute; + bottom: 0; + left: 50%; + width: 0; + height: 2px; + background: var(--primary); + border-radius: var(--radius-full); + transform: translateX(-50%); + transition: all var(--transition-fast); } .nav-link:hover { - color: var(--primary); - background: var(--bg-secondary) + color: var(--primary); + background: var(--bg-secondary); } .nav-link:hover::before { - width: 80% + width: 80%; } +.nav-link.active { + color: var(--primary); + background: var(--bg-secondary); + font-weight: var(--font-semibold); +} + +/* Focus Styles */ +.nav-link:focus-visible, +.btn:focus-visible, +.referral-card:focus-visible, +.speed-card:focus-visible, +.status-card:focus-visible, +.benefit-card:focus-visible { + outline: 2px solid var(--primary); + outline-offset: 2px; + box-shadow: 0 0 0 4px rgba(99 102 241 / 0.25); +} + +.nav-link:hover:not(.active) { + background: var(--bg-tertiary); + color: var(--text-primary); +} + +/* Dark Mode Toggle */ .dark-mode-toggle { - cursor: pointer; - transition: all var(--transition-fast) + display: flex; + align-items: center; + justify-content: center; + width: 44px; + height: 44px; + border: 2px solid var(--border-primary); + border-radius: var(--radius-full); + background: var(--bg-primary); + color: var(--text-primary); + flex-shrink: 0; /* Prevent shrinking */ + cursor: pointer; + transition: all var(--transition-fast); } .dark-mode-toggle:hover { - background: var(--bg-secondary); - border-color: var(--primary); - transform: scale(1.05) + background: var(--bg-secondary); + border-color: var(--primary); + transform: scale(1.05); } -/* Mobile navigation toggle */ -.nav-toggle { - display: none; - flex-direction: column; - justify-content: center; - gap: 5px; - width: 48px; - height: 48px; - background: var(--bg-primary); - border: 2px solid var(--border-primary); - border-radius: var(--radius-full); - cursor: pointer; - position: relative; - transition: all var(--transition-fast); -} -.nav-toggle-bar { - width: 22px; - height: 2px; - background: var(--text-primary); - border-radius: 2px; - transition: all var(--transition-fast); - margin: 0 auto; -} -.nav-open .nav-toggle-bar:nth-child(1){transform: translateY(7px) rotate(45deg);} -.nav-open .nav-toggle-bar:nth-child(2){opacity:0;} -.nav-open .nav-toggle-bar:nth-child(3){transform: translateY(-7px) rotate(-45deg);} - -body:not(.js-ready) .header-nav {transition:none !important;} - -.nav-overlay { - position: fixed; - inset: 0; - background: rgba(0,0,0,.4); - backdrop-filter: blur(2px); - z-index: 90; - opacity: 0; - visibility: hidden; - transition: opacity .3s; -} -.nav-open #navOverlay { - opacity: 1; - visibility: visible; +.sun-icon, +.moon-icon { + width: 20px; + height: 20px; + transition: opacity var(--transition-fast); } -/* Mobile nav panel */ -@media (max-width: 900px) { - .nav-toggle {display: inline-flex;} - .header-nav { - position: fixed; - top: var(--header-height); - right: 0; - width: min(320px, 80%); - background: var(--bg-primary); - border-left: 1px solid var(--border-primary); - border-bottom: 1px solid var(--border-primary); - box-shadow: var(--shadow-lg); - padding: var(--space-2xl) var(--space-xl) var(--space-3xl); - display: flex; - flex-direction: column; - gap: var(--space-sm); - max-height: calc(100vh - var(--header-height)); - overflow-y: auto; - transform: translate3d(100%,0,0); - transition: transform .4s cubic-bezier(.65,.05,.36,1); - z-index: 120; - } - .header-nav[data-open="true"] { - transform: translate3d(0,0,0); - } - body.nav-open {overflow:hidden;} - .nav-link {font-size: var(--text-base); padding: var(--space-md) var(--space-lg);} - .nav-link::before {display:none;} - .dark-mode-toggle {order: 3;} -} - -/* Hero meta badges */ -.hero-meta { - display: flex; - flex-wrap: wrap; - justify-content: center; - gap: var(--space-sm); - margin-bottom: var(--space-3xl); -} -.hero-badge { - --badge-bg: linear-gradient(135deg,var(--bg-secondary),var(--bg-tertiary)); - display: inline-flex; - align-items: center; - gap: .4ch; - padding: var(--space-sm) var(--space-md); - font-size: var(--text-xs); - font-weight: var(--font-medium); - letter-spacing: .05em; - text-transform: uppercase; - background: var(--badge-bg); - color: var(--text-secondary); - border: 1px solid var(--border-primary); - border-radius: var(--radius-full); - position: relative; - overflow: hidden; -} -.hero-badge::after { - content: ''; - position: absolute; - inset: 0; - background: radial-gradient(circle at 30% 30%,rgba(255,255,255,.15),transparent 60%); - opacity: .4; - pointer-events: none; -} - -/* Performance: hint GPU for frequently animated elements */ -.btn, .nav-toggle, .header-nav, .back-to-top, .benefit-card, .status-card, .referral-card, .speed-card {will-change: transform;} - -/* Reduced motion adjustments */ -@media (prefers-reduced-motion: reduce) { - .header-nav, .nav-toggle-bar, .btn::before, .benefit-card, .status-card, .referral-card, .speed-card, .back-to-top {transition: none !important; animation: none !important;} -} - -@media (max-width: 600px) { - .hero-meta {margin-bottom: var(--space-2xl);} - .hero-badge {font-size: 10px;} +.moon-icon { + display: none; } [data-theme="dark"] .sun-icon { - display: none + display: none; } [data-theme="dark"] .moon-icon { - display: block + display: block; +} + +/* Mobile Navigation Toggle */ +.nav-toggle { + display: none; + flex-direction: column; + justify-content: center; + gap: 5px; + width: 48px; + height: 48px; + background: var(--bg-primary); + border: 2px solid var(--border-primary); + border-radius: var(--radius-full); + cursor: pointer; + position: relative; + transition: all var(--transition-fast); + flex-shrink: 0; /* Prevent shrinking */ + z-index: 110; /* Ensure it's clickable above other elements */ +} + +.nav-toggle-bar { + width: 22px; + height: 2px; + background: var(--text-primary); + border-radius: 2px; + transition: all var(--transition-fast); + margin: 0 auto; + transform-origin: center; +} + +.nav-open .nav-toggle-bar:nth-child(1) { + transform: translateY(7px) rotate(45deg); +} + +.nav-open .nav-toggle-bar:nth-child(2) { + opacity: 0; +} + +.nav-open .nav-toggle-bar:nth-child(3) { + transform: translateY(-7px) rotate(-45deg); +} + +/* Mobile Navigation Menu */ +.header-nav { + /* Default styles for desktop */ + display: flex; + align-items: center; + gap: var(--space-xs); +} + +/* Mobile Navigation Overlay */ +.nav-overlay { + position: fixed; + inset: 0; + background: rgba(0, 0, 0, 0.4); + backdrop-filter: blur(2px); + z-index: 90; /* Below the nav menu */ + opacity: 0; + visibility: hidden; + transition: opacity 0.3s ease; + pointer-events: none; /* Prevent interaction when hidden */ +} + +.nav-open #navOverlay { + opacity: 1; + visibility: visible; + pointer-events: auto; /* Allow interaction when visible */ +} + +/* Mobile Styles (Critical Fix Area) */ +@media (max-width: 900px) { + .nav-toggle { + display: inline-flex; /* Show the toggle button */ + } + + /* Hide desktop navigation links by default on mobile */ + .header-nav { + display: none; + } + + /* Active state for mobile navigation - Show the menu */ + .nav-open .header-nav { + display: flex; /* Make it visible */ + position: fixed; + top: var(--header-height); + right: 0; + width: min(320px, 80%); + background: var(--bg-primary); + border-left: 1px solid var(--border-primary); + border-bottom: 1px solid var(--border-primary); + box-shadow: var(--shadow-lg); + padding: var(--space-2xl) var(--space-xl) var(--space-3xl); + flex-direction: column; + gap: var(--space-sm); + max-height: calc(100vh - var(--header-height)); + overflow-y: auto; + /* Critical Fix: Use translate3d for hardware acceleration and isolation */ + transform: translate3d(100%, 0, 0); + transition: transform 0.4s cubic-bezier(0.65, 0.05, 0.36, 1); + z-index: 120; /* Above overlay */ + /* Ensure it doesn't affect the flex layout of header-content */ + position: fixed; + /* Isolate the animation context */ + will-change: transform; + } + + /* Active state for the menu being open */ + .nav-open .header-nav[data-open="true"] { + transform: translate3d(0, 0, 0); + } + + /* Prevent body scroll when menu is open */ + body.nav-open { + overflow: hidden; + } + + /* Style links for mobile */ + .nav-open .nav-link { + font-size: var(--text-base); + padding: var(--space-md) var(--space-lg); + width: 100%; + text-align: left; + } + + /* Hide the underline pseudo-element on mobile */ + .nav-open .nav-link::before { + display: none; + } + + /* Ensure the dark mode toggle is correctly placed in the header flex container */ + .dark-mode-toggle { + display: flex; + flex: 0 0 auto; /* Don't grow or shrink, keep original size */ + width: 44px; + height: 44px; + order: 3; /* Move it to the end if needed by layout */ + align-self: center; /* Align within the flex line */ + z-index: 110; /* Ensure it's clickable */ + } + + /* Disable transitions initially to prevent glitches on page load */ + body:not(.js-ready) .header-nav, + body:not(.js-ready) .nav-toggle-bar, + body:not(.js-ready) .nav-overlay { + transition: none !important; + } +} + +/* ===== 4. MAIN CONTENT SECTIONS ===== */ +/* Hero Section */ +.hero-section { + position: relative; + padding: var(--space-8xl) 0 var(--space-7xl); + background: linear-gradient(135deg, var(--bg-primary) 0%, var(--bg-secondary) 100%); + overflow: hidden; +} + +.hero-section::before { + content: ''; + position: absolute; + inset: 0; + background: + radial-gradient(circle at 30% 20%, rgb(99 102 241 / 0.08) 0%, transparent 50%), + radial-gradient(circle at 70% 80%, rgb(139 92 246 / 0.05) 0%, transparent 50%); } [data-theme="dark"] .hero-section::before { - background: radial-gradient(circle at 30% 20%, rgb(129 140 248 / .12) 0%, transparent 50%), radial-gradient(circle at 70% 80%, rgb(196 181 253 / .08) 0%, transparent 50%) + background: + radial-gradient(circle at 30% 20%, rgb(129 140 248 / 0.12) 0%, transparent 50%), + radial-gradient(circle at 70% 80%, rgb(196 181 253 / 0.08) 0%, transparent 50%); +} + +.hero-content { + text-align: center; + max-width: 900px; + margin: 0 auto; + position: relative; + animation: fadeInUp 0.8s ease-out; +} + +@keyframes fadeInUp { + from { + opacity: 0; + transform: translateY(30px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.hero-title { + font-size: clamp(var(--text-3xl), 8vw, var(--text-6xl)); + font-weight: var(--font-extrabold); + line-height: 1.1; + margin: 0 0 var(--space-2xl); + color: var(--text-primary); + letter-spacing: -0.02em; +} + +.gradient-text { + background: linear-gradient(135deg, var(--primary) 0%, var(--accent) 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; } [data-theme="dark"] .gradient-text { - background: linear-gradient(135deg, var(--primary-light) 0%, #c4b5fd 100%); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text + background: linear-gradient(135deg, var(--primary-light) 0%, #c4b5fd 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; } -.btn::before { - transition: left .5s +.hero-description { + font-size: clamp(var(--text-lg), 4vw, var(--text-xl)); + color: var(--text-secondary); + margin: 0 0 var(--space-5xl); + max-width: 700px; + margin-left: auto; + margin-right: auto; + line-height: 1.6; } -.btn:hover::before { - left: 100% +.hero-actions { + display: flex; + gap: var(--space-lg); + justify-content: center; + margin-bottom: var(--space-6xl); + flex-wrap: wrap; } -.btn-primary:hover { - background: linear-gradient(135deg, var(--primary-hover) 0%, var(--primary) 100%); - transform: translateY(-2px); - box-shadow: var(--shadow-lg) +.hero-stats { + display: flex; + gap: var(--space-5xl); + justify-content: center; + flex-wrap: wrap; } -.btn-secondary:hover { - border-color: var(--primary); - color: var(--primary); - background: var(--bg-secondary); - transform: translateY(-2px); - box-shadow: var(--shadow-md) +.stat-item { + text-align: center; + position: relative; +} + +.stat-item:not(:last-child)::after { + content: ''; + position: absolute; + right: calc(-1 * var(--space-2xl)); + top: 50%; + transform: translateY(-50%); + width: 1px; + height: 50px; + background: var(--border-primary); +} + +.stat-number { + display: block; + font-size: clamp(var(--text-3xl), 6vw, var(--text-5xl)); + font-weight: var(--font-extrabold); + margin-bottom: var(--space-sm); + background: linear-gradient(135deg, var(--primary) 0%, var(--accent) 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} + +.stat-label { + font-size: var(--text-sm); + color: var(--text-secondary); + text-transform: uppercase; + letter-spacing: 0.1em; + font-weight: var(--font-medium); +} + +/* Section General Styles */ +.section { + padding: var(--space-6xl) 0; + position: relative; } .section:nth-child(even) { - background: var(--bg-secondary) + background: var(--bg-secondary); } +.section-header { + text-align: center; + margin-bottom: var(--space-2xl); +} + +.section-title { + font-size: clamp(var(--text-3xl), 6vw, var(--text-5xl)); + font-weight: var(--font-extrabold); + margin: 0 0 var(--space-2xl); + color: var(--text-primary); + letter-spacing: -0.02em; +} + +.section-description { + font-size: clamp(var(--text-base), 3vw, var(--text-xl)); + color: var(--text-secondary); + margin: 0; + max-width: 800px; + margin-inline: auto; + line-height: 1.7; +} + +.meta-chips { + display: flex; + gap: var(--space-sm); + justify-content: center; + margin-top: var(--space-xl); + flex-wrap: wrap; +} + +.chip { + display: inline-flex; + align-items: center; + gap: var(--space-xs); + padding: var(--space-sm) var(--space-lg); + border-radius: var(--radius-full); + background: var(--bg-secondary); + color: var(--text-secondary); + border: 1px solid var(--border-primary); + font-size: var(--text-xs); + font-weight: var(--font-medium); + text-transform: uppercase; + letter-spacing: 0.05em; +} + +/* ===== 5. COMPONENTS ===== */ +/* Buttons */ +.btn { + display: inline-flex; + align-items: center; + gap: var(--space-sm); + padding: var(--space-lg) var(--space-3xl); + border: 2px solid transparent; + border-radius: var(--radius-xl); + font-size: var(--text-base); + font-weight: var(--font-semibold); + text-decoration: none; + position: relative; + overflow: hidden; + min-width: 160px; + justify-content: center; + transition: all var(--transition-fast); + will-change: transform; +} + +.btn::before { + content: ''; + position: absolute; + top: 0; + left: -100%; + width: 100%; + height: 100%; + background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent); + transition: left 0.5s; +} + +.btn:hover::before { + left: 100%; +} + +.btn-primary { + background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%); + color: white; + box-shadow: var(--shadow-md); +} + +.btn-primary:hover { + background: linear-gradient(135deg, var(--primary-hover) 0%, var(--primary) 100%); + transform: translateY(-2px); + box-shadow: var(--shadow-lg); +} + +.btn-secondary { + background: transparent; + color: var(--text-primary); + border: 2px solid var(--border-primary); +} + +.btn-secondary:hover { + border-color: var(--primary); + color: var(--primary); + background: var(--bg-secondary); + transform: translateY(-2px); + box-shadow: var(--shadow-md); +} + +/* Benefit Cards */ .features-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); - gap: var(--space-lg) + display: grid; + grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); + gap: var(--space-lg); } .benefit-card { - display: flex; - flex-direction: column; - align-items: center; - text-align: center; - padding: var(--space-2xl); - background: var(--bg-elevated); - border: 1px solid var(--border-primary); - border-radius: var(--radius-lg); - transition: all var(--transition-normal); - min-height: 160px; - justify-content: center + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + padding: var(--space-2xl); + background: var(--bg-elevated); + border: 1px solid var(--border-primary); + border-radius: var(--radius-lg); + transition: all var(--transition-normal); + min-height: 160px; + justify-content: center; + will-change: transform; } .benefit-card:hover { - border-color: var(--primary); - transform: translateY(-2px); - box-shadow: var(--shadow-md) + border-color: var(--primary); + transform: translateY(-2px); + box-shadow: var(--shadow-md); } .benefit-card .icon-badge { - width: 40px; - height: 40px; - color: var(--primary); - margin-bottom: var(--space-lg); - transition: transform var(--transition-normal) + width: 40px; + height: 40px; + color: var(--primary); + margin-bottom: var(--space-lg); + transition: transform var(--transition-normal); } .benefit-card:hover .icon-badge { - transform: scale(1.05) + transform: scale(1.05); } .benefit-card h3 { - margin: 0 0 var(--space-sm); - font-size: var(--text-base); - font-weight: var(--font-semibold); - color: var(--text-primary) + margin: 0 0 var(--space-sm); + font-size: var(--text-base); + font-weight: var(--font-semibold); + color: var(--text-primary); } .benefit-card p { - margin: 0; - color: var(--text-secondary); - font-size: var(--text-xs); - line-height: 1.4 + margin: 0; + color: var(--text-secondary); + font-size: var(--text-xs); + line-height: 1.4; } +/* Alerts */ .alert { - display: flex; - align-items: flex-start; - gap: var(--space-md); - padding: var(--space-xl); - border-radius: var(--radius-xl); - margin: var(--space-xl) 0; - border: 1px solid var(--border-primary) + display: flex; + align-items: flex-start; + gap: var(--space-md); + padding: var(--space-xl); + border-radius: var(--radius-xl); + margin: var(--space-xl) 0; + border: 1px solid var(--border-primary); } .alert-info { - background: rgba(59, 130, 246, .08); - border-color: rgba(59, 130, 246, .2); - color: var(--info) + background: rgba(59, 130, 246, 0.08); + border-color: rgba(59, 130, 246, 0.2); + color: var(--info); } .alert-warning { - background: rgba(245, 158, 11, .08); - border-color: rgba(44, 35, 19, .2); - color: var(--warning) + background: rgba(245, 158, 11, 0.08); + border-color: rgba(44, 35, 19, 0.2); + color: var(--warning); } .alert-icon { - flex-shrink: 0; - width: 24px; - height: 24px; - margin-top: 2px + flex-shrink: 0; + width: 24px; + height: 24px; + margin-top: 2px; } +/* Speed Section */ .speed-section { - background: var(--bg-secondary); - border-radius: var(--radius-2xl); - border: 1px solid var(--border-primary); - padding: var(--space-4xl); - margin: var(--space-3xl) 0 + background: var(--bg-secondary); + border-radius: var(--radius-2xl); + border: 1px solid var(--border-primary); + padding: var(--space-4xl); + margin: var(--space-3xl) 0; } .speed-header { - text-align: center; - margin-bottom: var(--space-3xl) + text-align: center; + margin-bottom: var(--space-3xl); } .speed-header h3 { - margin: 0 0 var(--space-md); - font-size: var(--text-2xl); - font-weight: var(--font-bold); - color: var(--text-primary) + margin: 0 0 var(--space-md); + font-size: var(--text-2xl); + font-weight: var(--font-bold); + color: var(--text-primary); } .speed-header p { - margin: 0; - color: var(--text-secondary); - max-width: 600px; - margin-inline: auto + margin: 0; + color: var(--text-secondary); + max-width: 600px; + margin-inline: auto; } .speed-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); - gap: var(--space-lg) + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: var(--space-lg); } .speed-card { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - gap: var(--space-sm); - padding: var(--space-xl); - background: var(--bg-primary); - border: 1px solid var(--border-primary); - border-radius: var(--radius-lg); - text-decoration: none; - transition: all var(--transition-normal); - min-height: 120px + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: var(--space-sm); + padding: var(--space-xl); + background: var(--bg-primary); + border: 1px solid var(--border-primary); + border-radius: var(--radius-lg); + text-decoration: none; + transition: all var(--transition-normal); + min-height: 120px; + will-change: transform; } .speed-card:hover { - border-color: var(--primary); - transform: translateY(-2px); - box-shadow: var(--shadow-md) + border-color: var(--primary); + transform: translateY(-2px); + box-shadow: var(--shadow-md); } .speed-card .service-name { - font-weight: var(--font-semibold); - color: var(--text-primary); - font-size: var(--text-base) + font-weight: var(--font-semibold); + color: var(--text-primary); + font-size: var(--text-base); } .speed-card .speed-test-label { - font-size: var(--text-sm); - color: var(--text-secondary) + font-size: var(--text-sm); + color: var(--text-secondary); } +/* Important Notes */ .important-notes-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); - gap: var(--space-xl) + display: grid; + grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); + gap: var(--space-xl); } .note-card { - display: flex; - gap: var(--space-lg); - padding: var(--space-2xl); - background: var(--bg-elevated); - border: 1px solid var(--border-primary); - border-radius: var(--radius-lg); - transition: all var(--transition-normal) + display: flex; + gap: var(--space-lg); + padding: var(--space-2xl); + background: var(--bg-elevated); + border: 1px solid var(--border-primary); + border-radius: var(--radius-lg); + transition: all var(--transition-normal); } .note-card:hover { - border-color: var(--primary); - transform: translateY(-2px); - box-shadow: var(--shadow-md) + border-color: var(--primary); + transform: translateY(-2px); + box-shadow: var(--shadow-md); } .note-icon { - width: 24px; - height: 24px; - color: var(--primary); - flex-shrink: 0; - margin-top: 2px + width: 24px; + height: 24px; + color: var(--primary); + flex-shrink: 0; + margin-top: 2px; } .note-content h3 { - margin: 0 0 var(--space-sm); - font-size: var(--text-lg); - font-weight: var(--font-semibold); - color: var(--text-primary) + margin: 0 0 var(--space-sm); + font-size: var(--text-lg); + font-weight: var(--font-semibold); + color: var(--text-primary); } .note-content p { - margin: 0; - color: var(--text-secondary); - font-size: var(--text-sm); - line-height: 1.5 + margin: 0; + color: var(--text-secondary); + font-size: var(--text-sm); + line-height: 1.5; } +/* Resources */ .resources-categories { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(500px, 1fr)); - gap: var(--space-5xl) + display: grid; + grid-template-columns: repeat(auto-fit, minmax(500px, 1fr)); + gap: var(--space-5xl); } .resource-category { - background: var(--bg-elevated); - border-radius: var(--radius-2xl); - padding: var(--space-4xl); - border: 1px solid var(--border-primary); - box-shadow: var(--shadow-sm) + background: var(--bg-elevated); + border-radius: var(--radius-2xl); + padding: var(--space-4xl); + border: 1px solid var(--border-primary); + box-shadow: var(--shadow-sm); } .resource-category h3 { - margin: 0 0 var(--space-2xl); - font-size: var(--text-2xl); - font-weight: var(--font-bold); - color: var(--primary); - display: flex; - align-items: center; - gap: var(--space-md) + margin: 0 0 var(--space-2xl); + font-size: var(--text-2xl); + font-weight: var(--font-bold); + color: var(--primary); + display: flex; + align-items: center; + gap: var(--space-md); } .resource-category-icon { - width: 28px; - height: 28px + width: 28px; + height: 28px; } .resource-list { - display: grid; - gap: var(--space-lg) + display: grid; + gap: var(--space-lg); } .resource-item { - display: block; - padding: var(--space-xl); - background: var(--bg-secondary); - border: 1px solid var(--border-primary); - border-radius: var(--radius-lg); - text-decoration: none; - transition: all var(--transition-normal) + display: block; + padding: var(--space-xl); + background: var(--bg-secondary); + border: 1px solid var(--border-primary); + border-radius: var(--radius-lg); + text-decoration: none; + transition: all var(--transition-normal); } .resource-item:hover { - transform: translateY(-2px); - box-shadow: var(--shadow-md); - border-color: var(--primary); - background: var(--bg-primary) + transform: translateY(-2px); + box-shadow: var(--shadow-md); + border-color: var(--primary); + background: var(--bg-primary); } .resource-item strong { - display: block; - color: var(--text-primary); - font-weight: var(--font-semibold); - margin-bottom: var(--space-sm); - font-size: var(--text-base) + display: block; + color: var(--text-primary); + font-weight: var(--font-semibold); + margin-bottom: var(--space-sm); + font-size: var(--text-base); } .resource-item span { - color: var(--text-secondary); - font-size: var(--text-sm); - line-height: 1.5 + color: var(--text-secondary); + font-size: var(--text-sm); + line-height: 1.5; } +/* Data Tables */ .data-table-container { - background: var(--bg-elevated); - border-radius: var(--radius-2xl); - box-shadow: var(--shadow-lg); - border: 1px solid var(--border-primary); - margin: var(--space-3xl) 0; - overflow: hidden + background: var(--bg-elevated); + border-radius: var(--radius-2xl); + box-shadow: var(--shadow-lg); + border: 1px solid var(--border-primary); + margin: var(--space-3xl) 0; + overflow: hidden; } .table-wrapper { - overflow-x: auto; - border-radius: var(--radius-2xl) + overflow-x: auto; + border-radius: var(--radius-2xl); } table { - width: 100%; - border-collapse: collapse; - font-size: var(--text-sm); - min-width: 600px + width: 100%; + border-collapse: collapse; + font-size: var(--text-sm); + min-width: 600px; } th, td { - padding: var(--space-lg) var(--space-xl); - text-align: left; - border-bottom: 1px solid var(--border-primary) + padding: var(--space-lg) var(--space-xl); + text-align: left; + border-bottom: 1px solid var(--border-primary); } th { - background: var(--primary); - color: white; - font-weight: var(--font-semibold); - text-transform: uppercase; - letter-spacing: .05em; - font-size: var(--text-xs); - position: sticky; - top: 0; - z-index: 10 + background: var(--primary); + color: white; + font-weight: var(--font-semibold); + text-transform: uppercase; + letter-spacing: 0.05em; + font-size: var(--text-xs); + position: sticky; + top: 0; + z-index: 10; } tr:hover { - background: var(--bg-secondary) + background: var(--bg-secondary); } .pricing-table .service-name { - color: inherit; + color: inherit; } #file-hosts-table tr:nth-child(even), .enhanced-table tr:nth-child(even), .pricing-table tr:nth-child(even) { - background-color: var(--bg-tertiary); + background-color: var(--bg-tertiary); } #file-hosts-table th:first-child, #file-hosts-table td:first-child { - position: sticky; - left: 0; - z-index: 2; - box-shadow: 2px 0 6px -4px rgba(0, 0, 0, .06); + position: sticky; + left: 0; + z-index: 2; + box-shadow: 2px 0 6px -4px rgba(0, 0, 0, 0.06); } #file-hosts-table td:first-child { - background-color: var(--bg-primary); + background-color: var(--bg-primary); } .filter-results { - text-align: center; - padding: .1em; - font-size: var(--text-sm); - color: var(--text-secondary); - font-family: 'Courier New', Courier, monospace; + text-align: center; + padding: 0.1em; + font-size: var(--text-sm); + color: var(--text-secondary); + font-family: 'Courier New', Courier, monospace; } +/* Search */ .search-section { - margin-bottom: var(--space-4xl) + margin-bottom: var(--space-4xl); } .search-container { - position: relative; - max-width: 500px; - margin: 0 auto + position: relative; + max-width: 500px; + margin: 0 auto; } .search-icon { - position: absolute; - left: var(--space-lg); - top: 50%; - transform: translateY(-50%); - color: var(--text-tertiary); - width: 20px; - height: 20px + position: absolute; + left: var(--space-lg); + top: 50%; + transform: translateY(-50%); + color: var(--text-tertiary); + width: 20px; + height: 20px; } .search-input { - width: 100%; - padding: var(--space-lg) var(--space-5xl) var(--space-lg) var(--space-5xl); - border: 2px solid var(--border-primary); - border-radius: var(--radius-full); - font-size: var(--text-base); - background: var(--bg-primary); - color: var(--text-primary); - outline: none; - transition: all var(--transition-fast) + width: 100%; + padding: var(--space-lg) var(--space-5xl) var(--space-lg) var(--space-5xl); + border: 2px solid var(--border-primary); + border-radius: var(--radius-full); + font-size: var(--text-base); + background: var(--bg-primary); + color: var(--text-primary); + outline: none; + transition: all var(--transition-fast); } .search-input:focus { - border-color: var(--primary); - box-shadow: 0 0 0 3px rgba(99, 102, 241, .1) + border-color: var(--primary); + box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1); } .clear-icon { - position: absolute; - right: var(--space-lg); - top: 50%; - transform: translateY(-50%); - background: none; - border: none; - color: var(--text-tertiary); - cursor: pointer; - padding: var(--space-sm); - border-radius: var(--radius-md); - opacity: 0; - visibility: hidden; - transition: all var(--transition-fast); - width: 20px; - height: 20px + position: absolute; + right: var(--space-lg); + top: 50%; + transform: translateY(-50%); + background: none; + border: none; + color: var(--text-tertiary); + cursor: pointer; + padding: var(--space-sm); + border-radius: var(--radius-md); + opacity: 0; + visibility: hidden; + transition: all var(--transition-fast); + width: 20px; + height: 20px; } -.search-input:not(:placeholder-shown)+.clear-icon { - opacity: 1; - visibility: visible +.search-input:not(:placeholder-shown) + .clear-icon { + opacity: 1; + visibility: visible; } .clear-icon:hover { - background: var(--bg-secondary); - color: var(--text-primary) + background: var(--bg-secondary); + color: var(--text-primary); } +/* Status Grid */ .status-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); - gap: var(--space-xl) + display: grid; + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + gap: var(--space-xl); } .status-card { - display: flex; - flex-direction: column; - padding: var(--space-2xl); - background: var(--bg-primary); - border: 1px solid var(--border-primary); - border-radius: var(--radius-xl); - text-decoration: none; - transition: all var(--transition-normal); - min-height: 120px + display: flex; + flex-direction: column; + padding: var(--space-2xl); + background: var(--bg-primary); + border: 1px solid var(--border-primary); + border-radius: var(--radius-xl); + text-decoration: none; + transition: all var(--transition-normal); + min-height: 120px; + will-change: transform; } .status-card:hover { - border-color: var(--primary); - transform: translateY(-2px); - box-shadow: var(--shadow-lg) + border-color: var(--primary); + transform: translateY(-2px); + box-shadow: var(--shadow-lg); } .status-header { - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: var(--space-md) + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: var(--space-md); } .service-name { - font-weight: var(--font-semibold); - color: var(--text-primary) + font-weight: var(--font-semibold); + color: var(--text-primary); } .service-status-indicator { - width: 12px; - height: 12px; - border-radius: var(--radius-full); - background: var(--success); - box-shadow: 0 0 0 2px rgba(16, 185, 129, .2) + width: 12px; + height: 12px; + border-radius: var(--radius-full); + background: var(--success); + box-shadow: 0 0 0 2px rgba(16, 185, 129, 0.2); } .status-card p { - margin: 0; - color: var(--text-secondary); - font-size: var(--text-sm); - line-height: 1.5 + margin: 0; + color: var(--text-secondary); + font-size: var(--text-sm); + line-height: 1.5; } +/* Referral Section */ .referral-section { - margin: var(--space-6xl) 0; - padding: var(--space-4xl); - background: var(--bg-secondary); - border-radius: var(--radius-2xl); - border: 1px solid var(--border-primary); - text-align: center + margin: var(--space-6xl) 0; + padding: var(--space-4xl); + background: var(--bg-secondary); + border-radius: var(--radius-2xl); + border: 1px solid var(--border-primary); + text-align: center; } .referral-header h3 { - margin: 0 0 var(--space-md); - color: var(--text-primary); - font-size: var(--text-2xl); - font-weight: var(--font-bold) + margin: 0 0 var(--space-md); + color: var(--text-primary); + font-size: var(--text-2xl); + font-weight: var(--font-bold); } .referral-header p { - margin: 0 auto var(--space-2xl); - color: var(--text-secondary); - max-width: 600px + margin: 0 auto var(--space-2xl); + color: var(--text-secondary); + max-width: 600px; } .referral-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); - gap: var(--space-lg); - justify-items: center + display: grid; + grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); + gap: var(--space-lg); + justify-items: center; } .referral-card { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - gap: var(--space-sm); - padding: var(--space-xl); - background: var(--bg-primary); - border: 1px solid var(--border-primary); - border-radius: var(--radius-lg); - text-decoration: none; - width: 100%; - max-width: 200px; - transition: all var(--transition-normal); - min-height: 100px + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: var(--space-sm); + padding: var(--space-xl); + background: var(--bg-primary); + border: 1px solid var(--border-primary); + border-radius: var(--radius-lg); + text-decoration: none; + width: 100%; + max-width: 200px; + transition: all var(--transition-normal); + min-height: 100px; + will-change: transform; } .referral-card:hover { - border-color: var(--primary); - transform: translateY(-2px); - box-shadow: var(--shadow-md) + border-color: var(--primary); + transform: translateY(-2px); + box-shadow: var(--shadow-md); } .referral-card .service-name { - font-weight: var(--font-semibold); - color: var(--text-primary); - font-size: var(--text-base) + font-weight: var(--font-semibold); + color: var(--text-primary); + font-size: var(--text-base); } .referral-badge, .speed-test-label { - font-size: var(--text-xs); - color: var(--primary); - background: rgba(99, 102, 241, .1); - padding: var(--space-xs) var(--space-sm); - border-radius: var(--radius-md); - font-weight: var(--font-medium); - text-transform: uppercase; - letter-spacing: .05em + font-size: var(--text-xs); + color: var(--primary); + background: rgba(99, 102, 241, 0.1); + padding: var(--space-xs) var(--space-sm); + border-radius: var(--radius-md); + font-weight: var(--font-medium); + text-transform: uppercase; + letter-spacing: 0.05em; } +/* Compare Section */ .compare-controls { - display: flex; - align-items: end; - gap: var(--space-2xl); - margin-bottom: var(--space-4xl); - flex-wrap: wrap + display: flex; + align-items: end; + gap: var(--space-2xl); + margin-bottom: var(--space-4xl); + flex-wrap: wrap; } .compare-select-group { - flex: 1; - min-width: 250px + flex: 1; + min-width: 250px; } .compare-select-group label { - display: block; - margin-bottom: var(--space-sm); - font-weight: var(--font-medium); - color: var(--text-primary) + display: block; + margin-bottom: var(--space-sm); + font-weight: var(--font-medium); + color: var(--text-primary); } .select-wrapper { - position: relative + position: relative; } select { - width: 100%; - padding: var(--space-md) var(--space-4xl) var(--space-md) var(--space-lg); - border: 2px solid var(--border-primary); - border-radius: var(--radius-lg); - background: var(--bg-primary); - color: var(--text-primary); - font-size: var(--text-base); - cursor: pointer; - appearance: none; - transition: all var(--transition-fast) + width: 100%; + padding: var(--space-md) var(--space-4xl) var(--space-md) var(--space-lg); + border: 2px solid var(--border-primary); + border-radius: var(--radius-lg); + background: var(--bg-primary); + color: var(--text-primary); + font-size: var(--text-base); + cursor: pointer; + appearance: none; + transition: all var(--transition-fast); } select:focus { - outline: none; - border-color: var(--primary); - box-shadow: 0 0 0 3px rgba(99, 102, 241, .1) + outline: none; + border-color: var(--primary); + box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1); } .select-wrapper::after { - content: ''; - position: absolute; - right: var(--space-lg); - top: 50%; - transform: translateY(-50%); - width: 0; - height: 0; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-top: 5px solid var(--text-tertiary); - pointer-events: none + content: ''; + position: absolute; + right: var(--space-lg); + top: 50%; + transform: translateY(-50%); + width: 0; + height: 0; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid var(--text-tertiary); + pointer-events: none; } .compare-vs { - flex-shrink: 0; - font-size: var(--text-lg); - font-weight: var(--font-bold); - color: var(--primary); - background: var(--bg-secondary); - padding: var(--space-md) var(--space-xl); - border-radius: var(--radius-lg); - border: 2px solid var(--border-primary); - margin-bottom: var(--space-sm) + flex-shrink: 0; + font-size: var(--text-lg); + font-weight: var(--font-bold); + color: var(--primary); + background: var(--bg-secondary); + padding: var(--space-md) var(--space-xl); + border-radius: var(--radius-lg); + border: 2px solid var(--border-primary); + margin-bottom: var(--space-sm); } .empty-state { - text-align: center; - padding: var(--space-6xl) + text-align: center; + padding: var(--space-6xl); } .empty-state-icon { - width: 64px; - height: 64px; - color: var(--text-tertiary); - margin: 0 auto var(--space-xl) + width: 64px; + height: 64px; + color: var(--text-tertiary); + margin: 0 auto var(--space-xl); } .empty-state h3 { - margin: 0 0 var(--space-md); - font-size: var(--text-xl); - color: var(--text-primary); - font-weight: var(--font-semibold) + margin: 0 0 var(--space-md); + font-size: var(--text-xl); + color: var(--text-primary); + font-weight: var(--font-semibold); } .empty-state p { - margin: 0; - color: var(--text-secondary) + margin: 0; + color: var(--text-secondary); } .loading-state { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - padding: var(--space-5xl); - color: var(--text-secondary) + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: var(--space-5xl); + color: var(--text-secondary); } .loading-spinner { - width: 32px; - height: 32px; - border: 3px solid var(--border-primary); - border-top: 3px solid var(--primary); - border-radius: var(--radius-full); - animation: spin 1s linear infinite; - margin-bottom: var(--space-lg) + width: 32px; + height: 32px; + border: 3px solid var(--border-primary); + border-top: 3px solid var(--primary); + border-radius: var(--radius-full); + animation: spin 1s linear infinite; + margin-bottom: var(--space-lg); } @keyframes spin { - 0% { - transform: rotate(0deg) - } - - 100% { - transform: rotate(360deg) - } -} - - /* Footer */ - .site-footer { - background: var(--bg-secondary); - border-top: 1px solid var(--border-primary); - padding: var(--space-7xl) 0 var(--space-4xl); - margin-top: auto; - } - - .footer-content { - display: grid; - grid-template-columns: 2fr 1fr 1fr 1fr; - gap: var(--space-5xl); - margin-bottom: var(--space-5xl); - } - - .footer-section h4, - .footer-section h5 { - margin: 0 0 var(--space-xl); - font-size: var(--text-lg); - font-weight: var(--font-semibold); - color: var(--text-primary); - } - - .footer-section h5 { - font-size: var(--text-base); - margin-bottom: var(--space-lg); - } - - .footer-brand { - display: flex; - align-items: center; - gap: var(--space-md); - margin-bottom: var(--space-lg); - } - - .footer-logo { - width: 32px; - height: 32px; - color: var(--primary); - } - - .footer-brand h4 { - margin: 0; - font-size: var(--text-xl); - font-weight: var(--font-bold); - } - - .footer-description { - margin: 0 0 var(--space-xl); - color: var(--text-secondary); - line-height: 1.6; - max-width: 300px; - } - - .footer-stats { - display: flex; - gap: var(--space-lg); - flex-wrap: wrap; - } - - .footer-stat { - display: inline-flex; - align-items: center; - padding: var(--space-xs) var(--space-md); - background: var(--bg-primary); - border: 1px solid var(--border-primary); - border-radius: var(--radius-full); - font-size: var(--text-xs); - font-weight: var(--font-medium); - color: var(--text-secondary); - text-transform: uppercase; - letter-spacing: 0.05em; - } - - .footer-links { - list-style: none; - padding: 0; - margin: 0; - } - - .footer-links li { - margin-bottom: var(--space-md); - } - - .footer-links a { - color: var(--text-secondary); - text-decoration: none; - transition: color var(--transition-fast); - font-size: var(--text-sm); - line-height: 1.5; - } - - .footer-links a:hover { - color: var(--primary); - } - - .footer-bottom { - padding-top: var(--space-4xl); - border-top: 1px solid var(--border-primary); - } - - .footer-bottom-content { - display: flex; - justify-content: space-between; - align-items: flex-end; - gap: var(--space-3xl); - } - - .footer-left p { - margin: 0 0 var(--space-sm); - color: var(--text-tertiary); - font-size: var(--text-sm); - } - - .footer-disclaimer { - font-size: var(--text-xs) !important; - color: var(--text-muted) !important; - font-style: italic; - } - - .footer-left a { - color: var(--primary); - text-decoration: none; - } - - .footer-left a:hover { - text-decoration: underline; - } - - .footer-right { - text-align: right; - } - - .footer-meta { - display: flex; - align-items: center; - gap: var(--space-lg); - } - - .last-updated { - font-size: var(--text-xs); - color: var(--text-muted); - } - - .github-link { - display: flex; - align-items: center; - justify-content: center; - width: 36px; - height: 36px; - background: var(--bg-primary); - border: 1px solid var(--border-primary); - border-radius: var(--radius-md); - color: var(--text-secondary); - text-decoration: none; - transition: all var(--transition-fast); - } - - .github-link:hover { - background: var(--primary); - color: white; - border-color: var(--primary); - transform: translateY(-1px); - box-shadow: var(--shadow-md); - }.back-to-top.visible { - opacity: 1; - visibility: visible; - transform: translateY(0) -} - -.back-to-top:hover { - background: var(--primary-hover); - transform: translateY(-2px); - box-shadow: var(--shadow-xl) + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } } +/* Comparison Specific Styles */ .comparison-header { - display: flex; - flex-direction: column; - gap: var(--space-lg); - padding: var(--space-2xl); - background: var(--bg-elevated); - border: 1px solid var(--border-primary); - border-radius: var(--radius-lg); - margin-bottom: var(--space-2xl) + display: flex; + flex-direction: column; + gap: var(--space-lg); + padding: var(--space-2xl); + background: var(--bg-elevated); + border: 1px solid var(--border-primary); + border-radius: var(--radius-lg); + margin-bottom: var(--space-2xl); } .comparison-header h3 { - margin: 0; - font-size: var(--text-xl); - font-weight: var(--font-semibold); - color: var(--text-primary); - text-align: center + margin: 0; + font-size: var(--text-xl); + font-weight: var(--font-semibold); + color: var(--text-primary); + text-align: center; } .comparison-stats { - display: flex; - justify-content: center; - gap: var(--space-2xl); - flex-wrap: wrap + display: flex; + justify-content: center; + gap: var(--space-2xl); + flex-wrap: wrap; } .comparison-stats .stat { - display: flex; - flex-direction: column; - align-items: center; - text-align: center; - min-width: 80px + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + min-width: 80px; } .comparison-stats .stat-label { - font-size: var(--text-xs); - color: var(--text-secondary); - margin-bottom: var(--space-xs); - text-transform: uppercase; - letter-spacing: .05em; - font-weight: var(--font-medium) + font-size: var(--text-xs); + color: var(--text-secondary); + margin-bottom: var(--space-xs); + text-transform: uppercase; + letter-spacing: 0.05em; + font-weight: var(--font-medium); } .comparison-stats .stat-value { - font-size: var(--text-lg); - font-weight: var(--font-bold); - color: var(--primary) + font-size: var(--text-lg); + font-weight: var(--font-bold); + color: var(--primary); } .comparison-actions { - display: flex; - justify-content: center; - gap: var(--space-md) + display: flex; + justify-content: center; + gap: var(--space-md); } .comparison-actions .btn { - padding: var(--space-sm) var(--space-lg); - font-size: var(--text-sm); - min-width: auto + padding: var(--space-sm) var(--space-lg); + font-size: var(--text-sm); + min-width: auto; } .comparison-filters { - display: flex; - justify-content: center; - gap: var(--space-lg); - padding: var(--space-lg); - background: var(--bg-secondary); - border-radius: var(--radius-md); - margin-bottom: var(--space-2xl); - flex-wrap: wrap + display: flex; + justify-content: center; + gap: var(--space-lg); + padding: var(--space-lg); + background: var(--bg-secondary); + border-radius: var(--radius-md); + margin-bottom: var(--space-2xl); + flex-wrap: wrap; } .comparison-filters .filter-option { - display: flex; - align-items: center; - gap: var(--space-sm); - cursor: pointer; - font-size: var(--text-sm); - font-weight: var(--font-medium); - color: var(--text-secondary); - transition: color var(--transition-fast) + display: flex; + align-items: center; + gap: var(--space-sm); + cursor: pointer; + font-size: var(--text-sm); + font-weight: var(--font-medium); + color: var(--text-secondary); + transition: color var(--transition-fast); } .comparison-filters .filter-option:hover { - color: var(--text-primary) + color: var(--text-primary); } .comparison-filters input[type="radio"] { - width: 16px; - height: 16px; - margin: 0; - cursor: pointer + width: 16px; + height: 16px; + margin: 0; + cursor: pointer; } -.comparison-filters input[type="radio"]:checked+span { - color: var(--primary); - font-weight: var(--font-semibold) +.comparison-filters input[type="radio"]:checked + span { + color: var(--primary); + font-weight: var(--font-semibold); } .comparison-table { - width: 100%; - border-collapse: collapse; - margin-top: var(--space-lg) + width: 100%; + border-collapse: collapse; + margin-top: var(--space-lg); } .comparison-table th, .comparison-table td { - padding: var(--space-md); - text-align: center; - border-bottom: 1px solid var(--border-primary) + padding: var(--space-md); + text-align: center; + border-bottom: 1px solid var(--border-primary); } .comparison-table th { - background: var(--bg-secondary); - font-weight: var(--font-semibold); - color: var(--text-primary) + background: var(--bg-secondary); + font-weight: var(--font-semibold); + color: var(--text-primary); } .comparison-table .provider-header { - font-size: var(--text-lg); - font-weight: var(--font-bold) + font-size: var(--text-lg); + font-weight: var(--font-bold); } .comparison-row:hover { - background: var(--bg-secondary) + background: var(--bg-secondary); } .comparison-hiding { - opacity: 0; - transform: scale(.95); - transition: all var(--transition-normal) + opacity: 0; + transform: scale(0.95); + transition: all var(--transition-normal); } -@media (max-width:1024px) { - .resources-categories { - grid-template-columns: 1fr - } +/* ===== 6. FOOTER ===== */ +.site-footer { + background: var(--bg-secondary); + border-top: 1px solid var(--border-primary); + padding: var(--space-7xl) 0 var(--space-4xl); + margin-top: auto; } -@media (max-width:768px) { - .features-grid { - grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); - gap: var(--space-md) - } - - .benefit-card { - padding: var(--space-lg); - min-height: 140px - } - - .benefit-card .icon-badge { - width: 32px; - height: 32px; - margin-bottom: var(--space-md) - } - - .benefit-card h3 { - font-size: var(--text-sm) - } - - .comparison-header { - padding: var(--space-lg); - gap: var(--space-md) - } - - .comparison-stats { - gap: var(--space-lg) - } - - .comparison-filters { - flex-direction: column; - gap: var(--space-md); - align-items: center - } - - .compare-controls { - flex-direction: column; - gap: var(--space-xl) - } - - .compare-select-group { - min-width: 100% - } - - .important-notes-grid { - grid-template-columns: 1fr - } - - .age-verification-actions { - flex-direction: column - } - - .stepper li { - flex-direction: column; - text-align: center; - gap: var(--space-md) - } - - .footer-content { - grid-template-columns: repeat(2, 1fr); - gap: var(--space-xl) - } - - .footer-brand h3 { - font-size: var(--text-lg) - } +.footer-content { + display: grid; + grid-template-columns: 2fr 1fr 1fr 1fr; + gap: var(--space-5xl); + margin-bottom: var(--space-5xl); } -@media (max-width:480px) { - .features-grid { - grid-template-columns: 1fr; - gap: var(--space-lg) - } - - .benefit-card { - padding: var(--space-xl); - min-height: auto - } - - .comparison-header h3 { - font-size: var(--text-lg) - } - - .comparison-stats { - flex-direction: column; - gap: var(--space-md) - } - - .comparison-filters { - gap: var(--space-sm) - } - - .footer-content { - grid-template-columns: 1fr; - gap: var(--space-lg) - } - - .footer-brand { - text-align: center; - padding-bottom: var(--space-lg); - border-bottom: 1px solid rgba(var(--text-rgb), 0.1); - margin-bottom: var(--space-lg) - } - - .footer-links { - justify-content: center - } - - .footer-links h4 { - text-align: center; - margin-bottom: var(--space-md) - } - - .footer-bottom { - text-align: center - } +.footer-section h4, +.footer-section h5 { + margin: 0 0 var(--space-xl); + font-size: var(--text-lg); + font-weight: var(--font-semibold); + color: var(--text-primary); } +.footer-section h5 { + font-size: var(--text-base); + margin-bottom: var(--space-lg); +} + +.footer-brand { + display: flex; + align-items: center; + gap: var(--space-md); + margin-bottom: var(--space-lg); +} + +.footer-logo { + width: 32px; + height: 32px; + color: var(--primary); +} + +.footer-brand h4 { + margin: 0; + font-size: var(--text-xl); + font-weight: var(--font-bold); +} + +.footer-description { + margin: 0 0 var(--space-xl); + color: var(--text-secondary); + line-height: 1.6; + max-width: 300px; +} + +.footer-stats { + display: flex; + gap: var(--space-lg); + flex-wrap: wrap; +} + +.footer-stat { + display: inline-flex; + align-items: center; + padding: var(--space-xs) var(--space-md); + background: var(--bg-primary); + border: 1px solid var(--border-primary); + border-radius: var(--radius-full); + font-size: var(--text-xs); + font-weight: var(--font-medium); + color: var(--text-secondary); + text-transform: uppercase; + letter-spacing: 0.05em; +} + +.footer-links { + list-style: none; + padding: 0; + margin: 0; +} + +.footer-links li { + margin-bottom: var(--space-md); +} + +.footer-links a { + color: var(--text-secondary); + text-decoration: none; + transition: color var(--transition-fast); + font-size: var(--text-sm); + line-height: 1.5; +} + +.footer-links a:hover { + color: var(--primary); +} + +.footer-bottom { + padding-top: var(--space-4xl); + border-top: 1px solid var(--border-primary); +} + +.footer-bottom-content { + display: flex; + justify-content: space-between; + align-items: flex-end; + gap: var(--space-3xl); +} + +.footer-left p { + margin: 0 0 var(--space-sm); + color: var(--text-tertiary); + font-size: var(--text-sm); +} + +.footer-disclaimer { + font-size: var(--text-xs) !important; + color: var(--text-muted) !important; + font-style: italic; +} + +.footer-left a { + color: var(--primary); + text-decoration: none; +} + +.footer-left a:hover { + text-decoration: underline; +} + +.footer-right { + text-align: right; +} + +.footer-meta { + display: flex; + align-items: center; + gap: var(--space-lg); +} + +.last-updated { + font-size: var(--text-xs); + color: var(--text-muted); +} + +.github-link { + display: flex; + align-items: center; + justify-content: center; + width: 36px; + height: 36px; + background: var(--bg-primary); + border: 1px solid var(--border-primary); + border-radius: var(--radius-md); + color: var(--text-secondary); + text-decoration: none; + transition: all var(--transition-fast); +} + +.github-link:hover { + background: var(--primary); + color: white; + border-color: var(--primary); + transform: translateY(-1px); + box-shadow: var(--shadow-md); +} + +/* ===== 7. UTILITY & GLOBAL COMPONENTS ===== */ +/* Back to Top Button */ +.back-to-top { + position: fixed; + bottom: var(--space-2xl); + right: var(--space-2xl); + width: 48px; + height: 48px; + background: var(--primary); + color: white; + border: none; + border-radius: var(--radius-full); + display: flex; + align-items: center; + justify-content: center; + box-shadow: var(--shadow-lg); + opacity: 0; + visibility: hidden; + transform: translateY(20px); + z-index: 50; + transition: all var(--transition-normal); + will-change: transform; +} + +.back-to-top.visible { + opacity: 1; + visibility: visible; + transform: translateY(0); +} + +.back-to-top:hover { + background: var(--primary-hover); + transform: translateY(-2px); + box-shadow: var(--shadow-xl); +} + +/* ===== 8. MEDIA QUERIES ===== */ +/* Large Desktop */ +@media (max-width: 1024px) { + .container { + padding: 0 var(--space-xl); + } + + .resources-categories { + grid-template-columns: 1fr; + } +} + +/* Tablet */ +@media (max-width: 768px) { + .header-nav { + display: none; + } + + .hero-actions { + flex-direction: column; + align-items: center; + } + + .hero-stats { + gap: var(--space-2xl); + } + + .features-grid { + grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); + gap: var(--space-md); + } + + .benefit-card { + padding: var(--space-lg); + min-height: 140px; + } + + .benefit-card .icon-badge { + width: 32px; + height: 32px; + margin-bottom: var(--space-md); + } + + .benefit-card h3 { + font-size: var(--text-sm); + } + + .comparison-header { + padding: var(--space-lg); + gap: var(--space-md); + } + + .comparison-stats { + gap: var(--space-lg); + } + + .comparison-filters { + flex-direction: column; + gap: var(--space-md); + align-items: center; + } + + .compare-controls { + flex-direction: column; + gap: var(--space-xl); + } + + .compare-select-group { + min-width: 100%; + } + + .important-notes-grid { + grid-template-columns: 1fr; + } + + .footer-content { + grid-template-columns: repeat(2, 1fr); + gap: var(--space-xl); + } + + .footer-brand h3 { + font-size: var(--text-lg); + } +} + +/* Mobile */ +@media (max-width: 480px) { + .container { + padding: 0 var(--space-lg); + } + + .section { + padding: var(--space-4xl) 0; + } + + .stat-item:not(:last-child)::after { + display: none; + } + + .features-grid { + grid-template-columns: 1fr; + gap: var(--space-lg); + } + + .benefit-card { + padding: var(--space-xl); + min-height: auto; + } + + .comparison-header h3 { + font-size: var(--text-lg); + } + + .comparison-stats { + flex-direction: column; + gap: var(--space-md); + } + + .comparison-filters { + gap: var(--space-sm); + } + + .footer-content { + grid-template-columns: 1fr; + gap: var(--space-lg); + } + + .footer-brand { + text-align: center; + padding-bottom: var(--space-lg); + border-bottom: 1px solid rgba(var(--text-rgb), 0.1); + margin-bottom: var(--space-lg); + } + + .footer-links { + justify-content: center; + } + + .footer-links h4 { + text-align: center; + margin-bottom: var(--space-md); + } + + .footer-bottom { + text-align: center; + } + + .hero-meta { + margin-bottom: var(--space-2xl); + } + + .hero-badge { + font-size: 10px; + } +} + +/* Print Styles */ @media print { + .site-header, + .hero-section, + .referral-section, + .site-footer, + .back-to-top, + .dark-mode-toggle { + display: none !important; + } - .site-header, - .hero-section, - .referral-section, - .site-footer, - .back-to-top, - .dark-mode-toggle { - display: none !important - } - - .section { - page-break-inside: avoid - } + .section { + page-break-inside: avoid; + } } -@media (pointer:coarse) { +/* Reduced Motion */ +@media (prefers-reduced-motion: reduce) { + *, *::before, *::after { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + } - .nav-link:hover, - .btn:hover, - .status-card:hover, - .benefit-card:hover { - transform: none - } + html { + scroll-behavior: auto; + } + + .header-nav, + .nav-toggle-bar, + .btn::before, + .benefit-card, + .status-card, + .referral-card, + .speed-card, + .back-to-top { + transition: none !important; + animation: none !important; + } +} + +/* High Contrast */ +@media (prefers-contrast: high) { + :root { + --border-primary: #000; + --text-secondary: #000; + } +} + +/* Coarse Pointer (Touch Devices) */ +@media (pointer: coarse) { + .nav-link:hover, + .btn:hover, + .status-card:hover, + .benefit-card:hover { + transform: none; + } } \ No newline at end of file diff --git a/dist/index.html b/dist/index.html index 18aefc8..36543ef 100644 --- a/dist/index.html +++ b/dist/index.html @@ -1,73 +1,84 @@ +
- - -- A community-driven, up-to-date comparison of premium debrid services: pricing, host support, refund policies, and performance. + A community-driven, up-to-date comparison of premium debrid services: pricing, host support, + refund policies, and performance.
- Debrid services (a.k.a. premium link generators) act as a high‑speed intermediary: they fetch the file from a host, then serve you a fast, ad‑free direct link. + Debrid services (a.k.a. premium link generators) act as a high‑speed intermediary: they + fetch the file from a host, then serve you a fast, ad‑free direct link.
Compare subscription plans across all major debrid services
+Compare subscription plans across all major debrid services +
Loading pricing data...
Consider using our referral links - it helps maintain this project at no extra cost to you!
+Consider using our referral links - it helps maintain this project at no extra cost + to you!
Browse and search through 300+ supported file hosting services
+Browse and search through 300+ supported file hosting + services
Loading file hosts...
@@ -313,7 +342,8 @@Select two services to see a detailed side-by-side comparison
+Select two services to see a detailed side-by-side comparison +
Select two services above to see a detailed comparison
- Support for adult content varies significantly across debrid services. Some platforms actively support major adult file hosts, while others exclude them entirely due to policy or legal considerations. + Support for adult content varies significantly across debrid services. Some platforms + actively support major adult file hosts, while others exclude them entirely due to + policy or legal considerations.
Loading adult hosts...
@@ -389,14 +427,15 @@- Actual speeds vary by location, time of day, host performance, and load. Test before committing to a long plan. + Actual speeds vary by location, time of day, host performance, and load. Test before + committing to a long plan.
Test download speeds directly from service providers
View live status and supported hosts
- +Check service status and host comparison
- +View supported hosters and status
- +Check service availability and features
- +Monitor service status and hosts
- +View current status and host list
- +Check supported file hosts
- +- This project aims to provide accurate and up-to-date information, but the debrid service landscape is dynamic. + This project aims to provide accurate and up-to-date information, but the debrid service + landscape is dynamic.
Pricing, host support, refund policies, and features may be updated without notice. Always verify details on the official service websites before purchasing.
+Pricing, host support, refund policies, and features may be updated without + notice. Always verify details on the official service websites + before purchasing.
Displayed prices are subject to exchange rates, regional taxes, or payment processing fees. Your actual charge may differ slightly.
+Displayed prices are subject to exchange rates, regional taxes, or payment + processing fees. Your actual charge may differ slightly.
While we strive for completeness, this comparison reflects community reports and public information. We do not guarantee uptime, speed, download success, or feature availability.
+While we strive for completeness, this comparison reflects community reports and + public information. We do not guarantee uptime, speed, download + success, or feature availability.
This project is independent and not affiliated with any listed service.
+This project is independent and not affiliated with any listed + service.
Choosing a debrid service involves personal judgment. Test short-term plans first and review terms carefully.
+Choosing a debrid service involves personal judgment. Test short-term plans first + and review terms carefully.
Debrid services are tools. You are responsible for complying with copyright laws and terms of use when accessing content.
+Debrid services are tools. You are responsible for complying with copyright laws + and terms of use when accessing content.
Enhance your debrid experience with these trusted tools, guides, and communities
+Enhance your debrid experience with these trusted tools, + guides, and communities