veza/apps/web/desy/app/globals.css
2026-01-22 17:23:11 +01:00

650 lines
22 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@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); }
}