:root { --bg: oklch(97% 0.012 80); --surface: oklch(99% 0.005 80); --fg: oklch(20% 0.02 60); --muted: oklch(48% 0.015 60); --border: oklch(89% 0.012 80); --accent: oklch(58% 0.16 35); --green: oklch(52% 0.12 145); --red: oklch(52% 0.14 25); --font-display: 'Iowan Old Style', 'Charter', Georgia, serif; --font-body: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif; --font-mono: ui-monospace, 'IBM Plex Mono', Menlo, monospace; --nav-h: 48px; } *,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; } body { background: var(--bg); color: var(--fg); font: 13px/1.5 var(--font-body); height: 100vh; overflow: hidden; display: flex; flex-direction: column; } /* ─── TOP BAR ─── */ .topbar { height: var(--nav-h); border-bottom: 1px solid var(--border); display: flex; align-items: center; padding: 0 20px; gap: 12px; background: var(--surface); flex-shrink: 0; z-index: 100; } .topbar .logo { font: 600 15px/1 var(--font-display); letter-spacing: -0.01em; color: var(--fg); cursor: pointer; } .topbar .ticker-group { display: flex; align-items: center; gap: 8px; margin-left: 4px; min-width: 0; overflow: hidden; flex-shrink: 1; } .topbar .ticker { font: 700 13px/1 var(--font-mono); background: var(--fg); color: var(--surface); padding: 3px 7px; letter-spacing: 0.04em; } .topbar .ticker-name { font-size: 12px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .topbar .screen-tabs { display: flex; gap: 0; margin-left: auto; border: 1px solid var(--border); border-radius: 2px; overflow: hidden; flex-shrink: 0; } .topbar .screen-tabs button { font: 500 12px/1 var(--font-body); padding: 7px 14px; border: none; background: var(--surface); color: var(--muted); cursor: pointer; border-right: 1px solid var(--border); transition: background 0.15s, color 0.15s; } .topbar .screen-tabs button:last-child { border-right: none; } .topbar .screen-tabs button:hover { color: var(--fg); } .topbar .screen-tabs button.active { background: var(--fg); color: var(--surface); } .topbar .search { border: 1px solid var(--border); background: var(--bg); padding: 5px 10px; font: 12px/1 var(--font-body); color: var(--fg); width: 180px; min-width: 80px; border-radius: 2px; flex-shrink: 1; } .topbar .search::placeholder { color: var(--muted); } .topbar .icon-btn { width: 28px; height: 28px; border: 1px solid var(--border); background: var(--surface); border-radius: 2px; cursor: pointer; display: flex; align-items: center; justify-content: center; color: var(--muted); font-size: 13px; transition: color 0.12s; } .topbar .icon-btn:hover { color: var(--fg); } .topbar .avatar { width: 28px; height: 28px; border-radius: 50%; border: 1.5px solid var(--border); display: flex; align-items: center; justify-content: center; font: 600 11px/1 var(--font-mono); color: var(--muted); cursor: pointer; transition: border-color 0.15s, color 0.15s; } .topbar .avatar:hover { border-color: var(--accent); color: var(--accent); } /* ─── MAIN ─── */ .main { flex: 1; overflow: hidden; display: flex; } .screen { display: none; width: 100%; height: 100%; } .screen.active { display: flex; } /* ─── LEFT NAV (collapsible to zero) ─── */ .left-nav { width: 240px; border-right: 1px solid var(--border); overflow-y: auto; overflow-x: hidden; flex-shrink: 0; background: var(--surface); display: flex; flex-direction: column; transition: width 0.2s ease, opacity 0.2s ease; } .left-nav.collapsed { width: 36px; min-width: 36px; } .left-nav.collapsed .nav-toggle { flex-direction: column; padding: 8px 4px; } .left-nav.collapsed .nav-header { display: none; } .left-nav.collapsed .nav-group-header, .left-nav.collapsed button, .left-nav.collapsed .nav-divider, .left-nav.collapsed .memo-outline { display: none; } .nav-toggle { display: flex; align-items: center; justify-content: space-between; padding: 10px 14px 4px; } .nav-toggle .nav-header { font: 600 10px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.1em; color: var(--muted); } .nav-toggle .collapse-btn { width: 20px; height: 20px; border: 1px solid var(--border); background: none; cursor: pointer; display: flex; align-items: center; justify-content: center; color: var(--muted); font-size: 10px; border-radius: 2px; } .nav-toggle .collapse-btn:hover { color: var(--fg); } .left-nav .nav-group-header { font: 600 10px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.1em; color: var(--muted); padding: 12px 16px 6px; } .left-nav button { display: flex; align-items: center; width: 100%; text-align: left; padding: 7px 16px 7px 20px; border: none; background: none; font: 400 12.5px/1.4 var(--font-body); color: var(--muted); cursor: pointer; position: relative; white-space: nowrap; transition: color 0.12s; } .left-nav button:hover { color: var(--fg); } .left-nav button.active { color: var(--fg); font-weight: 600; } .left-nav button.active::before { content: ''; position: absolute; left: 0; top: 4px; bottom: 4px; width: 3px; background: var(--accent); } .left-nav .nav-divider { height: 1px; background: var(--border); margin: 6px 16px; } /* ─── MEMO NAV (fixed collapse) ─── */ .left-nav.memo-nav { width: 220px; } .left-nav.memo-nav.collapsed { width: 36px !important; min-width: 36px; } .nav-open-btn-sidebar { display: none; width: 28px; height: 28px; border: 1px solid var(--border); background: var(--surface); cursor: pointer; align-items: center; justify-content: center; color: var(--muted); font-size: 10px; border-radius: 2px; margin: 8px auto; position: absolute; pointer-events: none; visibility: hidden; } .left-nav.collapsed .nav-open-btn-sidebar { display: flex; position: static; pointer-events: auto; visibility: visible; } .nav-open-btn-sidebar:hover { color: var(--fg); } /* Nav open button (visible when collapsed) */ .nav-open-btn { display: none; width: 28px; height: 28px; border: 1px solid var(--border); background: var(--surface); cursor: pointer; align-items: center; justify-content: center; color: var(--muted); font-size: 10px; border-radius: 2px; flex-shrink: 0; } .nav-open-btn.visible { display: none; } .nav-open-btn:hover { color: var(--fg); } /* ─── CENTER ─── */ .center { flex: 1; overflow-y: auto; padding: 28px 36px; } .center::-webkit-scrollbar { width: 6px; } .center::-webkit-scrollbar-thumb { background: var(--border); } /* ─── RIGHT PANEL ─── */ .right-panel { width: 320px; border-left: 1px solid var(--border); overflow-y: auto; flex-shrink: 0; background: var(--surface); padding: 20px; } .right-panel::-webkit-scrollbar { width: 4px; } .right-panel::-webkit-scrollbar-thumb { background: var(--border); } /* ─── SHARED UI ─── */ .section-title { font: 600 10px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.1em; color: var(--muted); margin-bottom: 12px; } h1.display { font: 700 28px/1.15 var(--font-display); letter-spacing: -0.02em; margin-bottom: 8px; } h2.section { font: 600 18px/1.2 var(--font-display); letter-spacing: -0.01em; margin: 32px 0 12px; padding-top: 16px; border-top: 1px solid var(--border); } p.body { color: var(--fg); line-height: 1.65; margin-bottom: 12px; font-size: 13.5px; } p.muted { color: var(--muted); font-size: 12px; } .eyebrow { font: 600 10px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.1em; color: var(--accent); margin-bottom: 6px; } .metric-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 1px; background: var(--border); border: 1px solid var(--border); margin: 16px 0; } .metric-cell { background: var(--surface); padding: 12px 14px; } .metric-cell .label { font: 500 10px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); margin-bottom: 4px; } .metric-cell .value { font: 600 18px/1 var(--font-display); letter-spacing: -0.01em; } .metric-cell .sub { font-size: 11px; color: var(--muted); margin-top: 2px; } .tag { display: inline-block; font: 500 10px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.06em; padding: 3px 8px; border: 1px solid var(--border); color: var(--muted); } .tag.accent { border-color: var(--accent); color: var(--accent); } .tag.green { border-color: var(--green); color: var(--green); } .tag.red { border-color: var(--red); color: var(--red); } .btn { font: 500 12px/1 var(--font-body); padding: 7px 14px; border: 1px solid var(--border); background: var(--surface); color: var(--fg); cursor: pointer; border-radius: 2px; transition: background 0.12s; } .btn:hover { background: var(--bg); } .btn.primary { background: var(--fg); color: var(--surface); border-color: var(--fg); } .btn.primary:hover { opacity: 0.9; } .btn.sm { font-size: 10px; padding: 3px 8px; } /* ─── SPREADSHEET ─── */ .spreadsheet { width: 100%; border-collapse: collapse; font: 400 12px/1.4 var(--font-mono); } .spreadsheet th { font: 600 10px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); text-align: right; padding: 8px 10px; border-bottom: 1px solid var(--border); background: var(--surface); position: sticky; top: 0; } .spreadsheet th:first-child { text-align: left; } .spreadsheet td { padding: 6px 10px; text-align: right; border-bottom: 1px solid oklch(93% 0.008 80); white-space: nowrap; } .spreadsheet td:first-child { text-align: left; font-weight: 500; color: var(--fg); } .spreadsheet tr:hover td { background: oklch(96% 0.008 80); } .spreadsheet .indent td:first-child { padding-left: 24px; } .spreadsheet .total td { border-top: 1px solid var(--fg); font-weight: 700; background: var(--surface); } .spreadsheet .forecast { color: var(--muted); font-style: italic; } /* ─── MEMO EDITOR ─── */ .memo-outline { padding: 0; list-style: none; } .memo-outline li { font: 400 12px/1.4 var(--font-body); color: var(--muted); padding: 5px 0 5px 12px; border-left: 2px solid transparent; cursor: pointer; transition: color 0.12s, border-color 0.12s; } .memo-outline li:hover { color: var(--fg); } .memo-outline li.active { color: var(--fg); font-weight: 600; border-left-color: var(--accent); } .memo-outline li.h2 { font-weight: 600; color: var(--fg); margin-top: 6px; } .memo-block { margin-bottom: 24px; position: relative; } .memo-block .block-eyebrow { font: 600 10px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; color: var(--accent); margin-bottom: 6px; } .memo-block h3 { font: 600 16px/1.3 var(--font-display); margin-bottom: 8px; } .memo-block p { font-size: 13.5px; line-height: 1.7; color: var(--fg); } .memo-block .citation { font: 500 10px/1 var(--font-mono); color: var(--accent); cursor: pointer; } .memo-block .citation:hover { text-decoration: underline; } .memo-block .ai-edit { background: oklch(95% 0.02 80); border-left: 2px solid var(--accent); padding: 8px 14px; margin: 8px 0; font-size: 12.5px; color: var(--muted); font-style: italic; } /* ─── SOURCE / ENTITY CARDS ─── */ .source-card { border: 1px solid var(--border); padding: 10px 12px; margin-bottom: 6px; background: var(--surface); } .source-card .src-type { font: 500 9px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; color: var(--accent); margin-bottom: 3px; } .source-card .src-title { font: 500 12px/1.35 var(--font-body); margin-bottom: 2px; } .source-card .src-meta { font-size: 10.5px; color: var(--muted); } /* ─── AGENT TILES ─── */ .agent-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 10px; padding: 20px 28px; } .agent-tile { border: 1px solid var(--border); padding: 14px; background: var(--surface); transition: border-color 0.15s, box-shadow 0.15s; cursor: pointer; position: relative; } .agent-tile:hover { border-color: var(--muted); } .agent-tile.selected { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent); } .agent-tile .tile-icon { width: 28px; height: 28px; border: 1px solid var(--border); display: flex; align-items: center; justify-content: center; font: 600 11px/1 var(--font-mono); margin-bottom: 10px; color: var(--muted); } .agent-tile .tile-name { font: 600 13px/1.3 var(--font-body); margin-bottom: 4px; } .agent-tile .tile-role { font-size: 11px; color: var(--muted); line-height: 1.4; margin-bottom: 10px; } .agent-tile .tile-status { display: flex; align-items: center; gap: 6px; font: 500 10px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.06em; } .dot { width: 6px; height: 6px; border-radius: 50%; display: inline-block; } .dot.running { background: var(--accent); } .dot.done { background: var(--green); } .dot.idle { background: var(--muted); } .dot.queued { background: oklch(70% 0.06 80); } .agent-tile .progress-bar { position: absolute; bottom: 0; left: 0; right: 0; height: 2px; background: var(--border); } .agent-tile .progress-bar .fill { height: 100%; background: var(--accent); transition: width 0.5s ease; } .agent-tile .tile-actions { display: none; margin-top: 8px; gap: 4px; } .agent-tile:hover .tile-actions, .agent-tile.selected .tile-actions { display: flex; } /* ─── AGENT DETAIL PANEL ─── */ .agent-detail { display: none; border-left: 1px solid var(--border); width: 360px; flex-shrink: 0; background: var(--surface); overflow-y: auto; flex-direction: column; } .agent-detail.open { display: flex; } .agent-detail .detail-header { padding: 16px 20px; border-bottom: 1px solid var(--border); display: flex; justify-content: space-between; align-items: flex-start; } .agent-detail .detail-header h3 { font: 600 15px/1.2 var(--font-body); } .agent-detail .detail-header .detail-status { font: 500 10px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.06em; color: var(--accent); margin-top: 4px; } .agent-detail .close-detail { width: 24px; height: 24px; border: 1px solid var(--border); background: none; cursor: pointer; display: flex; align-items: center; justify-content: center; font-size: 14px; color: var(--muted); border-radius: 2px; } .agent-detail .detail-body { padding: 16px 20px; flex: 1; overflow-y: auto; } .agent-detail .detail-section { margin-bottom: 16px; } .agent-detail .ds-label { font: 600 10px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); margin-bottom: 6px; } .agent-detail .log-entry { padding: 6px 0; border-bottom: 1px solid oklch(94% 0.006 80); font-size: 12px; line-height: 1.4; } .agent-detail .log-entry .log-time { font: 400 10px/1 var(--font-mono); color: var(--muted); } .agent-detail .dep-tag { display: inline-block; font: 500 10px/1 var(--font-mono); padding: 2px 8px; border: 1px solid var(--border); margin: 2px 4px 2px 0; color: var(--muted); } .agent-detail .dep-tag.active { border-color: var(--green); color: var(--green); } /* ─── ACTIVITY FEED ─── */ .feed { border-top: 1px solid var(--border); padding: 16px 28px; overflow-y: auto; flex: 1; } .feed-item { display: flex; gap: 10px; padding: 8px 0; border-bottom: 1px solid oklch(94% 0.006 80); } .feed-item .feed-time { font: 400 10px/1 var(--font-mono); color: var(--muted); white-space: nowrap; padding-top: 2px; min-width: 46px; } .feed-item .feed-agent { font: 600 11px/1 var(--font-mono); color: var(--accent); white-space: nowrap; min-width: 100px; } .feed-item .feed-msg { font-size: 12px; line-height: 1.4; color: var(--fg); } /* ─── COMMAND BAR (agent carousel) ─── */ .command-bar { flex-shrink: 0; background: var(--surface); border-top: 1px solid var(--border); display: flex; align-items: stretch; min-height: 52px; position: relative; } .agent-carousel { display: flex; align-items: center; gap: 0; background: oklch(96% 0.012 80); border-right: 1px solid var(--border); width: 320px; flex-shrink: 0; } .agent-carousel .carousel-arrow { width: 28px; height: 100%; background: none; border: none; color: var(--muted); cursor: pointer; display: flex; align-items: center; justify-content: center; font-size: 10px; flex-shrink: 0; } .agent-carousel .carousel-arrow:hover { color: var(--fg); } .agent-carousel .carousel-arrow:disabled { opacity: 0.3; cursor: default; } .agent-carousel .carousel-strip { flex: 1; display: flex; align-items: center; gap: 8px; padding: 8px 10px; cursor: pointer; overflow: hidden; } .agent-carousel .carousel-strip:hover { background: oklch(94% 0.016 80); } .agent-carousel .agent-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--accent); animation: pulse 1.5s ease infinite; flex-shrink: 0; } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } } .agent-carousel .carousel-info { flex: 1; min-width: 0; } .agent-carousel .carousel-name { font: 600 11px/1.1 var(--font-body); color: var(--fg); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .agent-carousel .carousel-action { font: 400 10px/1.2 var(--font-mono); color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .agent-carousel .carousel-counter { font: 400 9px/1 var(--font-mono); color: var(--muted); flex-shrink: 0; } .command-bar .chat-area { flex: 1; display: flex; align-items: center; padding: 0 16px; gap: 10px; } .command-bar .chat-area .prompt-icon { color: var(--accent); font: 600 12px/1 var(--font-mono); } .command-bar .chat-area input { flex: 1; border: none; background: none; font: 400 13px/1.4 var(--font-body); color: var(--fg); outline: none; } .command-bar .chat-area input::placeholder { color: oklch(70% 0.01 80); } .command-bar .hint { font: 400 10px/1 var(--font-mono); color: var(--muted); border: 1px solid var(--border); padding: 2px 6px; margin-right: 16px; align-self: center; } /* ─── TOOLBAR ─── */ .toolbar { display: flex; align-items: center; gap: 8px; padding: 10px 16px; border-bottom: 1px solid var(--border); background: var(--surface); flex-shrink: 0; } .toolbar .toolbar-label { font: 500 10px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); } .toolbar select { font: 500 12px/1 var(--font-body); padding: 5px 8px; border: 1px solid var(--border); background: var(--surface); color: var(--fg); border-radius: 2px; } .toolbar .spacer { flex: 1; } /* ─── AGENT OVERLAY (fullscreen with agent sidebar) ─── */ .overlay { display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: var(--bg); z-index: 500; flex-direction: column; } .overlay.open { display: flex; } .overlay .overlay-header { display: flex; align-items: center; gap: 12px; padding: 12px 24px; border-bottom: 1px solid var(--border); background: var(--surface); } .overlay .overlay-header h2 { font: 600 16px/1 var(--font-body); } .overlay .overlay-header .overlay-status { font: 500 10px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.06em; color: var(--accent); } .overlay .overlay-body { flex: 1; overflow: hidden; display: flex; } .overlay .output-col { flex: 1; overflow-y: auto; } .overlay .agents-sidebar { width: 260px; border-left: 1px solid var(--border); background: var(--surface); overflow-y: auto; flex-shrink: 0; } .overlay .agents-sidebar .sidebar-title { font: 600 10px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; color: var(--muted); padding: 14px 16px 8px; } .overlay .sidebar-agent { display: flex; align-items: center; gap: 8px; padding: 8px 16px; cursor: pointer; transition: background 0.12s; border-bottom: 1px solid oklch(95% 0.006 80); } .overlay .sidebar-agent:hover { background: oklch(96% 0.008 80); } .overlay .sidebar-agent.active { background: oklch(95% 0.015 80); border-left: 3px solid var(--accent); } .overlay .sidebar-agent .sa-name { font: 600 11px/1.2 var(--font-body); } .overlay .sidebar-agent .sa-status { font: 400 9px/1 var(--font-mono); color: var(--muted); text-transform: uppercase; letter-spacing: 0.04em; } .overlay .trace-col { width: 340px; border-left: 1px solid var(--border); padding: 24px; overflow-y: auto; flex-shrink: 0; } .overlay .trace-step { padding: 8px 0; border-bottom: 1px solid oklch(94% 0.006 80); display: flex; gap: 8px; } .overlay .trace-step .step-num { font: 600 10px/1 var(--font-mono); color: var(--accent); min-width: 20px; } .overlay .trace-step .step-content { font-size: 12px; line-height: 1.4; } .overlay .trace-step .step-content .step-label { font-weight: 600; } .overlay .trace-step .step-content .step-detail { color: var(--muted); margin-top: 2px; } /* ─── ANNOTATION SYSTEM ─── */ .annotation-toolbar { display: none; position: absolute; background: var(--fg); color: var(--surface); border-radius: 2px; padding: 4px; gap: 2px; z-index: 300; box-shadow: 0 4px 12px oklch(20% 0.02 60 / 0.2); } .annotation-toolbar.open { display: flex; } .annotation-toolbar button { background: none; border: none; color: var(--surface); font-size: 11px; padding: 4px 8px; cursor: pointer; border-radius: 1px; } .annotation-toolbar button:hover { background: oklch(40% 0.02 60); } .annotation-toolbar button.active { background: var(--accent); } .highlight-annotation { background: oklch(90% 0.06 80); border-bottom: 2px solid var(--accent); cursor: pointer; position: relative; } .highlight-annotation:hover::after { content: attr(data-comment); position: absolute; bottom: 100%; left: 0; background: var(--fg); color: var(--surface); padding: 4px 8px; font: 400 11px/1.4 var(--font-body); white-space: nowrap; border-radius: 2px; z-index: 200; } .box-annotation { position: absolute; border: 2px solid var(--red); pointer-events: none; z-index: 200; } .box-annotation .box-label { position: absolute; top: -20px; left: 0; background: var(--red); color: var(--surface); font: 500 9px/1 var(--font-mono); padding: 2px 6px; text-transform: uppercase; letter-spacing: 0.04em; pointer-events: auto; cursor: pointer; } .comment-pin { display: inline-flex; width: 16px; height: 16px; background: var(--accent); color: var(--surface); border-radius: 50%; align-items: center; justify-content: center; font: 600 8px/1 var(--font-mono); cursor: pointer; margin-left: 2px; vertical-align: super; } /* ─── TREE CHART ─── */ .dep-tree { padding: 20px 28px; background: var(--surface); border-bottom: 1px solid var(--border); overflow-x: auto; } .dep-tree svg { display: block; } .dep-tree .tree-node { display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; border: 1px solid var(--border); background: var(--surface); font: 500 10px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.04em; color: var(--muted); border-radius: 3px; cursor: default; white-space: nowrap; } .dep-tree .tree-node.done { border-color: var(--green); color: var(--green); } .dep-tree .tree-node.running { border-color: var(--accent); color: var(--accent); } .dep-tree .tree-node.queued { border-color: oklch(70% 0.06 80); } .dep-tree .tree-node .node-dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; } .dep-tree .tree-arrow { color: var(--border); font-size: 12px; margin: 0 2px; } .dep-tree .tree-branch-label { font: 600 9px/1 var(--font-mono); color: oklch(65% 0.01 60); text-transform: uppercase; letter-spacing: 0.08em; margin: 10px 0 4px 0; padding-left: 4px; } .dep-tree .tree-blocking { display: inline-flex; align-items: center; gap: 4px; font: 400 9px/1 var(--font-mono); color: var(--red); margin-left: 8px; padding: 2px 6px; border: 1px solid oklch(85% 0.02 25); } .dep-tree .tree-pipeline { display: flex; align-items: center; gap: 0; padding: 6px 0; } .dep-tree .tree-connector { color: var(--border); margin: 0 4px; } .dep-tree .tree-status-line { display: flex; align-items: center; gap: 16px; margin-top: 12px; padding: 8px 0; } .dep-tree .tree-legend-item { display: flex; align-items: center; gap: 6px; font: 400 10px/1 var(--font-mono); color: var(--muted); } .dep-tree .tree-legend-dot { width: 8px; height: 8px; border-radius: 50%; border: 1.5px solid; } /* ─── HOME DASHBOARD ─── */ .home-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; padding: 28px; } .home-grid .full-width { grid-column: 1 / -1; } .home-card { border: 1px solid var(--border); background: var(--surface); overflow: hidden; } .home-card .card-header { display: flex; align-items: center; justify-content: space-between; padding: 14px 16px 10px; border-bottom: 1px solid var(--border); min-height: 44px; } .home-card .card-header h3 { font: 600 10px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; color: var(--muted); } .home-card .card-body { padding: 0; } .home-card .card-row { display: grid; grid-template-columns: 56px 1fr 80px 120px; align-items: center; gap: 8px; padding: 10px 16px; border-bottom: 1px solid oklch(95% 0.006 80); cursor: pointer; transition: background 0.12s; } .home-card .card-row:last-child { border-bottom: none; } .home-card .card-row:hover { background: oklch(96% 0.008 80); } .home-card .card-row .row-ticker { font: 700 12px/1 var(--font-mono); background: var(--fg); color: var(--surface); padding: 3px 7px; letter-spacing: 0.04em; flex-shrink: 0; width: 44px; text-align: center; display: inline-block; } .home-card .card-row .row-name { font: 500 12.5px/1.2 var(--font-body); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .home-card .card-row .row-meta { font-size: 11px; color: var(--muted); white-space: nowrap; text-align: right; } .home-card .card-row .row-tag { justify-self: end; } /* Earnings calendar compact rows */ .ec-group-label { font: 500 9px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; color: var(--muted); padding: 8px 16px 4px; } .ec-group-label:first-child { padding-top: 6px; } .ec-row { display: grid; grid-template-columns: 44px 1fr 40px 48px; align-items: center; gap: 6px; padding: 5px 16px; border-bottom: 1px solid oklch(95% 0.006 80); transition: background 0.12s; cursor: pointer; } .ec-row:last-child { border-bottom: none; } .ec-row:hover { background: oklch(96% 0.008 80); } .ec-row .row-ticker { font: 700 11px/1 var(--font-mono); letter-spacing: 0.04em; background: var(--fg); color: var(--surface); padding: 3px 7px; text-align: center; display: inline-block; width: 44px; } .ec-row .row-name { font: 400 11.5px/1.3 var(--font-body); color: var(--fg); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .ec-row .ec-tag { font: 600 9px/1 var(--font-mono); text-transform: uppercase; text-align: center; padding: 2px 0; } .ec-row .ec-tag.bmo { color: var(--accent); } .ec-row .ec-tag.amc { color: var(--muted); } .ec-row .row-meta { font-size: 10px; color: var(--muted); white-space: nowrap; text-align: right; } .stat-row { display: flex; gap: 1px; background: var(--border); border: 1px solid var(--border); margin-bottom: 12px; } .stat-row .stat-cell { flex: 1; background: var(--surface); padding: 14px 16px; text-align: center; } .stat-row .stat-cell .stat-val { font: 600 22px/1 var(--font-display); letter-spacing: -0.01em; } .stat-row .stat-cell .stat-label { font: 500 9px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); margin-top: 4px; } .report-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 10px; padding: 16px; } .report-thumb { border: 1px solid var(--border); background: var(--bg); padding: 14px; cursor: pointer; transition: border-color 0.15s; } .report-thumb:hover { border-color: var(--muted); } .report-thumb .rt-type { font: 500 9px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; color: var(--accent); margin-bottom: 6px; } .report-thumb .rt-title { font: 600 12px/1.3 var(--font-body); margin-bottom: 4px; } .report-thumb .rt-meta { font-size: 10px; color: var(--muted); } /* ─── SETTINGS OVERLAY ─── */ .settings-overlay { display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: var(--bg); z-index: 500; flex-direction: column; } .settings-overlay.open { display: flex; } .settings-overlay .settings-header { display: flex; align-items: center; gap: 12px; padding: 16px 32px; border-bottom: 1px solid var(--border); background: var(--surface); } .settings-overlay .settings-header h2 { font: 600 18px/1 var(--font-display); } .settings-overlay .settings-body { flex: 1; overflow-y: auto; padding: 32px; display: flex; gap: 32px; } .settings-overlay .settings-nav { width: 200px; flex-shrink: 0; } .settings-overlay .settings-nav button { display: block; width: 100%; text-align: left; padding: 8px 14px; border: none; background: none; font: 400 13px/1.4 var(--font-body); color: var(--muted); cursor: pointer; border-radius: 2px; } .settings-overlay .settings-nav button:hover { color: var(--fg); } .settings-overlay .settings-nav button.active { color: var(--fg); font-weight: 600; background: var(--surface); } .settings-overlay .settings-content { flex: 1; max-width: 560px; } .settings-overlay .settings-section { margin-bottom: 28px; } .settings-overlay .settings-section h3 { font: 600 10px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; color: var(--muted); margin-bottom: 12px; padding-bottom: 6px; border-bottom: 1px solid var(--border); } .settings-overlay .sd-row { display: flex; justify-content: space-between; align-items: center; padding: 8px 0; font-size: 13px; } .settings-overlay .sd-row .sd-desc { font-size: 11px; color: var(--muted); margin-top: 2px; } .toggle { width: 32px; height: 18px; background: var(--border); border-radius: 9px; position: relative; cursor: pointer; transition: background 0.15s; flex-shrink: 0; } .toggle.on { background: var(--accent); } .toggle::after { content: ''; width: 14px; height: 14px; border-radius: 50%; background: var(--surface); position: absolute; top: 2px; left: 2px; transition: left 0.15s; } .toggle.on::after { left: 16px; } .settings-overlay select, .settings-overlay input[type="text"] { font: 500 12px/1 var(--font-body); padding: 5px 8px; border: 1px solid var(--border); background: var(--surface); color: var(--fg); border-radius: 2px; } /* ─── PROFILE EDITOR OVERLAY ─── */ .profile-overlay { display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: oklch(20% 0.02 60 / 0.3); z-index: 600; align-items: center; justify-content: center; } .profile-overlay.open { display: flex; } .profile-overlay .profile-card { width: 420px; background: var(--surface); border: 1px solid var(--border); padding: 0; overflow: hidden; } .profile-overlay .profile-header { display: flex; align-items: center; gap: 16px; padding: 24px 24px 20px; border-bottom: 1px solid var(--border); } .profile-overlay .profile-avatar { width: 56px; height: 56px; border-radius: 50%; border: 2px solid var(--border); display: flex; align-items: center; justify-content: center; font: 700 20px/1 var(--font-mono); color: var(--fg); background: var(--bg); } .profile-overlay .profile-name { font: 600 16px/1.2 var(--font-body); } .profile-overlay .profile-role { font-size: 12px; color: var(--muted); margin-top: 2px; } .profile-overlay .profile-body { padding: 20px 24px; } .profile-overlay .profile-field { margin-bottom: 14px; } .profile-overlay .profile-field label { display: block; font: 500 10px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); margin-bottom: 4px; } .profile-overlay .profile-field input { width: 100%; font: 400 13px/1.4 var(--font-body); padding: 7px 10px; border: 1px solid var(--border); background: var(--bg); color: var(--fg); border-radius: 2px; } .profile-overlay .profile-footer { display: flex; justify-content: flex-end; gap: 8px; padding: 16px 24px; border-top: 1px solid var(--border); background: var(--bg); } /* ─── DEP TREE TABS ─── */ .dep-tree-tabs { display: flex; gap: 0; border-bottom: 1px solid var(--border); margin-bottom: 12px; } .dep-tree-tabs button { font: 500 11px/1 var(--font-mono); padding: 8px 16px; border: none; background: none; color: var(--muted); cursor: pointer; border-bottom: 2px solid transparent; transition: color 0.12s, border-color 0.12s; text-transform: uppercase; letter-spacing: 0.04em; } .dep-tree-tabs button:hover { color: var(--fg); } .dep-tree-tabs button.active { color: var(--fg); border-bottom-color: var(--accent); } /* ─── OVERLAY AGENT TABS ─── */ .overlay-agent-tabs { display: flex; gap: 0; padding: 0 24px; border-bottom: 1px solid var(--border); background: var(--surface); } .overlay-agent-tabs .oat-btn { font: 500 11px/1.2 var(--font-body); padding: 10px 16px; border: none; background: none; color: var(--muted); cursor: pointer; border-bottom: 2px solid transparent; transition: color 0.12s, border-color 0.12s; display: flex; align-items: center; gap: 6px; } .overlay-agent-tabs .oat-btn:hover { color: var(--fg); } .overlay-agent-tabs .oat-btn.active { color: var(--fg); border-bottom-color: var(--accent); } .overlay-agent-tabs .oat-dot { width: 6px; height: 6px; border-radius: 50%; flex-shrink: 0; } /* ─── OVERLAY CHAT INPUT ─── */ .overlay-chat { border-top: 1px solid var(--border); padding: 12px 24px; background: var(--surface); display: flex; align-items: center; gap: 10px; flex-shrink: 0; } .overlay-chat .oc-label { font: 600 11px/1 var(--font-mono); color: var(--accent); flex-shrink: 0; } .overlay-chat input { flex: 1; border: 1px solid var(--border); background: var(--bg); padding: 7px 12px; font: 400 13px/1.4 var(--font-body); color: var(--fg); border-radius: 2px; } .overlay-chat input::placeholder { color: var(--muted); } .overlay-chat button { font: 500 11px/1 var(--font-body); padding: 7px 14px; border: 1px solid var(--border); background: var(--fg); color: var(--surface); cursor: pointer; border-radius: 2px; } .overlay-chat button:hover { opacity: 0.9; } /* ─── CHARTS PAGE ─── */ .charts-panel { padding: 24px; display: grid; grid-template-columns: 1fr 1fr; gap: 20px; } .chart-card { border: 1px solid var(--border); background: var(--surface); padding: 20px; } .chart-card .chart-title { font: 600 10px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; color: var(--muted); margin-bottom: 16px; } .chart-card svg { width: 100%; height: auto; } /* ─── PORTFOLIO DASHBOARD (home) ─── */ .portfolio-dashboard { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 1px; background: var(--border); border: 1px solid var(--border); } .pd-section { background: var(--surface); padding: 18px 16px; } .pd-section-title { font: 600 9px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; color: var(--muted); margin-bottom: 14px; } /* Holdings list */ .pd-holding-row { display: grid; grid-template-columns: 44px 1fr 60px 52px 48px 36px; align-items: center; gap: 8px; padding: 8px 2px; border-bottom: 1px solid oklch(95% 0.006 80); font-size: 11.5px; } .pd-holding-row:last-child { border-bottom: none; } .pd-ticker { font: 700 11px/1 var(--font-mono); background: var(--fg); color: var(--surface); padding: 2px 6px; letter-spacing: 0.04em; text-align: center; } .pd-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--fg); } .pd-price { font: 500 11px/1 var(--font-mono); text-align: right; } .pd-change { font: 600 10px/1 var(--font-mono); text-align: right; } .pd-change.positive { color: var(--green); } .pd-change.negative { color: var(--red); } .pd-weight { font: 400 10px/1 var(--font-mono); color: var(--muted); text-align: right; } .pd-spark { height: 16px; } .pd-spark svg { width: 100%; height: 100%; display: block; } .pd-spark.positive { color: var(--green); } .pd-spark.negative { color: var(--red); } /* Chart */ .pd-area-chart { width: 100%; height: 88px; display: block; } .pd-chart-labels { display: flex; justify-content: space-between; font: 400 8px/1 var(--font-mono); color: var(--muted); margin-top: 4px; } .pd-chart-return { display: flex; align-items: baseline; gap: 8px; margin-top: 10px; } .pd-period { font: 400 10px/1 var(--font-mono); color: var(--muted); } /* Sectors — split half treemap / factor tilt */ .pd-section.pd-sectors { padding: 0; display: flex; flex-direction: column; overflow: hidden; } .pd-split-col { display: flex; flex-direction: column; height: 100%; } .pd-split-half { flex: 1; display: flex; flex-direction: column; overflow: hidden; min-height: 0; } .pd-split-half:first-child { border-bottom: 1px solid var(--border); } .pd-split-half .pd-section-title { padding: 10px 14px 6px; flex-shrink: 0; } /* Compact treemap for the top half */ .pd-treemap-compact { flex: 1; min-height: 0; } .pd-treemap-compact .pd-treemap-cell { padding: 8px 10px; } .pd-treemap-compact .cell-pct { font-size: 20px; } .pd-treemap-compact .cell-sector { font-size: 8px; } .pd-treemap-compact .cell-value { font-size: 9px; } /* Factor tilt chart */ .pd-factor-chart { padding: 0 14px 12px; flex: 1; display: flex; flex-direction: column; justify-content: space-around; gap: 6px; } .pd-factor-row { display: grid; grid-template-columns: 54px 1fr; align-items: center; gap: 6px; } .pd-factor-label { font: 500 9px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); text-align: right; } .pd-factor-bar-track { height: 16px; background: oklch(95% 0.005 80); position: relative; overflow: hidden; border-radius: 1px; } .pd-factor-bar { height: 100%; position: absolute; top: 0; left: 0; display: flex; align-items: center; padding-right: 4px; justify-content: flex-end; border-radius: 1px; transition: width 0.4s ease; } .pd-factor-bar.positive { background: oklch(52% 0.12 145 / 0.25); border-right: 2px solid var(--green); } .pd-factor-bar.negative { background: oklch(52% 0.14 25 / 0.15); border-right: 2px solid var(--red); } .pd-factor-val { font: 600 8px/1 var(--font-mono); white-space: nowrap; } .pd-factor-bar.positive .pd-factor-val { color: var(--green); } .pd-factor-bar.negative .pd-factor-val { color: var(--red); } .pd-treemap { display: flex; flex-direction: column; gap: 1px; flex: 1; } .pd-treemap-row { display: flex; gap: 1px; } .pd-treemap-cell { display: flex; flex-direction: column; justify-content: center; align-items: center; padding: 10px 8px; cursor: default; transition: filter 0.15s, transform 0.15s; position: relative; overflow: hidden; } .pd-treemap-cell:hover { filter: brightness(1.12); z-index: 1; } .pd-treemap-cell .cell-ticker { font: 700 11px/1 var(--font-mono); letter-spacing: 0.06em; color: oklch(100% 0 0 / 0.85); } .pd-treemap-cell .cell-sector { font: 400 7px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.08em; color: oklch(100% 0 0 / 0.5); margin-top: 2px; } .pd-treemap-cell .cell-pct { font: 700 20px/1.1 var(--font-display); color: oklch(100% 0 0 / 0.95); letter-spacing: -0.02em; margin: 2px 0; } .pd-treemap-cell .cell-value { font: 400 9px/1 var(--font-mono); color: oklch(100% 0 0 / 0.55); } /* Holdings — scrollable */ .pd-section.pd-holdings { display: flex; flex-direction: column; overflow: hidden; } .pd-holdings-scroll { overflow-y: auto; overflow-x: hidden; flex: 1; min-height: 0; max-height: 320px; } .pd-holdings-scroll::-webkit-scrollbar { width: 4px; } .pd-holdings-scroll::-webkit-scrollbar-thumb { background: var(--border); border-radius: 2px; } .pd-holdings-scroll::-webkit-scrollbar-track { background: transparent; } .pd-metrics-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 1px; background: var(--border); } .pd-metric { background: var(--surface); padding: 10px 12px; } .pd-metric-label { font: 500 8px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); margin-bottom: 2px; } .pd-metric-value { font: 600 13px/1 var(--font-display); margin-top: 1px; }