:root { --bg: #0e0e0f; --bg-soft: #16161a; --panel: #1a1a1f; --panel-light: #22222a; --line: #2a2a33; --line-soft: #1f1f26; --ink: #e8e4da; --ink-dim: #8a8680; --ink-faint: #55524c; --amber: #e8a838; --amber-soft: #c68f2c; --green: #6fb285; --red: #d16666; --blue: #6a8db3; } * { box-sizing: border-box; margin: 0; padding: 0; } html, body { background: var(--bg); color: var(--ink); font-family: 'IBM Plex Sans', system-ui, sans-serif; font-weight: 300; font-size: 14px; line-height: 1.5; min-height: 100vh; overflow-x: hidden; } /* Subtle grid overlay */ body::before { content: ""; position: fixed; inset: 0; background-image: linear-gradient(rgba(232, 168, 56, 0.015) 1px, transparent 1px), linear-gradient(90deg, rgba(232, 168, 56, 0.015) 1px, transparent 1px); background-size: 60px 60px; pointer-events: none; z-index: 1; } .mono { font-family: 'JetBrains Mono', monospace; font-weight: 400; } .serif { font-family: 'Instrument Serif', serif; font-weight: 400; } /* ============ TICKER TAPE ============ */ .ticker { position: sticky; top: 0; z-index: 100; background: var(--bg); border-bottom: 1px solid var(--line); overflow: hidden; white-space: nowrap; padding: 10px 0; font-family: 'JetBrains Mono', monospace; font-size: 11px; letter-spacing: 0.05em; } .ticker-track { display: inline-block; animation: scroll 60s linear infinite; padding-left: 100%; } .ticker-item { display: inline-block; margin-right: 48px; color: var(--ink-dim); } .ticker-item .sym { color: var(--ink); font-weight: 500; margin-right: 8px; } .ticker-item .up { color: var(--green); margin-left: 8px; } .ticker-item .down { color: var(--red); margin-left: 8px; } @keyframes scroll { from { transform: translateX(0); } to { transform: translateX(-100%); } } /* ============ LAYOUT ============ */ .app { position: relative; z-index: 2; display: grid; grid-template-columns: 260px 1fr; min-height: calc(100vh - 38px); } /* ============ SIDEBAR ============ */ .sidebar { background: var(--bg-soft); border-right: 1px solid var(--line); padding: 28px 0; position: sticky; top: 38px; height: calc(100vh - 38px); overflow-y: auto; } .logo { padding: 0 28px 28px; border-bottom: 1px solid var(--line); margin-bottom: 24px; } .logo-mark { font-family: 'Instrument Serif', serif; font-size: 34px; letter-spacing: -0.02em; line-height: 1; color: var(--ink); } .logo-mark .dot { color: var(--amber); margin-left: 2px; } .logo-sub { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.3em; color: var(--ink-faint); margin-top: 6px; text-transform: uppercase; } .nav-section { padding: 0 28px; margin-bottom: 28px; } .nav-label { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.2em; color: var(--ink-faint); text-transform: uppercase; margin-bottom: 12px; } .nav-item { display: flex; align-items: center; justify-content: space-between; padding: 8px 0; color: var(--ink-dim); cursor: pointer; font-size: 13px; transition: color 0.2s; border-left: 2px solid transparent; padding-left: 10px; margin-left: -10px; } .nav-item:hover { color: var(--ink); } .nav-item.active { color: var(--amber); border-left-color: var(--amber); } .nav-item .badge { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.1em; padding: 2px 6px; background: var(--panel-light); color: var(--ink-dim); border-radius: 2px; } .nav-item.active .badge { background: rgba(232, 168, 56, 0.15); color: var(--amber); } .system-status { position: absolute; bottom: 24px; left: 28px; right: 28px; padding-top: 20px; border-top: 1px solid var(--line); font-family: 'JetBrains Mono', monospace; font-size: 10px; color: var(--ink-faint); } .status-row { display: flex; justify-content: space-between; align-items: center; margin-bottom: 6px; } .status-dot { display: inline-block; width: 6px; height: 6px; border-radius: 50%; background: var(--green); margin-right: 6px; box-shadow: 0 0 8px var(--green); animation: pulse 2s ease-in-out infinite; } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } /* ============ MAIN ============ */ .main { padding: 40px 48px 60px; max-width: 1500px; } .page-header { display: flex; justify-content: space-between; align-items: flex-end; margin-bottom: 40px; padding-bottom: 24px; border-bottom: 1px solid var(--line); } .page-title { font-family: 'Instrument Serif', serif; font-size: 52px; line-height: 1; letter-spacing: -0.02em; } .page-title em { font-style: italic; color: var(--amber); } .page-sub { font-family: 'JetBrains Mono', monospace; font-size: 10px; letter-spacing: 0.25em; color: var(--ink-faint); text-transform: uppercase; margin-top: 10px; } .header-meta { text-align: right; font-family: 'JetBrains Mono', monospace; font-size: 10px; color: var(--ink-dim); letter-spacing: 0.1em; } .header-meta .time { font-size: 14px; color: var(--ink); margin-bottom: 4px; } /* ============ HERO METRICS ============ */ .hero-grid { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 1px; background: var(--line); border: 1px solid var(--line); margin-bottom: 32px; } .hero-cell { background: var(--panel); padding: 28px 28px; position: relative; } .hero-cell.primary { background: linear-gradient(135deg, var(--panel) 0%, var(--bg-soft) 100%); } .hero-cell .label { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.25em; color: var(--ink-faint); text-transform: uppercase; margin-bottom: 16px; } .hero-cell .value { font-family: 'Instrument Serif', serif; font-size: 44px; line-height: 1; letter-spacing: -0.02em; margin-bottom: 10px; font-variant-numeric: tabular-nums; } .hero-cell.primary .value { font-size: 64px; } .hero-cell .value .currency { font-size: 0.6em; color: var(--ink-dim); margin-right: 2px; vertical-align: 0.2em; } .hero-cell .delta { font-family: 'JetBrains Mono', monospace; font-size: 11px; letter-spacing: 0.05em; } .delta.pos { color: var(--green); } .delta.neg { color: var(--red); } .delta.amber { color: var(--amber); } /* ============ MODULES ============ */ .row { display: grid; gap: 24px; margin-bottom: 24px; } .row.split-2 { grid-template-columns: 1.3fr 1fr; } .row.split-3 { grid-template-columns: repeat(3, 1fr); } .module { background: var(--panel); border: 1px solid var(--line); position: relative; } .module-header { padding: 20px 24px; border-bottom: 1px solid var(--line); display: flex; justify-content: space-between; align-items: center; } .module-label { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.3em; color: var(--ink-faint); text-transform: uppercase; margin-bottom: 4px; } .module-title { font-family: 'Instrument Serif', serif; font-size: 22px; letter-spacing: -0.01em; line-height: 1.1; } .module-title em { font-style: italic; color: var(--amber); } .module-action { font-family: 'JetBrains Mono', monospace; font-size: 10px; letter-spacing: 0.15em; color: var(--ink-dim); text-transform: uppercase; cursor: pointer; padding: 6px 10px; border: 1px solid var(--line); transition: all 0.2s; } .module-action:hover { color: var(--amber); border-color: var(--amber); } .module-body { padding: 24px; } /* ============ FEE LEAKAGE ============ */ .leak-viz { height: 260px; position: relative; margin-bottom: 16px; } .leak-chart { width: 100%; height: 100%; overflow: visible; } .leak-legend { display: flex; gap: 24px; font-family: 'JetBrains Mono', monospace; font-size: 10px; letter-spacing: 0.1em; color: var(--ink-dim); padding-top: 16px; border-top: 1px solid var(--line); } .leak-legend .swatch { display: inline-block; width: 12px; height: 2px; vertical-align: middle; margin-right: 8px; } .leak-summary { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: var(--line); margin-top: 20px; } .leak-stat { background: var(--bg-soft); padding: 16px 18px; } .leak-stat .k { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.2em; color: var(--ink-faint); text-transform: uppercase; margin-bottom: 6px; } .leak-stat .v { font-family: 'Instrument Serif', serif; font-size: 26px; letter-spacing: -0.02em; line-height: 1; } .leak-stat .v.amber { color: var(--amber); } .leak-stat .v.red { color: var(--red); } /* ============ HOLDINGS TABLE ============ */ .holdings-table { width: 100%; border-collapse: collapse; font-size: 13px; } .holdings-table thead th { text-align: left; font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--ink-faint); padding: 12px 16px; border-bottom: 1px solid var(--line); font-weight: 400; } .holdings-table thead th.num { text-align: right; } .holdings-table tbody td { padding: 14px 16px; border-bottom: 1px solid var(--line-soft); font-variant-numeric: tabular-nums; } .holdings-table tbody td.num { text-align: right; font-family: 'JetBrains Mono', monospace; font-size: 12px; } .holdings-table tbody tr:hover { background: var(--bg-soft); } .holdings-table .ticker-sym { font-family: 'JetBrains Mono', monospace; font-weight: 500; color: var(--amber); letter-spacing: 0.05em; } .holdings-table .ticker-name { color: var(--ink-dim); font-size: 11px; margin-top: 2px; } .expense-tag { font-family: 'JetBrains Mono', monospace; font-size: 10px; padding: 2px 6px; border-radius: 2px; } .expense-tag.good { background: rgba(111, 178, 133, 0.12); color: var(--green); } .expense-tag.warn { background: rgba(232, 168, 56, 0.12); color: var(--amber); } .expense-tag.bad { background: rgba(209, 102, 102, 0.12); color: var(--red); } /* ============ REBALANCE ============ */ .rebalance-body { padding: 24px; } .allocation-bars { margin-bottom: 28px; } .alloc-row { display: grid; grid-template-columns: 140px 1fr 100px; gap: 16px; align-items: center; margin-bottom: 20px; } .alloc-label { font-size: 13px; } .alloc-label .cat { display: block; font-weight: 500; } .alloc-label .sub { font-family: 'JetBrains Mono', monospace; font-size: 10px; color: var(--ink-faint); letter-spacing: 0.05em; margin-top: 2px; } .alloc-bar-wrap { position: relative; height: 28px; background: var(--bg-soft); border: 1px solid var(--line); } .alloc-bar-target { position: absolute; top: -4px; bottom: -4px; width: 2px; background: var(--ink); z-index: 2; } .alloc-bar-target::after { content: attr(data-label); position: absolute; top: -18px; left: 50%; transform: translateX(-50%); font-family: 'JetBrains Mono', monospace; font-size: 9px; color: var(--ink-dim); letter-spacing: 0.1em; white-space: nowrap; } .alloc-bar-fill { height: 100%; transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1); position: relative; } .alloc-bar-fill.stocks { background: linear-gradient(90deg, #e8a838, #c68f2c); } .alloc-bar-fill.intl { background: linear-gradient(90deg, #6a8db3, #4c7099); } .alloc-bar-fill.bonds { background: linear-gradient(90deg, #6fb285, #548c6a); } .alloc-value { text-align: right; font-family: 'JetBrains Mono', monospace; font-size: 14px; font-weight: 500; } .drift-chip { display: inline-block; font-family: 'JetBrains Mono', monospace; font-size: 10px; padding: 2px 6px; margin-top: 4px; letter-spacing: 0.05em; } .drift-chip.ok { color: var(--green); } .drift-chip.drift { color: var(--amber); } .trade-list { background: var(--bg-soft); border: 1px solid var(--amber); border-left-width: 3px; padding: 20px 24px; position: relative; } .trade-list::before { content: "REBALANCE SIGNAL"; position: absolute; top: -10px; left: 20px; background: var(--panel); padding: 0 10px; font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.3em; color: var(--amber); } .trade-row { display: grid; grid-template-columns: 60px 1fr auto; gap: 16px; align-items: center; padding: 10px 0; border-bottom: 1px solid var(--line-soft); font-family: 'JetBrains Mono', monospace; font-size: 13px; } .trade-row:last-child { border-bottom: none; } .trade-action { font-size: 10px; letter-spacing: 0.15em; padding: 3px 8px; text-align: center; font-weight: 500; } .trade-action.sell { background: rgba(209, 102, 102, 0.15); color: var(--red); } .trade-action.buy { background: rgba(111, 178, 133, 0.15); color: var(--green); } .trade-detail .sym { color: var(--amber); font-weight: 500; } .trade-detail .desc { color: var(--ink-dim); font-size: 11px; font-family: 'IBM Plex Sans'; margin-left: 10px; } .trade-amount { font-variant-numeric: tabular-nums; color: var(--ink); } /* ============ ROTH CALCULATOR ============ */ .roth-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; } .slider-block { margin-bottom: 24px; } .slider-label { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 10px; } .slider-label .name { font-family: 'JetBrains Mono', monospace; font-size: 10px; letter-spacing: 0.2em; color: var(--ink-dim); text-transform: uppercase; } .slider-label .val { font-family: 'Instrument Serif', serif; font-size: 28px; color: var(--amber); letter-spacing: -0.02em; font-variant-numeric: tabular-nums; } .slider-input { -webkit-appearance: none; appearance: none; width: 100%; height: 2px; background: var(--line); outline: none; } .slider-input::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 14px; height: 14px; background: var(--amber); cursor: pointer; border-radius: 50%; box-shadow: 0 0 0 4px rgba(232, 168, 56, 0.15); } .slider-input::-moz-range-thumb { width: 14px; height: 14px; background: var(--amber); cursor: pointer; border: none; border-radius: 50%; } .slider-scale { display: flex; justify-content: space-between; margin-top: 6px; font-family: 'JetBrains Mono', monospace; font-size: 9px; color: var(--ink-faint); } .bracket-viz { background: var(--bg-soft); border: 1px solid var(--line); padding: 20px; margin-top: 8px; } .bracket-title { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.25em; color: var(--ink-faint); text-transform: uppercase; margin-bottom: 14px; } .bracket-bar { height: 28px; display: flex; margin-bottom: 14px; border: 1px solid var(--line); } .bracket-segment { position: relative; transition: all 0.3s; } .bracket-segment .label { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-family: 'JetBrains Mono', monospace; font-size: 9px; color: var(--bg); font-weight: 500; white-space: nowrap; } .bracket-indicator { position: absolute; top: -6px; bottom: -6px; width: 2px; background: var(--amber); box-shadow: 0 0 8px rgba(232, 168, 56, 0.6); transition: left 0.3s; z-index: 3; } .bracket-indicator::before { content: ""; position: absolute; top: -4px; left: -4px; width: 10px; height: 10px; background: var(--amber); transform: rotate(45deg); } .bracket-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: var(--line); } .bracket-stat { background: var(--panel); padding: 12px 14px; } .bracket-stat .k { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.15em; color: var(--ink-faint); text-transform: uppercase; margin-bottom: 4px; } .bracket-stat .v { font-family: 'Instrument Serif', serif; font-size: 20px; letter-spacing: -0.01em; font-variant-numeric: tabular-nums; } .bracket-stat .v.warn { color: var(--amber); } .bracket-stat .v.safe { color: var(--green); } .irmaa-panel { background: var(--bg-soft); border: 1px solid var(--line); padding: 22px; margin-top: 20px; } .irmaa-title { display: flex; justify-content: space-between; align-items: center; margin-bottom: 14px; } .irmaa-title .t { font-family: 'Instrument Serif', serif; font-style: italic; font-size: 20px; color: var(--ink); } .irmaa-title .status { font-family: 'JetBrains Mono', monospace; font-size: 10px; letter-spacing: 0.15em; padding: 4px 10px; border-radius: 2px; } .status.clear { background: rgba(111, 178, 133, 0.12); color: var(--green); } .status.warn { background: rgba(232, 168, 56, 0.12); color: var(--amber); } .status.danger { background: rgba(209, 102, 102, 0.12); color: var(--red); } .irmaa-tiers { display: flex; flex-direction: column; gap: 8px; } .irmaa-tier { display: grid; grid-template-columns: 12px 1fr auto auto; gap: 12px; align-items: center; padding: 8px 10px; font-family: 'JetBrains Mono', monospace; font-size: 11px; border: 1px solid transparent; transition: all 0.3s; } .irmaa-tier.active { background: rgba(232, 168, 56, 0.08); border-color: var(--amber); } .irmaa-tier .marker { width: 6px; height: 6px; background: var(--line); border-radius: 50%; } .irmaa-tier.active .marker { background: var(--amber); box-shadow: 0 0 8px var(--amber); } .irmaa-tier .range { color: var(--ink-dim); } .irmaa-tier .surcharge { color: var(--ink); font-weight: 500; text-align: right; } .irmaa-tier .annual { color: var(--amber); font-weight: 500; min-width: 80px; text-align: right; } /* ============ ARCHITECTURE ============ */ .arch-flow { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; position: relative; padding: 10px 0; } .arch-step { background: var(--bg-soft); border: 1px solid var(--line); padding: 20px 18px; position: relative; transition: all 0.3s; } .arch-step:hover { border-color: var(--amber); transform: translateY(-2px); } .arch-step .phase { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.25em; color: var(--amber); margin-bottom: 10px; } .arch-step .n { font-family: 'Instrument Serif', serif; font-style: italic; font-size: 44px; color: var(--ink-faint); line-height: 1; margin-bottom: 8px; } .arch-step h5 { font-family: 'Instrument Serif', serif; font-size: 20px; letter-spacing: -0.01em; margin-bottom: 8px; font-weight: 400; } .arch-step p { font-size: 12px; color: var(--ink-dim); line-height: 1.5; } .arch-step .stack { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 12px; } .arch-step .chip { font-family: 'JetBrains Mono', monospace; font-size: 9px; padding: 2px 6px; background: var(--panel-light); color: var(--ink-dim); letter-spacing: 0.05em; } /* ============ FOOTER NOTE ============ */ .security-panel { background: linear-gradient(135deg, var(--panel) 0%, var(--bg-soft) 100%); border: 1px solid var(--line); border-left: 3px solid var(--amber); padding: 28px 32px; margin-top: 24px; } .security-panel .prefix { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.3em; color: var(--amber); text-transform: uppercase; margin-bottom: 12px; } .security-panel h4 { font-family: 'Instrument Serif', serif; font-size: 26px; letter-spacing: -0.01em; margin-bottom: 14px; font-weight: 400; } .security-panel h4 em { font-style: italic; color: var(--amber); } .security-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 28px; margin-top: 18px; } .sec-item h5 { font-family: 'JetBrains Mono', monospace; font-size: 10px; letter-spacing: 0.2em; color: var(--ink); text-transform: uppercase; margin-bottom: 6px; } .sec-item p { font-size: 13px; color: var(--ink-dim); line-height: 1.55; } .footer { margin-top: 60px; padding: 32px 0 20px; border-top: 1px solid var(--line); display: flex; justify-content: space-between; align-items: center; font-family: 'JetBrains Mono', monospace; font-size: 10px; color: var(--ink-faint); letter-spacing: 0.15em; } /* ============ MOBILE ============ */ @media (max-width: 1100px) { .app { grid-template-columns: 1fr; } .sidebar { display: none; } .main { padding: 24px 20px 40px; } .page-title { font-size: 36px; } .hero-grid { grid-template-columns: 1fr 1fr; } .hero-cell.primary { grid-column: span 2; } .hero-cell.primary .value { font-size: 44px; } .hero-cell .value { font-size: 30px; } .row.split-2, .row.split-3 { grid-template-columns: 1fr; } .arch-flow { grid-template-columns: 1fr 1fr; } .roth-grid { grid-template-columns: 1fr; } .security-grid { grid-template-columns: 1fr; } .alloc-row { grid-template-columns: 100px 1fr 70px; } } /* Reveal animation */ @keyframes fadeUp { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } } .reveal { animation: fadeUp 0.6s ease-out both; } .d1 { animation-delay: 0.05s; } .d2 { animation-delay: 0.12s; } .d3 { animation-delay: 0.20s; } .d4 { animation-delay: 0.28s; } .d5 { animation-delay: 0.35s; } /* ============ TAB SECTIONS ============ */ .section { display: none; } .section.active { display: block; } .nav-item { user-select: none; } /* ============ FIDELITY TRANSITION TAB ============ */ .fid-hero { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 1px; background: var(--line); border: 1px solid var(--line); margin-bottom: 32px; } .fid-positions { width: 100%; border-collapse: collapse; font-size: 12px; } .fid-positions thead th { text-align: left; font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--ink-faint); padding: 12px 14px; border-bottom: 1px solid var(--line); font-weight: 400; } .fid-positions thead th.num { text-align: right; } .fid-positions tbody td { padding: 11px 14px; border-bottom: 1px solid var(--line-soft); font-variant-numeric: tabular-nums; } .fid-positions tbody td.num { text-align: right; font-family: 'JetBrains Mono', monospace; font-size: 11px; } .fid-positions tbody tr:hover { background: var(--bg-soft); } .fid-positions .sym { font-family: 'JetBrains Mono', monospace; font-weight: 500; color: var(--amber); letter-spacing: 0.05em; font-size: 12px; } .fid-positions .desc { color: var(--ink-dim); font-size: 10px; margin-top: 2px; } .fid-positions .gain-pos { color: var(--green); } .fid-positions .gain-neg { color: var(--red); } .fid-positions tfoot td { padding: 14px; font-family: 'JetBrains Mono', monospace; background: var(--bg-soft); border-top: 2px solid var(--amber); font-size: 12px; font-weight: 500; } .fid-positions tfoot td.num { text-align: right; } .compare-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; margin-bottom: 24px; } .compare-card { background: var(--bg-soft); border: 1px solid var(--line); padding: 24px; } .compare-card.current { border-left: 3px solid var(--red); } .compare-card.proposed { border-left: 3px solid var(--green); } .compare-card h3 { font-family: 'Instrument Serif', serif; font-size: 24px; letter-spacing: -0.01em; font-weight: 400; margin-bottom: 6px; } .compare-card h3 em { font-style: italic; color: var(--amber); } .compare-card .tag { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.25em; text-transform: uppercase; margin-bottom: 14px; display: inline-block; padding: 3px 8px; } .compare-card.current .tag { background: rgba(209, 102, 102, 0.12); color: var(--red); } .compare-card.proposed .tag { background: rgba(111, 178, 133, 0.12); color: var(--green); } .compare-row { display: grid; grid-template-columns: 90px 1fr 70px 70px; gap: 10px; align-items: center; padding: 8px 0; border-bottom: 1px solid var(--line-soft); font-size: 12px; } .compare-row:last-of-type { border-bottom: none; } .compare-row .t-sym { font-family: 'JetBrains Mono', monospace; color: var(--amber); font-size: 12px; font-weight: 500; } .compare-row .t-name { color: var(--ink-dim); font-size: 11px; } .compare-row .t-pct, .compare-row .t-er { font-family: 'JetBrains Mono', monospace; font-size: 11px; text-align: right; font-variant-numeric: tabular-nums; } .compare-row .t-er.good { color: var(--green); } .compare-row .t-er.warn { color: var(--amber); } .compare-row .t-er.bad { color: var(--red); } .compare-totals { margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--line); display: grid; grid-template-columns: 1fr 1fr; gap: 12px; } .ct-block .k { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.2em; color: var(--ink-faint); text-transform: uppercase; margin-bottom: 4px; } .ct-block .v { font-family: 'Instrument Serif', serif; font-size: 22px; letter-spacing: -0.01em; } .ct-block .v.red { color: var(--red); } .ct-block .v.green { color: var(--green); } .ct-block .v.amber { color: var(--amber); } .savings-projection { display: grid; grid-template-columns: 1fr 280px; gap: 24px; align-items: stretch; } .projection-chart { background: var(--bg-soft); border: 1px solid var(--line); padding: 24px; position: relative; } .projection-stats { display: flex; flex-direction: column; gap: 12px; } .proj-stat { background: var(--bg-soft); border: 1px solid var(--line); padding: 18px 20px; } .proj-stat.hero { border-left: 3px solid var(--amber); } .proj-stat .k { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.2em; color: var(--ink-faint); text-transform: uppercase; margin-bottom: 6px; } .proj-stat .v { font-family: 'Instrument Serif', serif; font-size: 26px; letter-spacing: -0.02em; line-height: 1; } .proj-stat.hero .v { color: var(--amber); font-size: 34px; } .proj-stat .sub { font-family: 'JetBrains Mono', monospace; font-size: 10px; color: var(--ink-dim); margin-top: 6px; letter-spacing: 0.05em; } .asset-mix { background: var(--bg-soft); border: 1px solid var(--line); padding: 24px; } .mix-row { display: grid; grid-template-columns: 160px 1fr 90px; gap: 14px; align-items: center; padding: 8px 0; font-size: 12px; } .mix-bar { height: 14px; background: var(--panel); border: 1px solid var(--line); overflow: hidden; } .mix-fill { height: 100%; transition: width 0.8s cubic-bezier(0.4, 0, 0.2, 1); } .mix-fill.us { background: linear-gradient(90deg, #e8a838, #c68f2c); } .mix-fill.intl { background: linear-gradient(90deg, #6a8db3, #4c7099); } .mix-fill.reit { background: linear-gradient(90deg, #b87db3, #8e5a8c); } .mix-fill.bond { background: linear-gradient(90deg, #6fb285, #548c6a); } .mix-fill.hyb { background: linear-gradient(90deg, #d16666, #a34d4d); } .mix-fill.cash { background: linear-gradient(90deg, #8a8680, #55524c); } .mix-pct { font-family: 'JetBrains Mono', monospace; text-align: right; font-variant-numeric: tabular-nums; } .transition-steps { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; } .step-card { background: var(--bg-soft); border: 1px solid var(--line); padding: 22px 20px; transition: all 0.3s; position: relative; } .step-card:hover { border-color: var(--amber); transform: translateY(-2px); } .step-card .step-num { font-family: 'Instrument Serif', serif; font-style: italic; font-size: 40px; color: var(--amber); line-height: 1; margin-bottom: 10px; opacity: 0.7; } .step-card .step-label { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.25em; color: var(--ink-faint); margin-bottom: 8px; text-transform: uppercase; } .step-card h5 { font-family: 'Instrument Serif', serif; font-size: 19px; letter-spacing: -0.01em; margin-bottom: 10px; font-weight: 400; } .step-card p { font-size: 12px; color: var(--ink-dim); line-height: 1.55; } .step-card ul { margin: 10px 0 0 0; padding-left: 16px; font-size: 11px; color: var(--ink-dim); } .step-card ul li { margin-bottom: 5px; line-height: 1.55; } .callout { background: linear-gradient(135deg, rgba(232, 168, 56, 0.08) 0%, rgba(232, 168, 56, 0.02) 100%); border: 1px solid var(--amber); border-left-width: 3px; padding: 22px 26px; margin-bottom: 24px; } .callout .prefix { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.3em; color: var(--amber); text-transform: uppercase; margin-bottom: 10px; } .callout h4 { font-family: 'Instrument Serif', serif; font-size: 22px; letter-spacing: -0.01em; margin-bottom: 10px; font-weight: 400; } .callout p { font-size: 13px; color: var(--ink-dim); line-height: 1.6; max-width: 780px; } .account-breakdown { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: var(--line); border: 1px solid var(--line); margin-bottom: 24px; } .acct-cell { background: var(--panel); padding: 20px 22px; } .acct-cell .acct-name { font-family: 'JetBrains Mono', monospace; font-size: 10px; letter-spacing: 0.2em; color: var(--ink-faint); text-transform: uppercase; margin-bottom: 10px; } .acct-cell .acct-val { font-family: 'Instrument Serif', serif; font-size: 30px; letter-spacing: -0.02em; line-height: 1; margin-bottom: 6px; } .acct-cell .acct-meta { font-family: 'JetBrains Mono', monospace; font-size: 10px; color: var(--ink-dim); letter-spacing: 0.05em; } /* ============ VALUES EDITOR ============ */ .ve-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; } .ve-field { display: flex; flex-direction: column; gap: 5px; } .ve-field span { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.15em; text-transform: uppercase; color: var(--ink-faint); } .ve-field input { padding: 9px 11px; background: var(--bg-soft); border: 1px solid var(--line); border-radius: 3px; color: var(--ink); font-family: 'JetBrains Mono', monospace; font-size: 13px; transition: border-color 0.15s; } .ve-field input:focus { outline: none; border-color: var(--amber); background: var(--panel); } .ve-actions { display: flex; gap: 12px; margin-top: 20px; justify-content: flex-end; align-items: center; } .ve-btn { padding: 10px 22px; background: transparent; border: 1px solid var(--line); border-radius: 3px; color: var(--ink); font-family: 'JetBrains Mono', monospace; font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; cursor: pointer; transition: all 0.15s; } .ve-btn:hover { border-color: var(--amber); color: var(--amber); } .ve-btn.primary { background: var(--green); border-color: var(--green); color: var(--bg); font-weight: 600; } .ve-btn.primary:hover { filter: brightness(1.1); color: var(--bg); } .ve-status { flex: 1; font-family: 'JetBrains Mono', monospace; font-size: 10px; color: var(--ink-faint); letter-spacing: 0.1em; } .ve-status.ok { color: var(--green); } @media (max-width: 1100px) { .ve-grid { grid-template-columns: repeat(2, 1fr); } .fid-hero { grid-template-columns: 1fr 1fr; } .compare-grid { grid-template-columns: 1fr; } .savings-projection { grid-template-columns: 1fr; } .transition-steps { grid-template-columns: 1fr; } .account-breakdown { grid-template-columns: 1fr; } .compare-row { grid-template-columns: 70px 1fr 60px 60px; } } /* ============ FIDELITY IMPORT TAB ============ */ .import-dropzone { border: 2px dashed var(--line); border-radius: 4px; padding: 48px 32px; text-align: center; cursor: pointer; transition: all 0.2s; background: var(--bg-soft); margin-bottom: 20px; } .import-dropzone:hover, .import-dropzone.drag-over { border-color: #a78bfa; background: rgba(167,139,250,0.06); } .import-dropzone .dz-icon { font-size: 40px; margin-bottom: 14px; opacity: 0.5; } .import-dropzone .dz-title { font-family: 'Instrument Serif', serif; font-size: 22px; letter-spacing: -0.01em; margin-bottom: 8px; } .import-dropzone .dz-sub { font-family: 'JetBrains Mono', monospace; font-size: 10px; letter-spacing: 0.18em; color: var(--ink-faint); text-transform: uppercase; } .acct-pill { display: inline-flex; align-items: center; gap: 8px; padding: 4px 12px; border-radius: 2px; margin: 3px; font-family: 'JetBrains Mono', monospace; font-size: 10px; letter-spacing: 0.12em; border: 1px solid; cursor: pointer; transition: all 0.15s; } .acct-pill.ira { background: rgba(106,141,179,0.12); border-color: rgba(106,141,179,0.3); color: var(--blue); } .acct-pill.roth { background: rgba(111,178,133,0.12); border-color: rgba(111,178,133,0.3); color: var(--green); } .acct-pill.broker { background: rgba(232,168,56,0.12); border-color: rgba(232,168,56,0.3); color: var(--amber); } .acct-pill.active { opacity: 0.5; cursor: default; } .import-table { width: 100%; border-collapse: collapse; } .import-table thead tr { border-bottom: 1px solid var(--line); } .import-table th { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.18em; color: var(--ink-faint); padding: 8px 14px; text-align: left; font-weight: 400; text-transform: uppercase; } .import-table th.r { text-align: right; } .import-table tbody tr { border-bottom: 1px solid var(--line-soft); transition: background 0.12s; } .import-table tbody tr:hover { background: var(--panel-light); } .import-table td { padding: 11px 14px; font-size: 12px; } .import-table td.r { text-align: right; font-family: 'JetBrains Mono', monospace; font-size: 11px; } .quant-grid { display: grid; grid-template-columns: repeat(4,1fr); gap: 1px; background: var(--line); border: 1px solid var(--line); margin-bottom: 20px; } .quant-cell { background: var(--panel); padding: 20px 22px; } .quant-cell .qk { font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.2em; color: var(--ink-faint); text-transform: uppercase; margin-bottom: 10px; } .quant-cell .qv { font-family: 'Instrument Serif', serif; font-size: 32px; letter-spacing: -0.02em; line-height: 1; margin-bottom: 6px; } .quant-cell .qs { font-size: 11px; color: var(--ink-dim); line-height: 1.5; } .rebal-row { display: flex; gap: 16px; align-items: flex-start; padding: 14px 0; border-bottom: 1px solid var(--line-soft); } .rebal-row:last-child { border-bottom: none; } .rebal-action { font-family: 'JetBrains Mono', monospace; font-size: 10px; letter-spacing: 0.15em; padding: 4px 10px; border-radius: 2px; min-width: 52px; text-align: center; font-weight: 600; } .rebal-action.buy { background: rgba(111,178,133,0.15); color: var(--green); border: 1px solid rgba(111,178,133,0.3); } .rebal-action.sell { background: rgba(209,102,102,0.15); color: var(--red); border: 1px solid rgba(209,102,102,0.3); } .rebal-action.hold { background: rgba(138,134,128,0.12); color: var(--ink-dim); border: 1px solid var(--line); } .rebal-action.move { background: rgba(167,139,250,0.15); color: #a78bfa; border: 1px solid rgba(167,139,250,0.3); } .overlap-badge { display: inline-block; font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.12em; padding: 2px 8px; border-radius: 2px; background: rgba(209,102,102,0.12); color: var(--red); border: 1px solid rgba(209,102,102,0.2); } .placement-badge { display: inline-block; font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.1em; padding: 2px 8px; border-radius: 2px; } .placement-badge.good { background: rgba(111,178,133,0.12); color: var(--green); } .placement-badge.warn { background: rgba(232,168,56,0.12); color: var(--amber); } .placement-badge.bad { background: rgba(209,102,102,0.12); color: var(--red); } .progress-bar-wrap { height: 6px; background: var(--line); border-radius: 2px; margin-top: 8px; } .progress-bar-fill { height: 100%; border-radius: 2px; transition: width 0.6s ease; } .ai-advice-block { background: var(--bg-soft); border: 1px solid var(--line); padding: 24px; margin-bottom: 16px; font-size: 13px; color: var(--ink-dim); line-height: 1.75; } .ai-advice-block.loading { display: flex; align-items: center; gap: 12px; font-family: 'JetBrains Mono', monospace; font-size: 10px; letter-spacing: 0.15em; color: var(--ink-faint); } .pin-dot { width: 14px; height: 14px; border-radius: 50%; border: 2px solid #2a2926; background: transparent; transition: all 0.15s ease; } .pin-dot.filled { background: #e8a838; border-color: #e8a838; box-shadow: 0 0 8px rgba(232,168,56,0.4); } .pin-dot.error { background: #d16666; border-color: #d16666; box-shadow: 0 0 8px rgba(209,102,102,0.4); } .pin-key { padding: 16px 10px; background: #1a1916; border: 1px solid #2a2926; color: #e8e6e0; font-family: monospace; font-size: 20px; cursor: pointer; border-radius: 4px; transition: all 0.1s ease; user-select: none; } .pin-key:hover { background: #242220; border-color: #3a3835; } .pin-key:active { background: rgba(232,168,56,0.15); border-color: #e8a838; transform: scale(0.95); } #pinGate.shake { animation: pinShake 0.4s ease; } @keyframes pinShake { 0%,100% { transform: translateX(0); } 20% { transform: translateX(-8px); } 40% { transform: translateX(8px); } 60% { transform: translateX(-5px); } 80% { transform: translateX(5px); } } #pinGate.unlocking { animation: pinUnlock 0.35s ease forwards; } @keyframes pinUnlock { 0% { opacity:1; transform:scale(1); } 100% { opacity:0; transform:scale(1.03); } }