FairValue
feat: implement professional PDF negotiation reports and terminology refinement
7dff677
@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;
}
}