@import url('https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700;800&family=Inter:wght@400;500;600&display=swap'); /* ── UI/UX Pro Max: Financial Cinematic Dashboard Tokens ───────────────────────── */ :root { --bg-base: #04040a; --bg-elevated: #090913; --bg-elevated-2: #121222; --glass-bg: rgba(255,255,255,0.03); --glass-border: rgba(255,255,255,0.08); --glass-border-hi: rgba(255,255,255,0.15); --glass-hover: rgba(255,255,255,0.06); /* Semantic Financial Colors per Guidelines */ --profit-color: #22C55E; /* Trust Green */ --loss-color: #EF4444; /* Alert Red */ --neutral-color: #6B7280; --accent-blue: #3B82F6; --accent-glow: 0 0 30px rgba(59, 130, 246, 0.25); --text-1: #ffffff; --text-2: #94a3b8; --text-3: #64748b; --radius: 12px; --radius-lg: 20px; --radius-xl: 28px; --transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); } /* ── Reset ───────────────────────────────────────────────────────────────────── */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { scroll-behavior: smooth; } body { font-family: 'Inter', system-ui, -apple-system, sans-serif; background: var(--bg-base); color: var(--text-1); line-height: 1.6; -webkit-font-smoothing: antialiased; min-height: 100vh; /* Deep cinematic radial gradient background */ background-image: radial-gradient(circle at 50% 0%, rgba(59, 130, 246, 0.08) 0%, transparent 60%); background-repeat: no-repeat; background-attachment: fixed; } a { color: inherit; text-decoration: none; } button { font-family: inherit; } /* ── Typography (Display vs. Body) ───────────────────────────────────────────── */ h1, h2, h3, h4, .display-font { font-family: 'Outfit', sans-serif; } h1 { font-size: clamp(2.5rem,6vw,4.5rem); font-weight: 800; line-height: 1.05; letter-spacing: -0.04em; } h2 { font-size: clamp(1.8rem,4vw,2.8rem); font-weight: 700; letter-spacing: -0.03em; } h3 { font-size: 1.3rem; font-weight: 600; letter-spacing: -0.02em; } h4 { font-size: 1rem; font-weight: 600; } p { color: var(--text-2); line-height: 1.7; } /* ── Layout ──────────────────────────────────────────────────────────────────── */ .container { max-width: 1200px; margin: 0 auto; padding: 0 28px; } .page { min-height: calc(100vh - 68px); padding: 56px 0 100px; } /* ── UI Pro Max Glass Card (Rim Lighting & Shadow layers) ────────────────────── */ .glass { background: linear-gradient(145deg, rgba(255,255,255,0.05) 0%, rgba(255,255,255,0.01) 100%); border: 1px solid var(--glass-border); border-radius: var(--radius-lg); backdrop-filter: blur(24px); box-shadow: 0 4px 24px -1px rgba(0,0,0,0.4), inset 0 1px 0 0 rgba(255,255,255,0.1); /* Top rim light */ transition: var(--transition); } .glass:hover { background: linear-gradient(145deg, rgba(255,255,255,0.07) 0%, rgba(255,255,255,0.02) 100%); border-color: var(--glass-border-hi); transform: translateY(-2px); box-shadow: 0 12px 32px -4px rgba(0,0,0,0.5), inset 0 1px 0 0 rgba(255,255,255,0.15); } .glass-flat { background: var(--bg-elevated); border: 1px solid var(--glass-border); border-radius: var(--radius-lg); } /* ── Buttons ─────────────────────────────────────────────────────────────────── */ .btn { display: inline-flex; align-items: center; gap: 8px; justify-content: center; padding: 14px 28px; border-radius: var(--radius); font-family: 'Outfit', sans-serif; font-size: 1.05rem; font-weight: 600; cursor: pointer; border: none; transition: var(--transition); white-space: nowrap; text-decoration: none; letter-spacing: -0.01em; } .btn:disabled { opacity: 0.5; cursor: not-allowed; } .btn-primary { background: var(--text-1); color: #000; box-shadow: 0 4px 14px 0 rgba(255,255,255,0.3); } .btn-primary:hover:not(:disabled) { background: #f0f0f0; box-shadow: 0 6px 20px rgba(255,255,255,0.4); transform: translateY(-2px) scale(1.02); } .btn-secondary { background: linear-gradient(135deg, var(--accent-blue), #2563eb); color: #fff; box-shadow: var(--accent-glow); } .btn-secondary:hover:not(:disabled) { box-shadow: 0 0 40px rgba(59, 130, 246, 0.4); transform: translateY(-2px); } .btn-ghost { background: var(--glass-bg); color: var(--text-1); border: 1px solid var(--glass-border); } .btn-ghost:hover:not(:disabled) { background: var(--glass-hover); border-color: var(--glass-border-hi); } .btn-lg { padding: 18px 40px; font-size: 1.15rem; border-radius: var(--radius-lg); } /* ── Form Inputs ─────────────────────────────────────────────────────────────── */ .input-group { display: flex; flex-direction: column; gap: 8px; } .field-label { font-family: 'Outfit', sans-serif; font-size: 0.8rem; font-weight: 600; color: var(--text-2); text-transform: uppercase; letter-spacing: 0.08em; } .input, select.input { background: #0a0a14; border: 1px solid var(--glass-border); border-radius: var(--radius); color: var(--text-1); font-size: 1rem; font-family: inherit; padding: 12px 16px; outline: none; transition: var(--transition); width: 100%; } .input:focus, select.input:focus { border-color: var(--accent-blue); box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.15); } select.input option { background: var(--bg-elevated); } textarea.input { resize: vertical; min-height: 100px; } /* Range slider tracking */ input[type="range"] { -webkit-appearance: none; appearance: none; width: 100%; height: 6px; border-radius: 3px; background: var(--bg-elevated-2); outline: none; margin: 6px 0; } input[type="range"]::-webkit-slider-thumb { -webkit-appearance: none; width: 20px; height: 20px; border-radius: 50%; background: var(--text-1); cursor: pointer; box-shadow: 0 0 12px rgba(255,255,255,0.5); transition: transform 0.1s; } input[type="range"]::-webkit-slider-thumb:hover { transform: scale(1.15); } .range-row { display: flex; justify-content: space-between; font-size: 0.8rem; color: var(--text-3); font-weight: 500;} .range-val { font-size: 1.05rem; font-weight: 700; color: var(--text-1); font-family: 'Outfit', sans-serif;} /* ── Financial Metrics ───────────────────────────────────────────────────────── */ .metric { display: flex; flex-direction: column; gap: 4px; } .metric-label { font-size: 0.75rem; font-weight: 600; color: var(--text-2); font-family: 'Outfit', sans-serif; text-transform: uppercase; letter-spacing: 0.05em; } .metric-value { font-size: 2.2rem; font-weight: 800; letter-spacing: -0.04em; line-height: 1; font-family: 'Outfit', sans-serif; } .metric-note { font-size: 0.8rem; color: var(--text-3); } .value-up { color: var(--profit-color); } .value-down { color: var(--loss-color); } /* ── Badges ──────────────────────────────────────────────────────────────────── */ .badge { display: inline-flex; align-items: center; gap: 6px; padding: 6px 14px; border-radius: 100px; font-size: 0.78rem; font-weight: 700; letter-spacing: 0.04em; font-family: 'Outfit', sans-serif; text-transform: uppercase; } .badge-blue { background: rgba(59,130,246,0.15); color: #60a5fa; border: 1px solid rgba(59,130,246,0.3); } .badge-green { background: rgba(34,197,94,0.15); color: #4ade80; border: 1px solid rgba(34,197,94,0.3); } .badge-red { background: rgba(239,68,68,0.15); color: #f87171; border: 1px solid rgba(239,68,68,0.3); } .badge-warning { background: rgba(245,158,11,0.15); color: #fbbf24; border: 1px solid rgba(245,158,11,0.3); } /* ── Grid Helpers ────────────────────────────────────────────────────────────── */ .grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; } .grid-3 { display: grid; grid-template-columns: repeat(3,1fr); gap: 24px; } .grid-4 { display: grid; grid-template-columns: repeat(4,1fr); gap: 24px; } @media (max-width: 900px) { .grid-2 { grid-template-columns: 1fr; } } @media (max-width: 768px) { .grid-3, .grid-4 { grid-template-columns: 1fr 1fr; } } @media (max-width: 500px) { .grid-3, .grid-4 { grid-template-columns: 1fr; } } /* ── Cinematic Gradient Text ─────────────────────────────────────────────────── */ .gradient-text { background: linear-gradient(135deg, #fff 0%, #a1a1aa 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .gradient-accent { background: linear-gradient(135deg, #60a5fa 0%, #3b82f6 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } /* ── Modal Portal / Background Blur Tracker ──────────────────────────────────── */ .modal-overlay { position: fixed; inset: 0; z-index: 999; background: rgba(0,0,0,0.6); backdrop-filter: blur(12px); display: flex; align-items: center; justify-content: center; padding: 24px; } .modal-content { width: 100%; max-width: 480px; background: #04040a; border-radius: var(--radius-xl); border: 1px solid var(--glass-border-hi); padding: 40px; box-shadow: 0 24px 64px rgba(0,0,0,0.8), inset 0 1px 0 rgba(255,255,255,0.1); position: relative; overflow: hidden; } .modal-content::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--accent-blue), #22d3ee); } /* Tooltip Customization for High Contrast */ .recharts-tooltip-wrapper { z-index: 10 !important; } .recharts-default-tooltip { background-color: var(--bg-elevated) !important; border: 1px solid var(--glass-border-hi) !important; border-radius: 8px !important; color: var(--text-1) !important; box-shadow: 0 12px 24px rgba(0,0,0,0.5) !important; } .sentiment-bar-track { height: 8px; border-radius: 4px; background: var(--bg-elevated-2); overflow: hidden; } .sentiment-bar-fill { height: 100%; border-radius: 4px; transition: width 0.6s cubic-bezier(0.4,0,0.2,1); } /* ── Print Styles for PDF Generation ─────────────────────────────────────────── */ @media print { /* Hide all normal UI elements */ body > #root > .page > .container { display: none !important; } .modal-overlay, .access-modal, .no-print, nav { display: none !important; } @page { size: A4; margin: 15mm; } /* Reset background and heights for clean printing */ body, html, #root, .page { background: #ffffff !important; background-image: none !important; color: #0f172a !important; margin: 0 !important; padding: 0 !important; height: auto !important; min-height: 0 !important; } /* Make report visible and properly sized */ .printable-report { display: block !important; position: static !important; width: auto !important; background: white !important; box-shadow: none !important; padding: 0 !important; margin: 0 !important; min-height: 0 !important; } /* Force background colors to print (Chrome/Safari) */ * { -webkit-print-color-adjust: exact !important; print-color-adjust: exact !important; } }