cc-dashboard/web/src/styles/globals.css

183 lines
4.8 KiB
CSS

@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap');
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
:root {
/* ── Soft light theme — warm white + amber accent ──────────────── */
--background: 220 33% 96%; /* #F0F4FA */
--foreground: 222 47% 11%; /* #0F172A */
--card: 0 0% 100%;
--card-foreground: 222 47% 11%;
--popover: 0 0% 100%;
--popover-foreground: 222 47% 11%;
/* Amber/orange primary */
--primary: 25 95% 53%; /* #F97316 */
--primary-foreground: 0 0% 100%;
/* Sky secondary */
--secondary: 200 85% 50%; /* #0EA5E9 */
--secondary-foreground: 0 0% 100%;
--muted: 220 20% 93%;
--muted-foreground: 215 20% 48%;
--accent: 25 100% 96%;
--accent-foreground: 25 95% 40%;
--destructive: 0 84% 60%;
--destructive-foreground: 0 0% 100%;
--border: 220 20% 88%;
--input: 220 20% 88%;
--ring: 25 95% 53%;
--radius: 0.75rem;
--success: 142 71% 45%;
--warning: 38 92% 50%;
}
/* Dark theme */
.dark {
--background: 226 49% 8%;
--foreground: 220 40% 92%;
--card: 220 44% 10%;
--card-foreground: 220 40% 92%;
--popover: 220 44% 12%;
--popover-foreground: 220 40% 92%;
--primary: 25 95% 60%;
--primary-foreground: 226 49% 8%;
--secondary: 200 85% 55%;
--secondary-foreground: 226 49% 8%;
--muted: 220 30% 14%;
--muted-foreground: 220 12% 52%;
--accent: 220 30% 14%;
--accent-foreground: 220 40% 92%;
--destructive: 0 72% 51%;
--destructive-foreground: 220 40% 98%;
--border: 220 28% 17%;
--input: 220 28% 17%;
--ring: 25 95% 60%;
--success: 158 64% 52%;
--warning: 38 92% 60%;
}
}
@layer base {
* {
@apply border-border;
}
body {
@apply bg-background text-foreground;
font-family: 'Inter', system-ui, -apple-system, sans-serif;
font-feature-settings: "rlig" 1, "calt" 1;
-webkit-font-smoothing: antialiased;
}
.tabular-nums,
[data-value],
.kpi-value {
font-family: 'JetBrains Mono', ui-monospace, monospace;
font-variant-numeric: tabular-nums;
}
::-webkit-scrollbar { width: 4px; height: 4px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb {
background: hsl(220 20% 80%);
border-radius: 9999px;
}
::-webkit-scrollbar-thumb:hover {
background: hsl(220 20% 68%);
}
}
@layer utilities {
/* Glass card effect */
.glass-card {
background: rgba(255, 255, 255, 0.72);
backdrop-filter: blur(16px);
-webkit-backdrop-filter: blur(16px);
border: 1px solid rgba(255, 255, 255, 0.85);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06), 0 8px 32px rgba(0, 0, 0, 0.06);
}
.panel-glow {
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06), 0 8px 32px rgba(0, 0, 0, 0.06);
border: 1px solid rgba(255, 255, 255, 0.9);
}
.dark .panel-glow {
box-shadow: 0 0 0 1px hsl(var(--border)), 0 4px 24px -4px hsl(226 49% 4% / 0.6);
border-color: hsl(var(--border));
}
.panel-glow-hover:hover {
box-shadow: 0 4px 24px rgba(249, 115, 22, 0.12), 0 1px 3px rgba(0,0,0,0.06);
border-color: rgba(249, 115, 22, 0.25);
transition: all 0.2s ease;
}
.accent-glow {
box-shadow: 0 0 20px -2px rgba(249, 115, 22, 0.4);
}
/* Smooth fade-in animation for page content */
.fade-in {
animation: fadeIn 0.3s ease-out;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(6px); }
to { opacity: 1; transform: translateY(0); }
}
/* Slide up for cards */
.slide-up {
animation: slideUp 0.35s cubic-bezier(0.16, 1, 0.3, 1);
}
@keyframes slideUp {
from { opacity: 0; transform: translateY(12px); }
to { opacity: 1; transform: translateY(0); }
}
/* ── Spacing rhythm ─────────────────────────────────────────────────
* gap-4 (16px) — inside cards/forms
* gap-6 (24px) — between cards in a grid
* gap-8 (32px) — between page sections
* py-12 (48px) — page-top padding
* ────────────────────────────────────────────────────────────────── */
@keyframes shimmer {
0% { background-position: -1000px 0; }
100% { background-position: 1000px 0; }
}
.skeleton-shimmer {
background: linear-gradient(
90deg,
hsl(var(--muted)) 0%,
hsl(var(--accent)) 50%,
hsl(var(--muted)) 100%
);
background-size: 1000px 100%;
animation: shimmer 1.6s linear infinite;
}
}