@import "tailwindcss"; @import "tw-animate-css"; @import "shadcn/tailwind.css"; @import "@fontsource-variable/geist"; @custom-variant dark (&:is(.dark *)); @theme inline { --font-heading: var(--font-sans); --font-sans: 'Geist Variable', sans-serif; --color-sidebar-ring: var(--sidebar-ring); --color-sidebar-border: var(--sidebar-border); --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); --color-sidebar-accent: var(--sidebar-accent); --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); --color-sidebar-primary: var(--sidebar-primary); --color-sidebar-foreground: var(--sidebar-foreground); --color-sidebar: var(--sidebar); --color-chart-5: var(--chart-5); --color-chart-4: var(--chart-4); --color-chart-3: var(--chart-3); --color-chart-2: var(--chart-2); --color-chart-1: var(--chart-1); --color-ring: var(--ring); --color-input: var(--input); --color-border: var(--border); --color-destructive: var(--destructive); --color-accent-foreground: var(--accent-foreground); --color-accent: var(--accent); --color-muted-foreground: var(--muted-foreground); --color-muted: var(--muted); --color-secondary-foreground: var(--secondary-foreground); --color-secondary: var(--secondary); --color-primary-foreground: var(--primary-foreground); --color-primary: var(--primary); --color-popover-foreground: var(--popover-foreground); --color-popover: var(--popover); --color-card-foreground: var(--card-foreground); --color-card: var(--card); --color-foreground: var(--foreground); --color-background: var(--background); --radius-sm: calc(var(--radius) * 0.6); --radius-md: calc(var(--radius) * 0.8); --radius-lg: var(--radius); --radius-xl: calc(var(--radius) * 1.4); --radius-2xl: calc(var(--radius) * 1.8); --radius-3xl: calc(var(--radius) * 2.2); --radius-4xl: calc(var(--radius) * 2.6); --color-brand: var(--brand); --color-brand-foreground: var(--brand-foreground); --color-destructive-foreground: var(--destructive-foreground); --color-success: var(--success); --color-success-foreground: var(--success-foreground); --color-success-muted: var(--success-muted); --color-warning: var(--warning); --color-warning-foreground: var(--warning-foreground); --color-warning-muted: var(--warning-muted); --color-info: var(--info); --color-info-foreground: var(--info-foreground); --color-info-muted: var(--info-muted); --color-json-key: var(--json-key); --color-json-string: var(--json-string); --color-json-number: var(--json-number); --color-json-boolean: var(--json-boolean); --color-logo-background: var(--logo-background); } :root, html[data-theme="porcelain-moss"] { --background: oklch(0.966 0.007 155); --foreground: oklch(0.245 0.018 155); --card: oklch(0.992 0.004 155); --card-foreground: oklch(0.245 0.018 155); --popover: oklch(0.992 0.004 155); --popover-foreground: oklch(0.245 0.018 155); --primary: oklch(0.55 0.12 148); --primary-foreground: oklch(0.982 0.006 155); --secondary: oklch(0.925 0.011 155); --secondary-foreground: oklch(0.31 0.02 155); --muted: oklch(0.918 0.011 155); --muted-foreground: oklch(0.49 0.018 155); --accent: oklch(0.888 0.027 142); --accent-foreground: oklch(0.265 0.024 155); --destructive: oklch(0.58 0.17 26); --destructive-foreground: oklch(0.982 0.006 155); --border: oklch(0.835 0.012 155); --input: oklch(0.895 0.012 155); --ring: oklch(0.6 0.12 148); --chart-1: oklch(0.58 0.12 148); --chart-2: oklch(0.58 0.095 205); --chart-3: oklch(0.66 0.12 78); --chart-4: oklch(0.59 0.15 26); --chart-5: oklch(0.54 0.09 285); --radius: 0.5rem; --sidebar: oklch(0.92 0.015 155); --sidebar-foreground: oklch(0.34 0.02 155); --sidebar-primary: oklch(0.55 0.12 148); --sidebar-primary-foreground: oklch(0.982 0.006 155); --sidebar-accent: oklch(0.855 0.03 142); --sidebar-accent-foreground: oklch(0.25 0.024 155); --sidebar-border: oklch(0.82 0.012 155); --sidebar-ring: oklch(0.6 0.12 148); --brand: oklch(0.55 0.12 148); --brand-foreground: oklch(0.982 0.006 155); --success: oklch(0.52 0.115 152); --success-foreground: oklch(0.982 0.006 155); --success-muted: oklch(0.902 0.04 152); --warning: oklch(0.64 0.13 76); --warning-foreground: oklch(0.255 0.02 155); --warning-muted: oklch(0.914 0.04 76); --info: oklch(0.54 0.095 205); --info-foreground: oklch(0.982 0.006 155); --info-muted: oklch(0.9 0.03 205); --json-key: oklch(0.42 0.095 205); --json-string: oklch(0.42 0.105 152); --json-number: oklch(0.48 0.105 76); --json-boolean: oklch(0.45 0.1 285); --logo-background: oklch(0.22 0.025 160); --logo-start: oklch(0.68 0.125 152); --logo-end: oklch(0.62 0.105 205); --logo-highlight: oklch(0.72 0.13 126); } html[data-theme="tungsten-dark"], .dark { --background: oklch(0.145 0.011 165); --foreground: oklch(0.91 0.014 145); --card: oklch(0.19 0.011 165); --card-foreground: oklch(0.91 0.014 145); --popover: oklch(0.18 0.012 165); --popover-foreground: oklch(0.91 0.014 145); --primary: oklch(0.79 0.145 127); --primary-foreground: oklch(0.17 0.035 150); --secondary: oklch(0.245 0.013 165); --secondary-foreground: oklch(0.9 0.012 145); --muted: oklch(0.235 0.012 165); --muted-foreground: oklch(0.67 0.018 155); --accent: oklch(0.275 0.03 145); --accent-foreground: oklch(0.92 0.014 135); --destructive: oklch(0.68 0.16 24); --destructive-foreground: oklch(0.94 0.018 35); --border: oklch(0.315 0.014 165 / 70%); --input: oklch(0.29 0.014 165); --ring: oklch(0.79 0.145 127); --chart-1: oklch(0.79 0.145 127); --chart-2: oklch(0.72 0.105 200); --chart-3: oklch(0.76 0.12 78); --chart-4: oklch(0.68 0.16 24); --chart-5: oklch(0.69 0.105 292); --radius: 0.5rem; --sidebar: oklch(0.115 0.012 165); --sidebar-foreground: oklch(0.79 0.016 150); --sidebar-primary: oklch(0.79 0.145 127); --sidebar-primary-foreground: oklch(0.17 0.035 150); --sidebar-accent: oklch(0.255 0.033 145); --sidebar-accent-foreground: oklch(0.93 0.015 135); --sidebar-border: oklch(0.255 0.014 165); --sidebar-ring: oklch(0.79 0.145 127); --brand: oklch(0.79 0.145 127); --brand-foreground: oklch(0.17 0.035 150); --success: oklch(0.74 0.13 155); --success-foreground: oklch(0.16 0.03 150); --success-muted: oklch(0.25 0.045 155); --warning: oklch(0.77 0.125 78); --warning-foreground: oklch(0.18 0.03 80); --warning-muted: oklch(0.255 0.04 80); --info: oklch(0.73 0.105 205); --info-foreground: oklch(0.15 0.025 205); --info-muted: oklch(0.245 0.038 205); --json-key: oklch(0.76 0.1 205); --json-string: oklch(0.77 0.12 150); --json-number: oklch(0.78 0.12 78); --json-boolean: oklch(0.75 0.105 292); --logo-background: oklch(0.15 0.02 165); --logo-start: oklch(0.84 0.12 150); --logo-end: oklch(0.72 0.11 205); --logo-highlight: oklch(0.86 0.145 127); } @layer base { * { @apply border-border outline-ring/50; } body { @apply bg-background text-foreground antialiased; } html { @apply font-sans; } } @keyframes admin-route-enter { from { opacity: 0.35; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } } @keyframes login-page-enter { from { opacity: 0; } to { opacity: 1; } } @keyframes login-brand-enter { from { opacity: 0; transform: translateY(18px) scale(0.94); } to { opacity: 1; transform: translateY(0) scale(1); } } @keyframes login-card-enter { from { opacity: 0; transform: translateY(24px) scale(0.96); filter: blur(5px); } to { opacity: 1; transform: translateY(0); filter: blur(0); } } @keyframes login-panel-exit { from { opacity: 1; transform: translateY(0) scale(1); filter: blur(0); } to { opacity: 0; transform: translateY(-18px) scale(0.975); filter: blur(6px); } } @keyframes login-bridge-enter { from { opacity: 0; transform: scale(0.98); } to { opacity: 1; transform: scale(1); } } @keyframes login-bridge-mark-enter { from { opacity: 0; transform: translateY(16px) scale(0.86); filter: blur(6px); } to { opacity: 1; transform: translateY(0) scale(1); filter: blur(0); } } @keyframes login-bridge-copy-enter { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } @keyframes login-bridge-progress { from { transform: translateX(-105%); } to { transform: translateX(125%); } } @keyframes login-error-enter { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: translateY(0); } } @keyframes admin-shell-enter { from { opacity: 0.65; } to { opacity: 1; } } .login-page-shell { animation: login-page-enter 280ms cubic-bezier(0.16, 1, 0.3, 1); } .login-brand { animation: login-brand-enter 520ms cubic-bezier(0.16, 1, 0.3, 1); } .login-panel-layer { position: relative; z-index: 1; } .login-card { animation: login-card-enter 560ms cubic-bezier(0.16, 1, 0.3, 1); transition: border-color 220ms cubic-bezier(0.16, 1, 0.3, 1), box-shadow 220ms cubic-bezier(0.16, 1, 0.3, 1), transform 220ms cubic-bezier(0.16, 1, 0.3, 1); will-change: transform, opacity; } .login-card:focus-within { border-color: color-mix(in oklch, var(--primary) 34%, var(--border)); box-shadow: 0 18px 45px color-mix(in oklch, var(--foreground) 8%, transparent); transform: translateY(-1px); } .login-card-bridge { border-color: color-mix(in oklch, var(--success) 42%, var(--border)); } .login-panel-exit { animation: login-panel-exit 320ms cubic-bezier(0.16, 1, 0.3, 1) forwards; } .login-error { animation: login-error-enter 180ms cubic-bezier(0.22, 1, 0.36, 1); } .login-bridge-page { position: absolute; inset: 0; z-index: 2; display: flex; flex-direction: column; align-items: center; justify-content: center; overflow: hidden; padding: 2rem; background: radial-gradient(circle at 50% 42%, color-mix(in oklch, var(--primary) 18%, transparent), transparent 32%), var(--background); animation: login-bridge-enter 420ms cubic-bezier(0.16, 1, 0.3, 1); } .login-bridge-mark { animation: login-bridge-mark-enter 520ms cubic-bezier(0.16, 1, 0.3, 1) 80ms both; border-radius: var(--radius-xl); box-shadow: 0 24px 70px color-mix(in oklch, var(--primary) 20%, transparent); } .login-bridge-copy { margin-top: 1rem; text-align: center; animation: login-bridge-copy-enter 420ms cubic-bezier(0.16, 1, 0.3, 1) 160ms both; } .login-bridge-progress { position: relative; width: min(12rem, 58vw); height: 0.375rem; margin-top: 1.5rem; overflow: hidden; border-radius: 999px; background: color-mix(in oklch, var(--primary) 14%, var(--muted)); } .login-bridge-progress span { display: block; width: 46%; height: 100%; border-radius: inherit; background: var(--primary); animation: login-bridge-progress 760ms cubic-bezier(0.22, 1, 0.36, 1) both; } .admin-route-content { animation: admin-route-enter 180ms cubic-bezier(0.22, 1, 0.36, 1); } .admin-shell-enter { animation: admin-shell-enter 220ms cubic-bezier(0.22, 1, 0.36, 1); } @media (prefers-reduced-motion: reduce) { .login-page-shell, .login-brand, .login-panel-exit, .login-card, .login-card-bridge, .login-bridge-page, .login-bridge-mark, .login-bridge-copy, .login-bridge-progress span, .login-error, .admin-shell-enter, .admin-route-content { animation: none; transition-duration: 0.01ms; } }