Bankbot / frontend /src /app /globals.css
mohsin-devs's picture
feat: improved light mode + language sync to html lang attribute
7782325
Raw
History Blame Contribute Delete
6.65 kB
@tailwind base;
@tailwind components;
@tailwind utilities;
/* ─── CSS Variables ─────────────────────────────────────────────────────────── */
@layer base {
:root {
--background: 0 0% 3%;
--foreground: 0 0% 98%;
--radius: 0.625rem;
/* Dark mode (default) */
--bg: #050505;
--bg-secondary:#0d0d0d;
--fg: #fafafa;
--fg-muted: #a1a1aa;
--fg-subtle: #71717a;
--card-bg: rgba(255,255,255,0.04);
--card-hover: rgba(255,255,255,0.06);
--border: rgba(255,255,255,0.08);
--border-strong: rgba(255,255,255,0.14);
--input-bg: rgba(255,255,255,0.05);
--navbar-bg: rgba(0,0,0,0.5);
--sidebar-bg: rgba(0,0,0,0.6);
--ambient-1: rgba(37,99,235,0.10);
--ambient-2: rgba(5,150,105,0.10);
--ambient-3: rgba(124,58,237,0.05);
}
html.light {
--bg: #f0f4f8;
--bg-secondary:#e8edf3;
--fg: #0f172a;
--fg-muted: #475569;
--fg-subtle: #94a3b8;
--card-bg: rgba(255,255,255,0.95);
--card-hover: rgba(255,255,255,1);
--border: rgba(15,23,42,0.10);
--border-strong: rgba(15,23,42,0.18);
--input-bg: rgba(255,255,255,0.9);
--navbar-bg: rgba(240,244,248,0.90);
--sidebar-bg: rgba(255,255,255,0.97);
--ambient-1: rgba(37,99,235,0.06);
--ambient-2: rgba(5,150,105,0.06);
--ambient-3: rgba(124,58,237,0.04);
}
* { border-color: var(--border); box-sizing: border-box; }
body {
background-color: var(--bg);
color: var(--fg);
transition: background-color 0.25s ease, color 0.25s ease;
}
html { font-family: var(--font-sans, ui-sans-serif, system-ui, sans-serif); }
}
/* ─── Glassmorphism utilities ────────────────────────────────────────────────── */
@layer utilities {
.text-balance {
text-wrap: balance;
}
.glass {
background: var(--card-bg);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border: 1px solid var(--border);
}
.glass-strong {
background: rgba(255, 255, 255, 0.10);
backdrop-filter: blur(32px);
-webkit-backdrop-filter: blur(32px);
border: 1px solid var(--border-strong);
}
html.light .glass-strong {
background: rgba(255,255,255,0.95);
}
.glass-card {
border-radius: 1rem;
background: var(--card-bg);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border: 1px solid var(--border);
box-shadow: 0 20px 40px rgba(0,0,0,0.25);
transition: background 0.25s ease, border-color 0.25s ease, box-shadow 0.25s ease;
}
/* Light mode overrides */
html.light .glass-card {
background: var(--card-bg);
border: 1px solid var(--border);
box-shadow: 0 2px 16px rgba(15,23,42,0.08), 0 1px 4px rgba(15,23,42,0.06);
}
html.light .glass {
background: rgba(255,255,255,0.80);
border: 1px solid var(--border);
}
html.light .shimmer {
background: linear-gradient(90deg, rgba(15,23,42,0.04) 0%, rgba(15,23,42,0.09) 50%, rgba(15,23,42,0.04) 100%);
background-size: 200% 100%;
animation: shimmer 1.5s infinite;
}
/* ── Adaptive text helpers ── */
.text-adaptive {
color: var(--fg);
}
.text-adaptive-muted {
color: var(--fg-muted);
}
.text-adaptive-subtle {
color: var(--fg-subtle);
}
/* Gradient text */
.gradient-text {
background: linear-gradient(135deg, #60a5fa, #22d3ee, #34d399);
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
}
.gradient-text-gold {
background: linear-gradient(135deg, #fbbf24, #f97316);
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
}
/* Glow effects (toned down in light mode) */
.glow-blue {
box-shadow: 0 0 30px rgba(59, 130, 246, 0.3), 0 0 60px rgba(59, 130, 246, 0.1);
}
.glow-emerald {
box-shadow: 0 0 30px rgba(16, 185, 129, 0.3), 0 0 60px rgba(16, 185, 129, 0.1);
}
.glow-purple {
box-shadow: 0 0 30px rgba(139, 92, 246, 0.3), 0 0 60px rgba(139, 92, 246, 0.1);
}
html.light .glow-blue { box-shadow: 0 0 20px rgba(59,130,246,0.15); }
html.light .glow-emerald{ box-shadow: 0 0 20px rgba(16,185,129,0.15); }
html.light .glow-purple { box-shadow: 0 0 20px rgba(139,92,246,0.15); }
/* Streaming text cursor */
.streaming-cursor::after {
content: 'β–‹';
animation: blink 0.7s step-end infinite;
color: #10b981;
margin-left: 2px;
}
/* Shimmer loading */
.shimmer {
background: linear-gradient(
90deg,
rgba(255,255,255,0.03) 0%,
rgba(255,255,255,0.08) 50%,
rgba(255,255,255,0.03) 100%
);
background-size: 200% 100%;
animation: shimmer 1.5s infinite;
}
.animate-float {
animation: float 4s ease-in-out infinite;
}
.animate-gradient {
background-size: 200% 200%;
animation: gradient-shift 4s ease infinite;
}
/* ── Light mode chart / tooltip fixes ── */
html.light .recharts-cartesian-grid line {
stroke: rgba(15,23,42,0.07) !important;
}
html.light .recharts-text {
fill: #64748b !important;
}
}
/* ─── Custom scrollbar ───────────────────────────────────────────────────────── */
::-webkit-scrollbar {
width: 4px;
height: 4px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background: rgba(255, 255, 255, 0.1);
border-radius: 999px;
}
::-webkit-scrollbar-thumb:hover {
background: rgba(255, 255, 255, 0.2);
}
html.light ::-webkit-scrollbar-thumb {
background: rgba(15,23,42,0.15);
}
html.light ::-webkit-scrollbar-thumb:hover {
background: rgba(15,23,42,0.25);
}
/* ─── Keyframes ──────────────────────────────────────────────────────────────── */
@keyframes blink {
0%, 100% { opacity: 1; }
50% { opacity: 0; }
}
@keyframes shimmer {
0% { background-position: -200% 0; }
100% { background-position: 200% 0; }
}
@keyframes float {
0%, 100% { transform: translateY(0px); }
50% { transform: translateY(-8px); }
}
@keyframes gradient-shift {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}