@import "tailwindcss";
@import "tw-animate-css";

@source "../node_modules/layerchart/**/*.svelte";

@custom-variant dark (&:where(.dark, .dark *));

@theme {
	--radius: 0.5rem;
	--radius-sm: calc(var(--radius) - 4px);
	--radius-md: calc(var(--radius) - 2px);
	--radius-lg: var(--radius);

	--color-background: hsl(var(--background));
	--color-foreground: hsl(var(--foreground));
	--color-card: hsl(var(--card));
	--color-card-foreground: hsl(var(--card-foreground));
	--color-popover: hsl(var(--popover));
	--color-popover-foreground: hsl(var(--popover-foreground));
	--color-primary: hsl(var(--primary));
	--color-primary-foreground: hsl(var(--primary-foreground));
	--color-secondary: hsl(var(--secondary));
	--color-secondary-foreground: hsl(var(--secondary-foreground));
	--color-muted: hsl(var(--muted));
	--color-muted-foreground: hsl(var(--muted-foreground));
	--color-accent: hsl(var(--accent));
	--color-accent-foreground: hsl(var(--accent-foreground));
	--color-destructive: hsl(var(--destructive));
	--color-destructive-foreground: hsl(var(--destructive-foreground));
	--color-border: hsl(var(--border));
	--color-input: hsl(var(--input));
	--color-ring: hsl(var(--ring));

	--color-sidebar: hsl(var(--sidebar-background));
	--color-sidebar-foreground: hsl(var(--sidebar-foreground));
	--color-sidebar-primary: hsl(var(--sidebar-primary));
	--color-sidebar-primary-foreground: hsl(var(--sidebar-primary-foreground));
	--color-sidebar-accent: hsl(var(--sidebar-accent));
	--color-sidebar-accent-foreground: hsl(var(--sidebar-accent-foreground));
	--color-sidebar-border: hsl(var(--sidebar-border));
	--color-sidebar-ring: hsl(var(--sidebar-ring));
}

/* Font size scaling - set dynamically via JavaScript */
html {
	font-size: calc(16px * var(--font-size-scale, 1));
}

/* Grid/table font size scaling - uses px to be independent of global font size */
.data-grid,
.data-grid th,
.data-grid td,
.data-grid span,
.data-grid div,
.data-grid p,
.data-grid button,
.data-grid code {
	font-size: calc(12px * var(--grid-font-size-scale, 1)) !important;
}

/* State badge - width scales with grid font size to stay consistent */
.state-badge {
	width: calc(70px * var(--grid-font-size-scale, 1));
	min-width: calc(70px * var(--grid-font-size-scale, 1));
	max-width: calc(70px * var(--grid-font-size-scale, 1));
	text-align: center;
}

/* State column - width scales with grid font size */
.data-grid th.state-col,
.data-grid td.state-col {
	width: calc(90px * var(--grid-font-size-scale, 1)) !important;
	min-width: calc(90px * var(--grid-font-size-scale, 1)) !important;
	max-width: calc(90px * var(--grid-font-size-scale, 1)) !important;
}

/* Scrollbar theming — WebKit only (Sencho-style). No global * selector and
 * no scrollbar-width override, so Firefox/native scrollbars render at OS
 * default width. Dark-mode thumb bumped to be visible on dark surfaces. */
::-webkit-scrollbar {
	width: 8px;
	height: 8px;
}
::-webkit-scrollbar-track {
	background: transparent;
}
::-webkit-scrollbar-thumb {
	/* Light mode: medium gray that holds up against white. Pale border-color
	 * at 50% was nearly invisible. */
	background: hsl(0 0% 60% / 0.6);
	border-radius: 4px;
	transition: background 150ms ease;
}
::-webkit-scrollbar-thumb:hover {
	background: hsl(0 0% 40% / 0.8);
}
.dark ::-webkit-scrollbar-thumb {
	background: hsl(0 0% 50% / 0.5);
}
.dark ::-webkit-scrollbar-thumb:hover {
	background: hsl(0 0% 65% / 0.7);
}

:root {
	--font-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;

	--background: 0 0% 100%;
	--foreground: 222.2 84% 4.9%;
	--card: 0 0% 100%;
	--card-foreground: 222.2 84% 4.9%;
	--popover: 0 0% 100%;
	--popover-foreground: 222.2 84% 4.9%;
	--primary: 221.2 83.2% 53.3%;
	--primary-foreground: 210 40% 98%;
	--secondary: 210 40% 96.1%;
	--secondary-foreground: 222.2 47.4% 11.2%;
	--muted: 210 40% 96.1%;
	--muted-foreground: 215.4 16.3% 46.9%;
	--accent: 210 40% 96.1%;
	--accent-foreground: 222.2 47.4% 11.2%;
	--destructive: 0 84.2% 60.2%;
	--destructive-foreground: 210 40% 98%;
	--border: 214.3 31.8% 91.4%;
	--input: 214.3 31.8% 91.4%;
	--ring: 221.2 83.2% 53.3%;

	--sidebar-background: 0 0% 98%;
	--sidebar-foreground: 240 5.3% 26.1%;
	--sidebar-primary: 240 5.9% 10%;
	--sidebar-primary-foreground: 0 0% 98%;
	--sidebar-accent: 240 4.8% 95.9%;
	--sidebar-accent-foreground: 240 5.9% 10%;
	--sidebar-border: 220 13% 91%;
	--sidebar-ring: 217.2 91.2% 59.8%;
}

.dark {
	--background: 214.4 61.4% 17.3%;
	--foreground: 210 40% 98%;
	--card: 214.4 61.4% 17.3%;
	--card-foreground: 210 40% 98%;
	--popover: 214.4 61.4% 17.3%;
	--popover-foreground: 210 40% 98%;
	--primary: 217.2 91.2% 59.8%;
	--primary-foreground: 222.2 47.4% 11.2%;
	--secondary: 214 50% 23%;
	--secondary-foreground: 210 40% 98%;
	--muted: 214 50% 23%;
	--muted-foreground: 215 20.2% 65.1%;
	--accent: 214 50% 23%;
	--accent-foreground: 210 40% 98%;
	--destructive: 0 91% 71%;
	--destructive-foreground: 210 40% 98%;
	--border: 214 50% 25%;
	--input: 214 50% 25%;
	--ring: 224.3 76.3% 48%;

	--sidebar-background: 214.4 50% 18%;
	--sidebar-foreground: 210 40% 98%;
	--sidebar-primary: 217.2 91.2% 59.8%;
	--sidebar-primary-foreground: 222.2 47.4% 11.2%;
	--sidebar-accent: 214 50% 20%;
	--sidebar-accent-foreground: 210 40% 98%;
	--sidebar-border: 214 50% 22%;
	--sidebar-ring: 217.2 91.2% 59.8%;
}

/* =============================================================================
   LIGHT THEMES - Official color palettes from theme specifications
   ============================================================================= */

/* Catppuccin Latte - https://catppuccin.com/palette/ */
.theme-light-catppuccin {
	--background: 220 23% 95%; /* #eff1f5 Base */
	--foreground: 234 16% 35%; /* #4c4f69 Text */
	--card: 220 21% 98%; /* #fffaf3 Surface */
	--card-foreground: 234 16% 35%;
	--popover: 220 21% 98%;
	--popover-foreground: 234 16% 35%;
	--primary: 266 85% 58%; /* #8839ef Mauve */
	--primary-foreground: 220 23% 98%;
	--secondary: 223 16% 84%; /* #ccd0da Surface0 */
	--secondary-foreground: 234 16% 35%;
	--muted: 223 16% 84%;
	--muted-foreground: 233 10% 47%; /* #6c6f85 Subtext0 */
	--accent: 220 22% 87%;
	--accent-foreground: 234 16% 35%;
	--destructive: 347 87% 44%; /* #d20f39 Red */
	--destructive-foreground: 220 23% 98%;
	--border: 223 16% 83%;
	--input: 223 16% 83%;
	--ring: 266 85% 58%;
	--sidebar-background: 227 15% 90%; /* #e6e9ef Mantle */
	--sidebar-foreground: 234 16% 35%;
	--sidebar-primary: 266 85% 58%;
	--sidebar-primary-foreground: 220 23% 98%;
	--sidebar-accent: 220 22% 85%;
	--sidebar-accent-foreground: 234 16% 35%;
	--sidebar-border: 223 16% 80%;
	--sidebar-ring: 266 85% 58%;
}

/* Rose Pine Dawn - https://rosepinetheme.com/palette/ */
.theme-light-rose-pine {
	--background: 32 57% 95%; /* #faf4ed Base */
	--foreground: 248 19% 40%; /* #575279 Text */
	--card: 39 100% 98%; /* #fffaf3 Surface */
	--card-foreground: 248 19% 40%;
	--popover: 39 100% 98%;
	--popover-foreground: 248 19% 40%;
	--primary: 267 22% 57%; /* #907aa9 Iris */
	--primary-foreground: 32 57% 95%;
	--secondary: 35 32% 92%; /* #f2e9e1 Overlay */
	--secondary-foreground: 248 19% 40%;
	--muted: 35 32% 92%;
	--muted-foreground: 250 12% 49%; /* #797593 Subtle */
	--accent: 33 35% 89%;
	--accent-foreground: 248 19% 40%;
	--destructive: 343 35% 55%; /* #b4637a Love */
	--destructive-foreground: 32 57% 95%;
	--border: 33 24% 86%;
	--input: 33 24% 86%;
	--ring: 267 22% 57%;
	--sidebar-background: 30 27% 94%; /* #f4ede8 Highlight Low */
	--sidebar-foreground: 248 19% 40%;
	--sidebar-primary: 267 22% 57%;
	--sidebar-primary-foreground: 32 57% 95%;
	--sidebar-accent: 33 24% 88%;
	--sidebar-accent-foreground: 248 19% 40%;
	--sidebar-border: 33 24% 84%;
	--sidebar-ring: 267 22% 57%;
}

/* Nord Light - https://www.nordtheme.com/ */
.theme-light-nord {
	--background: 219 28% 96%; /* #eceff4 Nord6 */
	--foreground: 220 16% 22%; /* #2e3440 Nord0 */
	--card: 218 27% 94%; /* #e5e9f0 Nord5 */
	--card-foreground: 220 16% 22%;
	--popover: 218 27% 94%;
	--popover-foreground: 220 16% 22%;
	--primary: 213 32% 52%; /* #5e81ac Nord10 */
	--primary-foreground: 219 28% 96%;
	--secondary: 218 27% 88%; /* #d8dee9 Nord4 */
	--secondary-foreground: 220 16% 22%;
	--muted: 218 27% 88%;
	--muted-foreground: 220 17% 32%; /* #434c5e Nord2 */
	--accent: 218 27% 84%;
	--accent-foreground: 220 16% 22%;
	--destructive: 354 42% 56%; /* #bf616a Nord11 */
	--destructive-foreground: 219 28% 96%;
	--border: 218 27% 85%;
	--input: 218 27% 85%;
	--ring: 213 32% 52%;
	--sidebar-background: 218 27% 92%;
	--sidebar-foreground: 220 16% 22%;
	--sidebar-primary: 213 32% 52%;
	--sidebar-primary-foreground: 219 28% 96%;
	--sidebar-accent: 218 27% 86%;
	--sidebar-accent-foreground: 220 16% 22%;
	--sidebar-border: 218 27% 83%;
	--sidebar-ring: 213 32% 52%;
}

/* Solarized Light - https://ethanschoonover.com/solarized/ */
.theme-light-solarized {
	--background: 44 87% 94%; /* #fdf6e3 Base3 */
	--foreground: 192 81% 14%; /* #073642 Base02 */
	--card: 44 87% 97%;
	--card-foreground: 192 81% 14%;
	--popover: 44 87% 97%;
	--popover-foreground: 192 81% 14%;
	--primary: 205 69% 49%; /* #268bd2 Blue */
	--primary-foreground: 44 87% 97%;
	--secondary: 46 42% 88%; /* #eee8d5 Base2 */
	--secondary-foreground: 192 81% 14%;
	--muted: 46 42% 88%;
	--muted-foreground: 194 14% 40%; /* #657b83 Base00 */
	--accent: 46 42% 84%;
	--accent-foreground: 192 81% 14%;
	--destructive: 1 71% 52%; /* #dc322f Red */
	--destructive-foreground: 44 87% 97%;
	--border: 46 42% 84%;
	--input: 46 42% 84%;
	--ring: 205 69% 49%;
	--sidebar-background: 46 42% 90%;
	--sidebar-foreground: 192 81% 14%;
	--sidebar-primary: 205 69% 49%;
	--sidebar-primary-foreground: 44 87% 97%;
	--sidebar-accent: 46 42% 82%;
	--sidebar-accent-foreground: 192 81% 14%;
	--sidebar-border: 46 42% 80%;
	--sidebar-ring: 205 69% 49%;
}

/* Gruvbox Light - https://github.com/morhetz/gruvbox */
.theme-light-gruvbox {
	--background: 48 87% 94%; /* #fbf1c7 bg0 */
	--foreground: 0 0% 16%; /* #282828 fg0 */
	--card: 49 87% 96%;
	--card-foreground: 0 0% 16%;
	--popover: 49 87% 96%;
	--popover-foreground: 0 0% 16%;
	--primary: 189 48% 40%; /* #458588 Aqua */
	--primary-foreground: 48 87% 94%;
	--secondary: 48 45% 85%; /* #ebdbb2 bg1 */
	--secondary-foreground: 0 0% 16%;
	--muted: 48 45% 85%;
	--muted-foreground: 0 0% 36%;
	--accent: 48 45% 80%;
	--accent-foreground: 0 0% 16%;
	--destructive: 6 96% 40%; /* #cc241d Red */
	--destructive-foreground: 48 87% 94%;
	--border: 48 45% 80%;
	--input: 48 45% 80%;
	--ring: 189 48% 40%;
	--sidebar-background: 48 45% 90%;
	--sidebar-foreground: 0 0% 16%;
	--sidebar-primary: 189 48% 40%;
	--sidebar-primary-foreground: 48 87% 94%;
	--sidebar-accent: 48 45% 82%;
	--sidebar-accent-foreground: 0 0% 16%;
	--sidebar-border: 48 45% 78%;
	--sidebar-ring: 189 48% 40%;
}

/* Alucard (Dracula Light) - https://draculatheme.com/spec */
.theme-light-alucard {
	--background: 47 100% 96%; /* #fffbeb Background */
	--foreground: 0 0% 12%; /* #1f1f1f Foreground */
	--card: 47 100% 98%;
	--card-foreground: 0 0% 12%;
	--popover: 47 100% 98%;
	--popover-foreground: 0 0% 12%;
	--primary: 253 63% 54%; /* #644ac9 Purple */
	--primary-foreground: 47 100% 96%;
	--secondary: 240 13% 87%; /* #cfcfde Selection */
	--secondary-foreground: 0 0% 12%;
	--muted: 240 13% 87%;
	--muted-foreground: 45 17% 36%; /* #6c664b Comment */
	--accent: 240 13% 82%;
	--accent-foreground: 0 0% 12%;
	--destructive: 8 71% 48%; /* #cb3a2a Red */
	--destructive-foreground: 47 100% 96%;
	--border: 240 13% 82%;
	--input: 240 13% 82%;
	--ring: 253 63% 54%;
	--sidebar-background: 47 100% 93%;
	--sidebar-foreground: 0 0% 12%;
	--sidebar-primary: 253 63% 54%;
	--sidebar-primary-foreground: 47 100% 96%;
	--sidebar-accent: 240 13% 85%;
	--sidebar-accent-foreground: 0 0% 12%;
	--sidebar-border: 240 13% 80%;
	--sidebar-ring: 253 63% 54%;
}

/* GitHub Light - https://primer.style/primitives/colors */
.theme-light-github {
	--background: 210 17% 98%; /* #f6f8fa */
	--foreground: 210 12% 16%; /* #24292f */
	--card: 0 0% 100%; /* #ffffff */
	--card-foreground: 210 12% 16%;
	--popover: 0 0% 100%;
	--popover-foreground: 210 12% 16%;
	--primary: 212 92% 45%; /* #0969da */
	--primary-foreground: 0 0% 100%;
	--secondary: 210 14% 93%; /* #eaeef2 */
	--secondary-foreground: 210 12% 16%;
	--muted: 210 14% 93%;
	--muted-foreground: 210 9% 40%; /* #57606a */
	--accent: 210 14% 89%;
	--accent-foreground: 210 12% 16%;
	--destructive: 354 70% 44%; /* #cf222e */
	--destructive-foreground: 0 0% 100%;
	--border: 210 14% 89%;
	--input: 210 14% 89%;
	--ring: 212 92% 45%;
	--sidebar-background: 210 17% 95%;
	--sidebar-foreground: 210 12% 16%;
	--sidebar-primary: 212 92% 45%;
	--sidebar-primary-foreground: 0 0% 100%;
	--sidebar-accent: 210 14% 91%;
	--sidebar-accent-foreground: 210 12% 16%;
	--sidebar-border: 210 14% 87%;
	--sidebar-ring: 212 92% 45%;
}

/* Material Light - https://material.io/design/color */
.theme-light-material {
	--background: 0 0% 98%; /* #fafafa */
	--foreground: 0 0% 13%; /* #212121 */
	--card: 0 0% 100%; /* #ffffff */
	--card-foreground: 0 0% 13%;
	--popover: 0 0% 100%;
	--popover-foreground: 0 0% 13%;
	--primary: 187 100% 42%; /* #00acc1 Cyan 600 */
	--primary-foreground: 0 0% 100%;
	--secondary: 0 0% 93%; /* #eeeeee */
	--secondary-foreground: 0 0% 13%;
	--muted: 0 0% 93%;
	--muted-foreground: 0 0% 46%; /* #757575 */
	--accent: 0 0% 88%;
	--accent-foreground: 0 0% 13%;
	--destructive: 4 90% 58%; /* #f44336 Red 500 */
	--destructive-foreground: 0 0% 100%;
	--border: 0 0% 88%;
	--input: 0 0% 88%;
	--ring: 187 100% 42%;
	--sidebar-background: 0 0% 96%;
	--sidebar-foreground: 0 0% 13%;
	--sidebar-primary: 187 100% 42%;
	--sidebar-primary-foreground: 0 0% 100%;
	--sidebar-accent: 0 0% 90%;
	--sidebar-accent-foreground: 0 0% 13%;
	--sidebar-border: 0 0% 85%;
	--sidebar-ring: 187 100% 42%;
}

/* Atom One Light - https://github.com/atom/atom/tree/master/packages/one-light-syntax */
.theme-light-atom-one {
	--background: 230 8% 98%; /* #fafafa */
	--foreground: 230 8% 24%; /* #383a42 */
	--card: 0 0% 100%;
	--card-foreground: 230 8% 24%;
	--popover: 0 0% 100%;
	--popover-foreground: 230 8% 24%;
	--primary: 230 100% 66%; /* #4078f2 */
	--primary-foreground: 0 0% 100%;
	--secondary: 230 8% 93%; /* #e5e5e6 */
	--secondary-foreground: 230 8% 24%;
	--muted: 230 8% 93%;
	--muted-foreground: 230 4% 50%; /* #a0a1a7 */
	--accent: 230 8% 88%;
	--accent-foreground: 230 8% 24%;
	--destructive: 5 74% 59%; /* #e45649 */
	--destructive-foreground: 0 0% 100%;
	--border: 230 8% 88%;
	--input: 230 8% 88%;
	--ring: 230 100% 66%;
	--sidebar-background: 230 8% 95%;
	--sidebar-foreground: 230 8% 24%;
	--sidebar-primary: 230 100% 66%;
	--sidebar-primary-foreground: 0 0% 100%;
	--sidebar-accent: 230 8% 90%;
	--sidebar-accent-foreground: 230 8% 24%;
	--sidebar-border: 230 8% 85%;
	--sidebar-ring: 230 100% 66%;
}

/* =============================================================================
   DARK THEMES - Official color palettes from theme specifications
   ============================================================================= */

/* Catppuccin Mocha - https://catppuccin.com/palette/ */
.dark.theme-dark-catppuccin {
	--background: 240 21% 15%; /* #1e1e2e Base */
	--foreground: 226 64% 88%; /* #cdd6f4 Text */
	--card: 240 21% 17%; /* #313244 Surface0 */
	--card-foreground: 226 64% 88%;
	--popover: 240 21% 17%;
	--popover-foreground: 226 64% 88%;
	--primary: 267 84% 81%; /* #cba6f7 Mauve */
	--primary-foreground: 240 21% 15%;
	--secondary: 237 16% 23%; /* #313244 Surface0 */
	--secondary-foreground: 226 64% 88%;
	--muted: 237 16% 23%;
	--muted-foreground: 228 24% 72%; /* #a6adc8 Subtext0 */
	--accent: 240 21% 24%;
	--accent-foreground: 226 64% 88%;
	--destructive: 343 81% 75%; /* #f38ba8 Red */
	--destructive-foreground: 226 64% 88%;
	--border: 237 16% 25%;
	--input: 237 16% 25%;
	--ring: 267 84% 81%;
	--sidebar-background: 240 23% 9%; /* #11111b Crust */
	--sidebar-foreground: 226 64% 88%;
	--sidebar-primary: 267 84% 81%;
	--sidebar-primary-foreground: 240 21% 15%;
	--sidebar-accent: 240 21% 16%;
	--sidebar-accent-foreground: 226 64% 88%;
	--sidebar-border: 237 16% 20%;
	--sidebar-ring: 267 84% 81%;
}

/* Dracula - https://draculatheme.com/spec */
.dark.theme-dark-dracula {
	--background: 231 15% 18%; /* #282a36 Background */
	--foreground: 60 30% 96%; /* #f8f8f2 Foreground */
	--card: 232 14% 21%; /* #343746 Floating */
	--card-foreground: 60 30% 96%;
	--popover: 232 14% 21%;
	--popover-foreground: 60 30% 96%;
	--primary: 265 89% 78%; /* #bd93f9 Purple */
	--primary-foreground: 231 15% 18%;
	--secondary: 232 14% 31%; /* #44475a Current Line */
	--secondary-foreground: 60 30% 96%;
	--muted: 232 14% 31%;
	--muted-foreground: 225 14% 51%; /* #6272a4 Comment */
	--accent: 232 14% 28%;
	--accent-foreground: 60 30% 96%;
	--destructive: 0 100% 67%; /* #ff5555 Red */
	--destructive-foreground: 60 30% 96%;
	--border: 232 14% 28%;
	--input: 232 14% 28%;
	--ring: 265 89% 78%;
	--sidebar-background: 231 15% 14%; /* #191a21 Background Darker */
	--sidebar-foreground: 60 30% 96%;
	--sidebar-primary: 265 89% 78%;
	--sidebar-primary-foreground: 231 15% 18%;
	--sidebar-accent: 232 14% 22%;
	--sidebar-accent-foreground: 60 30% 96%;
	--sidebar-border: 232 14% 24%;
	--sidebar-ring: 265 89% 78%;
}

/* Rose Pine - https://rosepinetheme.com/palette/ */
.dark.theme-dark-rose-pine {
	--background: 249 22% 12%; /* #191724 Base */
	--foreground: 245 50% 91%; /* #e0def4 Text */
	--card: 247 23% 15%; /* #1f1d2e Surface */
	--card-foreground: 245 50% 91%;
	--popover: 247 23% 15%;
	--popover-foreground: 245 50% 91%;
	--primary: 267 57% 78%; /* #c4a7e7 Iris */
	--primary-foreground: 249 22% 12%;
	--secondary: 248 25% 18%; /* #26233a Overlay */
	--secondary-foreground: 245 50% 91%;
	--muted: 248 25% 18%;
	--muted-foreground: 249 12% 52%; /* #6e6a86 Muted */
	--accent: 248 25% 22%;
	--accent-foreground: 245 50% 91%;
	--destructive: 343 76% 68%; /* #eb6f92 Love */
	--destructive-foreground: 245 50% 91%;
	--border: 248 25% 22%;
	--input: 248 25% 22%;
	--ring: 267 57% 78%;
	--sidebar-background: 249 22% 10%;
	--sidebar-foreground: 245 50% 91%;
	--sidebar-primary: 267 57% 78%;
	--sidebar-primary-foreground: 249 22% 12%;
	--sidebar-accent: 247 23% 16%;
	--sidebar-accent-foreground: 245 50% 91%;
	--sidebar-border: 248 25% 18%;
	--sidebar-ring: 267 57% 78%;
}

/* Rose Pine Moon - https://rosepinetheme.com/palette/ */
.dark.theme-dark-rose-pine-moon {
	--background: 246 24% 17%; /* #232136 Base */
	--foreground: 245 50% 91%; /* #e0def4 Text */
	--card: 248 24% 20%; /* #2a273f Surface */
	--card-foreground: 245 50% 91%;
	--popover: 248 24% 20%;
	--popover-foreground: 245 50% 91%;
	--primary: 267 57% 78%; /* #c4a7e7 Iris */
	--primary-foreground: 246 24% 17%;
	--secondary: 249 22% 26%; /* #393552 Overlay */
	--secondary-foreground: 245 50% 91%;
	--muted: 249 22% 26%;
	--muted-foreground: 249 12% 52%; /* #6e6a86 Muted */
	--accent: 249 22% 30%;
	--accent-foreground: 245 50% 91%;
	--destructive: 343 76% 68%; /* #eb6f92 Love */
	--destructive-foreground: 245 50% 91%;
	--border: 249 22% 28%;
	--input: 249 22% 28%;
	--ring: 267 57% 78%;
	--sidebar-background: 246 24% 14%;
	--sidebar-foreground: 245 50% 91%;
	--sidebar-primary: 267 57% 78%;
	--sidebar-primary-foreground: 246 24% 17%;
	--sidebar-accent: 248 24% 21%;
	--sidebar-accent-foreground: 245 50% 91%;
	--sidebar-border: 249 22% 24%;
	--sidebar-ring: 267 57% 78%;
}

/* Tokyo Night - https://github.com/tokyo-night/tokyo-night-vscode-theme */
.dark.theme-dark-tokyo-night {
	--background: 235 21% 14%; /* #1a1b26 Background */
	--foreground: 227 16% 73%; /* #a9b1d6 Foreground */
	--card: 234 22% 17%; /* #24283b Storm Background */
	--card-foreground: 227 16% 73%;
	--popover: 234 22% 17%;
	--popover-foreground: 227 16% 73%;
	--primary: 220 91% 72%; /* #7aa2f7 Blue */
	--primary-foreground: 235 21% 14%;
	--secondary: 234 22% 22%;
	--secondary-foreground: 227 16% 73%;
	--muted: 234 22% 22%;
	--muted-foreground: 221 17% 52%; /* #565f89 Comment */
	--accent: 234 22% 26%;
	--accent-foreground: 227 16% 73%;
	--destructive: 348 86% 70%; /* #f7768e Red */
	--destructive-foreground: 227 16% 73%;
	--border: 234 22% 26%;
	--input: 234 22% 26%;
	--ring: 220 91% 72%;
	--sidebar-background: 235 21% 11%;
	--sidebar-foreground: 227 16% 73%;
	--sidebar-primary: 220 91% 72%;
	--sidebar-primary-foreground: 235 21% 14%;
	--sidebar-accent: 234 22% 18%;
	--sidebar-accent-foreground: 227 16% 73%;
	--sidebar-border: 234 22% 20%;
	--sidebar-ring: 220 91% 72%;
}

/* Nord Dark - https://www.nordtheme.com/ */
.dark.theme-dark-nord {
	--background: 220 16% 22%; /* #2e3440 Nord0 */
	--foreground: 219 28% 88%; /* #d8dee9 Nord4 */
	--card: 222 16% 26%; /* #3b4252 Nord1 */
	--card-foreground: 219 28% 88%;
	--popover: 222 16% 26%;
	--popover-foreground: 219 28% 88%;
	--primary: 210 34% 63%; /* #81a1c1 Nord9 */
	--primary-foreground: 220 16% 22%;
	--secondary: 220 17% 32%; /* #434c5e Nord2 */
	--secondary-foreground: 219 28% 88%;
	--muted: 220 17% 32%;
	--muted-foreground: 219 14% 64%; /* #8fbcbb Nord7 */
	--accent: 220 16% 36%;
	--accent-foreground: 219 28% 88%;
	--destructive: 354 42% 56%; /* #bf616a Nord11 */
	--destructive-foreground: 219 28% 88%;
	--border: 220 16% 30%;
	--input: 220 16% 30%;
	--ring: 210 34% 63%;
	--sidebar-background: 220 16% 18%;
	--sidebar-foreground: 219 28% 88%;
	--sidebar-primary: 210 34% 63%;
	--sidebar-primary-foreground: 220 16% 22%;
	--sidebar-accent: 222 16% 24%;
	--sidebar-accent-foreground: 219 28% 88%;
	--sidebar-border: 220 16% 26%;
	--sidebar-ring: 210 34% 63%;
}

/* One Dark - https://github.com/atom/one-dark-syntax */
.dark.theme-dark-one-dark {
	--background: 220 13% 18%; /* #282c34 Background */
	--foreground: 220 14% 71%; /* #abb2bf Foreground */
	--card: 220 13% 21%;
	--card-foreground: 220 14% 71%;
	--popover: 220 13% 21%;
	--popover-foreground: 220 14% 71%;
	--primary: 207 82% 66%; /* #61afef Blue */
	--primary-foreground: 220 13% 18%;
	--secondary: 220 13% 25%;
	--secondary-foreground: 220 14% 71%;
	--muted: 220 13% 25%;
	--muted-foreground: 220 9% 46%; /* #5c6370 Comment */
	--accent: 220 13% 28%;
	--accent-foreground: 220 14% 71%;
	--destructive: 355 65% 65%; /* #e06c75 Red */
	--destructive-foreground: 220 14% 71%;
	--border: 220 13% 28%;
	--input: 220 13% 28%;
	--ring: 207 82% 66%;
	--sidebar-background: 220 13% 15%;
	--sidebar-foreground: 220 14% 71%;
	--sidebar-primary: 207 82% 66%;
	--sidebar-primary-foreground: 220 13% 18%;
	--sidebar-accent: 220 13% 22%;
	--sidebar-accent-foreground: 220 14% 71%;
	--sidebar-border: 220 13% 24%;
	--sidebar-ring: 207 82% 66%;
}

/* Gruvbox Dark - https://github.com/morhetz/gruvbox */
.dark.theme-dark-gruvbox {
	--background: 0 0% 16%; /* #282828 bg0 */
	--foreground: 47 73% 85%; /* #ebdbb2 fg1 */
	--card: 10 6% 18%; /* #3c3836 bg1 */
	--card-foreground: 47 73% 85%;
	--popover: 10 6% 18%;
	--popover-foreground: 47 73% 85%;
	--primary: 61 66% 44%; /* #b8bb26 Green */
	--primary-foreground: 0 0% 16%;
	--secondary: 10 6% 22%; /* #504945 bg2 */
	--secondary-foreground: 47 73% 85%;
	--muted: 10 6% 22%;
	--muted-foreground: 36 33% 64%; /* #a89984 fg4 */
	--accent: 10 6% 26%;
	--accent-foreground: 47 73% 85%;
	--destructive: 0 73% 59%; /* #fb4934 Red */
	--destructive-foreground: 47 73% 85%;
	--border: 10 6% 26%;
	--input: 10 6% 26%;
	--ring: 61 66% 44%;
	--sidebar-background: 0 0% 13%; /* #1d2021 bg0_h */
	--sidebar-foreground: 47 73% 85%;
	--sidebar-primary: 61 66% 44%;
	--sidebar-primary-foreground: 0 0% 16%;
	--sidebar-accent: 10 6% 20%;
	--sidebar-accent-foreground: 47 73% 85%;
	--sidebar-border: 10 6% 22%;
	--sidebar-ring: 61 66% 44%;
}

/* Solarized Dark - https://ethanschoonover.com/solarized/ */
.dark.theme-dark-solarized {
	--background: 192 100% 11%; /* #002b36 Base03 */
	--foreground: 186 8% 55%; /* #839496 Base0 */
	--card: 192 81% 14%; /* #073642 Base02 */
	--card-foreground: 186 8% 55%;
	--popover: 192 81% 14%;
	--popover-foreground: 186 8% 55%;
	--primary: 205 69% 49%; /* #268bd2 Blue */
	--primary-foreground: 192 100% 11%;
	--secondary: 192 81% 18%;
	--secondary-foreground: 186 8% 55%;
	--muted: 192 81% 18%;
	--muted-foreground: 186 13% 40%; /* #657b83 Base00 */
	--accent: 192 81% 22%;
	--accent-foreground: 186 8% 55%;
	--destructive: 1 71% 52%; /* #dc322f Red */
	--destructive-foreground: 186 8% 55%;
	--border: 192 81% 22%;
	--input: 192 81% 22%;
	--ring: 205 69% 49%;
	--sidebar-background: 192 100% 9%;
	--sidebar-foreground: 186 8% 55%;
	--sidebar-primary: 205 69% 49%;
	--sidebar-primary-foreground: 192 100% 11%;
	--sidebar-accent: 192 81% 16%;
	--sidebar-accent-foreground: 186 8% 55%;
	--sidebar-border: 192 81% 18%;
	--sidebar-ring: 205 69% 49%;
}

/* Everforest Dark - https://github.com/sainnhe/everforest */
.dark.theme-dark-everforest {
	--background: 150 10% 16%; /* #2d353b bg0 */
	--foreground: 75 11% 77%; /* #d3c6aa fg */
	--card: 150 9% 18%; /* #343f44 bg1 */
	--card-foreground: 75 11% 77%;
	--popover: 150 9% 18%;
	--popover-foreground: 75 11% 77%;
	--primary: 93 37% 63%; /* #a7c080 Green */
	--primary-foreground: 150 10% 16%;
	--secondary: 150 9% 22%; /* #3d484d bg2 */
	--secondary-foreground: 75 11% 77%;
	--muted: 150 9% 22%;
	--muted-foreground: 75 6% 60%; /* #9da9a0 Grey1 */
	--accent: 150 9% 26%;
	--accent-foreground: 75 11% 77%;
	--destructive: 0 43% 63%; /* #e67e80 Red */
	--destructive-foreground: 75 11% 77%;
	--border: 150 9% 26%;
	--input: 150 9% 26%;
	--ring: 93 37% 63%;
	--sidebar-background: 150 10% 13%;
	--sidebar-foreground: 75 11% 77%;
	--sidebar-primary: 93 37% 63%;
	--sidebar-primary-foreground: 150 10% 16%;
	--sidebar-accent: 150 9% 19%;
	--sidebar-accent-foreground: 75 11% 77%;
	--sidebar-border: 150 9% 22%;
	--sidebar-ring: 93 37% 63%;
}

/* Kanagawa - https://github.com/rebelot/kanagawa.nvim */
.dark.theme-dark-kanagawa {
	--background: 225 17% 14%; /* #1f1f28 sumiInk1 */
	--foreground: 39 9% 80%; /* #dcd7ba fujiWhite */
	--card: 225 15% 17%; /* #2a2a37 sumiInk3 */
	--card-foreground: 39 9% 80%;
	--popover: 225 15% 17%;
	--popover-foreground: 39 9% 80%;
	--primary: 223 47% 67%; /* #7e9cd8 crystalBlue */
	--primary-foreground: 225 17% 14%;
	--secondary: 225 14% 21%; /* #363646 sumiInk4 */
	--secondary-foreground: 39 9% 80%;
	--muted: 225 14% 21%;
	--muted-foreground: 225 7% 52%; /* #727169 fujiGray */
	--accent: 225 14% 26%;
	--accent-foreground: 39 9% 80%;
	--destructive: 7 73% 66%; /* #e82424 samuraiRed */
	--destructive-foreground: 39 9% 80%;
	--border: 225 14% 26%;
	--input: 225 14% 26%;
	--ring: 223 47% 67%;
	--sidebar-background: 225 17% 11%;
	--sidebar-foreground: 39 9% 80%;
	--sidebar-primary: 223 47% 67%;
	--sidebar-primary-foreground: 225 17% 14%;
	--sidebar-accent: 225 15% 18%;
	--sidebar-accent-foreground: 39 9% 80%;
	--sidebar-border: 225 14% 22%;
	--sidebar-ring: 223 47% 67%;
}

/* Monokai - https://monokai.pro/spec */
.dark.theme-dark-monokai {
	--background: 70 8% 15%; /* #272822 */
	--foreground: 60 36% 96%; /* #f8f8f2 */
	--card: 70 8% 18%;
	--card-foreground: 60 36% 96%;
	--popover: 70 8% 18%;
	--popover-foreground: 60 36% 96%;
	--primary: 338 95% 56%; /* #f92672 Pink */
	--primary-foreground: 60 36% 96%;
	--secondary: 70 8% 22%;
	--secondary-foreground: 60 36% 96%;
	--muted: 70 8% 22%;
	--muted-foreground: 50 11% 53%; /* #75715e Comment */
	--accent: 70 8% 28%;
	--accent-foreground: 60 36% 96%;
	--destructive: 338 95% 56%;
	--destructive-foreground: 60 36% 96%;
	--border: 70 8% 25%;
	--input: 70 8% 25%;
	--ring: 338 95% 56%;
	--sidebar-background: 70 8% 11%;
	--sidebar-foreground: 60 36% 96%;
	--sidebar-primary: 338 95% 56%;
	--sidebar-primary-foreground: 60 36% 96%;
	--sidebar-accent: 70 8% 18%;
	--sidebar-accent-foreground: 60 36% 96%;
	--sidebar-border: 70 8% 20%;
	--sidebar-ring: 338 95% 56%;
}

/* Monokai Pro - https://monokai.pro/ */
.dark.theme-dark-monokai-pro {
	--background: 220 10% 18%; /* #2d2a2e */
	--foreground: 20 5% 90%; /* #fcfcfa */
	--card: 220 10% 21%;
	--card-foreground: 20 5% 90%;
	--popover: 220 10% 21%;
	--popover-foreground: 20 5% 90%;
	--primary: 349 100% 73%; /* #ff6188 */
	--primary-foreground: 220 10% 18%;
	--secondary: 220 10% 26%;
	--secondary-foreground: 20 5% 90%;
	--muted: 220 10% 26%;
	--muted-foreground: 220 6% 50%; /* #727072 */
	--accent: 220 10% 32%;
	--accent-foreground: 20 5% 90%;
	--destructive: 349 100% 73%;
	--destructive-foreground: 220 10% 18%;
	--border: 220 10% 28%;
	--input: 220 10% 28%;
	--ring: 349 100% 73%;
	--sidebar-background: 220 10% 14%;
	--sidebar-foreground: 20 5% 90%;
	--sidebar-primary: 349 100% 73%;
	--sidebar-primary-foreground: 220 10% 18%;
	--sidebar-accent: 220 10% 22%;
	--sidebar-accent-foreground: 20 5% 90%;
	--sidebar-border: 220 10% 24%;
	--sidebar-ring: 349 100% 73%;
}

/* Material Dark - https://material-theme.com/ */
.dark.theme-dark-material {
	--background: 200 19% 18%; /* #263238 Blue Grey 900 */
	--foreground: 0 0% 93%; /* #eeffff */
	--card: 200 18% 21%;
	--card-foreground: 0 0% 93%;
	--popover: 200 18% 21%;
	--popover-foreground: 0 0% 93%;
	--primary: 174 42% 65%; /* #80cbc4 Teal 200 */
	--primary-foreground: 200 19% 18%;
	--secondary: 200 18% 26%;
	--secondary-foreground: 0 0% 93%;
	--muted: 200 18% 26%;
	--muted-foreground: 199 18% 49%; /* #546e7a Blue Grey 500 */
	--accent: 200 18% 30%;
	--accent-foreground: 0 0% 93%;
	--destructive: 1 77% 55%; /* #f07178 */
	--destructive-foreground: 0 0% 93%;
	--border: 200 18% 28%;
	--input: 200 18% 28%;
	--ring: 174 42% 65%;
	--sidebar-background: 200 19% 14%;
	--sidebar-foreground: 0 0% 93%;
	--sidebar-primary: 174 42% 65%;
	--sidebar-primary-foreground: 200 19% 18%;
	--sidebar-accent: 200 18% 22%;
	--sidebar-accent-foreground: 0 0% 93%;
	--sidebar-border: 200 18% 24%;
	--sidebar-ring: 174 42% 65%;
}

/* Palenight - https://github.com/whizkydee/vscode-palenight-theme */
.dark.theme-dark-palenight {
	--background: 229 27% 20%; /* #292d3e */
	--foreground: 229 35% 88%; /* #bfc7d5 */
	--card: 229 26% 24%;
	--card-foreground: 229 35% 88%;
	--popover: 229 26% 24%;
	--popover-foreground: 229 35% 88%;
	--primary: 286 60% 67%; /* #c792ea Purple */
	--primary-foreground: 229 27% 20%;
	--secondary: 229 24% 30%;
	--secondary-foreground: 229 35% 88%;
	--muted: 229 24% 30%;
	--muted-foreground: 229 20% 50%; /* #676e95 */
	--accent: 229 24% 35%;
	--accent-foreground: 229 35% 88%;
	--destructive: 355 65% 65%; /* #f07178 */
	--destructive-foreground: 229 35% 88%;
	--border: 229 24% 32%;
	--input: 229 24% 32%;
	--ring: 286 60% 67%;
	--sidebar-background: 229 27% 16%;
	--sidebar-foreground: 229 35% 88%;
	--sidebar-primary: 286 60% 67%;
	--sidebar-primary-foreground: 229 27% 20%;
	--sidebar-accent: 229 26% 26%;
	--sidebar-accent-foreground: 229 35% 88%;
	--sidebar-border: 229 24% 28%;
	--sidebar-ring: 286 60% 67%;
}

/* GitHub Dark - https://primer.style/primitives/colors */
.dark.theme-dark-github {
	--background: 215 21% 11%; /* #0d1117 */
	--foreground: 210 17% 82%; /* #c9d1d9 */
	--card: 215 19% 14%; /* #161b22 */
	--card-foreground: 210 17% 82%;
	--popover: 215 19% 14%;
	--popover-foreground: 210 17% 82%;
	--primary: 212 100% 67%; /* #58a6ff */
	--primary-foreground: 215 21% 11%;
	--secondary: 215 18% 18%;
	--secondary-foreground: 210 17% 82%;
	--muted: 215 18% 18%;
	--muted-foreground: 215 13% 47%; /* #8b949e */
	--accent: 215 18% 22%;
	--accent-foreground: 210 17% 82%;
	--destructive: 356 72% 65%; /* #f85149 */
	--destructive-foreground: 210 17% 82%;
	--border: 215 18% 20%;
	--input: 215 18% 20%;
	--ring: 212 100% 67%;
	--sidebar-background: 215 21% 8%;
	--sidebar-foreground: 210 17% 82%;
	--sidebar-primary: 212 100% 67%;
	--sidebar-primary-foreground: 215 21% 11%;
	--sidebar-accent: 215 19% 15%;
	--sidebar-accent-foreground: 210 17% 82%;
	--sidebar-border: 215 18% 16%;
	--sidebar-ring: 212 100% 67%;
}

@layer base {
	* {
		@apply border-border;
	}
	body {
		@apply bg-background text-foreground;
		font-family: var(--font-sans);
	}
	button {
		cursor: pointer;
	}
}

/* Custom animations */
@keyframes speedy-entrance {
	0% {
		opacity: 0.3;
		transform: scale(0.9) translateY(-10px);
	}
	40% {
		opacity: 1;
		transform: scale(1.03) translateY(0);
	}
	70% {
		transform: scale(0.99);
	}
	100% {
		transform: scale(1);
	}
}

@keyframes subtle-pulse {
	0%, 100% {
		transform: scale(1);
	}
	50% {
		transform: scale(1.02);
	}
}

@keyframes sparkle-slide {
	0% {
		opacity: 0;
		transform: translateX(-20px) scale(0);
	}
	20% {
		opacity: 1;
		transform: translateX(0) scale(1.2);
	}
	40% {
		transform: translateX(0) scale(1);
	}
	60% {
		opacity: 1;
		transform: translateX(0) scale(1);
	}
	80%, 100% {
		opacity: 0;
		transform: translateX(0) scale(0);
	}
}

.animate-speedy {
	animation: speedy-entrance 0.6s cubic-bezier(0.22, 1, 0.36, 1) forwards,
	           subtle-pulse 2s ease-in-out 0.8s infinite;
	position: relative;
}

/* Sparkle base styles */
.sparkle {
	position: absolute;
	color: rgba(251, 191, 36, 0.9);
	text-shadow: 0 0 4px rgba(251, 191, 36, 0.6);
	animation: sparkle-slide 3s ease-out infinite;
	pointer-events: none;
	font-size: 12px;
	opacity: 0;
}

/* Position sparkles around the DOCKHAND text (bottom half of logo) - sequentially from left to right */
.sparkle-1 {
	bottom: 10px;
	left: 5%;
	font-size: 8px;
	animation-delay: 1s;
}

.sparkle-2 {
	bottom: 4px;
	left: 18%;
	font-size: 10px;
	animation-delay: 1.2s;
}

.sparkle-3 {
	bottom: 14px;
	left: 30%;
	font-size: 7px;
	animation-delay: 1.4s;
}

.sparkle-4 {
	bottom: 2px;
	left: 42%;
	font-size: 11px;
	animation-delay: 1.6s;
}

.sparkle-5 {
	bottom: 8px;
	left: 52%;
	font-size: 9px;
	animation-delay: 1.8s;
}

.sparkle-6 {
	bottom: 16px;
	left: 65%;
	font-size: 6px;
	animation-delay: 2s;
}

.sparkle-7 {
	bottom: 6px;
	left: 78%;
	font-size: 10px;
	animation-delay: 2.2s;
}

.sparkle-8 {
	bottom: 12px;
	left: 90%;
	font-size: 8px;
	animation-delay: 2.4s;
}

/* Click to jump animations - 3 levels */
@keyframes jump-small {
	0%, 100% {
		transform: translateY(0) rotate(0deg);
	}
	30% {
		transform: translateY(-10px) rotate(-2deg);
	}
	60% {
		transform: translateY(0) rotate(0deg);
	}
}

@keyframes jump-medium {
	0%, 100% {
		transform: translateY(0) rotate(0deg);
	}
	20% {
		transform: translateY(-20px) rotate(-3deg);
	}
	40% {
		transform: translateY(0) rotate(0deg);
	}
	60% {
		transform: translateY(-10px) rotate(2deg);
	}
	80% {
		transform: translateY(0) rotate(0deg);
	}
}

@keyframes jump-big {
	0%, 100% {
		transform: translateY(0) rotate(0deg);
	}
	10% {
		transform: translateY(-30px) rotate(-5deg);
	}
	20% {
		transform: translateY(0) rotate(0deg);
	}
	30% {
		transform: translateY(-20px) rotate(5deg);
	}
	40% {
		transform: translateY(0) rotate(0deg);
	}
	50% {
		transform: translateY(-10px) rotate(-3deg);
	}
	60% {
		transform: translateY(0) rotate(0deg);
	}
}

.animate-speedy.jumping-0 {
	animation: jump-small 0.5s ease-out !important;
	cursor: pointer;
}

.animate-speedy.jumping-1 {
	animation: jump-medium 0.6s ease-out !important;
	cursor: pointer;
}

.animate-speedy.jumping-2 {
	animation: jump-big 0.8s ease-out !important;
	cursor: pointer;
}

@keyframes crazy-jump {
	0%, 100% {
		transform: translateY(0) rotate(0deg) scale(1);
	}
	5% {
		transform: translateY(-50px) rotate(-15deg) scale(1.1);
	}
	10% {
		transform: translateY(0) rotate(10deg) scale(0.9);
	}
	15% {
		transform: translateY(-40px) rotate(20deg) scale(1.15);
	}
	20% {
		transform: translateY(0) rotate(-15deg) scale(0.85);
	}
	25% {
		transform: translateY(-35px) rotate(-25deg) scale(1.1);
	}
	30% {
		transform: translateY(0) rotate(15deg) scale(0.9);
	}
	40% {
		transform: translateY(-25px) rotate(10deg) scale(1.05);
	}
	50% {
		transform: translateY(0) rotate(-5deg) scale(0.95);
	}
	60% {
		transform: translateY(-15px) rotate(5deg) scale(1);
	}
	70% {
		transform: translateY(0) rotate(0deg) scale(1);
	}
}

.animate-speedy.crazy-jumping {
	animation: crazy-jump 1.2s ease-out !important;
	cursor: pointer;
}

.animate-speedy.clicked {
	animation: none;
}

.animate-speedy {
	cursor: pointer;
}

/* Easter egg popup */
.easter-egg-popup {
	position: absolute;
	top: calc(100% + 20px);
	left: 50%;
	transform: translateX(-50%);
	background: linear-gradient(135deg, rgba(251, 191, 36, 0.95), rgba(245, 158, 11, 0.95));
	color: #1a1a1a;
	padding: 0.75rem 1rem;
	border-radius: 0.75rem;
	font-weight: 600;
	font-size: 0.85rem;
	text-align: center;
	white-space: nowrap;
	box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2), 0 0 20px rgba(251, 191, 36, 0.3);
	z-index: 9999;
	animation: popup-jump 0.5s ease-out;
}

.easter-egg-popup::before {
	content: '';
	position: absolute;
	top: -8px;
	left: 50%;
	transform: translateX(-50%);
	border-left: 8px solid transparent;
	border-right: 8px solid transparent;
	border-bottom: 8px solid rgba(251, 191, 36, 0.95);
}

@keyframes popup-jump {
	0% {
		opacity: 0;
		transform: translateX(-50%) translateY(-20px) scale(0.5);
	}
	50% {
		transform: translateX(-50%) translateY(10px) scale(1.1);
	}
	70% {
		transform: translateX(-50%) translateY(-5px) scale(0.95);
	}
	100% {
		opacity: 1;
		transform: translateX(-50%) translateY(0) scale(1);
	}
}

/* Tagline text styling */
.tagline-text {
	min-height: 1.5em;
}

@keyframes tagline-zoom-in {
	0% {
		opacity: 0;
		transform: scale(1.8);
		filter: blur(4px);
	}
	30% {
		opacity: 1;
		transform: scale(1.3);
		filter: blur(1px);
	}
	60% {
		transform: scale(0.95);
		filter: blur(0);
	}
	80% {
		transform: scale(1.02);
	}
	100% {
		opacity: 1;
		transform: scale(1);
		filter: blur(0);
	}
}

.tagline-zoom {
	animation: tagline-zoom-in 0.5s ease-out;
}

/* Stat box styling for About page */
.stat-box {
	display: flex;
	flex-direction: column;
	align-items: center;
	padding: 0.75rem 0.5rem;
	border-radius: 0.75rem;
	background: linear-gradient(135deg, hsl(var(--muted) / 0.3), hsl(var(--muted) / 0.5));
	transition: all 0.2s ease;
}

.stat-box:hover {
	transform: translateY(-2px);
	box-shadow: 0 4px 12px hsl(var(--foreground) / 0.1);
}

.stat-icon-wrapper {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 2rem;
	height: 2rem;
	border-radius: 0.5rem;
	margin-bottom: 0.5rem;
}

.stat-box-blue:hover {
	background: linear-gradient(135deg, rgb(59 130 246 / 0.08), rgb(59 130 246 / 0.15));
}

.stat-box-cyan:hover {
	background: linear-gradient(135deg, rgb(6 182 212 / 0.08), rgb(6 182 212 / 0.15));
}

.stat-box-purple:hover {
	background: linear-gradient(135deg, rgb(168 85 247 / 0.08), rgb(168 85 247 / 0.15));
}

.stat-box-green:hover {
	background: linear-gradient(135deg, rgb(34 197 94 / 0.08), rgb(34 197 94 / 0.15));
}

.stat-box-orange:hover {
	background: linear-gradient(135deg, rgb(249 115 22 / 0.08), rgb(249 115 22 / 0.15));
}

.stat-box-amber:hover {
	background: linear-gradient(135deg, rgb(245 158 11 / 0.08), rgb(245 158 11 / 0.15));
}

/* Custom text size for very small labels (10px) */
@layer utilities {
	.text-2xs {
		font-size: 10px;
		line-height: 14px;
	}

	/* Icon glow utilities - standard size (4px blur, 0.6 opacity) */
	.glow-green { filter: drop-shadow(0 0 4px rgba(34, 197, 94, 0.6)); }
	.glow-green-sm { filter: drop-shadow(0 0 3px rgba(34, 197, 94, 0.5)); }
	.glow-amber { filter: drop-shadow(0 0 4px rgba(245, 158, 11, 0.6)); }
	.glow-amber-sm { filter: drop-shadow(0 0 3px rgba(245, 158, 11, 0.5)); }
	.glow-blue { filter: drop-shadow(0 0 4px rgba(59, 130, 246, 0.6)); }
	.glow-purple { filter: drop-shadow(0 0 4px rgba(168, 85, 247, 0.6)); }
	.glow-cyan { filter: drop-shadow(0 0 4px rgba(6, 182, 212, 0.6)); }
	.glow-sky { filter: drop-shadow(0 0 4px rgba(56, 189, 248, 0.6)); }
}

/* Improved warning colors for dark mode readability */
@layer utilities {
	/* Yellow warning text - brighter in dark mode */
	.dark .text-yellow-500 {
		color: rgb(253 224 71) !important; /* yellow-300 */
	}
	.dark .text-yellow-600 {
		color: rgb(250 204 21) !important; /* yellow-400 */
	}

	/* Amber warning text - brighter in dark mode */
	.dark .text-amber-500 {
		color: rgb(252 211 77) !important; /* amber-300 */
	}
	.dark .text-amber-600 {
		color: rgb(251 191 36) !important; /* amber-400 */
	}

	/* Orange warning text - brighter in dark mode */
	.dark .text-orange-500 {
		color: rgb(253 186 116) !important; /* orange-300 */
	}
	.dark .text-orange-600 {
		color: rgb(251 146 60) !important; /* orange-400 */
	}

	/* Red error text - brighter in dark mode */
	.dark .text-red-500 {
		color: rgb(254 202 202) !important; /* red-200 */
	}
	.dark .text-red-600 {
		color: rgb(252 165 165) !important; /* red-300 */
	}
}

/* Update available icon animation */
@keyframes bounce-once {
	0%, 100% {
		transform: scale(1);
	}
	25% {
		transform: scale(1.4);
	}
	50% {
		transform: scale(0.9);
	}
	75% {
		transform: scale(1.15);
	}
}

.animate-bounce-once {
	animation: bounce-once 0.6s ease-out;
}

/* CodeMirror selection - override theme defaults for dark mode */
.cm-editor .cm-selectionBackground,
.cm-editor.cm-focused .cm-selectionBackground,
.cm-editor.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground {
	background-color: #3d4654 !important;
}

/* ============================================
   Data Grid - Sticky Columns & Column Resize
   ============================================ */

/* Container must have horizontal scroll */
.data-grid-wrapper {
	overflow-x: auto;
	position: relative;
}

/* Table uses fixed layout for resize to work */
/* min-width ensures table fills container; inline style overrides when calculated */
.data-grid {
	table-layout: fixed;
	border-collapse: separate;
	border-spacing: 0;
	min-width: 100%;
}

/* Allow content to truncate with ellipsis when column is shrunk */
.data-grid td,
.data-grid th {
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

/* Columns marked with noTruncate should not be truncated */
.data-grid td.no-truncate,
.data-grid th.no-truncate {
	overflow: visible;
	text-overflow: clip;
}

/* Allow flex containers inside cells to shrink below content width */
.data-grid td .flex,
.data-grid th .flex {
	min-width: 0;
	overflow: hidden;
}

/* Select column (checkbox) - fixed width, don't grow, centered */
.data-grid th.select-col,
.data-grid td.select-col {
	width: 32px !important;
	min-width: 32px;
	max-width: 32px;
	text-align: center;
}

.data-grid th.select-col > *,
.data-grid td.select-col > * {
	margin: 0 auto;
}

/* Expand column - fixed width, no border, centered */
.data-grid th.expand-col,
.data-grid td.expand-col {
	width: 24px !important;
	min-width: 24px;
	max-width: 24px;
	border-right: none !important;
	text-align: center;
}

.data-grid th.expand-col > *,
.data-grid td.expand-col > * {
	margin: 0 auto;
}

/* Actions column - width controlled by DataGrid component */
.data-grid .actions-col {
	min-width: 150px;
}

/* Subtle cell borders */
.data-grid td {
	border-right: 1px solid hsl(var(--border) / 0.3);
	border-bottom: 1px solid hsl(var(--border) / 0.3);
}

.data-grid th {
	border-right: 1px solid hsl(var(--border) / 0.3);
	border-bottom: 1px solid hsl(var(--border) / 0.5);
}

/* Remove right border from actions column */
.data-grid td.actions-col,
.data-grid th.actions-col {
	border-right: none;
}

/* Header cells need relative positioning for resize handles */
.data-grid th {
	position: relative;
}

/* Ensure non-sticky cells don't create stacking context */
.data-grid tbody td:not(.select-col):not(.actions-col) {
	position: static;
	z-index: auto;
}

/* Sticky select column (checkbox) - body cells */
.data-grid td.select-col {
	position: sticky;
	left: 0;
	z-index: 2;
}

/* Sticky actions column - body cells */
.data-grid td.actions-col {
	position: sticky;
	right: 0;
	z-index: 2;
}

/* Sticky header cells need higher z-index than body */
.data-grid th.select-col,
.data-grid th.actions-col {
	position: sticky;
	z-index: 12;
}

.data-grid th.select-col {
	left: 0;
}

.data-grid th.actions-col {
	right: 0;
}

/* Actions header extension - covers content on both sides */
.data-grid thead th.actions-col {
	/* Extend the cell visually to cover scrolling content */
	position: sticky;
	right: 0;
	z-index: 12;
	background: hsl(var(--muted));
	/* Use box-shadow to extend background in both directions */
	box-shadow:
		-20px 0 0 0 hsl(var(--muted)),  /* Left - covers scrolling headers */
		20px 0 0 0 hsl(var(--muted));   /* Right - covers gap to edge */
	border-top-right-radius: 0.5rem;
	/* Clip path allows shadows but keeps rounded corner */
	clip-path: inset(-1px -20px -1px -20px round 0 0.5rem 0 0);
}

/* Body cell backgrounds for sticky columns */
.data-grid td.select-col,
.data-grid td.actions-col {
	background: hsl(var(--background));
}

/* Header cell backgrounds for sticky columns (match header bg-muted) */
.data-grid thead th.select-col,
.data-grid thead th.actions-col {
	background: hsl(var(--muted));
}

/* Header row stays on top of everything */
.data-grid thead {
	position: sticky;
	top: 0;
	z-index: 10;
}

/* Header sticky columns need higher z-index */
.data-grid thead th.select-col,
.data-grid thead th.actions-col {
	z-index: 11;
}


/* Row hover - all cells same color (including sticky columns) */
.data-grid tbody tr:hover td,
.data-grid tbody tr:hover td.select-col,
.data-grid tbody tr:hover td.actions-col {
	background: hsl(var(--muted));
}

/* Selected row background - solid color using color-mix for sticky column compatibility */
.data-grid tbody tr.selected td,
.data-grid tbody tr.selected td.select-col,
.data-grid tbody tr.selected td.actions-col {
	background: color-mix(in srgb, hsl(var(--primary)) 10%, hsl(var(--background)));
}

/* Selected row hover - slightly stronger tint */
.data-grid tbody tr.selected:hover td,
.data-grid tbody tr.selected:hover td.select-col,
.data-grid tbody tr.selected:hover td.actions-col {
	background: color-mix(in srgb, hsl(var(--primary)) 15%, hsl(var(--background)));
}

/* Checkbox-selected row background - amber tint */
.data-grid tbody tr.checkbox-selected td,
.data-grid tbody tr.checkbox-selected td.select-col,
.data-grid tbody tr.checkbox-selected td.actions-col {
	background: color-mix(in srgb, #f59e0b 8%, hsl(var(--background)));
}

/* Checkbox-selected row hover */
.data-grid tbody tr.checkbox-selected:hover td,
.data-grid tbody tr.checkbox-selected:hover td.select-col,
.data-grid tbody tr.checkbox-selected:hover td.actions-col {
	background: color-mix(in srgb, #f59e0b 12%, hsl(var(--background)));
}

/* Row with expanded content below - subtle indicator */
.data-grid tbody tr.row-expanded td,
.data-grid tbody tr.row-expanded td.select-col,
.data-grid tbody tr.row-expanded td.actions-col {
	background: color-mix(in srgb, hsl(var(--muted)) 50%, hsl(var(--background)));
	border-bottom: none;
}

.data-grid tbody tr.row-expanded:hover td,
.data-grid tbody tr.row-expanded:hover td.select-col,
.data-grid tbody tr.row-expanded:hover td.actions-col {
	background: color-mix(in srgb, hsl(var(--muted)) 70%, hsl(var(--background)));
}

/* Expanded row - no background on td, let content control it */
.data-grid tbody tr.expanded-row td,
.data-grid tbody tr.expanded-row td.select-col,
.data-grid tbody tr.expanded-row td.actions-col {
	padding: 0;
	background: transparent;
	border-bottom: 1px solid hsl(var(--border));
	overflow: hidden;
}

.data-grid tbody tr.expanded-row:hover td,
.data-grid tbody tr.expanded-row:hover td.select-col,
.data-grid tbody tr.expanded-row:hover td.actions-col {
	background: transparent;
}

/* Nested grid styling (inside expanded rows) */
.data-grid.nested-grid {
	border: none;
	min-width: 0;
	width: auto;
}

.data-grid.nested-grid thead th {
	background: transparent !important;
	border-bottom: 1px solid hsl(var(--border) / 0.5);
	padding-top: 0.25rem !important;
	padding-bottom: 0.25rem !important;
}

.data-grid.nested-grid thead {
	background: transparent !important;
}

.data-grid.nested-grid thead th:first-child,
.data-grid.nested-grid thead th:last-child,
.data-grid.nested-grid thead th.actions-col {
	background: transparent !important;
	box-shadow: none !important;
	clip-path: none !important;
}

/* Nested grid first/last columns are NOT sticky - disable fixed sizing */
.data-grid.nested-grid td:first-child {
	width: unset !important;
	min-width: 0 !important;
	max-width: none !important;
	position: static !important;
}

/* Header cells still need relative for resize handles */
.data-grid.nested-grid th:first-child {
	width: unset !important;
	min-width: 0 !important;
	max-width: none !important;
}

.data-grid.nested-grid td:last-child {
	position: static !important;
}

.data-grid.nested-grid tbody td {
	background: transparent;
	border-right: none;
	border-bottom: 1px solid hsl(var(--border) / 0.3);
}

.data-grid.nested-grid tbody td:first-child,
.data-grid.nested-grid tbody td:last-child,
.data-grid.nested-grid tbody td.actions-col {
	background: transparent;
}

.data-grid.nested-grid tbody tr:hover td,
.data-grid.nested-grid tbody tr:hover td:first-child,
.data-grid.nested-grid tbody tr:hover td:last-child,
.data-grid.nested-grid tbody tr:hover td.actions-col {
	background: hsl(var(--muted) / 0.3);
}

/* Resize handle styling */
.resize-handle {
	position: absolute;
	top: 0;
	right: -2px;
	width: 5px;
	height: 100%;
	cursor: col-resize;
	background: transparent;
	z-index: 5;
}

.resize-handle:hover,
.resize-handle:active {
	background: hsl(var(--primary) / 0.4);
}

/* Left-side resize handle for fixed end columns */
.resize-handle-left {
	right: auto;
	left: -2px;
	z-index: 15;
}



/* ansi_up color classes (use_classes = true) — shared by all log viewers */
.ansi-black-fg { color: #3f3f46; }
.ansi-red-fg { color: #ef4444; }
.ansi-green-fg { color: #22c55e; }
.ansi-yellow-fg { color: #eab308; }
.ansi-blue-fg { color: #3b82f6; }
.ansi-magenta-fg { color: #d946ef; }
.ansi-cyan-fg { color: #06b6d4; }
.ansi-white-fg { color: #e4e4e7; }
.ansi-bright-black-fg { color: #71717a; }
.ansi-bright-red-fg { color: #f87171; }
.ansi-bright-green-fg { color: #4ade80; }
.ansi-bright-yellow-fg { color: #facc15; }
.ansi-bright-blue-fg { color: #60a5fa; }
.ansi-bright-magenta-fg { color: #e879f9; }
.ansi-bright-cyan-fg { color: #22d3ee; }
.ansi-bright-white-fg { color: #fafafa; }
.ansi-black-bg { background-color: #18181b; }
.ansi-red-bg { background-color: #dc2626; }
.ansi-green-bg { background-color: #16a34a; }
.ansi-yellow-bg { background-color: #ca8a04; }
.ansi-blue-bg { background-color: #2563eb; }
.ansi-magenta-bg { background-color: #c026d3; }
.ansi-cyan-bg { background-color: #0891b2; }
.ansi-white-bg { background-color: #d4d4d8; }
.ansi-bright-black-bg { background-color: #52525b; }
.ansi-bright-red-bg { background-color: #ef4444; }
.ansi-bright-green-bg { background-color: #22c55e; }
.ansi-bright-yellow-bg { background-color: #eab308; }
.ansi-bright-blue-bg { background-color: #3b82f6; }
.ansi-bright-magenta-bg { background-color: #d946ef; }
.ansi-bright-cyan-bg { background-color: #06b6d4; }
.ansi-bright-white-bg { background-color: #fafafa; }
.ansi-bold { font-weight: bold; }
.ansi-dim { opacity: 0.7; }
.ansi-italic { font-style: italic; }
.ansi-underline { text-decoration: underline; }

/* Log line numbers */
.log-line {
	min-height: 1.2em;
}
pre.show-line-numbers {
	counter-reset: log-line;
}
pre.show-line-numbers .log-line {
	counter-increment: log-line;
	padding-left: 4.5em;
	position: relative;
}
pre.show-line-numbers .log-line::before {
	content: counter(log-line);
	position: absolute;
	left: 0;
	width: 3.5em;
	text-align: right;
	padding-right: 0.75em;
	user-select: none;
	color: rgb(113 113 122); /* zinc-500 */
	border-right: 1px solid rgb(63 63 70); /* zinc-700 */
}
:where(.light, .light *) pre.show-line-numbers .log-line::before {
	color: rgb(156 163 175); /* gray-400 */
	border-right-color: rgb(209 213 219); /* gray-300 */
}
