| @import "tailwindcss"; |
|
|
| |
| |
| |
| |
|
|
| :root { |
| |
| --background: #f5f5f7; |
| --foreground: #1d1d1f; |
|
|
| |
| --glass-blur: 24px; |
| --glass-saturation: 180%; |
| --glass-brightness: 105%; |
|
|
| |
| --glass-bg: rgba(255, 255, 255, 0.72); |
| --glass-bg-elevated: rgba(255, 255, 255, 0.85); |
| --glass-bg-muted: rgba(255, 255, 255, 0.45); |
| --glass-bg-strong: rgba(255, 255, 255, 0.92); |
|
|
| |
| --glass-border: rgba(255, 255, 255, 0.5); |
| --glass-border-subtle: rgba(255, 255, 255, 0.3); |
| --glass-border-strong: rgba(255, 255, 255, 0.7); |
|
|
| |
| --specular-light: rgba(255, 255, 255, 0.8); |
| --specular-medium: rgba(255, 255, 255, 0.5); |
| --specular-subtle: rgba(255, 255, 255, 0.25); |
|
|
| |
| --inner-shadow-light: inset 0 1px 1px rgba(255, 255, 255, 0.6); |
| --inner-shadow-dark: inset 0 -1px 1px rgba(0, 0, 0, 0.05); |
|
|
| |
| |
| --critical-bg: rgba(255, 59, 48, 0.12); |
| --critical-bg-glass: rgba(255, 59, 48, 0.08); |
| --critical-border: rgba(255, 59, 48, 0.3); |
| --critical-text: #c41e3a; |
| --critical-accent: #ff3b30; |
| --critical-glow: rgba(255, 59, 48, 0.4); |
|
|
| |
| --warning-bg: rgba(255, 159, 10, 0.12); |
| --warning-bg-glass: rgba(255, 159, 10, 0.08); |
| --warning-border: rgba(255, 159, 10, 0.3); |
| --warning-text: #996300; |
| --warning-accent: #ff9f0a; |
| --warning-glow: rgba(255, 159, 10, 0.4); |
|
|
| |
| --suggestion-bg: rgba(0, 122, 255, 0.12); |
| --suggestion-bg-glass: rgba(0, 122, 255, 0.08); |
| --suggestion-border: rgba(0, 122, 255, 0.3); |
| --suggestion-text: #0066cc; |
| --suggestion-accent: #007aff; |
| --suggestion-glow: rgba(0, 122, 255, 0.4); |
|
|
| |
| --success-bg: rgba(52, 199, 89, 0.12); |
| --success-bg-glass: rgba(52, 199, 89, 0.08); |
| --success-border: rgba(52, 199, 89, 0.3); |
| --success-text: #248a3d; |
| --success-accent: #34c759; |
| --success-glow: rgba(52, 199, 89, 0.4); |
|
|
| |
| --surface-base: linear-gradient(135deg, #f5f5f7 0%, #e8e8ed 50%, #f0f0f5 100%); |
| --surface-elevated: rgba(255, 255, 255, 0.9); |
| --surface-canvas: rgba(255, 255, 255, 0.6); |
|
|
| |
| --ambient-blue: rgba(59, 130, 246, 0.15); |
| --ambient-purple: rgba(139, 92, 246, 0.12); |
| --ambient-pink: rgba(236, 72, 153, 0.1); |
| --ambient-cyan: rgba(34, 211, 238, 0.1); |
|
|
| |
| --font-sans: -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; |
| --font-mono: "SF Mono", ui-monospace, Menlo, Monaco, "Cascadia Mono", "Consolas", monospace; |
|
|
| |
| --shadow-glass-sm: 0 2px 8px rgba(0, 0, 0, 0.04), 0 1px 2px rgba(0, 0, 0, 0.06); |
| --shadow-glass-md: 0 4px 16px rgba(0, 0, 0, 0.06), 0 2px 4px rgba(0, 0, 0, 0.04); |
| --shadow-glass-lg: 0 8px 32px rgba(0, 0, 0, 0.08), 0 4px 8px rgba(0, 0, 0, 0.04); |
| --shadow-glass-xl: 0 16px 48px rgba(0, 0, 0, 0.1), 0 8px 16px rgba(0, 0, 0, 0.06); |
|
|
| |
| --duration-fast: 150ms; |
| --duration-normal: 250ms; |
| --duration-slow: 400ms; |
| --duration-slower: 600ms; |
|
|
| --ease-smooth: cubic-bezier(0.4, 0, 0.2, 1); |
| --ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1); |
| --ease-out: cubic-bezier(0, 0, 0.2, 1); |
|
|
| |
| --spring-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55); |
| --spring-smooth: cubic-bezier(0.25, 0.46, 0.45, 0.94); |
|
|
| |
| --radius-sm: 8px; |
| --radius-md: 12px; |
| --radius-lg: 16px; |
| --radius-xl: 20px; |
| --radius-2xl: 24px; |
| --radius-3xl: 32px; |
| --radius-full: 9999px; |
|
|
| |
| --spacing-xs: 4px; |
| --spacing-sm: 8px; |
| --spacing-md: 12px; |
| --spacing-lg: 16px; |
| --spacing-xl: 24px; |
| --spacing-2xl: 32px; |
| --spacing-3xl: 48px; |
| } |
|
|
| |
| |
| .dark { |
| --background: #0a0a0c; |
| --foreground: #f5f5f7; |
|
|
| |
| --glass-bg: rgba(30, 30, 35, 0.75); |
| --glass-bg-elevated: rgba(45, 45, 50, 0.85); |
| --glass-bg-muted: rgba(25, 25, 30, 0.6); |
| --glass-bg-strong: rgba(40, 40, 45, 0.92); |
|
|
| |
| --glass-border: rgba(255, 255, 255, 0.12); |
| --glass-border-subtle: rgba(255, 255, 255, 0.08); |
| --glass-border-strong: rgba(255, 255, 255, 0.18); |
|
|
| |
| --specular-light: rgba(255, 255, 255, 0.15); |
| --specular-medium: rgba(255, 255, 255, 0.1); |
| --specular-subtle: rgba(255, 255, 255, 0.05); |
|
|
| |
| --inner-shadow-light: inset 0 1px 1px rgba(255, 255, 255, 0.08); |
| --inner-shadow-dark: inset 0 -1px 1px rgba(0, 0, 0, 0.2); |
|
|
| |
| --critical-bg: rgba(255, 69, 58, 0.15); |
| --critical-bg-glass: rgba(255, 69, 58, 0.1); |
| --critical-border: rgba(255, 69, 58, 0.35); |
| --critical-text: #ff6961; |
| --critical-accent: #ff453a; |
|
|
| --warning-bg: rgba(255, 159, 10, 0.15); |
| --warning-bg-glass: rgba(255, 159, 10, 0.1); |
| --warning-border: rgba(255, 159, 10, 0.35); |
| --warning-text: #ffc04d; |
| --warning-accent: #ff9f0a; |
|
|
| --suggestion-bg: rgba(10, 132, 255, 0.15); |
| --suggestion-bg-glass: rgba(10, 132, 255, 0.1); |
| --suggestion-border: rgba(10, 132, 255, 0.35); |
| --suggestion-text: #64b5f6; |
| --suggestion-accent: #0a84ff; |
|
|
| --success-bg: rgba(48, 209, 88, 0.15); |
| --success-bg-glass: rgba(48, 209, 88, 0.1); |
| --success-border: rgba(48, 209, 88, 0.35); |
| --success-text: #6ee7a0; |
| --success-accent: #30d158; |
|
|
| |
| --surface-base: linear-gradient(135deg, #0a0a0c 0%, #121216 50%, #0e0e12 100%); |
| --surface-elevated: rgba(35, 35, 40, 0.9); |
| --surface-canvas: rgba(20, 20, 25, 0.6); |
|
|
| |
| --ambient-blue: rgba(59, 130, 246, 0.1); |
| --ambient-purple: rgba(139, 92, 246, 0.08); |
| --ambient-pink: rgba(236, 72, 153, 0.06); |
| --ambient-cyan: rgba(34, 211, 238, 0.06); |
|
|
| |
| --shadow-glass-sm: 0 2px 8px rgba(0, 0, 0, 0.2), 0 1px 2px rgba(0, 0, 0, 0.3); |
| --shadow-glass-md: 0 4px 16px rgba(0, 0, 0, 0.25), 0 2px 4px rgba(0, 0, 0, 0.2); |
| --shadow-glass-lg: 0 8px 32px rgba(0, 0, 0, 0.3), 0 4px 8px rgba(0, 0, 0, 0.2); |
| --shadow-glass-xl: 0 16px 48px rgba(0, 0, 0, 0.4), 0 8px 16px rgba(0, 0, 0, 0.25); |
| } |
|
|
| |
| .light { |
| --background: #f5f5f7; |
| --foreground: #1d1d1f; |
|
|
| |
| --glass-bg: rgba(255, 255, 255, 0.72); |
| --glass-bg-elevated: rgba(255, 255, 255, 0.85); |
| --glass-bg-muted: rgba(255, 255, 255, 0.45); |
| --glass-bg-strong: rgba(255, 255, 255, 0.92); |
|
|
| |
| --glass-border: rgba(255, 255, 255, 0.5); |
| --glass-border-subtle: rgba(255, 255, 255, 0.3); |
| --glass-border-strong: rgba(255, 255, 255, 0.7); |
|
|
| |
| --specular-light: rgba(255, 255, 255, 0.8); |
| --specular-medium: rgba(255, 255, 255, 0.5); |
| --specular-subtle: rgba(255, 255, 255, 0.25); |
|
|
| |
| --inner-shadow-light: inset 0 1px 1px rgba(255, 255, 255, 0.6); |
| --inner-shadow-dark: inset 0 -1px 1px rgba(0, 0, 0, 0.05); |
|
|
| |
| --critical-bg: rgba(255, 59, 48, 0.12); |
| --critical-bg-glass: rgba(255, 59, 48, 0.08); |
| --critical-border: rgba(255, 59, 48, 0.3); |
| --critical-text: #c41e3a; |
| --critical-accent: #ff3b30; |
| --critical-glow: rgba(255, 59, 48, 0.4); |
|
|
| --warning-bg: rgba(255, 159, 10, 0.12); |
| --warning-bg-glass: rgba(255, 159, 10, 0.08); |
| --warning-border: rgba(255, 159, 10, 0.3); |
| --warning-text: #996300; |
| --warning-accent: #ff9f0a; |
| --warning-glow: rgba(255, 159, 10, 0.4); |
|
|
| --suggestion-bg: rgba(0, 122, 255, 0.12); |
| --suggestion-bg-glass: rgba(0, 122, 255, 0.08); |
| --suggestion-border: rgba(0, 122, 255, 0.3); |
| --suggestion-text: #0066cc; |
| --suggestion-accent: #007aff; |
| --suggestion-glow: rgba(0, 122, 255, 0.4); |
|
|
| --success-bg: rgba(52, 199, 89, 0.12); |
| --success-bg-glass: rgba(52, 199, 89, 0.08); |
| --success-border: rgba(52, 199, 89, 0.3); |
| --success-text: #248a3d; |
| --success-accent: #34c759; |
| --success-glow: rgba(52, 199, 89, 0.4); |
|
|
| |
| --surface-base: linear-gradient(135deg, #f5f5f7 0%, #e8e8ed 50%, #f0f0f5 100%); |
| --surface-elevated: rgba(255, 255, 255, 0.9); |
| --surface-canvas: rgba(255, 255, 255, 0.6); |
|
|
| |
| --ambient-blue: rgba(59, 130, 246, 0.15); |
| --ambient-purple: rgba(139, 92, 246, 0.12); |
| --ambient-pink: rgba(236, 72, 153, 0.1); |
| --ambient-cyan: rgba(34, 211, 238, 0.1); |
|
|
| |
| --shadow-glass-sm: 0 2px 8px rgba(0, 0, 0, 0.04), 0 1px 2px rgba(0, 0, 0, 0.06); |
| --shadow-glass-md: 0 4px 16px rgba(0, 0, 0, 0.06), 0 2px 4px rgba(0, 0, 0, 0.04); |
| --shadow-glass-lg: 0 8px 32px rgba(0, 0, 0, 0.08), 0 4px 8px rgba(0, 0, 0, 0.04); |
| --shadow-glass-xl: 0 16px 48px rgba(0, 0, 0, 0.1), 0 8px 16px rgba(0, 0, 0, 0.06); |
| } |
|
|
| |
| @media (prefers-color-scheme: dark) { |
| :root:not(.light):not(.dark) { |
| --background: #0a0a0c; |
| --foreground: #f5f5f7; |
|
|
| |
| --glass-bg: rgba(30, 30, 35, 0.75); |
| --glass-bg-elevated: rgba(45, 45, 50, 0.85); |
| --glass-bg-muted: rgba(25, 25, 30, 0.6); |
| --glass-bg-strong: rgba(40, 40, 45, 0.92); |
|
|
| |
| --glass-border: rgba(255, 255, 255, 0.12); |
| --glass-border-subtle: rgba(255, 255, 255, 0.08); |
| --glass-border-strong: rgba(255, 255, 255, 0.18); |
|
|
| |
| --specular-light: rgba(255, 255, 255, 0.15); |
| --specular-medium: rgba(255, 255, 255, 0.1); |
| --specular-subtle: rgba(255, 255, 255, 0.05); |
|
|
| |
| --inner-shadow-light: inset 0 1px 1px rgba(255, 255, 255, 0.08); |
| --inner-shadow-dark: inset 0 -1px 1px rgba(0, 0, 0, 0.2); |
|
|
| |
| --critical-bg: rgba(255, 69, 58, 0.15); |
| --critical-bg-glass: rgba(255, 69, 58, 0.1); |
| --critical-border: rgba(255, 69, 58, 0.35); |
| --critical-text: #ff6961; |
| --critical-accent: #ff453a; |
|
|
| --warning-bg: rgba(255, 159, 10, 0.15); |
| --warning-bg-glass: rgba(255, 159, 10, 0.1); |
| --warning-border: rgba(255, 159, 10, 0.35); |
| --warning-text: #ffc04d; |
| --warning-accent: #ff9f0a; |
|
|
| --suggestion-bg: rgba(10, 132, 255, 0.15); |
| --suggestion-bg-glass: rgba(10, 132, 255, 0.1); |
| --suggestion-border: rgba(10, 132, 255, 0.35); |
| --suggestion-text: #64b5f6; |
| --suggestion-accent: #0a84ff; |
|
|
| --success-bg: rgba(48, 209, 88, 0.15); |
| --success-bg-glass: rgba(48, 209, 88, 0.1); |
| --success-border: rgba(48, 209, 88, 0.35); |
| --success-text: #6ee7a0; |
| --success-accent: #30d158; |
|
|
| |
| --surface-base: linear-gradient(135deg, #0a0a0c 0%, #121216 50%, #0e0e12 100%); |
| --surface-elevated: rgba(35, 35, 40, 0.9); |
| --surface-canvas: rgba(20, 20, 25, 0.6); |
|
|
| |
| --ambient-blue: rgba(59, 130, 246, 0.1); |
| --ambient-purple: rgba(139, 92, 246, 0.08); |
| --ambient-pink: rgba(236, 72, 153, 0.06); |
| --ambient-cyan: rgba(34, 211, 238, 0.06); |
|
|
| |
| --shadow-glass-sm: 0 2px 8px rgba(0, 0, 0, 0.2), 0 1px 2px rgba(0, 0, 0, 0.3); |
| --shadow-glass-md: 0 4px 16px rgba(0, 0, 0, 0.25), 0 2px 4px rgba(0, 0, 0, 0.2); |
| --shadow-glass-lg: 0 8px 32px rgba(0, 0, 0, 0.3), 0 4px 8px rgba(0, 0, 0, 0.2); |
| --shadow-glass-xl: 0 16px 48px rgba(0, 0, 0, 0.4), 0 8px 16px rgba(0, 0, 0, 0.25); |
| } |
| } |
|
|
| |
| * { |
| transition: background-color 0.3s ease, border-color 0.3s ease, color 0.3s ease; |
| } |
|
|
| |
| @theme inline { |
| --color-background: var(--background); |
| --color-foreground: var(--foreground); |
| --font-sans: var(--font-sans); |
| --font-mono: var(--font-mono); |
|
|
| |
| --color-glass-bg: var(--glass-bg); |
| --color-glass-border: var(--glass-border); |
|
|
| |
| --color-critical: var(--critical-accent); |
| --color-warning: var(--warning-accent); |
| --color-suggestion: var(--suggestion-accent); |
| --color-success: var(--success-accent); |
| } |
|
|
| |
| |
| |
|
|
| html { |
| scroll-behavior: smooth; |
| } |
|
|
| body { |
| background: var(--background); |
| color: var(--foreground); |
| font-family: var(--font-sans); |
| -webkit-font-smoothing: antialiased; |
| -moz-osx-font-smoothing: grayscale; |
| overflow-x: hidden; |
| } |
|
|
| |
| |
| |
|
|
| |
| .glass { |
| background: var(--glass-bg); |
| backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturation)) brightness(var(--glass-brightness)); |
| -webkit-backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturation)) brightness(var(--glass-brightness)); |
| border: 1px solid var(--glass-border); |
| box-shadow: var(--shadow-glass-md), var(--inner-shadow-light), var(--inner-shadow-dark); |
| } |
|
|
| |
| .glass-elevated { |
| background: var(--glass-bg-elevated); |
| backdrop-filter: blur(32px) saturate(200%) brightness(108%); |
| -webkit-backdrop-filter: blur(32px) saturate(200%) brightness(108%); |
| border: 1px solid var(--glass-border-strong); |
| box-shadow: var(--shadow-glass-lg), var(--inner-shadow-light), var(--inner-shadow-dark); |
| } |
|
|
| |
| .glass-muted { |
| background: var(--glass-bg-muted); |
| backdrop-filter: blur(16px) saturate(150%); |
| -webkit-backdrop-filter: blur(16px) saturate(150%); |
| border: 1px solid var(--glass-border-subtle); |
| box-shadow: var(--shadow-glass-sm); |
| } |
|
|
| |
| .glass-specular { |
| position: relative; |
| } |
|
|
| .glass-specular::before { |
| content: ''; |
| position: absolute; |
| inset: 0; |
| background: linear-gradient( |
| 135deg, |
| var(--specular-light) 0%, |
| var(--specular-medium) 10%, |
| transparent 40% |
| ); |
| border-radius: inherit; |
| pointer-events: none; |
| } |
|
|
| |
| .glass-critical { |
| background: var(--critical-bg-glass); |
| border-color: var(--critical-border); |
| } |
|
|
| .glass-warning { |
| background: var(--warning-bg-glass); |
| border-color: var(--warning-border); |
| } |
|
|
| .glass-suggestion { |
| background: var(--suggestion-bg-glass); |
| border-color: var(--suggestion-border); |
| } |
|
|
| .glass-success { |
| background: var(--success-bg-glass); |
| border-color: var(--success-border); |
| } |
|
|
| |
| |
| |
|
|
| |
| @keyframes shimmer { |
| 0% { |
| background-position: -200% 0; |
| } |
| 100% { |
| background-position: 200% 0; |
| } |
| } |
|
|
| .shimmer { |
| background: linear-gradient( |
| 90deg, |
| transparent 0%, |
| var(--specular-subtle) 50%, |
| transparent 100% |
| ); |
| background-size: 200% 100%; |
| animation: shimmer 2s ease-in-out infinite; |
| } |
|
|
| |
| @keyframes pulse-glow { |
| 0%, 100% { |
| opacity: 1; |
| box-shadow: 0 0 0 0 var(--success-glow); |
| } |
| 50% { |
| opacity: 0.8; |
| box-shadow: 0 0 16px 4px var(--success-glow); |
| } |
| } |
|
|
| .pulse-glow-success { |
| animation: pulse-glow 2s ease-in-out infinite; |
| } |
|
|
| @keyframes pulse-glow-critical { |
| 0%, 100% { |
| opacity: 1; |
| box-shadow: 0 0 0 0 var(--critical-glow); |
| } |
| 50% { |
| opacity: 0.9; |
| box-shadow: 0 0 12px 3px var(--critical-glow); |
| } |
| } |
|
|
| .pulse-glow-critical { |
| animation: pulse-glow-critical 2s ease-in-out infinite; |
| } |
|
|
| @keyframes pulse-glow-warning { |
| 0%, 100% { |
| box-shadow: 0 0 0 0 var(--warning-glow); |
| } |
| 50% { |
| box-shadow: 0 0 10px 2px var(--warning-glow); |
| } |
| } |
|
|
| .pulse-glow-warning { |
| animation: pulse-glow-warning 2.5s ease-in-out infinite; |
| } |
|
|
| |
| @keyframes gradient-flow { |
| 0% { |
| background-position: 0% 50%; |
| } |
| 50% { |
| background-position: 100% 50%; |
| } |
| 100% { |
| background-position: 0% 50%; |
| } |
| } |
|
|
| .gradient-animate { |
| background-size: 200% 200%; |
| animation: gradient-flow 8s ease infinite; |
| } |
|
|
| |
| @keyframes float { |
| 0%, 100% { |
| transform: translateY(0) rotate(0deg); |
| } |
| 33% { |
| transform: translateY(-15px) rotate(1deg); |
| } |
| 66% { |
| transform: translateY(10px) rotate(-1deg); |
| } |
| } |
|
|
| .float-slow { |
| animation: float 20s ease-in-out infinite; |
| } |
|
|
| .float-medium { |
| animation: float 15s ease-in-out infinite; |
| } |
|
|
| |
| |
| |
|
|
| @media (prefers-reduced-motion: reduce) { |
| *, |
| *::before, |
| *::after { |
| animation-duration: 0.01ms !important; |
| animation-iteration-count: 1 !important; |
| transition-duration: 0.01ms !important; |
| } |
|
|
| .shimmer, |
| .pulse-glow-success, |
| .pulse-glow-critical, |
| .pulse-glow-warning, |
| .gradient-animate, |
| .float-slow, |
| .float-medium { |
| animation: none !important; |
| } |
| } |
|
|
| |
| |
| |
|
|
| ::-webkit-scrollbar { |
| width: 8px; |
| height: 8px; |
| } |
|
|
| ::-webkit-scrollbar-track { |
| background: transparent; |
| } |
|
|
| ::-webkit-scrollbar-thumb { |
| background: var(--glass-border); |
| border-radius: var(--radius-full); |
| } |
|
|
| ::-webkit-scrollbar-thumb:hover { |
| background: var(--glass-border-strong); |
| } |
|
|
| |
| * { |
| scrollbar-width: thin; |
| scrollbar-color: var(--glass-border) transparent; |
| } |
|
|
| |
| |
| |
|
|
| .focus-ring { |
| outline: none; |
| } |
|
|
| .focus-ring:focus-visible { |
| outline: none; |
| box-shadow: |
| 0 0 0 2px var(--background), |
| 0 0 0 4px var(--suggestion-accent), |
| var(--shadow-glass-md); |
| } |
|
|
| |
| |
| |
|
|
| ::selection { |
| background: var(--suggestion-bg); |
| color: var(--suggestion-text); |
| } |
|
|