@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Noto+Sans+SC:wght@400;500;700&family=JetBrains+Mono:wght@400;500;600&display=swap'); :root { --bg: #060b18; --surface: #0d1525; --card: rgba(22,33,55,.65); --card-solid: #162137; --border: rgba(56,80,130,.35); --border-hover: rgba(59,130,246,.4); --text: #e8ecf4; --muted: #7b8ba8; --accent: #4f8ff7; --accent-glow: rgba(79,143,247,.12); --accent-bright: #6da3ff; --green: #22c55e; --green-glow: rgba(34,197,94,.12); --yellow: #eab308; --yellow-glow: rgba(234,179,8,.1); --red: #f43f5e; --red-glow: rgba(244,63,94,.1); --orange: #f97316; --purple: #a855f7; --purple-glow: rgba(168,85,247,.12); --cyan: #06b6d4; /* Shadows */ --shadow-sm: 0 1px 3px rgba(0,0,0,.3), 0 1px 2px rgba(0,0,0,.2); --shadow-md: 0 4px 14px rgba(0,0,0,.35), 0 2px 6px rgba(0,0,0,.2); --shadow-lg: 0 8px 30px rgba(0,0,0,.4), 0 4px 12px rgba(0,0,0,.25); --shadow-glow: 0 0 20px rgba(79,143,247,.08), 0 4px 14px rgba(0,0,0,.3); /* Blur */ --blur: blur(12px); } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Inter', 'Noto Sans SC', system-ui, -apple-system, sans-serif; background: var(--bg); color: var(--text); line-height: 1.6; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; background-image: radial-gradient(ellipse 80% 60% at 50% 0%, rgba(79,143,247,.04) 0%, transparent 60%), radial-gradient(ellipse 60% 50% at 80% 100%, rgba(168,85,247,.03) 0%, transparent 50%); background-attachment: fixed; } /* ── Scrollbar ── */ ::-webkit-scrollbar { width: 5px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: linear-gradient(180deg, rgba(79,143,247,.3), rgba(168,85,247,.2)); border-radius: 10px; } ::-webkit-scrollbar-thumb:hover { background: rgba(79,143,247,.5); } /* ── Recharts tooltip ── */ .recharts-default-tooltip { background: var(--card-solid) !important; border: 1px solid var(--border) !important; border-radius: 10px !important; box-shadow: var(--shadow-md) !important; backdrop-filter: var(--blur) !important; } /* ── Selection ── */ ::selection { background: rgba(79,143,247,.28); color: var(--text); } /* ── Stat Card (reusable) ── */ .stat-card { background: var(--card); backdrop-filter: var(--blur); border: 1px solid var(--border); border-radius: 14px; padding: 18px 20px; transition: all .3s cubic-bezier(.4,0,.2,1); position: relative; overflow: hidden; } .stat-card::before { content: ''; position: absolute; inset: 0; background: linear-gradient(135deg, rgba(79,143,247,.04) 0%, transparent 60%); opacity: 0; transition: opacity .3s; } .stat-card:hover { border-color: var(--border-hover); box-shadow: var(--shadow-glow); transform: translateY(-1px); } .stat-card:hover::before { opacity: 1; } .stat-label { font-size: .7rem; text-transform: uppercase; letter-spacing: 1.5px; color: var(--muted); font-weight: 600; } .stat-value { font-size: 1.6rem; font-weight: 800; margin: 6px 0 4px; background: linear-gradient(135deg, var(--text) 30%, var(--accent-bright)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; } .stat-sub { font-size: .7rem; color: var(--muted); } /* ── Monospace for code/numbers ── */ code, .mono { font-family: 'JetBrains Mono', 'Fira Code', monospace; }