1114 lines
40 KiB
CSS
1114 lines
40 KiB
CSS
: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;
|
|
}
|