* { box-sizing: border-box; margin: 0; padding: 0; } :root { --bg: #0c0c18; --bg-secondary: #12121f; --sidebar-bg: rgba(12, 12, 24, 0.8); --card-bg: rgba(255, 255, 255, 0.04); --card-bg-hover: rgba(255, 255, 255, 0.07); --card-border: rgba(255, 255, 255, 0.07); --card-border-hover: rgba(255, 255, 255, 0.12); --text-primary: rgba(255, 255, 255, 0.95); --text-secondary: rgba(255, 255, 255, 0.45); --text-tertiary: rgba(255, 255, 255, 0.25); --accent: #818cf8; --accent-secondary: #22d3ee; --accent-glow: rgba(129, 140, 248, 0.15); --glass: rgba(255, 255, 255, 0.03); --glass-border: rgba(255, 255, 255, 0.06); --gradient-primary: linear-gradient(135deg, #6366f1, #8b5cf6); --gradient-warm: linear-gradient(135deg, #f59e0b, #ef4444); --gradient-cool: linear-gradient(135deg, #06b6d4, #3b82f6); --gradient-green: linear-gradient(135deg, #10b981, #34d399); --on-color: #818cf8; --off-color: rgba(255, 255, 255, 0.15); --radius-sm: 12px; --radius-md: 16px; --radius-lg: 22px; --radius-xl: 28px; } html, body { background: var(--bg); color: var(--text-primary); font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Segoe UI', system-ui, sans-serif; height: 100%; overflow: hidden; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } #__next, main { height: 100%; } /* Ambient background orbs */ .bg-ambient { position: fixed; inset: 0; z-index: 0; overflow: hidden; pointer-events: none; } .bg-ambient::before { content: ''; position: absolute; width: 600px; height: 600px; border-radius: 50%; background: radial-gradient(circle, rgba(99, 102, 241, 0.08) 0%, transparent 70%); top: -200px; right: -100px; animation: float1 20s ease-in-out infinite; } .bg-ambient::after { content: ''; position: absolute; width: 500px; height: 500px; border-radius: 50%; background: radial-gradient(circle, rgba(139, 92, 246, 0.06) 0%, transparent 70%); bottom: -150px; left: -50px; animation: float2 25s ease-in-out infinite; } @keyframes float1 { 0%, 100% { transform: translate(0, 0) scale(1); } 33% { transform: translate(30px, 40px) scale(1.05); } 66% { transform: translate(-20px, 20px) scale(0.95); } } @keyframes float2 { 0%, 100% { transform: translate(0, 0) scale(1); } 33% { transform: translate(-40px, -30px) scale(1.1); } 66% { transform: translate(20px, -10px) scale(0.9); } } /* Glass card base */ .glass-card { background: var(--card-bg); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid var(--card-border); border-radius: var(--radius-lg); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .glass-card:hover { background: var(--card-bg-hover); border-color: var(--card-border-hover); } /* Gradient text */ .gradient-text { background: var(--gradient-primary); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } button { cursor: pointer; border: none; outline: none; background: none; -webkit-tap-highlight-color: transparent; touch-action: manipulation; font-family: inherit; } button:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; } /* Smooth scrollbar */ ::-webkit-scrollbar { width: 4px; height: 4px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.08); border-radius: 2px; } ::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, 0.15); } /* Pulse animation for active devices */ @keyframes pulse-glow { 0%, 100% { box-shadow: 0 0 20px rgba(129, 140, 248, 0.15); } 50% { box-shadow: 0 0 30px rgba(129, 140, 248, 0.25); } } /* Slide in animation */ @keyframes slideUp { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } .animate-slide-up { animation: slideUp 0.4s cubic-bezier(0.4, 0, 0.2, 1) forwards; } /* ————— Light theme ————— */ .light { --bg: #f5f5fa; --bg-secondary: #eeeef4; --sidebar-bg: rgba(255, 255, 255, 0.8); --card-bg: rgba(255, 255, 255, 0.7); --card-bg-hover: rgba(255, 255, 255, 0.85); --card-border: rgba(0, 0, 0, 0.06); --card-border-hover: rgba(0, 0, 0, 0.1); --text-primary: rgba(0, 0, 0, 0.88); --text-secondary: rgba(0, 0, 0, 0.45); --text-tertiary: rgba(0, 0, 0, 0.2); --accent: #6366f1; --accent-secondary: #0891b2; --accent-glow: rgba(99, 102, 241, 0.12); --glass: rgba(255, 255, 255, 0.5); --glass-border: rgba(0, 0, 0, 0.06); --on-color: #6366f1; --off-color: rgba(0, 0, 0, 0.12); } .light .bg-ambient::before { background: radial-gradient(circle, rgba(99, 102, 241, 0.06) 0%, transparent 70%); } .light .bg-ambient::after { background: radial-gradient(circle, rgba(139, 92, 246, 0.04) 0%, transparent 70%); } .light ::-webkit-scrollbar-thumb { background: rgba(0, 0, 0, 0.1); } .light ::-webkit-scrollbar-thumb:hover { background: rgba(0, 0, 0, 0.2); } /* ————— Device animations ————— */ @keyframes fan-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } @keyframes light-pulse { 0%, 100% { filter: drop-shadow(0 0 4px rgba(251, 191, 36, 0.3)); } 50% { filter: drop-shadow(0 0 12px rgba(251, 191, 36, 0.6)); } } @keyframes device-breathe { 0%, 100% { opacity: 0.7; } 50% { opacity: 1; } } .fan-spinning { animation: fan-spin 2s linear infinite; } .light-on-pulse { animation: light-pulse 3s ease-in-out infinite; } .device-active-breathe { animation: device-breathe 3s ease-in-out infinite; } /* ————— Weather animations ————— */ @keyframes spin-slow { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } @keyframes cloud-float { 0%, 100% { transform: translateX(0); } 50% { transform: translateX(4px); } } @keyframes rain-fall { 0% { transform: translateY(0); opacity: 0.7; } 80% { opacity: 0.7; } 100% { transform: translateY(16px); opacity: 0; } } @keyframes snow-fall { 0% { transform: translateY(0) translateX(0); opacity: 0.9; } 25% { transform: translateY(5px) translateX(2px); opacity: 0.8; } 50% { transform: translateY(10px) translateX(-1px); opacity: 0.7; } 75% { transform: translateY(15px) translateX(3px); opacity: 0.4; } 100% { transform: translateY(22px) translateX(0); opacity: 0; } } @keyframes thunder-flash { 0%, 100% { opacity: 0; } 5%, 7% { opacity: 1; } 6% { opacity: 0.3; } 50%, 52% { opacity: 0.8; } 51% { opacity: 0.2; } } @keyframes fog-drift { 0%, 100% { transform: translateX(0); opacity: 0.4; } 50% { transform: translateX(8px); opacity: 0.6; } } /* ————— Dynamic weather backgrounds ————— */ .weather-bg-clear { --orb1-color: rgba(251, 191, 36, 0.08); --orb2-color: rgba(245, 158, 11, 0.05); } .weather-bg-cloudy { --orb1-color: rgba(148, 163, 184, 0.08); --orb2-color: rgba(100, 116, 139, 0.06); } .weather-bg-rain { --orb1-color: rgba(59, 130, 246, 0.08); --orb2-color: rgba(30, 64, 175, 0.06); } .weather-bg-snow { --orb1-color: rgba(186, 230, 253, 0.1); --orb2-color: rgba(147, 197, 253, 0.07); } .weather-bg-thunder { --orb1-color: rgba(139, 92, 246, 0.1); --orb2-color: rgba(88, 28, 135, 0.06); } .weather-bg-night { --orb1-color: rgba(67, 56, 202, 0.06); --orb2-color: rgba(49, 46, 129, 0.05); } .weather-bg-clear .bg-ambient::before, .weather-bg-cloudy .bg-ambient::before, .weather-bg-rain .bg-ambient::before, .weather-bg-snow .bg-ambient::before, .weather-bg-thunder .bg-ambient::before, .weather-bg-night .bg-ambient::before { background: radial-gradient(circle, var(--orb1-color) 0%, transparent 70%); } .weather-bg-clear .bg-ambient::after, .weather-bg-cloudy .bg-ambient::after, .weather-bg-rain .bg-ambient::after, .weather-bg-snow .bg-ambient::after, .weather-bg-thunder .bg-ambient::after, .weather-bg-night .bg-ambient::after { background: radial-gradient(circle, var(--orb2-color) 0%, transparent 70%); }