best / frontend /src /app /globals.css
anky2002's picture
fix: 🐛 Dark mode ACTUALLY fixed - use CSS vars directly on :root/.dark, bypass @theme for mutable tokens
5149b68 verified
Raw
History Blame Contribute Delete
7.88 kB
@import "tailwindcss";
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&family=Syne:wght@400;500;600;700;800&family=Space+Mono:wght@400;700&display=swap');
/* ============================================================
NEO-BRUTALISM DESIGN SYSTEM — JOBPORTAL 2026
Dark mode strategy: ALL mutable colors defined as CSS vars
on :root and .dark — NOT inside @theme (which is static).
Tailwind v4 reads CSS vars via @theme reference only.
============================================================ */
/* ===== STEP 1: Light mode colors on :root ===== */
:root {
/* Surfaces */
--background: #FAFAF8;
--foreground: #0D0D0D;
--card: #FFFFFF;
--card-foreground: #0D0D0D;
--muted: #F0EDE6;
--muted-foreground: #4A4A4A;
/* Brand accents */
--primary: #FFD000;
--primary-foreground: #000000;
--secondary: #E63946;
--secondary-foreground: #FFFFFF;
--accent: #C0FF00;
--accent-foreground: #000000;
--tertiary: #4ECDC4;
--tertiary-foreground: #000000;
--pop: #6C5CE7;
--pop-foreground: #FFFFFF;
/* System */
--border: #000000;
--input: #FFFFFF;
--ring: #000000;
--destructive: #E63946;
--success: #00B37E;
--warning: #FFB347;
/* Neo shadows */
--shadow-color: #000000;
--neo-xs: 2px 2px 0px 0px var(--shadow-color);
--neo-sm: 3px 3px 0px 0px var(--shadow-color);
--neo: 4px 4px 0px 0px var(--shadow-color);
--neo-md: 5px 5px 0px 0px var(--shadow-color);
--neo-lg: 6px 6px 0px 0px var(--shadow-color);
--neo-xl: 8px 8px 0px 0px var(--shadow-color);
}
/* ===== STEP 2: Dark mode overrides ===== */
.dark {
--background: #0F0F0F;
--foreground: #F5F5F3;
--card: #1A1A1A;
--card-foreground: #F5F5F3;
--muted: #252525;
--muted-foreground: #A0A0A0;
--input: #1A1A1A;
--border: #E0E0E0;
--ring: #FFFFFF;
--shadow-color: #E0E0E0;
/* Accents get slightly boosted for dark */
--tertiary: #00FFDD;
--accent: #BFFF00;
/* Shadows recalculate automatically via --shadow-color */
--neo-xs: 2px 2px 0px 0px var(--shadow-color);
--neo-sm: 3px 3px 0px 0px var(--shadow-color);
--neo: 4px 4px 0px 0px var(--shadow-color);
--neo-md: 5px 5px 0px 0px var(--shadow-color);
--neo-lg: 6px 6px 0px 0px var(--shadow-color);
--neo-xl: 8px 8px 0px 0px var(--shadow-color);
}
/* ===== STEP 3: Tell Tailwind v4 to USE these CSS vars ===== */
@theme inline {
--font-display: 'Syne', sans-serif;
--font-body: 'Space Grotesk', sans-serif;
--font-mono: 'Space Mono', monospace;
--color-background: var(--background);
--color-foreground: var(--foreground);
--color-card: var(--card);
--color-card-foreground: var(--card-foreground);
--color-muted: var(--muted);
--color-muted-foreground: var(--muted-foreground);
--color-primary: var(--primary);
--color-primary-foreground: var(--primary-foreground);
--color-secondary: var(--secondary);
--color-secondary-foreground: var(--secondary-foreground);
--color-accent: var(--accent);
--color-accent-foreground: var(--accent-foreground);
--color-border: var(--border);
--color-input: var(--input);
--color-ring: var(--ring);
--color-destructive: var(--destructive);
--radius: 0px;
--radius-sm: 0px;
--radius-md: 2px;
--radius-lg: 4px;
}
/* ===== BASE STYLES ===== */
@layer base {
* {
border-color: var(--border);
}
body {
background-color: var(--background);
color: var(--foreground);
font-family: var(--font-body);
-webkit-font-smoothing: antialiased;
}
h1, h2, h3, h4, h5, h6 {
font-family: var(--font-display);
font-weight: 800;
letter-spacing: -0.03em;
line-height: 0.92;
}
input, textarea, select {
border: 2px solid var(--border);
background: var(--input);
color: var(--foreground);
padding: 0.75rem 1rem;
font-weight: 500;
font-family: var(--font-body);
border-radius: 0;
box-shadow: var(--neo-xs);
transition: box-shadow 0.15s ease, transform 0.15s ease;
}
input:focus, textarea:focus, select:focus {
outline: none;
transform: translate(-1px, -1px);
box-shadow: var(--neo-sm);
}
input::placeholder, textarea::placeholder {
color: var(--muted-foreground);
}
}
/* ===== NEO-BRUTALISM UTILITIES ===== */
@layer utilities {
.neo-border { border: 2px solid var(--border); }
.neo-border-thick { border: 3px solid var(--border); }
.neo-shadow { box-shadow: var(--neo); }
.neo-shadow-sm { box-shadow: var(--neo-sm); }
.neo-shadow-lg { box-shadow: var(--neo-lg); }
.neo-shadow-xl { box-shadow: var(--neo-xl); }
.neo-interactive {
border: 2px solid var(--border);
box-shadow: var(--neo);
transition: transform 0.15s cubic-bezier(0.4,0,0.2,1), box-shadow 0.15s cubic-bezier(0.4,0,0.2,1);
cursor: pointer;
}
.neo-interactive:hover {
transform: translate(-2px, -2px);
box-shadow: var(--neo-lg);
}
.neo-interactive:active {
transform: translate(3px, 3px);
box-shadow: 0 0 0 0 var(--shadow-color);
}
.neo-card {
border: 2px solid var(--border);
box-shadow: var(--neo-md);
background: var(--card);
color: var(--card-foreground);
transition: transform 0.2s cubic-bezier(0.4,0,0.2,1), box-shadow 0.2s cubic-bezier(0.4,0,0.2,1);
}
.neo-card:hover {
transform: translate(-3px, -3px);
box-shadow: var(--neo-xl);
}
.neo-btn {
border: 2px solid var(--border);
box-shadow: var(--neo);
font-weight: 700;
font-family: var(--font-body);
text-transform: uppercase;
letter-spacing: 0.04em;
padding: 0.75rem 1.5rem;
transition: transform 0.12s cubic-bezier(0.4,0,0.2,1), box-shadow 0.12s cubic-bezier(0.4,0,0.2,1);
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
}
.neo-btn:hover {
transform: translate(-2px, -2px);
box-shadow: var(--neo-lg);
}
.neo-btn:active {
transform: translate(3px, 3px);
box-shadow: 0 0 0 0 var(--shadow-color);
}
.neo-btn:disabled {
opacity: 0.5;
cursor: not-allowed;
transform: none !important;
box-shadow: var(--neo-xs) !important;
}
.neo-badge {
border: 2px solid var(--border);
font-weight: 700;
font-size: 0.7rem;
padding: 3px 10px;
text-transform: uppercase;
letter-spacing: 0.06em;
display: inline-flex;
align-items: center;
gap: 4px;
}
.neo-outline-text {
color: transparent;
-webkit-text-stroke: 2px var(--border);
font-family: var(--font-display);
font-weight: 800;
}
.neo-terminal {
font-family: var(--font-mono);
font-size: 0.75rem;
letter-spacing: 0.1em;
text-transform: uppercase;
padding: 0.4rem 0.8rem;
background: var(--foreground);
color: var(--accent);
border: 2px solid var(--border);
}
@keyframes marquee {
0% { transform: translateX(0%); }
100% { transform: translateX(-50%); }
}
.animate-marquee { animation: marquee 25s linear infinite; }
@keyframes float {
0%, 100% { transform: translateY(0px); }
50% { transform: translateY(-8px); }
}
.animate-float { animation: float 3s ease-in-out infinite; }
@keyframes wiggle {
0%, 100% { transform: rotate(0deg); }
25% { transform: rotate(-2deg); }
75% { transform: rotate(2deg); }
}
.hover\:animate-wiggle:hover { animation: wiggle 0.3s ease-in-out; }
.neo-tilt-1 { transform: rotate(-0.8deg); }
.neo-tilt-2 { transform: rotate(0.6deg); }
.neo-tilt-3 { transform: rotate(-0.4deg); }
}
/* Scrollbar */
::-webkit-scrollbar { width: 10px; }
::-webkit-scrollbar-track { background: var(--muted); border-left: 2px solid var(--border); }
::-webkit-scrollbar-thumb { background: var(--primary); border: 2px solid var(--border); }
::-webkit-scrollbar-thumb:hover { background: var(--secondary); }
/* Selection */
::selection { background: var(--primary); color: #000; }