@import "tailwindcss"; @theme { --font-sans: var(--font-sans), ui-sans-serif, system-ui, sans-serif; --font-display: var(--font-display), var(--font-sans), ui-sans-serif, sans-serif; --font-mono: var(--font-mono), ui-monospace, monospace; --color-bg: var(--bg); --color-surface: var(--surface); --color-surface-hover: var(--surface-hover); --color-border: var(--border); --color-border-strong: var(--border-strong); --color-text: var(--text); --color-text-muted: var(--text-muted); --color-text-faint: var(--text-faint); --color-accent: var(--accent); --color-accent-hover: var(--accent-hover); --color-accent-soft: var(--accent-soft); --color-accent-soft-text: var(--accent-soft-text); --color-danger: var(--danger); --color-danger-soft: var(--danger-soft); --color-danger-soft-text: var(--danger-soft-text); --color-warning: var(--warning); --color-warning-soft: var(--warning-soft); --color-warning-soft-text: var(--warning-soft-text); --color-success: var(--success); --color-success-soft: var(--success-soft); --color-success-soft-text: var(--success-soft-text); --color-info: var(--info); --color-info-soft: var(--info-soft); --color-info-soft-text: var(--info-soft-text); --color-rose: var(--rose); --color-rose-soft: var(--rose-soft); --color-rose-soft-text: var(--rose-soft-text); /* Chart marks — validated categorical set (dataviz skill), distinct from the softer *-soft badge tokens which are too light for dark-mode marks. */ --color-chart-1: var(--chart-1); --color-chart-2: var(--chart-2); --color-chart-3: var(--chart-3); --color-chart-4: var(--chart-4); --color-chart-muted: var(--chart-muted); --radius-sm: var(--radius-sm-val); --radius-md: var(--radius-md-val); --radius-lg: var(--radius-lg-val); } :root { --bg: #f8f7fb; --surface: #ffffff; --surface-hover: #f2effa; --border: #e5e0f2; --border-strong: #cec4e8; --text: #171325; --text-muted: #635d7a; --text-faint: #9891ad; --accent: #6d28d9; --accent-hover: #5b21b6; --accent-soft: #f0e8fe; --accent-soft-text: #5b21b6; --danger: #dc2626; --danger-soft: #fef2f2; --danger-soft-text: #b91c1c; --warning: #d97706; --warning-soft: #fffbeb; --warning-soft-text: #b45309; --success: #0d9488; --success-soft: #ecfdf9; --success-soft-text: #0f766e; --info: #2563eb; --info-soft: #eff6ff; --info-soft-text: #1d4ed8; --rose: #e11d48; --rose-soft: #fff1f2; --rose-soft-text: #be123c; /* Chart marks — fixed categorical order, CVD-validated (accent/success/ info/warning); reorder only after re-running the validator. */ --chart-1: #6d28d9; --chart-2: #0d9488; --chart-3: #2563eb; --chart-4: #d97706; --chart-muted: var(--border-strong); --radius-sm-val: 8px; --radius-md-val: 12px; --radius-lg-val: 18px; --bg-glow: none; --card-shadow: 0 1px 2px rgba(0, 0, 0, 0.04); color-scheme: light; } @media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) { --bg: #0b0a12; --surface: #161320; --surface-hover: #1d1929; --border: #2d2640; --border-strong: #453c60; --text: #f1eefb; --text-muted: #a79fc4; --text-faint: #6f6790; --accent: #8b5cf6; --accent-hover: #7c3aed; --accent-soft: #251c3f; --accent-soft-text: #c4b5fd; --danger: #f87171; --danger-soft: #2a1517; --danger-soft-text: #fca5a5; --warning: #fbbf24; --warning-soft: #2a2110; --warning-soft-text: #fcd34d; --success: #2dd4bf; --success-soft: #0f2320; --success-soft-text: #5eead4; --info: #60a5fa; --info-soft: #12203a; --info-soft-text: #93c5fd; --rose: #fb7185; --rose-soft: #2a1420; --rose-soft-text: #fda4af; /* Darker/more saturated than the badge tokens above — validated separately for the dark-mode lightness band (L 0.48–0.67). */ --chart-1: #8b5cf6; --chart-2: #0d9488; --chart-3: #3b82f6; --chart-4: #d97706; --chart-muted: var(--border-strong); --bg-glow: radial-gradient(ellipse 80% 50% at 50% -10%, rgba(139, 92, 246, 0.12), transparent 60%); --card-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset, 0 8px 24px rgba(0, 0, 0, 0.35); color-scheme: dark; } } :root[data-theme="dark"] { --bg: #0b0a12; --surface: #161320; --surface-hover: #1d1929; --border: #2d2640; --border-strong: #453c60; --text: #f1eefb; --text-muted: #a79fc4; --text-faint: #6f6790; --accent: #8b5cf6; --accent-hover: #7c3aed; --accent-soft: #251c3f; --accent-soft-text: #c4b5fd; --danger: #f87171; --danger-soft: #2a1517; --danger-soft-text: #fca5a5; --warning: #fbbf24; --warning-soft: #2a2110; --warning-soft-text: #fcd34d; --success: #2dd4bf; --success-soft: #0f2320; --success-soft-text: #5eead4; --info: #60a5fa; --info-soft: #12203a; --info-soft-text: #93c5fd; --rose: #fb7185; --rose-soft: #2a1420; --rose-soft-text: #fda4af; --chart-1: #8b5cf6; --chart-2: #0d9488; --chart-3: #3b82f6; --chart-4: #d97706; --chart-muted: var(--border-strong); --bg-glow: radial-gradient(ellipse 80% 50% at 50% -10%, rgba(139, 92, 246, 0.12), transparent 60%); --card-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset, 0 8px 24px rgba(0, 0, 0, 0.35); color-scheme: dark; } /* Theme-toggle icon: both render always, CSS picks which shows — same data-theme cascade the palette above uses, so it never needs JS state. */ .theme-toggle-btn .theme-icon-sun { display: none; } .theme-toggle-btn .theme-icon-moon { display: inline; } @media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .theme-toggle-btn .theme-icon-sun { display: inline; } :root:not([data-theme="light"]) .theme-toggle-btn .theme-icon-moon { display: none; } } :root[data-theme="dark"] .theme-toggle-btn .theme-icon-sun { display: inline; } :root[data-theme="dark"] .theme-toggle-btn .theme-icon-moon { display: none; } * { border-color: var(--border); } html, body { height: 100%; overflow-x: hidden; } body { background: var(--bg); background-image: var(--bg-glow, none); background-attachment: fixed; color: var(--text); font-family: var(--font-sans); -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; } ::selection { background: var(--accent-soft); color: var(--accent-soft-text); } :focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 4px; } ::-webkit-scrollbar { width: 10px; height: 10px; } ::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: 999px; } ::-webkit-scrollbar-track { background: transparent; } .card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-md); box-shadow: var(--card-shadow); } .btn { display: inline-flex; align-items: center; gap: 0.5rem; border-radius: var(--radius-sm); font-weight: 600; font-size: 0.875rem; padding: 0.5rem 0.9rem; transition: background-color 150ms ease, color 150ms ease, border-color 150ms ease, transform 100ms ease; } .btn:active { transform: translateY(1px); } .btn-primary { background: var(--accent); color: white; } .btn-primary:hover { background: var(--accent-hover); } .btn-ghost { background: transparent; color: var(--text-muted); border: 1px solid var(--border); } .btn-ghost:hover { background: var(--surface-hover); color: var(--text); } .badge { display: inline-flex; align-items: center; gap: 0.35rem; font-size: 0.75rem; font-weight: 600; padding: 0.15rem 0.55rem; border-radius: 999px; } .badge-new { background: var(--accent-soft); color: var(--accent-soft-text); } .badge-open { background: var(--success-soft); color: var(--success-soft-text); } .badge-pending { background: var(--warning-soft); color: var(--warning-soft-text); } .badge-closed { background: var(--border); color: var(--text-muted); }