600 lines
12 KiB
CSS
600 lines
12 KiB
CSS
/* Scan terminal KPI, list tabs, table rows, v4 analysis, and AI workspace.
|
|
Kept separate from the shell/filter CSS so dense decision-board styles can evolve independently. */
|
|
|
|
.root :global(.scan-kpi-bar) {
|
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
gap: 14px;
|
|
}
|
|
|
|
.root :global(.scan-kpi-card) {
|
|
min-height: 124px;
|
|
padding: 18px;
|
|
border-radius: 16px;
|
|
border: 1px solid rgba(92, 124, 170, 0.12);
|
|
background: linear-gradient(180deg, rgba(14, 28, 48, 0.92), rgba(11, 21, 37, 0.94));
|
|
transform: none;
|
|
}
|
|
|
|
.root :global(.scan-kpi-card:hover) {
|
|
transform: translateY(-2px);
|
|
}
|
|
|
|
.root :global(.scan-kpi-card::after) {
|
|
display: none;
|
|
}
|
|
|
|
.root :global(.scan-kpi-card.green .scan-kpi-label) {
|
|
color: #17d98b;
|
|
}
|
|
|
|
.root :global(.scan-kpi-card.cyan .scan-kpi-label) {
|
|
color: #37d6ff;
|
|
}
|
|
|
|
.root :global(.scan-kpi-card.purple .scan-kpi-label) {
|
|
color: #a35cff;
|
|
}
|
|
|
|
.root :global(.scan-kpi-card.blue .scan-kpi-label) {
|
|
color: #49a3ff;
|
|
}
|
|
|
|
.root :global(.scan-kpi-card.red .scan-kpi-label) {
|
|
color: #ff647c;
|
|
}
|
|
|
|
.root :global(.scan-kpi-card.amber .scan-kpi-label) {
|
|
color: #ffb84f;
|
|
}
|
|
|
|
.root :global(.scan-kpi-card.orange .scan-kpi-label) {
|
|
color: #F59E0B;
|
|
}
|
|
|
|
.root :global(.scan-kpi-label) {
|
|
font-size: 13px;
|
|
text-transform: none;
|
|
letter-spacing: 0;
|
|
}
|
|
|
|
.root :global(.scan-kpi-value) {
|
|
margin-top: 10px;
|
|
font-size: 28px;
|
|
}
|
|
|
|
.root :global(.scan-kpi-note) {
|
|
margin-top: 8px;
|
|
font-size: 14px;
|
|
color: #a8bedb;
|
|
}
|
|
|
|
.root :global(.scan-list-section) {
|
|
display: flex;
|
|
flex-direction: column;
|
|
flex: 1;
|
|
min-height: 0;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.root :global(.scan-list-header) {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
gap: 12px;
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
.root :global(.scan-list-tabs) {
|
|
display: flex;
|
|
gap: 24px;
|
|
}
|
|
|
|
.root :global(.scan-list-tabs button) {
|
|
border: none;
|
|
background: transparent;
|
|
font-size: 16px;
|
|
font-weight: 700;
|
|
color: #91a7c4;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.root :global(.scan-list-tabs button:disabled) {
|
|
opacity: 0.42;
|
|
cursor: not-allowed;
|
|
}
|
|
|
|
.root :global(.scan-list-tabs button.active) {
|
|
color: #fff;
|
|
}
|
|
|
|
.root :global(.scan-list-status) {
|
|
display: flex;
|
|
gap: 10px;
|
|
align-items: center;
|
|
}
|
|
|
|
.root :global(.scan-status-chip) {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
height: 34px;
|
|
padding: 0 12px;
|
|
border-radius: 999px;
|
|
border: 1px solid rgba(98, 126, 167, 0.22);
|
|
background: rgba(10, 22, 38, 0.92);
|
|
color: #c4d4e9;
|
|
font-size: 12px;
|
|
font-weight: 800;
|
|
letter-spacing: 0.02em;
|
|
}
|
|
|
|
.root :global(.scan-status-chip.live) {
|
|
border-color: rgba(55, 214, 255, 0.28);
|
|
background: rgba(55, 214, 255, 0.1);
|
|
color: #71e6ff;
|
|
}
|
|
|
|
.root :global(.scan-status-chip.stale) {
|
|
border-color: rgba(255, 184, 79, 0.24);
|
|
background: rgba(255, 184, 79, 0.1);
|
|
color: #ffc765;
|
|
}
|
|
|
|
.root :global(.scan-status-chip.ai) {
|
|
border-color: rgba(94, 234, 212, 0.28);
|
|
background: rgba(20, 184, 166, 0.12);
|
|
color: #87fff1;
|
|
}
|
|
|
|
.root :global(.scan-status-chip.focus) {
|
|
border-color: rgba(255, 176, 32, 0.3);
|
|
background: rgba(255, 176, 32, 0.12);
|
|
color: #ffd078;
|
|
}
|
|
|
|
.root :global(button.scan-status-chip.refresh) {
|
|
cursor: pointer;
|
|
}
|
|
|
|
.root :global(button.scan-status-chip.refresh:disabled) {
|
|
cursor: wait;
|
|
opacity: 0.68;
|
|
}
|
|
|
|
.root :global(.scan-status-chip .spin) {
|
|
animation: spin 1s linear infinite;
|
|
}
|
|
|
|
.root :global(.scan-table-shell) {
|
|
display: flex;
|
|
flex-direction: column;
|
|
flex: 1;
|
|
min-height: 0;
|
|
border: 1px solid rgba(90, 123, 166, 0.12);
|
|
border-radius: 18px;
|
|
background: rgba(8, 17, 30, 0.8);
|
|
overflow: hidden;
|
|
}
|
|
|
|
.root :global(.scan-table-shell.empty) {
|
|
min-height: 340px;
|
|
}
|
|
|
|
.root :global(.scan-table-banner) {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 8px;
|
|
align-items: center;
|
|
padding: 12px 16px;
|
|
border-bottom: 1px solid rgba(95, 124, 168, 0.12);
|
|
background: linear-gradient(180deg, rgba(255, 184, 79, 0.08), rgba(255, 184, 79, 0.03));
|
|
}
|
|
|
|
.root :global(.scan-table-banner strong) {
|
|
font-size: 13px;
|
|
font-weight: 800;
|
|
color: #ffd27f;
|
|
}
|
|
|
|
.root :global(.scan-table-banner span) {
|
|
font-size: 13px;
|
|
color: #c7d4e7;
|
|
}
|
|
|
|
.root :global(.scan-table-header) {
|
|
display: grid;
|
|
grid-template-columns: minmax(220px, 1.1fr) minmax(128px, 0.68fr) minmax(230px, 1.08fr) minmax(150px, 0.78fr) 92px;
|
|
gap: 10px;
|
|
align-items: center;
|
|
padding: 14px 18px;
|
|
background: rgba(11, 23, 40, 0.98);
|
|
border-bottom: 1px solid rgba(90, 123, 166, 0.12);
|
|
color: #92a8c5;
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
text-transform: none;
|
|
letter-spacing: 0;
|
|
}
|
|
|
|
.root :global(.scan-table-body) {
|
|
flex: 1;
|
|
min-height: 0;
|
|
overflow-y: auto;
|
|
overflow-x: hidden;
|
|
scrollbar-width: none;
|
|
-ms-overflow-style: none;
|
|
}
|
|
|
|
.root :global(.scan-v4-analysis) {
|
|
grid-column: auto;
|
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
gap: 12px;
|
|
margin: 0 14px 14px;
|
|
padding: 14px;
|
|
border-color: rgba(56, 189, 248, 0.18);
|
|
border-radius: 14px;
|
|
background:
|
|
linear-gradient(180deg, rgba(7, 20, 36, 0.96), rgba(5, 15, 28, 0.98)),
|
|
radial-gradient(circle at 4% 0%, rgba(45, 212, 191, 0.11), transparent 28%);
|
|
}
|
|
|
|
.root :global(.scan-v4-analysis section) {
|
|
padding: 13px;
|
|
border-color: rgba(92, 132, 188, 0.14);
|
|
background: rgba(10, 25, 43, 0.7);
|
|
}
|
|
|
|
.root :global(.scan-v4-analysis p),
|
|
.root :global(.scan-v4-analysis ul) {
|
|
color: #b8c9e3;
|
|
}
|
|
|
|
.root :global(.scan-v4-analysis .scan-v4-evidence) {
|
|
grid-column: 1 / -1;
|
|
}
|
|
|
|
.root :global(.scan-v4-analysis .scan-v4-decision) {
|
|
grid-column: 1 / -1;
|
|
border-color: rgba(45, 212, 191, 0.24);
|
|
background:
|
|
linear-gradient(180deg, rgba(6, 31, 43, 0.86), rgba(8, 23, 38, 0.86)),
|
|
radial-gradient(circle at 0 0, rgba(20, 184, 166, 0.12), transparent 32%);
|
|
}
|
|
|
|
.root :global(.scan-v4-analysis .scan-v4-decision.downgrade),
|
|
.root :global(.scan-v4-analysis .scan-v4-decision.watchlist) {
|
|
border-color: rgba(245, 158, 11, 0.24);
|
|
}
|
|
|
|
.root :global(.scan-v4-analysis .scan-v4-decision.veto) {
|
|
border-color: rgba(248, 113, 113, 0.28);
|
|
}
|
|
|
|
.root :global(.scan-v4-decision p b) {
|
|
color: #ecfeff;
|
|
font-weight: 950;
|
|
}
|
|
|
|
.root :global(.scan-v4-metar-summary) {
|
|
margin-top: 9px;
|
|
color: #8fb3d8;
|
|
font-size: 12px;
|
|
font-weight: 800;
|
|
line-height: 1.45;
|
|
}
|
|
|
|
.root :global(.scan-v4-evidence > div),
|
|
.root :global(.scan-v4-model-sources) {
|
|
gap: 8px;
|
|
}
|
|
|
|
.root :global(.scan-v4-analysis) {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 13px;
|
|
margin: 0 14px 14px;
|
|
padding: 15px 16px 16px;
|
|
border: 1px solid rgba(56, 189, 248, 0.16);
|
|
border-radius: 12px;
|
|
background:
|
|
linear-gradient(180deg, rgba(7, 20, 36, 0.96), rgba(5, 15, 28, 0.98)),
|
|
radial-gradient(circle at 4% 0%, rgba(45, 212, 191, 0.08), transparent 30%);
|
|
}
|
|
|
|
.root :global(.scan-v4-analysis section),
|
|
.root :global(.scan-v4-analysis section:first-child),
|
|
.root :global(.scan-v4-analysis .scan-v4-evidence) {
|
|
grid-column: auto;
|
|
min-width: 0;
|
|
padding: 0;
|
|
border: 0;
|
|
border-radius: 0;
|
|
background: transparent;
|
|
}
|
|
|
|
.root :global(.scan-v4-heading) {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
justify-content: space-between;
|
|
gap: 18px;
|
|
padding-bottom: 12px;
|
|
border-bottom: 1px solid rgba(90, 123, 166, 0.14);
|
|
}
|
|
|
|
.root :global(.scan-v4-heading > div) {
|
|
display: grid;
|
|
gap: 7px;
|
|
min-width: 0;
|
|
}
|
|
|
|
.root :global(.scan-v4-heading strong),
|
|
.root :global(.scan-v4-current b),
|
|
.root :global(.scan-v4-brief-grid strong) {
|
|
color: #6FB7FF;
|
|
font-size: 12px;
|
|
font-weight: 950;
|
|
letter-spacing: 0.02em;
|
|
}
|
|
|
|
.root :global(.scan-v4-heading p) {
|
|
margin: 0;
|
|
color: #d2e1f4;
|
|
font-size: 14px;
|
|
font-weight: 800;
|
|
line-height: 1.55;
|
|
}
|
|
|
|
.root :global(.scan-v4-decision-pill) {
|
|
display: inline-flex;
|
|
flex: 0 0 auto;
|
|
align-items: center;
|
|
justify-content: center;
|
|
min-height: 30px;
|
|
padding: 0 12px;
|
|
border: 1px solid rgba(45, 212, 191, 0.3);
|
|
border-radius: 999px;
|
|
background: rgba(20, 184, 166, 0.12);
|
|
color: #7dfbe7;
|
|
font-size: 12px;
|
|
font-weight: 950;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.root :global(.scan-v4-decision-pill.downgrade),
|
|
.root :global(.scan-v4-decision-pill.watchlist) {
|
|
border-color: rgba(245, 158, 11, 0.34);
|
|
background: rgba(245, 158, 11, 0.12);
|
|
color: #ffd166;
|
|
}
|
|
|
|
.root :global(.scan-v4-decision-pill.veto) {
|
|
border-color: rgba(248, 113, 113, 0.34);
|
|
background: rgba(248, 113, 113, 0.12);
|
|
color: #ff8585;
|
|
}
|
|
|
|
.root :global(.scan-v4-current) {
|
|
display: grid;
|
|
gap: 6px;
|
|
padding-bottom: 12px;
|
|
border-bottom: 1px solid rgba(90, 123, 166, 0.12);
|
|
}
|
|
|
|
.root :global(.scan-v4-current span) {
|
|
color: #c8d8ec;
|
|
font-size: 13px;
|
|
font-weight: 850;
|
|
line-height: 1.5;
|
|
}
|
|
|
|
.root :global(.scan-v4-current small) {
|
|
color: #8fb3d8;
|
|
font-size: 12px;
|
|
font-weight: 800;
|
|
line-height: 1.45;
|
|
}
|
|
|
|
.root :global(.scan-v4-brief-grid) {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 1.45fr) minmax(260px, 0.85fr);
|
|
gap: 26px;
|
|
}
|
|
|
|
.root :global(.scan-v4-brief-grid section:first-child) {
|
|
grid-column: auto;
|
|
}
|
|
|
|
.root :global(.scan-v4-brief-grid ul) {
|
|
display: grid;
|
|
gap: 8px;
|
|
margin: 8px 0 0;
|
|
padding: 0;
|
|
list-style: none;
|
|
}
|
|
|
|
.root :global(.scan-v4-brief-grid li) {
|
|
position: relative;
|
|
padding-left: 16px;
|
|
color: #aebfd8;
|
|
font-size: 12px;
|
|
font-weight: 800;
|
|
line-height: 1.48;
|
|
}
|
|
|
|
.root :global(.scan-v4-brief-grid li::before) {
|
|
content: "";
|
|
position: absolute;
|
|
top: 0.65em;
|
|
left: 0;
|
|
width: 5px;
|
|
height: 5px;
|
|
border-radius: 999px;
|
|
background: #4DA3FF;
|
|
box-shadow: 0 0 10px rgba(45, 212, 191, 0.45);
|
|
}
|
|
|
|
.root :global(.scan-v4-brief-grid section:nth-child(2) li::before) {
|
|
background: #f59e0b;
|
|
box-shadow: 0 0 10px rgba(245, 158, 11, 0.35);
|
|
}
|
|
|
|
.root :global(details.scan-v4-evidence) {
|
|
padding-top: 11px;
|
|
border-top: 1px solid rgba(90, 123, 166, 0.12);
|
|
}
|
|
|
|
.root :global(details.scan-v4-evidence summary) {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
min-height: 30px;
|
|
padding: 0 11px;
|
|
border: 1px solid rgba(65, 118, 216, 0.28);
|
|
border-radius: 8px;
|
|
background: rgba(10, 30, 58, 0.52);
|
|
color: #8fbdff;
|
|
font-size: 12px;
|
|
font-weight: 950;
|
|
cursor: pointer;
|
|
list-style: none;
|
|
}
|
|
|
|
.root :global(details.scan-v4-evidence summary::-webkit-details-marker) {
|
|
display: none;
|
|
}
|
|
|
|
.root :global(details.scan-v4-evidence summary::after) {
|
|
content: "v";
|
|
color: #8fbdff;
|
|
font-size: 12px;
|
|
}
|
|
|
|
.root :global(details.scan-v4-evidence[open] summary::after) {
|
|
content: "^";
|
|
}
|
|
|
|
.root :global(details.scan-v4-evidence > div) {
|
|
margin-top: 10px;
|
|
}
|
|
|
|
.root :global(.scan-forecast-desk) {
|
|
gap: 16px;
|
|
padding: 16px 18px 20px;
|
|
}
|
|
|
|
|
|
.root :global(.scan-ai-workspace) {
|
|
flex: 1;
|
|
min-height: 0;
|
|
max-height: 100%;
|
|
overflow-y: auto;
|
|
overscroll-behavior: contain;
|
|
scroll-padding-top: 64px;
|
|
border: 1px solid rgba(77, 163, 255, 0.16);
|
|
border-radius: 18px;
|
|
background: #0b1220;
|
|
padding: 14px;
|
|
}
|
|
|
|
.root :global(.scan-ai-workspace::-webkit-scrollbar) {
|
|
width: 8px;
|
|
}
|
|
|
|
.root :global(.scan-ai-workspace::-webkit-scrollbar-thumb) {
|
|
border-radius: 999px;
|
|
background: rgba(77, 163, 255, 0.28);
|
|
}
|
|
|
|
.root :global(.scan-ai-workspace.empty) {
|
|
display: grid;
|
|
place-items: center;
|
|
}
|
|
|
|
.root :global(.scan-ai-workspace-head) {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
gap: 18px;
|
|
align-items: flex-end;
|
|
margin-bottom: 10px;
|
|
padding: 0 2px;
|
|
}
|
|
|
|
.root :global(.scan-ai-workspace-head span) {
|
|
display: block;
|
|
color: #4da3ff;
|
|
font-size: 12px;
|
|
font-weight: 800;
|
|
letter-spacing: 0;
|
|
}
|
|
|
|
.root :global(.scan-ai-workspace-head strong) {
|
|
display: block;
|
|
color: #e6edf3;
|
|
font-size: 20px;
|
|
line-height: 1.2;
|
|
margin-top: 4px;
|
|
}
|
|
|
|
.root :global(.scan-ai-workspace-head p) {
|
|
max-width: 560px;
|
|
margin: 0;
|
|
color: #9fb2c7;
|
|
font-size: 13px;
|
|
line-height: 1.55;
|
|
text-align: right;
|
|
}
|
|
|
|
.root :global(.scan-ai-city-jumpbar) {
|
|
position: sticky;
|
|
top: 0;
|
|
z-index: 8;
|
|
display: flex;
|
|
gap: 8px;
|
|
margin: 0 0 12px;
|
|
padding: 8px;
|
|
overflow-x: auto;
|
|
border: 1px solid rgba(77, 163, 255, 0.14);
|
|
border-radius: 14px;
|
|
background: rgba(11, 18, 32, 0.92);
|
|
box-shadow: 0 12px 28px rgba(0, 0, 0, 0.22);
|
|
scrollbar-width: none;
|
|
}
|
|
|
|
.root :global(.scan-ai-city-jumpbar::-webkit-scrollbar) {
|
|
display: none;
|
|
}
|
|
|
|
.root :global(.scan-ai-city-jumpbar button) {
|
|
flex: 0 0 auto;
|
|
min-height: 32px;
|
|
padding: 0 12px;
|
|
border: 1px solid rgba(77, 163, 255, 0.26);
|
|
border-radius: 999px;
|
|
background: rgba(77, 163, 255, 0.1);
|
|
color: #cfe5ff;
|
|
font-size: 12px;
|
|
font-weight: 900;
|
|
cursor: pointer;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.root :global(.scan-ai-city-jumpbar button:hover) {
|
|
border-color: rgba(111, 183, 255, 0.62);
|
|
background: rgba(77, 163, 255, 0.18);
|
|
}
|
|
|
|
.root :global(.scan-ai-city-anchor) {
|
|
scroll-margin-top: 66px;
|
|
}
|
|
|
|
.root :global(.scan-ai-city-card:not(.collapsed)) {
|
|
overflow: visible;
|
|
}
|
|
|
|
.root :global(.scan-ai-city-card:not(.collapsed) .scan-ai-city-hero) {
|
|
position: sticky;
|
|
top: 54px;
|
|
z-index: 6;
|
|
border-radius: 18px 18px 0 0;
|
|
}
|