/* ──────────────────────────────────────────────────────────────────────────────── */ /* Base CSS Variables & Reset */ /* ──────────────────────────────────────────────────────────────────────────────── */ :root { /* Color Palette - Dark Theme Default */ --bg-primary: #0f172a; --bg-secondary: #1e293b; --bg-tertiary: #334155; --text-primary: #f8fafc; --text-secondary: #e2e8f0; --text-muted: #94a3b8; --accent: #3b82f6; --accent-hover: #2563eb; --success: #22c55e; --warning: #f59e0b; --error: #ef4444; --border: #334155; /* Typography */ --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif; --font-mono: 'Fira Code', 'Monaco', 'Courier New', monospace; /* Spacing */ --space-xs: 4px; --space-sm: 8px; --space-md: 16px; --space-lg: 24px; --space-xl: 32px; /* Border Radius */ --radius-sm: 4px; --radius-md: 6px; --radius-lg: 8px; --radius-xl: 12px; /* Transitions */ --transition-fast: 150ms ease; --transition-normal: 250ms ease; /* Z-index layers */ --z-base: 1; --z-dropdown: 100; --z-sticky: 200; --z-modal: 1000; --z-toast: 1100; } /* Reset & Base Styles */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { font-size: 16px; -webkit-text-size-adjust: 100%; -webkit-tap-highlight-color: transparent; } body { font-family: var(--font-sans); background-color: var(--bg-primary); color: var(--text-primary); line-height: 1.5; min-height: 100vh; overflow-x: hidden; } /* Typography */ h1, h2, h3, h4, h5, h6 { font-weight: 600; color: var(--text-primary); line-height: 1.25; margin-bottom: var(--space-md); } h1 { font-size: 1.875rem; } h2 { font-size: 1.5rem; } h3 { font-size: 1.25rem; } h4 { font-size: 1.125rem; } h5 { font-size: 1rem; } h6 { font-size: 0.875rem; } p { margin-bottom: var(--space-md); color: var(--text-muted); } a { color: var(--accent); text-decoration: none; transition: color var(--transition-fast); } a:hover { color: var(--accent-hover); } /* Mobile heading adjustments */ @media (max-width: 640px) { h1 { font-size: 1.5rem; } h2 { font-size: 1.25rem; } h3 { font-size: 1.125rem; } } /* Scrollbar Styling */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: var(--bg-secondary); } ::-webkit-scrollbar-thumb { background: var(--bg-tertiary); border-radius: var(--radius-sm); } ::-webkit-scrollbar-thumb:hover { background: var(--text-muted); } /* Selection */ ::selection { background: rgba(59, 130, 246, 0.3); color: var(--text-primary); } /* Focus Styles */ :focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; } /* Touch-friendly tap target size (min 44x44px per WCAG) */ button, a, input, select, textarea { min-height: 44px; min-width: 44px; } /* App container */ #app { min-height: 100vh; display: flex; flex-direction: column; } /* Utility: Hide scrollbar but allow scroll */ .scrollbar-hide { -ms-overflow-style: none; scrollbar-width: none; } .scrollbar-hide::-webkit-scrollbar { display: none; } /* Utility: Text truncation */ .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* Utility: Screen reader only */ .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }