Files
atc-agents/ui/src/styles/globals.css
T
mo 7da2dd60f0 Add MySQL/MongoDB consoles, fit topology without scroll, longer flow lines.
Compact workbench panel, collapsible infra bar, narrower topology nodes with wider inter-stage gaps for visible connection lines.
2026-06-25 01:33:48 +00:00

172 lines
5.7 KiB
CSS

@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
:root {
color-scheme: light;
--surface: 244 245 247;
--surface-raised: 255 255 255;
--surface-overlay: 236 240 245;
--surface-muted: 221 225 230;
--border: 210 218 228;
--border-strong: 180 192 208;
--foreground: 26 31 38;
--foreground-muted: 95 107 122;
--foreground-faint: 139 149 165;
--shadow-panel: 0 1px 3px rgba(15, 40, 80, 0.06), 0 4px 12px rgba(36, 150, 237, 0.06);
--shadow-docker: 0 0 0 1px rgba(36, 150, 237, 0.12), 0 4px 14px rgba(36, 150, 237, 0.1);
--topo-canvas: linear-gradient(145deg, #dbeafe 0%, #e0f2fe 35%, #ede9fe 70%, #ecfdf5 100%);
--topo-grid: rgba(37, 99, 235, 0.06);
--topo-stage-border: rgba(37, 99, 235, 0.15);
--topo-node-bg: linear-gradient(145deg, #1e40af 0%, #2563eb 50%, #1d4ed8 100%);
--topo-node-border: rgba(147, 197, 253, 0.45);
--topo-node-shadow: 0 4px 14px rgba(30, 64, 175, 0.35);
--topo-header-bg: linear-gradient(90deg, rgba(36, 150, 237, 0.12), rgba(99, 102, 241, 0.08));
}
.dark {
color-scheme: dark;
--surface: 15 27 46;
--surface-raised: 22 38 62;
--surface-overlay: 28 48 78;
--surface-muted: 36 58 92;
--border: 48 74 112;
--border-strong: 64 96 140;
--foreground: 232 241 255;
--foreground-muted: 148 175 212;
--foreground-faint: 100 130 168;
--shadow-panel: 0 1px 0 rgba(147, 197, 253, 0.06) inset, 0 8px 24px rgba(0, 0, 0, 0.35);
--shadow-docker: 0 0 0 1px rgba(56, 189, 248, 0.2), 0 4px 16px rgba(14, 116, 214, 0.25);
--topo-canvas: linear-gradient(145deg, #0c1929 0%, #132f4c 40%, #1a365d 75%, #0f2847 100%);
--topo-grid: rgba(56, 189, 248, 0.07);
--topo-stage-border: rgba(56, 189, 248, 0.18);
--topo-node-bg: linear-gradient(145deg, #1e3a5f 0%, #234876 45%, #1a4470 100%);
--topo-node-border: rgba(96, 165, 250, 0.4);
--topo-node-shadow: 0 4px 16px rgba(0, 20, 60, 0.45);
--topo-header-bg: linear-gradient(90deg, rgba(36, 150, 237, 0.18), rgba(99, 102, 241, 0.12));
}
html, body, #root {
height: 100%;
scrollbar-gutter: stable;
}
body {
@apply bg-surface font-sans text-foreground antialiased;
background-image: var(--body-gradient, none);
}
.dark body {
--body-gradient: radial-gradient(ellipse 120% 80% at 50% -20%, rgba(37, 99, 235, 0.15), transparent);
}
:root body {
--body-gradient: radial-gradient(ellipse 100% 60% at 50% -10%, rgba(36, 150, 237, 0.08), transparent);
}
}
@layer components {
.panel {
@apply rounded-lg border border-border bg-surface-raised shadow-panel;
}
.topo-canvas {
@apply relative min-h-0 flex-1 overflow-hidden rounded-lg;
background:
linear-gradient(var(--topo-grid) 1px, transparent 1px),
linear-gradient(90deg, var(--topo-grid) 1px, transparent 1px),
var(--topo-canvas);
background-size: 20px 20px, 20px 20px, auto;
}
.topo-edge-glow {
stroke: rgba(56, 189, 248, 0.18);
stroke-width: 4;
fill: none;
}
.topo-edge-idle {
stroke: rgba(100, 140, 180, 0.45);
stroke-width: 2;
stroke-dasharray: 4 8;
fill: none;
}
.topo-edge-live {
stroke-width: 2.5;
stroke-dasharray: 8 12;
fill: none;
animation: flow-dash 1.2s linear infinite;
}
.topo-edge-orchestration.topo-edge-live { stroke: #f59e0b; filter: drop-shadow(0 0 3px rgba(245, 158, 11, 0.5)); }
.topo-edge-cdc.topo-edge-live { stroke: #22d3ee; filter: drop-shadow(0 0 3px rgba(34, 211, 238, 0.45)); }
.topo-edge-stream.topo-edge-live { stroke: #38bdf8; filter: drop-shadow(0 0 3px rgba(56, 189, 248, 0.45)); }
.topo-edge-etl.topo-edge-live { stroke: #a78bfa; filter: drop-shadow(0 0 3px rgba(167, 139, 250, 0.45)); }
.topo-edge-query.topo-edge-live { stroke: #818cf8; filter: drop-shadow(0 0 3px rgba(129, 140, 248, 0.45)); }
.topo-edge-serve.topo-edge-live { stroke: #34d399; filter: drop-shadow(0 0 3px rgba(52, 211, 153, 0.45)); }
.topo-edge-active {
stroke: url(#topo-flow-gradient);
stroke-width: 2.5;
stroke-dasharray: 10 14;
fill: none;
animation: flow-dash 1.4s linear infinite;
}
.topo-edge-pulse {
stroke: #34d399;
stroke-width: 2;
stroke-dasharray: 4 100;
fill: none;
opacity: 0.9;
animation: flow-pulse 2s linear infinite;
}
.topo-node-airflow {
border-color: rgba(245, 158, 11, 0.55) !important;
box-shadow: 0 0 12px rgba(245, 158, 11, 0.25), var(--topo-node-shadow);
}
.topo-node {
@apply mx-auto w-[84%] rounded-md border px-1.5 py-1 text-left transition-all;
background: var(--topo-node-bg);
border-color: var(--topo-node-border);
box-shadow: var(--topo-node-shadow);
}
.topo-node:hover {
filter: brightness(1.12);
transform: translateY(-1px);
}
.topo-node-selected {
@apply ring-2 ring-cyan-400/60 border-cyan-300;
}
.topo-stage-col {
@apply flex min-w-0 flex-1 flex-col px-0.5 py-1 last:border-r-0;
border-right: 1px dashed var(--topo-stage-border);
}
.topo-stage-col--sources { background: linear-gradient(180deg, rgba(16, 185, 129, 0.08), transparent 60%); }
.topo-stage-col--ingestion { background: linear-gradient(180deg, rgba(6, 182, 212, 0.1), transparent 60%); }
.topo-stage-col--compute { background: linear-gradient(180deg, rgba(139, 92, 246, 0.1), transparent 60%); }
.topo-stage-col--storage { background: linear-gradient(180deg, rgba(37, 99, 235, 0.1), transparent 60%); }
.topo-stage-col--consumers { background: linear-gradient(180deg, rgba(245, 158, 11, 0.08), transparent 60%); }
}
@layer utilities {
.scrollbar-thin {
scrollbar-width: thin;
scrollbar-color: rgb(var(--border-strong)) transparent;
}
.scroll-x-stable {
overflow-x: auto;
overflow-y: hidden;
scrollbar-gutter: stable;
}
}