650 lines
22 KiB
CSS
650 lines
22 KiB
CSS
@import 'tailwindcss';
|
||
@import 'tw-animate-css';
|
||
|
||
@custom-variant dark (&:is(.dark *));
|
||
|
||
/* ╔══════════════════════════════════════════════════════════════════════════╗
|
||
║ KŌDŌ DESIGN SYSTEM v3.0 — "The Path of Sound" ║
|
||
║ VEZA × TALAS — Manga × Graffiti × Nature × Gaming × Linux ║
|
||
╚══════════════════════════════════════════════════════════════════════════╝ */
|
||
|
||
:root {
|
||
/* ═══════════════════════════════════════════════════════════════════════════
|
||
CORE PALETTE — Light Mode
|
||
═══════════════════════════════════════════════════════════════════════════ */
|
||
|
||
--background: oklch(0.985 0 0);
|
||
--foreground: oklch(0.145 0.005 265);
|
||
|
||
--card: oklch(1 0 0);
|
||
--card-foreground: oklch(0.145 0.005 265);
|
||
|
||
--popover: oklch(1 0 0);
|
||
--popover-foreground: oklch(0.145 0.005 265);
|
||
|
||
/* Primary: Neon Cyan — Tech, Flow, Future */
|
||
--primary: oklch(0.75 0.18 195);
|
||
--primary-foreground: oklch(0.13 0.02 265);
|
||
|
||
/* Secondary: Hot Magenta — Street, Passion, Edge */
|
||
--secondary: oklch(0.65 0.25 330);
|
||
--secondary-foreground: oklch(0.98 0 0);
|
||
|
||
--muted: oklch(0.96 0.005 265);
|
||
--muted-foreground: oklch(0.45 0.015 265);
|
||
|
||
--accent: oklch(0.95 0.01 265);
|
||
--accent-foreground: oklch(0.20 0.01 265);
|
||
|
||
/* Semantic Colors */
|
||
--destructive: oklch(0.60 0.22 25);
|
||
--destructive-foreground: oklch(0.98 0 0);
|
||
|
||
--success: oklch(0.72 0.19 145);
|
||
--success-foreground: oklch(0.13 0.02 145);
|
||
|
||
--warning: oklch(0.80 0.16 75);
|
||
--warning-foreground: oklch(0.20 0.05 75);
|
||
|
||
--info: oklch(0.70 0.15 230);
|
||
--info-foreground: oklch(0.13 0.02 230);
|
||
|
||
--border: oklch(0.90 0.005 265);
|
||
--input: oklch(0.90 0.005 265);
|
||
--ring: oklch(0.75 0.18 195);
|
||
|
||
/* Charts */
|
||
--chart-1: oklch(0.75 0.18 195);
|
||
--chart-2: oklch(0.65 0.25 330);
|
||
--chart-3: oklch(0.72 0.19 145);
|
||
--chart-4: oklch(0.70 0.20 290);
|
||
--chart-5: oklch(0.80 0.16 75);
|
||
|
||
--radius: 0.5rem;
|
||
|
||
/* Sidebar */
|
||
--sidebar: oklch(0.98 0.003 265);
|
||
--sidebar-foreground: oklch(0.145 0.005 265);
|
||
--sidebar-primary: oklch(0.75 0.18 195);
|
||
--sidebar-primary-foreground: oklch(0.13 0.02 265);
|
||
--sidebar-accent: oklch(0.94 0.01 265);
|
||
--sidebar-accent-foreground: oklch(0.20 0.01 265);
|
||
--sidebar-border: oklch(0.90 0.005 265);
|
||
--sidebar-ring: oklch(0.75 0.18 195);
|
||
|
||
/* ═══════════════════════════════════════════════════════════════════════════
|
||
KŌDŌ EXTENDED PALETTE — "Spectre Urbain"
|
||
═══════════════════════════════════════════════════════════════════════════ */
|
||
|
||
/* Void Scale */
|
||
--void-0: oklch(0.985 0 0);
|
||
--void-50: oklch(0.97 0.003 265);
|
||
--void-100: oklch(0.94 0.005 265);
|
||
--void-200: oklch(0.88 0.008 265);
|
||
--void-300: oklch(0.78 0.01 265);
|
||
--void-400: oklch(0.62 0.015 265);
|
||
--void-500: oklch(0.50 0.02 265);
|
||
--void-600: oklch(0.40 0.025 265);
|
||
--void-700: oklch(0.30 0.02 265);
|
||
--void-800: oklch(0.22 0.015 265);
|
||
--void-900: oklch(0.15 0.01 265);
|
||
--void-950: oklch(0.10 0.005 265);
|
||
|
||
/* Neon Cyan Scale */
|
||
--cyan-50: oklch(0.97 0.04 195);
|
||
--cyan-100: oklch(0.93 0.08 195);
|
||
--cyan-200: oklch(0.88 0.12 195);
|
||
--cyan-300: oklch(0.82 0.15 195);
|
||
--cyan-400: oklch(0.78 0.17 195);
|
||
--cyan-500: oklch(0.75 0.18 195);
|
||
--cyan-600: oklch(0.65 0.16 195);
|
||
--cyan-700: oklch(0.55 0.14 195);
|
||
--cyan-800: oklch(0.45 0.12 195);
|
||
--cyan-900: oklch(0.35 0.10 195);
|
||
|
||
/* Hot Magenta Scale */
|
||
--magenta-50: oklch(0.97 0.05 330);
|
||
--magenta-100: oklch(0.93 0.10 330);
|
||
--magenta-200: oklch(0.85 0.16 330);
|
||
--magenta-300: oklch(0.78 0.20 330);
|
||
--magenta-400: oklch(0.70 0.23 330);
|
||
--magenta-500: oklch(0.65 0.25 330);
|
||
--magenta-600: oklch(0.55 0.22 330);
|
||
--magenta-700: oklch(0.45 0.18 330);
|
||
--magenta-800: oklch(0.35 0.14 330);
|
||
--magenta-900: oklch(0.28 0.10 330);
|
||
|
||
/* Acid Lime Scale */
|
||
--lime-50: oklch(0.97 0.05 145);
|
||
--lime-100: oklch(0.94 0.10 145);
|
||
--lime-200: oklch(0.88 0.14 145);
|
||
--lime-300: oklch(0.82 0.17 145);
|
||
--lime-400: oklch(0.77 0.18 145);
|
||
--lime-500: oklch(0.72 0.19 145);
|
||
--lime-600: oklch(0.62 0.17 145);
|
||
--lime-700: oklch(0.52 0.14 145);
|
||
--lime-800: oklch(0.42 0.11 145);
|
||
--lime-900: oklch(0.32 0.08 145);
|
||
|
||
/* Gaming Colors */
|
||
--xp-gold: oklch(0.85 0.16 85);
|
||
--hp-red: oklch(0.60 0.22 25);
|
||
--mp-blue: oklch(0.60 0.18 250);
|
||
--shield-purple: oklch(0.55 0.22 300);
|
||
|
||
/* Nature Tones */
|
||
--moss: oklch(0.45 0.10 145);
|
||
--moss-light: oklch(0.55 0.12 145);
|
||
--bark: oklch(0.35 0.05 55);
|
||
--leaf: oklch(0.62 0.15 140);
|
||
|
||
/* Manga Spectrum */
|
||
--sakura: oklch(0.85 0.10 350);
|
||
--yurei: oklch(0.60 0.15 290);
|
||
--shonen: oklch(0.60 0.20 30);
|
||
|
||
/* Terminal */
|
||
--terminal-green: oklch(0.75 0.20 145);
|
||
--terminal-amber: oklch(0.80 0.15 80);
|
||
--matrix: oklch(0.15 0.05 145);
|
||
|
||
/* Gradients */
|
||
--gradient-neon: linear-gradient(135deg, var(--cyan-500), var(--magenta-500), var(--lime-500));
|
||
--gradient-cyber: linear-gradient(135deg, var(--cyan-400), var(--magenta-500));
|
||
--gradient-sunset: linear-gradient(135deg, oklch(0.65 0.20 35), var(--magenta-500));
|
||
--gradient-forest: linear-gradient(135deg, var(--moss), var(--leaf), var(--lime-500));
|
||
--gradient-manga: linear-gradient(135deg, var(--sakura), var(--yurei));
|
||
--gradient-terminal: linear-gradient(180deg, var(--matrix), var(--void-950));
|
||
--gradient-gaming: linear-gradient(135deg, var(--shonen), var(--xp-gold));
|
||
|
||
/* Glows */
|
||
--glow-cyan: 0 0 20px oklch(0.75 0.18 195 / 0.4);
|
||
--glow-magenta: 0 0 20px oklch(0.65 0.25 330 / 0.4);
|
||
--glow-lime: 0 0 20px oklch(0.72 0.19 145 / 0.4);
|
||
--glow-gold: 0 0 20px oklch(0.85 0.16 85 / 0.4);
|
||
--glow-terminal: 0 0 10px oklch(0.75 0.20 145 / 0.3);
|
||
|
||
/* Glass */
|
||
--glass-bg: oklch(1 0 0 / 0.8);
|
||
--glass-border: oklch(0 0 0 / 0.05);
|
||
--glass-blur: 16px;
|
||
|
||
/* Animation Easings */
|
||
--ease-out: cubic-bezier(0.33, 1, 0.68, 1);
|
||
--ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
|
||
--ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
|
||
--ease-spring: cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
||
|
||
--duration-instant: 100ms;
|
||
--duration-fast: 150ms;
|
||
--duration-normal: 250ms;
|
||
--duration-slow: 400ms;
|
||
--duration-slower: 600ms;
|
||
|
||
/* Clip Paths — Manga Style */
|
||
--clip-manga: polygon(0 0, calc(100% - 12px) 0, 100% 12px, 100% 100%, 12px 100%, 0 calc(100% - 12px));
|
||
--clip-manga-lg: polygon(0 0, calc(100% - 20px) 0, 100% 20px, 100% 100%, 20px 100%, 0 calc(100% - 20px));
|
||
--clip-hex: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);
|
||
--clip-badge: polygon(0 10%, 10% 0, 90% 0, 100% 10%, 100% 90%, 90% 100%, 10% 100%, 0 90%);
|
||
--clip-slant: polygon(0 0, 100% 0, 100% calc(100% - 8px), 0 100%);
|
||
}
|
||
|
||
/* ═══════════════════════════════════════════════════════════════════════════
|
||
DARK MODE — The Void
|
||
═══════════════════════════════════════════════════════════════════════════ */
|
||
.dark {
|
||
--background: oklch(0.08 0.012 265);
|
||
--foreground: oklch(0.93 0.005 265);
|
||
|
||
--card: oklch(0.11 0.014 265);
|
||
--card-foreground: oklch(0.93 0.005 265);
|
||
|
||
--popover: oklch(0.11 0.014 265);
|
||
--popover-foreground: oklch(0.93 0.005 265);
|
||
|
||
/* Brighter neon in dark mode */
|
||
--primary: oklch(0.82 0.17 195);
|
||
--primary-foreground: oklch(0.08 0.01 265);
|
||
|
||
--secondary: oklch(0.72 0.24 330);
|
||
--secondary-foreground: oklch(0.08 0.01 265);
|
||
|
||
--muted: oklch(0.18 0.015 265);
|
||
--muted-foreground: oklch(0.62 0.01 265);
|
||
|
||
--accent: oklch(0.16 0.014 265);
|
||
--accent-foreground: oklch(0.93 0.005 265);
|
||
|
||
--destructive: oklch(0.58 0.22 25);
|
||
--destructive-foreground: oklch(0.98 0 0);
|
||
|
||
--success: oklch(0.78 0.19 145);
|
||
--success-foreground: oklch(0.08 0.01 145);
|
||
|
||
--warning: oklch(0.84 0.16 75);
|
||
--warning-foreground: oklch(0.12 0.05 75);
|
||
|
||
--info: oklch(0.74 0.15 230);
|
||
--info-foreground: oklch(0.08 0.01 230);
|
||
|
||
--border: oklch(0.20 0.018 265);
|
||
--input: oklch(0.16 0.014 265);
|
||
--ring: oklch(0.82 0.17 195);
|
||
|
||
/* Charts */
|
||
--chart-1: oklch(0.82 0.17 195);
|
||
--chart-2: oklch(0.72 0.24 330);
|
||
--chart-3: oklch(0.78 0.19 145);
|
||
--chart-4: oklch(0.74 0.20 290);
|
||
--chart-5: oklch(0.84 0.16 75);
|
||
|
||
/* Sidebar */
|
||
--sidebar: oklch(0.10 0.012 265);
|
||
--sidebar-foreground: oklch(0.93 0.005 265);
|
||
--sidebar-primary: oklch(0.82 0.17 195);
|
||
--sidebar-primary-foreground: oklch(0.08 0.01 265);
|
||
--sidebar-accent: oklch(0.16 0.014 265);
|
||
--sidebar-accent-foreground: oklch(0.93 0.005 265);
|
||
--sidebar-border: oklch(0.20 0.018 265);
|
||
--sidebar-ring: oklch(0.82 0.17 195);
|
||
|
||
/* Void Scale (Inverted for dark) */
|
||
--void-0: oklch(0.08 0.012 265);
|
||
--void-50: oklch(0.10 0.012 265);
|
||
--void-100: oklch(0.13 0.014 265);
|
||
--void-200: oklch(0.18 0.016 265);
|
||
--void-300: oklch(0.26 0.018 265);
|
||
--void-400: oklch(0.36 0.02 265);
|
||
--void-500: oklch(0.50 0.02 265);
|
||
--void-600: oklch(0.64 0.015 265);
|
||
--void-700: oklch(0.76 0.01 265);
|
||
--void-800: oklch(0.86 0.005 265);
|
||
--void-900: oklch(0.93 0.003 265);
|
||
--void-950: oklch(0.98 0 0);
|
||
|
||
/* Brighter glows in dark */
|
||
--glow-cyan: 0 0 25px oklch(0.82 0.17 195 / 0.5);
|
||
--glow-magenta: 0 0 25px oklch(0.72 0.24 330 / 0.5);
|
||
--glow-lime: 0 0 25px oklch(0.78 0.19 145 / 0.5);
|
||
--glow-gold: 0 0 25px oklch(0.85 0.16 85 / 0.5);
|
||
--glow-terminal: 0 0 15px oklch(0.78 0.20 145 / 0.4);
|
||
|
||
/* Glass */
|
||
--glass-bg: oklch(0.11 0.014 265 / 0.85);
|
||
--glass-border: oklch(1 0 0 / 0.05);
|
||
}
|
||
|
||
@theme inline {
|
||
/* Typography — KŌDŌ Font Stack */
|
||
--font-sans: 'Rajdhani', 'Noto Sans JP', system-ui, sans-serif;
|
||
--font-mono: 'JetBrains Mono', 'Consolas', monospace;
|
||
--font-display: 'Orbitron', 'Bebas Neue', sans-serif;
|
||
--font-jp: 'Noto Sans JP', sans-serif;
|
||
|
||
/* Core Design Tokens */
|
||
--color-background: var(--background);
|
||
--color-foreground: var(--foreground);
|
||
--color-card: var(--card);
|
||
--color-card-foreground: var(--card-foreground);
|
||
--color-popover: var(--popover);
|
||
--color-popover-foreground: var(--popover-foreground);
|
||
--color-primary: var(--primary);
|
||
--color-primary-foreground: var(--primary-foreground);
|
||
--color-secondary: var(--secondary);
|
||
--color-secondary-foreground: var(--secondary-foreground);
|
||
--color-muted: var(--muted);
|
||
--color-muted-foreground: var(--muted-foreground);
|
||
--color-accent: var(--accent);
|
||
--color-accent-foreground: var(--accent-foreground);
|
||
--color-destructive: var(--destructive);
|
||
--color-destructive-foreground: var(--destructive-foreground);
|
||
--color-border: var(--border);
|
||
--color-input: var(--input);
|
||
--color-ring: var(--ring);
|
||
|
||
/* Extended Semantic Colors */
|
||
--color-success: var(--success);
|
||
--color-success-foreground: var(--success-foreground);
|
||
--color-warning: var(--warning);
|
||
--color-warning-foreground: var(--warning-foreground);
|
||
--color-info: var(--info);
|
||
--color-info-foreground: var(--info-foreground);
|
||
|
||
/* Neon Colors */
|
||
--color-cyan: var(--cyan-500);
|
||
--color-magenta: var(--magenta-500);
|
||
--color-lime: var(--lime-500);
|
||
--color-gold: var(--xp-gold);
|
||
|
||
/* Chart Colors */
|
||
--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-5: var(--chart-5);
|
||
|
||
/* Radius */
|
||
--radius-sm: calc(var(--radius) - 4px);
|
||
--radius-md: calc(var(--radius) - 2px);
|
||
--radius-lg: var(--radius);
|
||
--radius-xl: calc(var(--radius) + 4px);
|
||
--radius-2xl: calc(var(--radius) + 8px);
|
||
|
||
/* Sidebar */
|
||
--color-sidebar: var(--sidebar);
|
||
--color-sidebar-foreground: var(--sidebar-foreground);
|
||
--color-sidebar-primary: var(--sidebar-primary);
|
||
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
||
--color-sidebar-accent: var(--sidebar-accent);
|
||
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
||
--color-sidebar-border: var(--sidebar-border);
|
||
--color-sidebar-ring: var(--sidebar-ring);
|
||
}
|
||
|
||
/* ═══════════════════════════════════════════════════════════════════════════
|
||
BASE STYLES
|
||
═══════════════════════════════════════════════════════════════════════════ */
|
||
@layer base {
|
||
* {
|
||
@apply border-border outline-ring/50;
|
||
}
|
||
|
||
html {
|
||
scroll-behavior: smooth;
|
||
-webkit-font-smoothing: antialiased;
|
||
-moz-osx-font-smoothing: grayscale;
|
||
}
|
||
|
||
body {
|
||
@apply bg-background text-foreground;
|
||
font-feature-settings: "cv02", "cv03", "cv04", "cv11";
|
||
}
|
||
|
||
/* Noise texture overlay */
|
||
body::before {
|
||
content: '';
|
||
position: fixed;
|
||
inset: 0;
|
||
background:
|
||
url("data:image/svg+xml,%3Csvg viewBox='0 0 400 400' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
|
||
opacity: 0.015;
|
||
pointer-events: none;
|
||
z-index: 9998;
|
||
}
|
||
|
||
::selection {
|
||
background: var(--primary);
|
||
color: var(--primary-foreground);
|
||
}
|
||
|
||
/* Custom Scrollbar */
|
||
::-webkit-scrollbar {
|
||
width: 8px;
|
||
height: 8px;
|
||
}
|
||
|
||
::-webkit-scrollbar-track {
|
||
background: var(--void-100);
|
||
}
|
||
|
||
::-webkit-scrollbar-thumb {
|
||
background: linear-gradient(180deg, var(--cyan-500), var(--magenta-500));
|
||
border-radius: 4px;
|
||
}
|
||
|
||
::-webkit-scrollbar-thumb:hover {
|
||
background: var(--cyan-400);
|
||
}
|
||
|
||
/* Typography */
|
||
h1, h2, h3, h4, h5, h6 {
|
||
@apply font-sans font-semibold tracking-tight text-foreground;
|
||
text-wrap: balance;
|
||
}
|
||
|
||
h1 { @apply text-4xl md:text-5xl; }
|
||
h2 { @apply text-3xl md:text-4xl; }
|
||
h3 { @apply text-2xl md:text-3xl; }
|
||
h4 { @apply text-xl md:text-2xl; }
|
||
h5 { @apply text-lg md:text-xl; }
|
||
h6 { @apply text-base md:text-lg; }
|
||
|
||
p {
|
||
@apply text-muted-foreground leading-relaxed;
|
||
text-wrap: pretty;
|
||
}
|
||
|
||
a:not([class]) {
|
||
@apply text-primary transition-colors;
|
||
}
|
||
|
||
a:not([class]):hover {
|
||
@apply text-primary/80;
|
||
}
|
||
|
||
code {
|
||
@apply font-mono text-sm bg-muted px-1.5 py-0.5 rounded;
|
||
}
|
||
|
||
pre {
|
||
@apply font-mono text-sm bg-muted p-4 rounded-lg overflow-x-auto;
|
||
}
|
||
}
|
||
|
||
/* ═══════════════════════════════════════════════════════════════════════════
|
||
KŌDŌ UTILITY CLASSES
|
||
═══════════════════════════════════════════════════════════════════════════ */
|
||
@layer utilities {
|
||
/* Neon Glows */
|
||
.glow-cyan { box-shadow: var(--glow-cyan); }
|
||
.glow-magenta { box-shadow: var(--glow-magenta); }
|
||
.glow-lime { box-shadow: var(--glow-lime); }
|
||
.glow-gold { box-shadow: var(--glow-gold); }
|
||
.glow-terminal { box-shadow: var(--glow-terminal); }
|
||
|
||
/* Text Gradients */
|
||
.text-gradient-neon {
|
||
@apply bg-clip-text text-transparent;
|
||
background-image: var(--gradient-neon);
|
||
}
|
||
|
||
.text-gradient-cyber {
|
||
@apply bg-clip-text text-transparent;
|
||
background-image: var(--gradient-cyber);
|
||
}
|
||
|
||
.text-gradient-sunset {
|
||
@apply bg-clip-text text-transparent;
|
||
background-image: var(--gradient-sunset);
|
||
}
|
||
|
||
.text-gradient-forest {
|
||
@apply bg-clip-text text-transparent;
|
||
background-image: var(--gradient-forest);
|
||
}
|
||
|
||
.text-gradient-manga {
|
||
@apply bg-clip-text text-transparent;
|
||
background-image: var(--gradient-manga);
|
||
}
|
||
|
||
/* Glass Effect */
|
||
.glass {
|
||
background: var(--glass-bg);
|
||
backdrop-filter: blur(var(--glass-blur));
|
||
border: 1px solid var(--glass-border);
|
||
}
|
||
|
||
/* Noise Texture */
|
||
.noise {
|
||
position: relative;
|
||
}
|
||
|
||
.noise::before {
|
||
content: "";
|
||
position: absolute;
|
||
inset: 0;
|
||
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.7' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E");
|
||
pointer-events: none;
|
||
opacity: 0.5;
|
||
mix-blend-mode: overlay;
|
||
border-radius: inherit;
|
||
}
|
||
|
||
/* Scanlines */
|
||
.scanlines::after {
|
||
content: '';
|
||
position: absolute;
|
||
inset: 0;
|
||
background: repeating-linear-gradient(
|
||
0deg,
|
||
transparent,
|
||
transparent 2px,
|
||
oklch(0 0 0 / 0.03) 2px,
|
||
oklch(0 0 0 / 0.03) 4px
|
||
);
|
||
pointer-events: none;
|
||
border-radius: inherit;
|
||
}
|
||
|
||
/* Manga Clip Paths */
|
||
.clip-manga { clip-path: var(--clip-manga); }
|
||
.clip-manga-lg { clip-path: var(--clip-manga-lg); }
|
||
.clip-hex { clip-path: var(--clip-hex); }
|
||
.clip-badge { clip-path: var(--clip-badge); }
|
||
.clip-slant { clip-path: var(--clip-slant); }
|
||
|
||
/* Font Utilities */
|
||
.font-display { font-family: var(--font-display); }
|
||
.font-jp { font-family: var(--font-jp); }
|
||
|
||
/* Animation Utilities */
|
||
.animate-glow-pulse { animation: glow-pulse 2s ease-in-out infinite; }
|
||
.animate-float { animation: float 6s ease-in-out infinite; }
|
||
.animate-slide-up { animation: slide-up 0.5s var(--ease-out); }
|
||
.animate-fade-in { animation: fade-in 0.4s var(--ease-out); }
|
||
.animate-spin-slow { animation: spin-slow 10s linear infinite; }
|
||
.animate-achievement { animation: achievement-slide 0.5s var(--ease-spring); }
|
||
.animate-eq { animation: eq-bounce 0.5s ease-in-out infinite; }
|
||
|
||
/* Hover Effects */
|
||
.hover-lift {
|
||
@apply transition-transform duration-200;
|
||
}
|
||
.hover-lift:hover {
|
||
@apply -translate-y-1;
|
||
}
|
||
|
||
.hover-glow-cyan { @apply transition-shadow duration-200; }
|
||
.hover-glow-cyan:hover { box-shadow: var(--glow-cyan); }
|
||
|
||
.hover-glow-magenta { @apply transition-shadow duration-200; }
|
||
.hover-glow-magenta:hover { box-shadow: var(--glow-magenta); }
|
||
|
||
.hover-glow-lime { @apply transition-shadow duration-200; }
|
||
.hover-glow-lime:hover { box-shadow: var(--glow-lime); }
|
||
|
||
.hover-glow-gold { @apply transition-shadow duration-200; }
|
||
.hover-glow-gold:hover { box-shadow: var(--glow-gold); }
|
||
|
||
/* Gaming specific */
|
||
.text-xp { color: var(--xp-gold); }
|
||
.text-hp { color: var(--hp-red); }
|
||
.text-mp { color: var(--mp-blue); }
|
||
.text-terminal { color: var(--terminal-green); text-shadow: var(--glow-terminal); }
|
||
|
||
.bg-terminal { background: var(--gradient-terminal); }
|
||
.bg-gaming { background: var(--gradient-gaming); }
|
||
.bg-manga { background: var(--gradient-manga); }
|
||
.bg-forest { background: var(--gradient-forest); }
|
||
|
||
/* Border neon */
|
||
.border-neon-cyan { border-color: var(--cyan-500); }
|
||
.border-neon-magenta { border-color: var(--magenta-500); }
|
||
.border-neon-lime { border-color: var(--lime-500); }
|
||
.border-neon-gold { border-color: var(--xp-gold); }
|
||
}
|
||
|
||
/* ═══════════════════════════════════════════════════════════════════════════
|
||
KEYFRAME ANIMATIONS
|
||
═══════════════════════════════════════════════════════════════════════════ */
|
||
@keyframes glow-pulse {
|
||
0%, 100% { opacity: 1; filter: brightness(1); }
|
||
50% { opacity: 0.85; filter: brightness(1.15); }
|
||
}
|
||
|
||
@keyframes float {
|
||
0%, 100% { transform: translateY(0); }
|
||
50% { transform: translateY(-10px); }
|
||
}
|
||
|
||
@keyframes slide-up {
|
||
from { opacity: 0; transform: translateY(20px); }
|
||
to { opacity: 1; transform: translateY(0); }
|
||
}
|
||
|
||
@keyframes fade-in {
|
||
from { opacity: 0; }
|
||
to { opacity: 1; }
|
||
}
|
||
|
||
@keyframes shimmer {
|
||
0% { background-position: 200% 0; }
|
||
100% { background-position: -200% 0; }
|
||
}
|
||
|
||
@keyframes spin-slow {
|
||
to { transform: rotate(360deg); }
|
||
}
|
||
|
||
@keyframes pulse-ring {
|
||
0% { transform: scale(0.8); opacity: 1; }
|
||
100% { transform: scale(1.5); opacity: 0; }
|
||
}
|
||
|
||
@keyframes eq-bounce {
|
||
0%, 100% { transform: scaleY(1); }
|
||
50% { transform: scaleY(0.3); }
|
||
}
|
||
|
||
@keyframes typing {
|
||
0%, 60%, 100% { transform: translateY(0); }
|
||
30% { transform: translateY(-4px); }
|
||
}
|
||
|
||
@keyframes achievement-slide {
|
||
from { transform: translateX(100%); opacity: 0; }
|
||
to { transform: translateX(0); opacity: 1; }
|
||
}
|
||
|
||
@keyframes graffiti-shake {
|
||
0%, 100% { transform: rotate(0deg); }
|
||
25% { transform: rotate(-2deg); }
|
||
75% { transform: rotate(2deg); }
|
||
}
|
||
|
||
@keyframes terminal-blink {
|
||
0%, 50% { opacity: 1; }
|
||
51%, 100% { opacity: 0; }
|
||
}
|
||
|
||
@keyframes neon-flicker {
|
||
0%, 19%, 21%, 23%, 25%, 54%, 56%, 100% {
|
||
opacity: 1;
|
||
text-shadow: var(--glow-cyan);
|
||
}
|
||
20%, 24%, 55% {
|
||
opacity: 0.8;
|
||
text-shadow: none;
|
||
}
|
||
}
|
||
|
||
@keyframes bar-fill {
|
||
from { width: 0; }
|
||
}
|
||
|
||
@keyframes level-up {
|
||
0% { transform: scale(1); }
|
||
50% { transform: scale(1.2); filter: brightness(1.5); }
|
||
100% { transform: scale(1); }
|
||
}
|