@import "tailwindcss"; @import "tw-animate-css"; @source "../app/**/*.tsx"; @source "../node_modules/streamdown/dist/*.js"; @source "../../../bifrost-enterprise/ui/**/*.tsx"; @custom-variant dark (&:is(.dark *)); /* ─── Local Geist fonts ─────────────────────────────────────────────────── * Variable woff2 files self-hosted from public/static/fonts/. * Self-hosted variable woff2 files, replaces @fontsource-variable/geist. */ @font-face { font-family: Geist; src: url("/static/fonts/Geist-Variable.woff2") format("woff2-variations"), url("/static/fonts/Geist-Variable.woff2") format("woff2"); font-weight: 100 900; font-style: normal; font-display: swap; } @font-face { font-family: Geist; src: url("/static/fonts/Geist-Italic-Variable.woff2") format("woff2-variations"), url("/static/fonts/Geist-Italic-Variable.woff2") format("woff2"); font-weight: 100 900; font-style: italic; font-display: swap; } @font-face { font-family: "Geist Mono"; src: url("/static/fonts/GeistMono-Variable.woff2") format("woff2-variations"), url("/static/fonts/GeistMono-Variable.woff2") format("woff2"); font-weight: 100 900; font-style: normal; font-display: swap; } @font-face { font-family: "Geist Mono"; src: url("/static/fonts/GeistMono-Italic-Variable.woff2") format("woff2-variations"), url("/static/fonts/GeistMono-Italic-Variable.woff2") format("woff2"); font-weight: 100 900; font-style: italic; font-display: swap; } :root { --font-geist-sans: "Geist", ui-sans-serif, system-ui, -apple-system, "Segoe UI", "Roboto", sans-serif; --font-geist-mono: "Geist Mono", ui-monospace, "SFMono-Regular", "Menlo", "Monaco", "Liberation Mono", monospace; } @theme inline { --color-background: var(--background); --color-foreground: var(--foreground); --font-sans: var(--font-geist-sans); --font-mono: var(--font-geist-mono); --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); --radius-sm: calc(var(--radius) - 4px); --radius-md: calc(var(--radius) - 2px); --radius-lg: var(--radius); --radius-xl: calc(var(--radius) + 4px); --height-base: calc(100vh - 130px); /* Font size overrides - format: [size, { line-height: value }] */ --text-xs: 0.75rem; --text-xs--line-height: 1rem; --text-sm: 0.825rem; --text-sm--line-height: 1.25rem; --text-base: 0.95rem; --text-base--line-height: 1.5rem; --text-lg: 1.125rem; --text-lg--line-height: 1.75rem; --text-xl: 1.25rem; --text-xl--line-height: 1.75rem; --text-2xl: 1.5rem; --text-2xl--line-height: 2rem; --text-3xl: 1.875rem; --text-3xl--line-height: 2.25rem; --text-4xl: 2.25rem; --text-4xl--line-height: 2.5rem; --text-5xl: 3rem; --text-5xl--line-height: 1; --text-6xl: 3.75rem; --text-6xl--line-height: 1; --text-7xl: 4.5rem; --text-7xl--line-height: 1; --text-8xl: 6rem; --text-8xl--line-height: 1; --text-9xl: 8rem; --text-9xl--line-height: 1; } :root { --radius: 0.5rem; --color-cream-100: oklch(0.98 0 0); --background: #f4f4f5; --foreground: oklch(0.141 0.005 285.823); --card: oklch(1 0 0); --card-foreground: oklch(0.141 0.005 285.823); --popover: oklch(1 0 0); --popover-foreground: oklch(0.141 0.005 285.823); --primary: oklch(0.5081 0.1049 165.61); --primary-foreground: oklch(0.985 0 0); --secondary: oklch(0.967 0.001 286.375); --secondary-foreground: oklch(0.21 0.006 285.885); --muted: oklch(0.967 0.001 286.375); --muted-foreground: oklch(0.552 0.016 285.938); --accent: oklch(0.967 0.001 286.375); --accent-foreground: oklch(0.21 0.006 285.885); --destructive: oklch(0.577 0.245 27.325); --border: oklch(0.92 0.004 286.32); --input: oklch(0.92 0.004 286.32); --ring: oklch(0.705 0.015 286.067); --chart-1: oklch(0.646 0.222 41.116); --chart-2: oklch(0.6 0.118 184.704); --chart-3: oklch(0.398 0.07 227.392); --chart-4: oklch(0.828 0.189 84.429); --chart-5: oklch(0.769 0.188 70.08); --sidebar: color-mix(in oklch, var(--color-cream-100) 20%, transparent); --sidebar-foreground: oklch(0.141 0.005 285.823); --sidebar-primary: oklch(0.21 0.006 285.885); --sidebar-primary-foreground: oklch(0.985 0 0); --sidebar-accent: oklch(0.94 0.001 286.375); --sidebar-accent-foreground: oklch(0.21 0.006 285.885); --sidebar-border: oklch(0.92 0.004 286.32); --sidebar-ring: oklch(0.705 0.015 286.067); } .dark { --color-ink-900: oklch(0.141 0.005 285.823); --background: color-mix(in oklch, var(--color-ink-900) 20%, transparent); --foreground: oklch(0.985 0 0); --card: oklch(0.21 0.006 285.885); --card-foreground: oklch(0.985 0 0); --popover: oklch(0.21 0.006 285.885); --popover-foreground: oklch(0.985 0 0); --primary: oklch(0.92 0.004 286.32); --primary-foreground: oklch(0.21 0.006 285.885); --secondary: oklch(0.274 0.006 286.033); --secondary-foreground: oklch(0.985 0 0); --muted: oklch(0.274 0.006 286.033); --muted-foreground: oklch(0.705 0.015 286.067); --accent: oklch(0.274 0.006 286.033); --accent-foreground: oklch(0.985 0 0); --destructive: oklch(0.704 0.191 22.216); --border: oklch(1 0 0 / 10%); --input: oklch(1 0 0 / 15%); --ring: oklch(0.552 0.016 285.938); --chart-1: oklch(0.488 0.243 264.376); --chart-2: oklch(0.696 0.17 162.48); --chart-3: oklch(0.769 0.188 70.08); --chart-4: oklch(0.627 0.265 303.9); --chart-5: oklch(0.645 0.246 16.439); --sidebar: color-mix(in oklch, var(--color-ink-900) 20%, transparent); --sidebar-foreground: oklch(0.985 0 0); --sidebar-primary: oklch(0.488 0.243 264.376); --sidebar-primary-foreground: oklch(0.985 0 0); --sidebar-accent: oklch(0.274 0.006 286.033); --sidebar-accent-foreground: oklch(0.985 0 0); --sidebar-border: oklch(1 0 0 / 10%); --sidebar-ring: oklch(0.552 0.016 285.938); } @layer base { * { @apply border-border outline-none; } body { @apply bg-background text-foreground; } } @utility custom-scrollbar { overflow: auto !important; scrollbar-width: thin; /* Firefox */ scrollbar-color: rgba(228, 228, 231, 1) transparent; /* Firefox */ &::-webkit-scrollbar { --custom-scrollbar-width: 8px; --custom-scrollbar-height: 8px; width: var(--custom-scrollbar-width, 8px); height: var(--custom-scrollbar-height, 8px); } &::-webkit-scrollbar-track { background-color: transparent; } &::-webkit-scrollbar-thumb { --tw-bg-opacity: 1 !important; background-color: rgba(228, 228, 231, var(--tw-bg-opacity)) !important; border-radius: 8px; opacity: 0; visibility: hidden; } &:hover::-webkit-scrollbar-thumb { opacity: 1; visibility: visible; } &::-webkit-scrollbar-thumb:hover { --tw-bg-opacity: 1 !important; background-color: rgba(82, 82, 91, var(--tw-bg-opacity)) !important; } /* For older WebKit browsers */ &::-webkit-scrollbar-thumb:horizontal { background-color: rgba(228, 228, 231, var(--tw-bg-opacity)) !important; } &::-webkit-scrollbar-thumb:vertical { background-color: rgba(228, 228, 231, var(--tw-bg-opacity)) !important; } &:hover::-webkit-scrollbar-thumb:horizontal { background-color: rgba(82, 82, 91, var(--tw-bg-opacity)) !important; } &:hover::-webkit-scrollbar-thumb:vertical { background-color: rgba(82, 82, 91, var(--tw-bg-opacity)) !important; } } body { overscroll-behavior: none; } .query-builder-wrapper { padding: 1rem; padding-inline: 0.5rem; } [data-radix-scroll-area-viewport].no-table > div { display: block !important; } [data-radix-scroll-area-viewport].viewport-table-height-full > div { height: 100% !important; } div.content-container:has(.no-padding-parent) { @apply p-0!; } div.content-container main.content-container-inner:has(.no-padding-parent) { @apply p-0!; } div.content-container:has(.no-border-parent) { @apply border-0!; } /* ReactFlow Controls — follow Bifrost colour schema */ .react-flow__controls { background-color: var(--card); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1); } .react-flow__controls-button { background-color: var(--card); border-bottom: 1px solid var(--border); fill: var(--foreground); } .react-flow__controls-button:hover { background-color: var(--muted); } .react-flow__controls-button svg { fill: var(--foreground); } /* Dark mode — needs !important to beat ReactFlow's bundled specificity */ .dark .react-flow__controls { background-color: var(--card) !important; border-color: var(--border) !important; } .dark .react-flow__controls-button { background-color: var(--card) !important; border-bottom-color: var(--border) !important; fill: var(--foreground) !important; } .dark .react-flow__controls-button:hover { background-color: var(--muted) !important; } .dark .react-flow__controls-button svg { fill: var(--foreground) !important; } /* Dynamic chain: dash period 3+5 = 8 — offset must move exactly one period per loop */ @keyframes rf-routing-tree-dynamic-chain-dash { from { stroke-dashoffset: 0; } to { stroke-dashoffset: -8; } } .rf-chain-legend-dynamic-dash { animation: rf-routing-tree-dynamic-chain-dash 0.5s linear infinite; } .react-flow__edge.rf-chain-edge-dynamic .react-flow__edge-path { stroke-dasharray: 3 5; animation: rf-routing-tree-dynamic-chain-dash 0.5s linear infinite; } @media (prefers-reduced-motion: reduce) { .rf-chain-legend-dynamic-dash { animation: none; } .react-flow__edge.rf-chain-edge-dynamic .react-flow__edge-path { animation: none; } } /* // Custom styling for streamdown */ [data-streamdown="code-block"], [data-streamdown="code-block-body"] { @apply rounded-sm!; }