@import "tailwindcss"; @import "tw-animate-css"; @import "shadcn/tailwind.css"; @custom-variant dark (&:is(.dark *)); /* ═══════════════════════════════════════════════════════ TUSK — "Twilight" Design System Soft dark with blue undertones and teal accents ═══════════════════════════════════════════════════════ */ @theme inline { --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); --radius-3xl: calc(var(--radius) + 12px); --radius-4xl: calc(var(--radius) + 16px); --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-border: var(--border); --color-input: var(--input); --color-ring: var(--ring); --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); --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); /* Custom semantic tokens */ --color-tusk-teal: var(--tusk-teal); --color-tusk-purple: var(--tusk-purple); --color-tusk-amber: var(--tusk-amber); --color-tusk-rose: var(--tusk-rose); --color-tusk-surface: var(--tusk-surface); /* Font families */ --font-sans: "Outfit", system-ui, -apple-system, sans-serif; --font-mono: "JetBrains Mono", "Fira Code", "Cascadia Code", ui-monospace, monospace; } :root { --radius: 0.5rem; /* Soft twilight palette — comfortable, not eye-straining */ --background: oklch(0.2 0.012 250); --foreground: oklch(0.9 0.005 250); --card: oklch(0.23 0.012 250); --card-foreground: oklch(0.9 0.005 250); --popover: oklch(0.25 0.014 250); --popover-foreground: oklch(0.9 0.005 250); /* Teal primary — slightly softer for the lighter background */ --primary: oklch(0.72 0.14 170); --primary-foreground: oklch(0.18 0.015 250); /* Surfaces — gentle stepping */ --secondary: oklch(0.27 0.012 250); --secondary-foreground: oklch(0.85 0.008 250); --muted: oklch(0.27 0.012 250); --muted-foreground: oklch(0.62 0.015 250); --accent: oklch(0.28 0.014 250); --accent-foreground: oklch(0.9 0.005 250); /* Status */ --destructive: oklch(0.65 0.2 15); /* Borders & inputs — more visible, less transparent */ --border: oklch(0.34 0.015 250 / 70%); --input: oklch(0.36 0.015 250 / 60%); --ring: oklch(0.72 0.14 170 / 40%); /* Chart palette */ --chart-1: oklch(0.72 0.14 170); --chart-2: oklch(0.68 0.14 200); --chart-3: oklch(0.78 0.14 85); --chart-4: oklch(0.62 0.18 290); --chart-5: oklch(0.68 0.16 30); /* Sidebar �� same family, slightly offset */ --sidebar: oklch(0.215 0.012 250); --sidebar-foreground: oklch(0.9 0.005 250); --sidebar-primary: oklch(0.72 0.14 170); --sidebar-primary-foreground: oklch(0.9 0.005 250); --sidebar-accent: oklch(0.28 0.014 250); --sidebar-accent-foreground: oklch(0.9 0.005 250); --sidebar-border: oklch(0.34 0.015 250 / 70%); --sidebar-ring: oklch(0.72 0.14 170 / 40%); /* Tusk semantic tokens */ --tusk-teal: oklch(0.72 0.14 170); --tusk-purple: oklch(0.62 0.2 290); --tusk-amber: oklch(0.78 0.14 85); --tusk-rose: oklch(0.65 0.2 15); --tusk-surface: oklch(0.26 0.012 250); } /* ═══════════════════════════════════════════════════════ Base layer ═══════════════════════════════════════════════════════ */ @layer base { * { @apply border-border outline-ring/50; } body { @apply bg-background text-foreground; font-family: var(--font-sans); overflow: hidden; user-select: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; } /* Monospace for code and data */ code, pre, .font-mono, [data-slot="sql-editor"], .cm-editor { font-family: var(--font-mono); } /* Smoother scrollbars */ ::-webkit-scrollbar { width: 6px; height: 6px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: oklch(0.42 0.015 250 / 45%); border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: oklch(0.5 0.015 250 / 60%); } ::-webkit-scrollbar-corner { background: transparent; } } /* ═══════════════════════════════════════════════════════ Noise texture overlay — very subtle depth ═══════════════════════════════════════════════════════ */ .tusk-noise::before { content: ""; position: fixed; inset: 0; z-index: 9999; pointer-events: none; opacity: 0.018; 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.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E"); background-repeat: repeat; background-size: 256px 256px; } /* ═══════════════════════════════════════════════════════ Glow effects — softer for lighter background ═══════════════════════════════════════════════════════ */ .tusk-glow-teal { box-shadow: 0 0 10px oklch(0.72 0.14 170 / 12%), 0 0 3px oklch(0.72 0.14 170 / 8%); } .tusk-glow-purple { box-shadow: 0 0 10px oklch(0.62 0.2 290 / 15%), 0 0 3px oklch(0.62 0.2 290 / 10%); } .tusk-glow-teal-subtle { box-shadow: 0 0 6px oklch(0.72 0.14 170 / 6%); } /* ═══════════════════════════════════════════════��═══════ Active tab indicator — top glow bar ═══════════════════════════════════════════════════════ */ .tusk-tab-active { position: relative; } .tusk-tab-active::after { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 2px; background: linear-gradient(90deg, oklch(0.72 0.14 170), oklch(0.68 0.14 200)); border-radius: 0 0 2px 2px; } /* ═══════════════════════════════════════════════════════ AI feature branding — purple glow language ═══════════════════════════════════════════════════════ */ .tusk-ai-bar { background: linear-gradient( 135deg, oklch(0.62 0.2 290 / 5%) 0%, oklch(0.62 0.2 290 / 2%) 50%, oklch(0.72 0.14 170 / 3%) 100% ); border-bottom: 1px solid oklch(0.62 0.2 290 / 12%); } .tusk-ai-icon { color: oklch(0.68 0.18 290); filter: drop-shadow(0 0 3px oklch(0.62 0.2 290 / 30%)); } /* ═══════════════════════════════════════════════════════ Transitions — smooth everything ═══════════════════════════════════════════════════════ */ button, a, [role="tab"], [role="menuitem"], [data-slot="button"] { transition: all 150ms cubic-bezier(0.4, 0, 0.2, 1); } /* ═══════════════════════════════════════════════════════ Glassmorphism for floating elements ═══════════════════════════════════════════════════════ */ [data-radix-popper-content-wrapper] [role="dialog"], [data-radix-popper-content-wrapper] [role="listbox"], [data-radix-popper-content-wrapper] [role="menu"], [data-state="open"][data-side] { backdrop-filter: blur(16px) saturate(1.2); -webkit-backdrop-filter: blur(16px) saturate(1.2); } /* ═══════════════════════════════════════════════════════ Sidebar tab active indicator ═══════════════════════════════════════════════════════ */ .tusk-sidebar-tab-active { position: relative; } .tusk-sidebar-tab-active::after { content: ""; position: absolute; bottom: 0; left: 25%; right: 25%; height: 2px; background: oklch(0.72 0.14 170); border-radius: 2px 2px 0 0; } /* ═══════════════════════════════════════════════════════ Data grid refinements ═══════════════════════════════════════════════════════ */ .tusk-grid-header { background: oklch(0.23 0.012 250); border-bottom: 1px solid oklch(0.34 0.015 250 / 80%); } .tusk-grid-row:hover { background: oklch(0.72 0.14 170 / 5%); } .tusk-grid-cell-null { color: oklch(0.5 0.015 250); font-style: italic; } .tusk-grid-cell-highlight { background: oklch(0.78 0.14 85 / 10%); } /* ═══════════════════════════════════════════════════════ Status bar ═══════════════════════════════════════════════════════ */ .tusk-status-bar { background: oklch(0.215 0.012 250); border-top: 1px solid oklch(0.34 0.015 250 / 50%); } /* ═══════════════════════════════════════════════════════ Connection color accent strip ═══════════════════════════════════════════════════════ */ .tusk-conn-strip { position: relative; } .tusk-conn-strip::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: var(--strip-width, 3px); background: var(--strip-color, transparent); border-radius: 0 2px 2px 0; } /* ═══════════════════════════════════════════════════════ Toolbar ═══════════════════════════════════════════════════════ */ .tusk-toolbar { background: oklch(0.23 0.012 250); border-bottom: 1px solid oklch(0.34 0.015 250 / 60%); } /* ═══════════════════════════════════════════════════════ Resizable handle ═══════════════════════════════════════════════════════ */ [data-panel-group-direction="horizontal"] > [data-resize-handle] { width: 1px !important; background: oklch(0.34 0.015 250 / 50%); transition: background 200ms, width 200ms; } [data-panel-group-direction="horizontal"] > [data-resize-handle]:hover, [data-panel-group-direction="horizontal"] > [data-resize-handle][data-resize-handle-active] { width: 3px !important; background: oklch(0.72 0.14 170 / 60%); } [data-panel-group-direction="vertical"] > [data-resize-handle] { height: 1px !important; background: oklch(0.34 0.015 250 / 50%); transition: background 200ms, height 200ms; } [data-panel-group-direction="vertical"] > [data-resize-handle]:hover, [data-panel-group-direction="vertical"] > [data-resize-handle][data-resize-handle-active] { height: 3px !important; background: oklch(0.72 0.14 170 / 60%); } /* ═══════════════════════════════════════════════════════ CodeMirror theme overrides ═══════════════════════════════════════════════════════ */ .cm-editor { font-size: 13px; line-height: 1.6; } .cm-editor .cm-gutters { background: oklch(0.215 0.012 250); border-right: 1px solid oklch(0.34 0.015 250 / 50%); color: oklch(0.48 0.012 250); } .cm-editor .cm-activeLineGutter { background: oklch(0.72 0.14 170 / 8%); color: oklch(0.65 0.015 250); } .cm-editor .cm-activeLine { background: oklch(0.72 0.14 170 / 4%); } .cm-editor .cm-cursor { border-left-color: oklch(0.72 0.14 170); } .cm-editor .cm-selectionBackground { background: oklch(0.72 0.14 170 / 15%) !important; } .cm-editor .cm-tooltip-autocomplete { backdrop-filter: blur(16px); background: oklch(0.25 0.014 250 / 95%); border: 1px solid oklch(0.34 0.015 250 / 70%); border-radius: 6px; box-shadow: 0 8px 32px oklch(0 0 0 / 30%); } /* ═══════════════════════════════════════════════════════ Sonner toast styling ═══════════════════════════════════════════════════════ */ [data-sonner-toaster] [data-sonner-toast] { font-family: var(--font-sans); backdrop-filter: blur(12px); } /* ═══════════════════════════════════════════════════════ Utility animations ═══════════════════════════════════════════════════════ */ @keyframes tusk-fade-in { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: translateY(0); } } @keyframes tusk-pulse-glow { 0%, 100% { opacity: 0.6; } 50% { opacity: 1; } } .tusk-fade-in { animation: tusk-fade-in 200ms cubic-bezier(0.4, 0, 0.2, 1); } .tusk-pulse-glow { animation: tusk-pulse-glow 2s ease-in-out infinite; } /* ═══════════════════════════════════════════════════════ Selection styling ═══════════════════════════════════════════════════════ */ ::selection { background: oklch(0.72 0.14 170 / 25%); color: oklch(0.95 0.005 250); }