@tailwind base; @tailwind components; @tailwind utilities; :root { /* ========== VISUAL-TRUTH UI TOKEN CONTRACT (bb-vt.1.1) ========== */ --ui-bg-app: #070d16; --ui-bg-shell: #0c1420; --ui-bg-panel: #111c2a; --ui-bg-card: #1a2431; --ui-border-soft: rgba(153, 171, 190, 0.2); --ui-border-strong: rgba(153, 171, 190, 0.34); --ui-text-primary: #e8edf5; --ui-text-muted: #8f9caf; --ui-accent-ready: #35d98f; --ui-accent-blocked: #ff4c72; --ui-accent-warning: #ffb24a; --ui-accent-info: #35c9ff; --ui-accent-action-green: #35d98f; --ui-accent-action-red: #ff4c72; --ui-font-sans: 'Inter', 'Segoe UI', system-ui, -apple-system, sans-serif; --ui-font-mono: 'JetBrains Mono', 'Cascadia Code', 'Fira Code', monospace; --ui-tracking-tight: -0.011em; --ui-numeric-tabular: tabular-nums; /* ========== LEGACY-COMPATIBLE MAPPINGS ========== */ --color-bg-base: var(--ui-bg-app); --color-bg-card: var(--ui-bg-shell); --color-bg-input: var(--ui-bg-panel); --color-accent-green: var(--ui-accent-ready); --color-accent-amber: var(--ui-accent-warning); --color-accent-teal: var(--ui-accent-info); --color-text-primary: var(--ui-text-primary); --color-text-secondary: #c4cfdb; --color-text-muted: var(--ui-text-muted); --color-text-on-primary: #10161d; --color-border-default: var(--ui-border-strong); --color-border-subtle: var(--ui-border-soft); /* Status colors */ --status-open: var(--ui-accent-info); --status-ready: var(--ui-accent-ready); --status-in-progress: var(--ui-accent-warning); --status-progress: var(--ui-accent-warning); --status-blocked: var(--ui-accent-blocked); --status-blocked-earthy: var(--ui-accent-blocked); --status-closed: #7f8b98; --status-closed-earthy: #7f8b98; --status-deferred: #7f8b98; /* Liveness colors */ --liveness-active: var(--ui-accent-ready); --liveness-stale: var(--ui-accent-warning); --liveness-stuck: var(--ui-accent-action-red); --liveness-dead: var(--ui-accent-action-red); --liveness-idle: #7f8b98; /* Agent Role Colors */ --agent-role-ui: #6B9BD2; --agent-role-graph: #7CB97A; --agent-role-orchestrator: #B08ED6; --agent-role-agent: #B8B8B8; --agent-role-researcher: #D4A574; /* Priority Colors */ --priority-p0: #f43f5e; --priority-p1: #f59e0b; --priority-p2: #38bdf8; --priority-p3: #94a3b8; --priority-p4: #64748b; /* Blocks/Unlocks Section Colors */ --color-blocks-bg: rgba(212, 165, 116, 0.1); --color-unlocks-bg: rgba(229, 115, 115, 0.1); --color-blocks-border: rgba(212, 165, 116, 0.2); --color-unlocks-border: rgba(229, 115, 115, 0.2); /* ========== RADI ========== */ --radius-sm: 0.375rem; --radius-card: 1.5rem; /* rounded-3xl for soft feel */ --radius-xl: 1.5rem; /* rounded-3xl */ --radius-modal: 1rem; --radius-pill: 9999px; /* ========== SHADOWS ========== */ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.1); --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.15); --shadow-soft-lg: 0 10px 30px -10px rgba(0, 0, 0, 0.3); --shadow-soft-xl: 0 20px 40px -10px rgba(0, 0, 0, 0.4); /* ========== TYPOGRAPHY ========== */ --font-ui-stack: var(--ui-font-sans); --font-mono-stack: var(--ui-font-mono); --font-size-h1: 2rem; --font-size-h2: 1.5rem; --font_size-h3: 1.125rem; --font-size-body: 0.875rem; --font-size-small: 0.75rem; --font-size-tiny: 0.6875rem; --font-weight-h1: 700; --font-weight-h2: 600; --font-weight-h3: 600; --font-weight-body: 400; --line-height-heading: 1.2; --line-height-body: 1.5; /* ========== SPACING ========== */ --spacing-xs: 0.25rem; --spacing-sm: 0.5rem; --spacing-md: 1rem; --spacing-lg: 1.5rem; --spacing-xl: 2rem; --spacing-2xl: 2.5rem; /* ========== TRANSITIONS ========== */ --transition-fast: 150ms ease-out; --transition-normal: 200ms ease-out; /* ========== LAYOUT ========== */ --sidebar-left-width: 13.75rem; --sidebar-right-width: 17.5rem; --topbar-height: 3.75rem; --glass-base: linear-gradient(180deg, color-mix(in srgb, var(--ui-bg-card) 72%, black), color-mix(in srgb, var(--ui-bg-panel) 78%, black)); --edge-top: color-mix(in srgb, var(--ui-border-strong) 80%, white 20%); --edge-bottom: color-mix(in srgb, var(--ui-border-soft) 75%, black 25%); --elevation-ambient: 0 20px 40px -16px rgba(0, 0, 0, 0.78); --elevation-tight: 0 10px 24px -12px rgba(0, 0, 0, 0.7); /* ========== LEGACY COMPATIBILITY TOKENS ========== */ /* For existing components that reference these */ --color-bg: var(--color-bg-base); --color-surface: var(--color-bg-card); --color-surface-muted: var(--color-bg-input); --color-text-strong: var(--color-text-primary); --color-text-body: var(--color-text-secondary); --color-border-soft: var(--color-border-subtle); --color-border-strong: var(--color-border-default); } * { box-sizing: border-box; } html, body { margin: 0; min-height: 100%; } body { background-color: var(--ui-bg-app); color: var(--ui-text-primary); font-family: var(--ui-font-sans); letter-spacing: var(--ui-tracking-tight); position: relative; isolation: isolate; } /* Aero Chrome decorative overlays removed per PRD - earthy-dark is clean/flat */ * { scrollbar-width: thin; scrollbar-color: rgba(148, 163, 184, 0.35) rgba(255, 255, 255, 0.02); } *::-webkit-scrollbar { width: 0.5rem; height: 0.5rem; } *::-webkit-scrollbar-track { background: rgba(255, 255, 255, 0.02); border-radius: 9999px; } *::-webkit-scrollbar-thumb { background: linear-gradient(180deg, rgba(156, 163, 175, 0.55), rgba(107, 114, 128, 0.45)); border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 9999px; } *::-webkit-scrollbar-thumb:hover { background: linear-gradient(180deg, rgba(186, 194, 209, 0.72), rgba(124, 136, 156, 0.62)); } .custom-scrollbar::-webkit-scrollbar { width: 4px; height: 4px; } .custom-scrollbar::-webkit-scrollbar-thumb { background: rgba(148, 163, 184, 0.15); border-radius: 20px; } .custom-scrollbar::-webkit-scrollbar-thumb:hover { background: rgba(148, 163, 184, 0.3); } .no-scrollbar::-webkit-scrollbar { display: none; } .no-scrollbar { -ms-overflow-style: none; scrollbar-width: none; } .workflow-card { border: 1px solid rgba(255, 255, 255, 0.08); border-top-color: rgba(255, 255, 255, 0.24); border-bottom-color: rgba(0, 0, 0, 0.9); background: linear-gradient(180deg, rgba(42, 44, 52, 0.6) 0%, rgba(22, 23, 28, 0.6) 100%); box-shadow: var(--elevation-ambient), var(--elevation-tight), inset 0 1px 1px rgba(255, 255, 255, 0.15); backdrop-filter: blur(24px) saturate(120%); -webkit-backdrop-filter: blur(24px) saturate(120%); transform: translateZ(0); will-change: transform, box-shadow; } .workflow-card-selected { border-color: rgba(96, 165, 250, 0.42); border-top-color: rgba(96, 165, 250, 0.58); background: linear-gradient(180deg, rgba(60, 68, 88, 0.7) 0%, rgba(35, 40, 52, 0.7) 100%); box-shadow: 0 20px 48px -8px rgba(0, 0, 0, 0.9), 0 0 0 1px rgba(96, 165, 250, 0.25), 0 0 40px rgba(96, 165, 250, 0.15), inset 0 1px 1px rgba(255, 255, 255, 0.3); } .glass-panel { background: var(--glass-base); border: 1px solid var(--edge-side); border-top-color: var(--edge-top); border-bottom-color: var(--edge-bottom); box-shadow: var(--elevation-ambient); backdrop-filter: blur(24px) saturate(120%); -webkit-backdrop-filter: blur(24px) saturate(120%); } .bg-earthy-gradient { background: linear-gradient(to bottom right, #2D2D2D, #363636); } /* Shared dark form controls to avoid white-on-white browser defaults */ .ui-field { border: 1px solid rgba(255, 255, 255, 0.1); border-top-color: var(--edge-top); border-bottom-color: var(--edge-bottom); background: linear-gradient(180deg, rgba(32, 34, 42, 0.72), rgba(17, 19, 26, 0.72)); color: var(--color-text-strong); box-shadow: 0 8px 20px -12px rgba(0, 0, 0, 0.85), inset 0 1px 0 rgba(255, 255, 255, 0.06); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); } .ui-field::placeholder { color: color-mix(in srgb, var(--color-text-muted) 88%, transparent); } .ui-field:focus-visible { outline: none; border-color: rgba(96, 165, 250, 0.48); box-shadow: 0 0 0 2px rgba(96, 165, 250, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.06); } .ui-select { appearance: none; } .ui-select option, .ui-option { background-color: var(--ui-bg-panel); color: var(--ui-text-primary); } .ui-text { font-family: var(--ui-font-sans); font-weight: 500; letter-spacing: var(--ui-tracking-tight); line-height: 1.35; } .system-data { font-family: var(--ui-font-mono); font-variant-numeric: var(--ui-numeric-tabular); font-weight: 450; letter-spacing: 0.015em; } .ui-shell-app { background: var(--ui-bg-app); color: var(--ui-text-primary); font-family: var(--ui-font-sans); letter-spacing: var(--ui-tracking-tight); } .ui-shell-topbar { background: linear-gradient(180deg, color-mix(in srgb, var(--ui-bg-panel) 92%, black), var(--ui-bg-shell)); border-bottom: 1px solid color-mix(in srgb, var(--ui-accent-info) 22%, var(--ui-border-soft)); box-shadow: 0 10px 24px -20px rgba(0, 0, 0, 0.9); } .ui-shell-middle { background: linear-gradient(180deg, color-mix(in srgb, var(--ui-bg-app) 74%, black), color-mix(in srgb, var(--ui-bg-app) 90%, black)); border-left: 1px solid color-mix(in srgb, var(--ui-accent-info) 20%, var(--ui-border-soft)); border-right: 1px solid color-mix(in srgb, var(--ui-accent-info) 20%, var(--ui-border-soft)); } .ui-shell-panel { background: linear-gradient(180deg, color-mix(in srgb, var(--ui-bg-shell) 86%, black), color-mix(in srgb, var(--ui-bg-panel) 84%, black)); border-left: 1px solid color-mix(in srgb, var(--ui-accent-info) 30%, var(--ui-border-soft)); } .ui-tabular-nums { font-variant-numeric: var(--ui-numeric-tabular); } .workflow-graph-legend { backdrop-filter: blur(12px); background: rgba(20, 23, 31, 0.72); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05), 0 8px 32px rgba(0, 0, 0, 0.3); } .workflow-graph-flow .react-flow__viewport { background: radial-gradient(circle at 20% 20%, var(--aurora-blue), transparent 45%), radial-gradient(circle at 80% 15%, var(--aurora-amber), transparent 45%); } .workflow-graph-flow .react-flow__edges { z-index: 10 !important; } .workflow-graph-flow .react-flow__nodes { z-index: 20 !important; } .workflow-graph-flow .react-flow__edge-path { stroke-linecap: round; stroke-linejoin: round; } .workflow-graph-flow .workflow-edge-muted .react-flow__edge-path { opacity: 0.85; } .workflow-graph-flow .workflow-edge-selected .react-flow__edge-path { opacity: 1; filter: drop-shadow(0 0 10px rgba(56, 189, 248, 0.6)); } .workflow-graph-flow .workflow-edge-cycle .react-flow__edge-path { stroke: var(--color-accent-amber); stroke-dasharray: 4 4; opacity: 0.9; } /* Thread Drawer slide-in animation */ @keyframes slideInFromRight { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } }