Spaces:
Sleeping
Sleeping
| /* static/css/variables.css β Android-first Design System */ | |
| @import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&display=swap'); | |
| :root { | |
| /* ββ OLED Dark Palette ββ */ | |
| --bg-base: #000000; | |
| --bg-surface: #0a0a0a; | |
| --bg-elevated: #111111; | |
| --panel-bg: rgba(15, 15, 15, 0.8); | |
| /* ββ Accent: Amber Gold ββ */ | |
| --accent: #ffc107; | |
| --accent-dim: rgba(255, 193, 7, 0.12); | |
| --accent-glow: rgba(255, 193, 7, 0.25); | |
| --accent-hover: #ffca2c; | |
| --accent-text: #000000; | |
| /* ββ Semantic Colors ββ */ | |
| --success: #22c55e; | |
| --success-dim: rgba(34, 197, 94, 0.12); | |
| --error: #ef4444; | |
| --error-dim: rgba(239, 68, 68, 0.12); | |
| --warning: #f59e0b; | |
| --info: #3b82f6; | |
| /* ββ Text Hierarchy ββ */ | |
| --text-1: #f8fafc; | |
| --text-2: #94a3b8; | |
| --text-3: #64748b; | |
| --text-disabled: #475569; | |
| /* ββ Surface & Borders ββ */ | |
| --border: rgba(255, 255, 255, 0.06); | |
| --border-strong: rgba(255, 255, 255, 0.12); | |
| --divider: rgba(255, 255, 255, 0.04); | |
| --scrim: rgba(0, 0, 0, 0.6); | |
| /* ββ Typography ββ */ | |
| --font-ui: 'IBM Plex Sans', system-ui, -apple-system, sans-serif; | |
| --font-mono: 'JetBrains Mono', 'Fira Code', monospace; | |
| /* ββ Spacing (4dp grid) ββ */ | |
| --sp-0: 0; | |
| --sp-1: 4px; | |
| --sp-2: 8px; | |
| --sp-3: 12px; | |
| --sp-4: 16px; | |
| --sp-5: 20px; | |
| --sp-6: 24px; | |
| --sp-8: 32px; | |
| --sp-10: 40px; | |
| --sp-12: 48px; | |
| /* ββ Radii ββ */ | |
| --r-sm: 8px; | |
| --r-md: 12px; | |
| --r-lg: 16px; | |
| --r-xl: 20px; | |
| --r-full: 9999px; | |
| /* ββ Elevation ββ */ | |
| --elev-1: 0 1px 3px rgba(0,0,0,0.5); | |
| --elev-2: 0 4px 12px rgba(0,0,0,0.6); | |
| --elev-3: 0 8px 30px rgba(0,0,0,0.7); | |
| /* ββ Layout (Android-first) ββ */ | |
| --topbar-h: 56px; | |
| --bottom-nav-h: 64px; | |
| --sidebar-w: 280px; | |
| /* ββ Touch ββ */ | |
| --touch-min: 48px; | |
| --touch-gap: 8px; | |
| } | |
| /* ββ Light Theme ββ */ | |
| :root.light { | |
| --bg-base: #f8fafc; | |
| --bg-surface: #ffffff; | |
| --bg-elevated: #f1f5f9; | |
| --panel-bg: rgba(255, 255, 255, 0.9); | |
| --accent: #d97706; | |
| --accent-dim: rgba(217, 119, 6, 0.1); | |
| --accent-glow: rgba(217, 119, 6, 0.2); | |
| --accent-hover: #b45309; | |
| --accent-text: #ffffff; | |
| --text-1: #0f172a; | |
| --text-2: #475569; | |
| --text-3: #94a3b8; | |
| --text-disabled: #cbd5e1; | |
| --border: rgba(0, 0, 0, 0.06); | |
| --border-strong: rgba(0, 0, 0, 0.12); | |
| --divider: rgba(0, 0, 0, 0.04); | |
| --scrim: rgba(0, 0, 0, 0.4); | |
| --elev-1: 0 1px 3px rgba(0,0,0,0.08); | |
| --elev-2: 0 4px 12px rgba(0,0,0,0.1); | |
| --elev-3: 0 8px 30px rgba(0,0,0,0.12); | |
| } | |
| /* ββ Reset ββ */ | |
| *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } | |
| html { | |
| -webkit-text-size-adjust: 100%; | |
| overscroll-behavior: contain; | |
| } | |
| body { | |
| font-family: var(--font-ui); | |
| background: var(--bg-base); | |
| color: var(--text-1); | |
| height: 100dvh; | |
| overflow: hidden; | |
| display: flex; | |
| font-size: 16px; | |
| line-height: 1.5; | |
| -webkit-font-smoothing: antialiased; | |
| transition: background-color 0.2s ease, color 0.2s ease; | |
| } | |
| /* ββ Tap Highlight ββ */ | |
| a, button, [role="button"], input, select, textarea, label, | |
| .nav-item, .dash-card, .file-item, .settings-tab, .term-tab, | |
| .termux-key, .bottom-nav-item, .chat-msg { | |
| -webkit-tap-highlight-color: transparent; | |
| } | |
| /* ββ Focus ββ */ | |
| :focus-visible { | |
| outline: 2px solid var(--accent); | |
| outline-offset: 2px; | |
| } | |
| /* ββ Skip Link ββ */ | |
| .skip-link { | |
| position: absolute; | |
| top: -100%; | |
| left: var(--sp-4); | |
| background: var(--accent); | |
| color: var(--accent-text); | |
| padding: var(--sp-2) var(--sp-4); | |
| border-radius: var(--r-sm); | |
| font-weight: 600; | |
| font-size: 14px; | |
| z-index: 99999; | |
| text-decoration: none; | |
| transition: top 0.15s ease; | |
| } | |
| .skip-link:focus { top: var(--sp-4); } | |
| /* ββ Scrollbar ββ */ | |
| ::-webkit-scrollbar { width: 4px; height: 4px; } | |
| ::-webkit-scrollbar-track { background: transparent; } | |
| ::-webkit-scrollbar-thumb { background: var(--text-3); border-radius: var(--r-full); } | |
| ::-webkit-scrollbar-thumb:hover { background: var(--accent); } | |
| /* ββ Reduced Motion ββ */ | |
| @media (prefers-reduced-motion: reduce) { | |
| *, *::before, *::after { | |
| animation-duration: 0.01ms ; | |
| transition-duration: 0.01ms ; | |
| } | |
| } | |
| /* ββ Ripple Effect ββ */ | |
| .ripple { | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .ripple::after { | |
| content: ''; | |
| position: absolute; | |
| inset: 0; | |
| background: radial-gradient(circle at var(--ripple-x, 50%) var(--ripple-y, 50%), var(--accent-glow) 0%, transparent 60%); | |
| opacity: 0; | |
| transition: opacity 0.3s ease; | |
| pointer-events: none; | |
| } | |
| .ripple:active::after { opacity: 1; } | |
| /* ββ Markdown ββ */ | |
| .markdown-body pre { | |
| background: var(--bg-elevated) ; | |
| padding: var(--sp-3); | |
| border-radius: var(--r-sm); | |
| overflow-x: auto; | |
| margin: var(--sp-2) 0; | |
| border: 1px solid var(--border); | |
| } | |
| .markdown-body code { | |
| font-family: var(--font-mono); | |
| font-size: 13px; | |
| background: rgba(255,255,255,0.06); | |
| padding: 2px 6px; | |
| border-radius: 4px; | |
| } | |
| .markdown-body pre code { background: transparent; padding: 0; color: #e2e8f0; } | |
| .markdown-body p { margin: 0 0 var(--sp-2) 0; } | |
| .markdown-body p:last-child { margin: 0; } | |
| /* ββ Toast ββ */ | |
| #toast-container { | |
| position: fixed; | |
| bottom: calc(var(--bottom-nav-h) + var(--sp-4)); | |
| left: var(--sp-4); | |
| right: var(--sp-4); | |
| z-index: 9999; | |
| display: flex; | |
| flex-direction: column; | |
| gap: var(--sp-2); | |
| pointer-events: none; | |
| } | |
| #toast-container > * { pointer-events: auto; } | |
| @media (min-width: 769px) { | |
| #toast-container { | |
| bottom: var(--sp-6); | |
| left: auto; | |
| right: var(--sp-6); | |
| width: 360px; | |
| } | |
| } | |
| /* ββ Utility ββ */ | |
| .visually-hidden { | |
| position: absolute; | |
| width: 1px; height: 1px; | |
| padding: 0; margin: -1px; | |
| overflow: hidden; | |
| clip: rect(0,0,0,0); | |
| border: 0; | |
| } | |