Flatten dashboard sections and emphasize data regions
This commit is contained in:
@@ -456,7 +456,7 @@ function AnalysisPageContent() {
|
||||
</Panel>
|
||||
|
||||
{error ? (
|
||||
<Panel>
|
||||
<Panel variant="surface">
|
||||
<p className="text-sm text-[#ffb5b5]">{error}</p>
|
||||
</Panel>
|
||||
) : null}
|
||||
@@ -597,7 +597,7 @@ function AnalysisPageContent() {
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-1 gap-6 xl:grid-cols-2">
|
||||
<Panel title="Price History" subtitle="Weekly close over the last year.">
|
||||
<Panel title="Price History" subtitle="Weekly close over the last year." variant="surface">
|
||||
{loading ? (
|
||||
<p className="text-sm text-[color:var(--terminal-muted)]">Loading price history...</p>
|
||||
) : priceSeries.length === 0 ? (
|
||||
@@ -645,6 +645,7 @@ function AnalysisPageContent() {
|
||||
<Panel
|
||||
title="Financial Table"
|
||||
subtitle={`Quarter-end (10-Q) and fiscal-year-end (10-K) snapshots for revenue, net income, assets, and margin. Values shown in ${selectedFinancialScaleLabel}.`}
|
||||
variant="surface"
|
||||
actions={(
|
||||
<div className="flex flex-col items-end gap-2">
|
||||
<div className="flex flex-wrap justify-end gap-2">
|
||||
@@ -712,7 +713,7 @@ function AnalysisPageContent() {
|
||||
))}
|
||||
</div>
|
||||
|
||||
<div className="hidden overflow-x-auto lg:block">
|
||||
<div className="data-table-wrap hidden lg:block">
|
||||
<table className="data-table min-w-[820px]">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -750,6 +751,7 @@ function AnalysisPageContent() {
|
||||
<Panel
|
||||
title="Filings"
|
||||
subtitle={`${periodEndFilings.length} quarter-end and fiscal-year-end SEC records loaded. Values shown in ${selectedFinancialScaleLabel}.`}
|
||||
variant="surface"
|
||||
>
|
||||
{loading ? (
|
||||
<p className="text-sm text-[color:var(--terminal-muted)]">Loading filings...</p>
|
||||
@@ -789,7 +791,7 @@ function AnalysisPageContent() {
|
||||
))}
|
||||
</div>
|
||||
|
||||
<div className="hidden overflow-x-auto lg:block">
|
||||
<div className="data-table-wrap hidden lg:block">
|
||||
<table className="data-table min-w-[860px]">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -829,7 +831,7 @@ function AnalysisPageContent() {
|
||||
)}
|
||||
</Panel>
|
||||
|
||||
<Panel title="AI Reports" subtitle="Generated filing analyses for this company.">
|
||||
<Panel title="AI Reports" subtitle="Generated filing analyses for this company." variant="surface">
|
||||
{loading ? (
|
||||
<p className="text-sm text-[color:var(--terminal-muted)]">Loading AI reports...</p>
|
||||
) : !analysis || analysis.recentAiReports.length === 0 ? (
|
||||
@@ -901,7 +903,7 @@ function AnalysisPageContent() {
|
||||
</div>
|
||||
</Panel>
|
||||
|
||||
<Panel title="Recent Research Feed" subtitle={`Previewing the latest ${Math.min(journalEntries.length, 4)} research entries for ${activeTicker}.`}>
|
||||
<Panel title="Recent Research Feed" subtitle={`Previewing the latest ${Math.min(journalEntries.length, 4)} research entries for ${activeTicker}.`} variant="surface">
|
||||
{journalLoading ? (
|
||||
<p className="text-sm text-[color:var(--terminal-muted)]">Loading research entries...</p>
|
||||
) : journalEntries.length === 0 ? (
|
||||
|
||||
@@ -354,6 +354,7 @@ function FilingsPageContent() {
|
||||
<Panel
|
||||
title="Filing Ledger"
|
||||
subtitle={`${filings.length} records loaded${searchTicker ? ` for ${searchTicker}` : ''}. Values shown in ${selectedFinancialScaleLabel}.`}
|
||||
variant="surface"
|
||||
actions={(
|
||||
<div className="flex w-full flex-wrap justify-start gap-2 sm:justify-end">
|
||||
{FINANCIAL_VALUE_SCALE_OPTIONS.map((option) => (
|
||||
@@ -454,7 +455,7 @@ function FilingsPageContent() {
|
||||
})}
|
||||
</div>
|
||||
|
||||
<div className="hidden overflow-x-auto lg:block">
|
||||
<div className="data-table-wrap hidden lg:block">
|
||||
<table className="data-table w-full">
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
@@ -654,7 +654,7 @@ function FinancialsPageContent() {
|
||||
</Panel>
|
||||
|
||||
{error ? (
|
||||
<Panel>
|
||||
<Panel variant="surface">
|
||||
<p className="text-sm text-[#ffb5b5]">{error}</p>
|
||||
</Panel>
|
||||
) : null}
|
||||
@@ -680,7 +680,7 @@ function FinancialsPageContent() {
|
||||
</div>
|
||||
</Panel>
|
||||
|
||||
<Panel title="Trend Chart" subtitle="Default trend series for the selected surface.">
|
||||
<Panel title="Trend Chart" subtitle="Default trend series for the selected surface." variant="surface">
|
||||
{loading ? (
|
||||
<p className="text-sm text-[color:var(--terminal-muted)]">Loading trend chart...</p>
|
||||
) : chartData.length === 0 || trendSeries.length === 0 ? (
|
||||
@@ -725,7 +725,7 @@ function FinancialsPageContent() {
|
||||
)}
|
||||
</Panel>
|
||||
|
||||
<Panel title="Surface Matrix" subtitle="Standardized statements, ratios, and KPIs render in one shared matrix.">
|
||||
<Panel title="Surface Matrix" subtitle="Standardized statements, ratios, and KPIs render in one shared matrix." variant="surface">
|
||||
{loading ? (
|
||||
<p className="text-sm text-[color:var(--terminal-muted)]">Loading financial matrix...</p>
|
||||
) : surfaceKind === 'adjusted' || surfaceKind === 'custom_metrics' ? (
|
||||
@@ -736,7 +736,7 @@ function FinancialsPageContent() {
|
||||
) : periods.length === 0 || filteredRows.length === 0 ? (
|
||||
<p className="text-sm text-[color:var(--terminal-muted)]">No rows available for the selected filters yet.</p>
|
||||
) : (
|
||||
<div className="overflow-x-auto">
|
||||
<div className="data-table-wrap">
|
||||
<table className="data-table min-w-[980px]">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -804,7 +804,7 @@ function FinancialsPageContent() {
|
||||
)}
|
||||
</Panel>
|
||||
|
||||
<Panel title="Row Details" subtitle="Inspect provenance, formulas, and dimensional evidence for the selected row.">
|
||||
<Panel title="Row Details" subtitle="Inspect provenance, formulas, and dimensional evidence for the selected row." variant="surface">
|
||||
{!selectedRow ? (
|
||||
<p className="text-sm text-[color:var(--terminal-muted)]">Select a row to inspect details.</p>
|
||||
) : (
|
||||
@@ -854,7 +854,7 @@ function FinancialsPageContent() {
|
||||
) : dimensionRows.length === 0 ? (
|
||||
<p className="text-sm text-[color:var(--terminal-muted)]">No dimensional facts were returned for the selected row.</p>
|
||||
) : (
|
||||
<div className="overflow-x-auto">
|
||||
<div className="data-table-wrap">
|
||||
<table className="data-table min-w-[760px]">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -882,7 +882,7 @@ function FinancialsPageContent() {
|
||||
</Panel>
|
||||
|
||||
{(surfaceKind === 'income_statement' || surfaceKind === 'balance_sheet' || surfaceKind === 'cash_flow_statement') && financials ? (
|
||||
<Panel title="Metric Validation" subtitle="Validation remains limited to statement-derived taxonomy metrics in v1.">
|
||||
<Panel title="Metric Validation" subtitle="Validation remains limited to statement-derived taxonomy metrics in v1." variant="surface">
|
||||
<div className="mb-3 flex items-center gap-2 text-sm text-[color:var(--terminal-muted)]">
|
||||
<AlertTriangle className="size-4" />
|
||||
<span>Overall status: {financials.metrics.validation?.status ?? 'not_run'}</span>
|
||||
@@ -890,7 +890,7 @@ function FinancialsPageContent() {
|
||||
{(financials.metrics.validation?.checks.length ?? 0) === 0 ? (
|
||||
<p className="text-sm text-[color:var(--terminal-muted)]">No validation checks available yet.</p>
|
||||
) : (
|
||||
<div className="overflow-x-auto">
|
||||
<div className="data-table-wrap">
|
||||
<table className="data-table min-w-[760px]">
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
@@ -3,13 +3,13 @@
|
||||
:root {
|
||||
--font-display: "Avenir Next", "Segoe UI", "Helvetica Neue", Arial, sans-serif;
|
||||
--font-mono: "Menlo", "SFMono-Regular", "Consolas", "Liberation Mono", monospace;
|
||||
--bg-0: #05080d;
|
||||
--bg-1: #08121a;
|
||||
--bg-2: #0b1f28;
|
||||
--panel: rgba(6, 17, 24, 0.8);
|
||||
--panel-soft: rgba(7, 22, 31, 0.62);
|
||||
--panel-bright: rgba(10, 33, 45, 0.9);
|
||||
--line-weak: rgba(126, 217, 255, 0.22);
|
||||
--bg-0: #071018;
|
||||
--bg-1: #0a1720;
|
||||
--bg-2: #0e2028;
|
||||
--panel: rgba(8, 20, 28, 0.72);
|
||||
--panel-soft: rgba(9, 22, 30, 0.46);
|
||||
--panel-bright: rgba(12, 30, 38, 0.84);
|
||||
--line-weak: rgba(126, 217, 255, 0.18);
|
||||
--line-strong: rgba(123, 255, 217, 0.75);
|
||||
--accent: #68ffd5;
|
||||
--accent-strong: #8cffeb;
|
||||
@@ -56,9 +56,9 @@ body {
|
||||
font-family: var(--font-display), sans-serif;
|
||||
color: var(--terminal-bright);
|
||||
background:
|
||||
radial-gradient(circle at 18% -10%, rgba(126, 217, 255, 0.25), transparent 35%),
|
||||
radial-gradient(circle at 84% 0%, rgba(104, 255, 213, 0.2), transparent 30%),
|
||||
linear-gradient(140deg, var(--bg-0), var(--bg-1) 50%, var(--bg-2));
|
||||
radial-gradient(circle at 14% -12%, rgba(126, 217, 255, 0.16), transparent 34%),
|
||||
radial-gradient(circle at 88% 0%, rgba(104, 255, 213, 0.11), transparent 28%),
|
||||
linear-gradient(160deg, var(--bg-0), var(--bg-1) 48%, var(--bg-2));
|
||||
}
|
||||
|
||||
.app-surface,
|
||||
@@ -72,10 +72,10 @@ body {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
background-image:
|
||||
linear-gradient(rgba(126, 217, 255, 0.08) 1px, transparent 1px),
|
||||
linear-gradient(90deg, rgba(126, 217, 255, 0.07) 1px, transparent 1px);
|
||||
background-size: 34px 34px;
|
||||
mask-image: radial-gradient(ellipse at center, black 20%, transparent 75%);
|
||||
linear-gradient(rgba(126, 217, 255, 0.04) 1px, transparent 1px),
|
||||
linear-gradient(90deg, rgba(126, 217, 255, 0.035) 1px, transparent 1px);
|
||||
background-size: 38px 38px;
|
||||
mask-image: radial-gradient(ellipse at center, black 28%, transparent 78%);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ body {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
pointer-events: none;
|
||||
opacity: 0.3;
|
||||
opacity: 0.14;
|
||||
background-image: radial-gradient(rgba(160, 255, 227, 0.15) 0.7px, transparent 0.7px);
|
||||
background-size: 4px 4px;
|
||||
}
|
||||
@@ -110,12 +110,26 @@ textarea {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
.data-surface {
|
||||
border: 1px solid var(--line-weak);
|
||||
border-radius: 1rem;
|
||||
background: linear-gradient(180deg, rgba(10, 25, 33, 0.9), rgba(8, 19, 26, 0.72));
|
||||
}
|
||||
|
||||
.data-table-wrap {
|
||||
overflow-x: auto;
|
||||
border: 1px solid var(--line-weak);
|
||||
border-radius: 1rem;
|
||||
background: linear-gradient(180deg, rgba(9, 23, 30, 0.9), rgba(7, 18, 24, 0.74));
|
||||
}
|
||||
|
||||
.data-table th,
|
||||
.data-table td {
|
||||
border-bottom: 1px solid var(--line-weak);
|
||||
padding: 0.75rem 0.65rem;
|
||||
padding: 0.8rem 0.8rem;
|
||||
text-align: left;
|
||||
font-size: 0.875rem;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.data-table th {
|
||||
@@ -127,7 +141,7 @@ textarea {
|
||||
}
|
||||
|
||||
.data-table tbody tr:hover {
|
||||
background-color: rgba(17, 47, 61, 0.45);
|
||||
background-color: rgba(17, 47, 61, 0.28);
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
@@ -157,8 +171,8 @@ textarea {
|
||||
@media (max-width: 640px) {
|
||||
body {
|
||||
background:
|
||||
radial-gradient(circle at 24% -4%, rgba(126, 217, 255, 0.2), transparent 36%),
|
||||
radial-gradient(circle at 82% 2%, rgba(104, 255, 213, 0.16), transparent 30%),
|
||||
radial-gradient(circle at 24% -4%, rgba(126, 217, 255, 0.14), transparent 36%),
|
||||
radial-gradient(circle at 82% 2%, rgba(104, 255, 213, 0.11), transparent 30%),
|
||||
linear-gradient(155deg, var(--bg-0), var(--bg-1) 54%, var(--bg-2));
|
||||
}
|
||||
|
||||
|
||||
@@ -454,7 +454,7 @@ function GraphingPageContent() {
|
||||
</form>
|
||||
</Panel>
|
||||
|
||||
<Panel title="Chart Controls" subtitle="Surface, metric, cadence, chart style, and scale stay in the URL for deep-linking.">
|
||||
<Panel title="Chart Controls" subtitle="Surface, metric, cadence, chart style, and scale stay in the URL for deep-linking." variant="surface">
|
||||
<div className="grid gap-5 lg:grid-cols-[1.2fr_1fr]">
|
||||
<div className="space-y-5">
|
||||
<ControlSection
|
||||
@@ -515,7 +515,7 @@ function GraphingPageContent() {
|
||||
</div>
|
||||
</Panel>
|
||||
|
||||
<Panel title="Comparison Chart" subtitle="One metric, multiple companies, aligned by actual reported dates.">
|
||||
<Panel title="Comparison Chart" subtitle="One metric, multiple companies, aligned by actual reported dates." variant="surface">
|
||||
{loading ? (
|
||||
<p className="text-sm text-[color:var(--terminal-muted)]">Loading comparison chart...</p>
|
||||
) : !selectedMetric || !comparison.hasAnyData ? (
|
||||
@@ -607,8 +607,8 @@ function GraphingPageContent() {
|
||||
)}
|
||||
</Panel>
|
||||
|
||||
<Panel title="Latest Values" subtitle="Most recent reported point per company, plus the prior point and one-step change.">
|
||||
<div className="overflow-x-auto">
|
||||
<Panel title="Latest Values" subtitle="Most recent reported point per company, plus the prior point and one-step change." variant="surface">
|
||||
<div className="data-table-wrap">
|
||||
<table className="data-table min-w-[920px]">
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
20
app/page.tsx
20
app/page.tsx
@@ -151,7 +151,7 @@ export default function CommandCenterPage() {
|
||||
actions={headerActions}
|
||||
>
|
||||
{error ? (
|
||||
<Panel>
|
||||
<Panel variant="surface">
|
||||
<p className="text-sm text-[#ffb5b5]">{error}</p>
|
||||
</Panel>
|
||||
) : null}
|
||||
@@ -169,7 +169,7 @@ export default function CommandCenterPage() {
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-1 gap-6 xl:grid-cols-3">
|
||||
<Panel title="Recent Tasks" subtitle="Durable jobs from queue processor" className="xl:col-span-1">
|
||||
<Panel title="Recent Tasks" subtitle="Durable jobs from queue processor" className="xl:col-span-1" variant="surface">
|
||||
{loading ? (
|
||||
<p className="text-sm text-[color:var(--terminal-muted)]">Loading tasks...</p>
|
||||
) : (
|
||||
@@ -177,7 +177,7 @@ export default function CommandCenterPage() {
|
||||
)}
|
||||
</Panel>
|
||||
|
||||
<Panel title="AI Brief" subtitle="Latest portfolio insight from AI SDK (Zhipu)" className="xl:col-span-2">
|
||||
<Panel title="AI Brief" subtitle="Latest portfolio insight from AI SDK (Zhipu)" className="xl:col-span-2" variant="surface">
|
||||
{loading ? (
|
||||
<p className="text-sm text-[color:var(--terminal-muted)]">Loading intelligence output...</p>
|
||||
) : state.latestInsight ? (
|
||||
@@ -195,21 +195,21 @@ export default function CommandCenterPage() {
|
||||
</div>
|
||||
|
||||
<Panel title="Quick Links" subtitle="Feature modules">
|
||||
<div className="grid grid-cols-1 gap-3 md:grid-cols-2 xl:grid-cols-5">
|
||||
<Link className="rounded-xl border border-[color:var(--line-weak)] bg-[color:var(--panel-soft)] p-4 transition hover:border-[color:var(--line-strong)] hover:bg-[color:var(--panel-bright)]" href="/analysis">
|
||||
<div className="grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-3">
|
||||
<Link className="border-l-2 border-[color:var(--line-weak)] py-1 pl-4 pr-2 transition hover:border-[color:var(--line-strong)]" href="/analysis">
|
||||
<p className="panel-heading text-xs uppercase text-[color:var(--terminal-muted)]">Analysis</p>
|
||||
<p className="mt-2 text-sm text-[color:var(--terminal-bright)]">Inspect one company across prices, filings, financials, and AI reports.</p>
|
||||
</Link>
|
||||
<Link className="rounded-xl border border-[color:var(--line-weak)] bg-[color:var(--panel-soft)] p-4 transition hover:border-[color:var(--line-strong)] hover:bg-[color:var(--panel-bright)]" href="/financials">
|
||||
<Link className="border-l-2 border-[color:var(--line-weak)] py-1 pl-4 pr-2 transition hover:border-[color:var(--line-strong)]" href="/financials">
|
||||
<p className="panel-heading text-xs uppercase text-[color:var(--terminal-muted)]">Financials</p>
|
||||
<p className="mt-2 text-sm text-[color:var(--terminal-bright)]">Focus on multi-period filing metrics, margins, leverage, and balance sheet composition.</p>
|
||||
</Link>
|
||||
<Link className="rounded-xl border border-[color:var(--line-weak)] bg-[color:var(--panel-soft)] p-4 transition hover:border-[color:var(--line-strong)] hover:bg-[color:var(--panel-bright)]" href={buildGraphingHref()}>
|
||||
<Link className="border-l-2 border-[color:var(--line-weak)] py-1 pl-4 pr-2 transition hover:border-[color:var(--line-strong)]" href={buildGraphingHref()}>
|
||||
<p className="panel-heading text-xs uppercase text-[color:var(--terminal-muted)]">Graphing</p>
|
||||
<p className="mt-2 text-sm text-[color:var(--terminal-bright)]">Compare one normalized metric across multiple companies with shareable chart state.</p>
|
||||
</Link>
|
||||
<Link
|
||||
className="rounded-xl border border-[color:var(--line-weak)] bg-[color:var(--panel-soft)] p-4 transition hover:border-[color:var(--line-strong)] hover:bg-[color:var(--panel-bright)]"
|
||||
className="border-l-2 border-[color:var(--line-weak)] py-1 pl-4 pr-2 transition hover:border-[color:var(--line-strong)]"
|
||||
href="/filings"
|
||||
onMouseEnter={() => {
|
||||
void queryClient.prefetchQuery(filingsQueryOptions({ limit: 120 }));
|
||||
@@ -222,7 +222,7 @@ export default function CommandCenterPage() {
|
||||
<p className="mt-2 text-sm text-[color:var(--terminal-bright)]">Sync SEC filings and trigger AI memo analysis.</p>
|
||||
</Link>
|
||||
<Link
|
||||
className="rounded-xl border border-[color:var(--line-weak)] bg-[color:var(--panel-soft)] p-4 transition hover:border-[color:var(--line-strong)] hover:bg-[color:var(--panel-bright)]"
|
||||
className="border-l-2 border-[color:var(--line-weak)] py-1 pl-4 pr-2 transition hover:border-[color:var(--line-strong)]"
|
||||
href="/portfolio"
|
||||
onMouseEnter={() => prefetchPortfolioSurfaces()}
|
||||
onFocus={() => prefetchPortfolioSurfaces()}
|
||||
@@ -231,7 +231,7 @@ export default function CommandCenterPage() {
|
||||
<p className="mt-2 text-sm text-[color:var(--terminal-bright)]">Manage the active private portfolio and mark positions to market.</p>
|
||||
</Link>
|
||||
<Link
|
||||
className="rounded-xl border border-[color:var(--line-weak)] bg-[color:var(--panel-soft)] p-4 transition hover:border-[color:var(--line-strong)] hover:bg-[color:var(--panel-bright)]"
|
||||
className="border-l-2 border-[color:var(--line-weak)] py-1 pl-4 pr-2 transition hover:border-[color:var(--line-strong)]"
|
||||
href="/watchlist"
|
||||
onMouseEnter={() => prefetchPortfolioSurfaces()}
|
||||
onFocus={() => prefetchPortfolioSurfaces()}
|
||||
|
||||
@@ -192,7 +192,7 @@ export default function PortfolioPage() {
|
||||
)}
|
||||
>
|
||||
{error ? (
|
||||
<Panel>
|
||||
<Panel variant="surface">
|
||||
<p className="text-sm text-[#ffb5b5]">{error}</p>
|
||||
</Panel>
|
||||
) : null}
|
||||
@@ -215,7 +215,7 @@ export default function PortfolioPage() {
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-1 gap-6 xl:grid-cols-2">
|
||||
<Panel title="Allocation">
|
||||
<Panel title="Allocation" variant="surface">
|
||||
{loading ? (
|
||||
<p className="text-sm text-[color:var(--terminal-muted)]">Loading chart...</p>
|
||||
) : allocationData.length > 0 ? (
|
||||
@@ -251,7 +251,7 @@ export default function PortfolioPage() {
|
||||
)}
|
||||
</Panel>
|
||||
|
||||
<Panel title="Performance %">
|
||||
<Panel title="Performance %" variant="surface">
|
||||
{loading ? (
|
||||
<p className="text-sm text-[color:var(--terminal-muted)]">Loading chart...</p>
|
||||
) : performanceData.length > 0 ? (
|
||||
@@ -296,7 +296,7 @@ export default function PortfolioPage() {
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-1 gap-6 xl:grid-cols-[1.5fr_1fr]">
|
||||
<Panel title="Holdings Table" subtitle="Live mark-to-market values from latest refresh.">
|
||||
<Panel title="Holdings Table" subtitle="Live mark-to-market values from latest refresh." variant="surface">
|
||||
{loading ? (
|
||||
<p className="text-sm text-[color:var(--terminal-muted)]">Loading holdings...</p>
|
||||
) : holdings.length === 0 ? (
|
||||
@@ -409,7 +409,7 @@ export default function PortfolioPage() {
|
||||
))}
|
||||
</div>
|
||||
|
||||
<div className="hidden max-w-full overflow-x-auto lg:block">
|
||||
<div className="data-table-wrap hidden max-w-full lg:block">
|
||||
<table className="data-table min-w-[1020px]">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -514,7 +514,7 @@ export default function PortfolioPage() {
|
||||
)}
|
||||
</Panel>
|
||||
|
||||
<Panel title={editingHoldingId === null ? 'Add Holding' : 'Edit Holding'}>
|
||||
<Panel title={editingHoldingId === null ? 'Add Holding' : 'Edit Holding'} variant="surface">
|
||||
<form onSubmit={submitHolding} className="space-y-3">
|
||||
<div>
|
||||
<label className="mb-1 block text-xs uppercase tracking-[0.16em] text-[color:var(--terminal-muted)]">Ticker</label>
|
||||
|
||||
@@ -196,7 +196,7 @@ function SearchPageContent() {
|
||||
</form>
|
||||
</Panel>
|
||||
|
||||
<Panel title="Cited Answer" subtitle="Single-turn answer grounded only in retrieved evidence.">
|
||||
<Panel title="Cited Answer" subtitle="Single-turn answer grounded only in retrieved evidence." variant="surface">
|
||||
{answer ? (
|
||||
<div className="space-y-3">
|
||||
<p className="whitespace-pre-wrap text-sm leading-7 text-[color:var(--terminal-bright)]">{answer.answer}</p>
|
||||
@@ -226,6 +226,7 @@ function SearchPageContent() {
|
||||
<Panel
|
||||
title="Semantic Search"
|
||||
subtitle={query ? `${results.length} results${ticker ? ` for ${ticker}` : ''}.` : 'Search results will appear here.'}
|
||||
variant="surface"
|
||||
>
|
||||
{error ? <p className="text-sm text-[#ffb5b5]">{error}</p> : null}
|
||||
{loading ? (
|
||||
|
||||
@@ -274,6 +274,7 @@ export default function WatchlistPage() {
|
||||
<Panel
|
||||
title="Coverage Board"
|
||||
subtitle={`${items.length} tracked companies across backlog, active work, and archive.`}
|
||||
variant="surface"
|
||||
actions={(
|
||||
<div className="flex w-full flex-col gap-2 sm:w-auto sm:flex-row">
|
||||
<Input
|
||||
@@ -452,7 +453,7 @@ export default function WatchlistPage() {
|
||||
))}
|
||||
</div>
|
||||
|
||||
<div className="hidden overflow-x-auto lg:block">
|
||||
<div className="data-table-wrap hidden lg:block">
|
||||
<table className="data-table min-w-[1120px]">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -621,6 +622,7 @@ export default function WatchlistPage() {
|
||||
<Panel
|
||||
title={editingItemId === null ? 'Add Coverage' : 'Edit Coverage'}
|
||||
subtitle={editingItemId === null ? 'Create a new company coverage record.' : 'Update metadata, priority, and workflow status.'}
|
||||
variant="surface"
|
||||
>
|
||||
<form onSubmit={saveCoverage} className="space-y-3">
|
||||
<div>
|
||||
|
||||
Reference in New Issue
Block a user