diff --git a/web/src/components/layout/AppShell.tsx b/web/src/components/layout/AppShell.tsx index 29d725c..8313990 100644 --- a/web/src/components/layout/AppShell.tsx +++ b/web/src/components/layout/AppShell.tsx @@ -2,6 +2,7 @@ import { Link, Routes, Route, useLocation } from 'react-router-dom'; import { Sidebar } from './Sidebar'; import { Header } from './Header'; import { RightPanel } from './RightPanel'; +import { Button } from '../ui/button'; import { HomeView } from '../../views/HomeView'; import { PortfolioView } from '../../views/PortfolioView'; import { ResearchView } from '../../views/ResearchView'; @@ -21,40 +22,28 @@ function NotFoundView() { style={{ minHeight: 420, borderRadius: 24, - border: '1px solid #E5E7EB', - background: 'linear-gradient(135deg, #FFF7ED 0%, #EFF6FF 100%)', + border: '1px solid var(--border)', + background: 'var(--hero-gradient)', padding: '56px 32px', display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', textAlign: 'center', - color: '#111827', + color: 'var(--foreground)', }} > -
+
404

Route not found

-

+

No trading workspace exists at {location.pathname}. The app is still running normally.

- - Return home + + ); diff --git a/web/src/components/layout/RightPanel.tsx b/web/src/components/layout/RightPanel.tsx index cd55de5..3f468c6 100644 --- a/web/src/components/layout/RightPanel.tsx +++ b/web/src/components/layout/RightPanel.tsx @@ -3,6 +3,7 @@ import { ArrowRight } from 'lucide-react'; import { useAppContext } from '../../context/AppContext'; import { fetchNews, type NewsArticle as MarketNewsArticle } from '../../lib/marketApi'; import { SkeletonBlock, SkeletonText } from '../Skeleton'; +import { Button } from '../ui/button'; // ─── Portfolio Summary ──────────────────────────────────────────────────────── @@ -25,15 +26,15 @@ function PortfolioSummary() {
{/* Header */}
- Portfolio - - View All - + Portfolio +
{/* Total value */}
-
+
{fmt$(totalValue)}
{['Symbol','Price','Change','Value'].map(h => ( - + {h} ))} @@ -60,7 +61,7 @@ function PortfolioSummary() { {/* Rows */} {positions.length === 0 ? ( -
+
No open positions
) : ( @@ -73,15 +74,15 @@ function PortfolioSummary() { display: 'grid', gridTemplateColumns: '2fr 1.2fr 1fr 1.2fr', gap: 4, padding: '5px 0', - borderBottom: '1px solid #F9FAFB', + borderBottom: '1px solid var(--border)', alignItems: 'center', }}> - {pos.symbol} - {pos.currentPrice?.toFixed(2) ?? '—'} + {pos.symbol} + {pos.currentPrice?.toFixed(2) ?? '—'} {pos_ ? '+' : ''}{pct.toFixed(2)}% - {fmt$(pos.marketValue ?? 0)} + {fmt$(pos.marketValue ?? 0)}
); })} @@ -115,10 +116,10 @@ function NewsCard({ article }: { article: NewsArticle }) { display: 'flex', gap: 10, padding: '10px 16px', textDecoration: 'none', - borderBottom: '1px solid #F3F4F6', + borderBottom: '1px solid var(--border)', transition: 'background 0.1s', }} - onMouseEnter={e => (e.currentTarget.style.background = '#F9FAFB')} + onMouseEnter={e => (e.currentTarget.style.background = 'var(--muted)')} onMouseLeave={e => (e.currentTarget.style.background = 'transparent')} > {img && ( @@ -130,7 +131,7 @@ function NewsCard({ article }: { article: NewsArticle }) { )}
{article.headline}
-
+
{article.source} · {timeAgo(article.created_at)}
@@ -158,7 +159,7 @@ function NewsFeedSkeleton() { display: 'flex', gap: 10, padding: '10px 16px', - borderBottom: i < 2 ? '1px solid #F9FAFB' : 'none', + borderBottom: i < 2 ? '1px solid var(--border)' : 'none', }} > @@ -200,10 +201,10 @@ function NewsFeed() { display: 'flex', justifyContent: 'space-between', alignItems: 'center', padding: '12px 16px 8px', }}> - Latest News - - View All - + Latest News +
{loading && } @@ -213,7 +214,7 @@ function NewsFeed() { )} {!loading && !error && news.length === 0 && ( -
+
{activeSymbol ? `No news found for ${activeSymbol}` : 'Search a ticker to see news'}
)} @@ -228,14 +229,14 @@ function NewsFeed() { export function RightPanel() { return (