{"project":{"id":"vCj8QL9","userId":"davidyarham@gmail.com","username":null,"userPicture":null,"name":"Meridian Wealth Command","thumbnail":"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","visible":true,"contributors":"","githubRepo":null,"forkedFrom":null,"isTemplate":false,"tags":"","files":{"folder":"","files":[{"name":"index.html","content":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n  <title>Meridian — your money, commanded</title>\n  <meta name=\"description\" content=\"Meridian wealth dashboard: performance, allocation, holdings, cash flow and goals in one view.\">\n  <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n  <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n  <link href=\"https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,500;9..144,600&family=Inter:wght@400;500;600&family=Spline+Sans+Mono:wght@400;500;600&display=swap\" rel=\"stylesheet\">\n  <link rel=\"stylesheet\" href=\"/css/styles.css\">\n  <script src=\"https://unpkg.com/lucide@latest/dist/umd/lucide.js\"></script>\n</head>\n<body>\n\n  <header class=\"topbar\">\n    <a class=\"topbar__brand\" href=\"#\">Meridian</a>\n    <nav class=\"topbar__nav\" aria-label=\"Primary\">\n      <a href=\"#performance\" class=\"topbar__link topbar__link--active\">Overview</a>\n      <a href=\"#holdings\" class=\"topbar__link\">Holdings</a>\n      <a href=\"#goals\" class=\"topbar__link\">Planning</a>\n    </nav>\n    <div class=\"topbar__market\" id=\"marketStatus\">\n      <span class=\"topbar__market-dot\" aria-hidden=\"true\"></span>\n      <span>Markets open</span>\n    </div>\n    <button class=\"topbar__avatar\" type=\"button\" aria-label=\"Account menu\">DY</button>\n  </header>\n\n  <section class=\"hero\" id=\"performance\" aria-label=\"Portfolio performance\">\n    <div class=\"hero__inner\">\n      <div class=\"hero__lede\">\n        <p class=\"hero__date\" id=\"heroDate\">Tuesday 10 June 2026</p>\n        <h1 class=\"hero__title\">Good morning, David.</h1>\n        <p class=\"hero__summary\">Your portfolio gained <strong class=\"hero__gain\" id=\"heroGain\">$48,210</strong> this quarter. You are ahead of plan on two of three goals, and your cash buffer covers 7 months.</p>\n        <div class=\"hero__worth\">\n          <div class=\"hero__worth-main\">\n            <span class=\"hero__worth-label\">Total portfolio</span>\n            <span class=\"hero__figure\" id=\"netWorth\">$0</span>\n            <span class=\"delta delta--up delta--onbrand\" id=\"todayDelta\">+0.00% today</span>\n          </div>\n          <dl class=\"hero__facts\">\n            <div class=\"hero__fact\">\n              <dt>Invested</dt>\n              <dd id=\"factInvested\">$0</dd>\n            </div>\n            <div class=\"hero__fact\">\n              <dt>Cash</dt>\n              <dd id=\"factCash\">$0</dd>\n            </div>\n            <div class=\"hero__fact\">\n              <dt>YTD return</dt>\n              <dd id=\"factYtd\">0%</dd>\n            </div>\n          </dl>\n        </div>\n      </div>\n\n      <div class=\"hero__chart-wrap\">\n        <div class=\"hero__chart-head\">\n          <h2 class=\"hero__chart-title\">Performance</h2>\n          <div class=\"range\" role=\"tablist\" aria-label=\"Chart range\">\n            <button class=\"range__btn\" role=\"tab\" aria-selected=\"false\" data-range=\"1M\">1M</button>\n            <button class=\"range__btn\" role=\"tab\" aria-selected=\"false\" data-range=\"3M\">3M</button>\n            <button class=\"range__btn\" role=\"tab\" aria-selected=\"false\" data-range=\"6M\">6M</button>\n            <button class=\"range__btn range__btn--active\" role=\"tab\" aria-selected=\"true\" data-range=\"1Y\">1Y</button>\n            <button class=\"range__btn\" role=\"tab\" aria-selected=\"false\" data-range=\"ALL\">All</button>\n          </div>\n        </div>\n        <div class=\"hero__chart\" id=\"perfChartWrap\">\n          <svg id=\"perfChart\" role=\"img\" aria-label=\"Portfolio value over the selected range\"></svg>\n          <div class=\"chart-tip\" id=\"chartTip\" hidden>\n            <span class=\"chart-tip__date\" id=\"tipDate\"></span>\n            <span class=\"chart-tip__value\" id=\"tipValue\"></span>\n          </div>\n        </div>\n        <p class=\"hero__chart-foot\" id=\"rangeSummary\">Over the last year your portfolio grew from $0 to $0.</p>\n      </div>\n    </div>\n  </section>\n\n  <main class=\"board\">\n\n    <section class=\"panel panel--alloc\" aria-labelledby=\"allocTitle\">\n      <div class=\"panel__head\">\n        <h2 class=\"panel__title\" id=\"allocTitle\">Allocation</h2>\n        <span class=\"panel__note\">Target drift +2.4% equities</span>\n      </div>\n      <div class=\"alloc\">\n        <div class=\"alloc__donut-wrap\">\n          <svg id=\"allocDonut\" role=\"img\" aria-label=\"Portfolio allocation by asset class\"></svg>\n          <div class=\"alloc__center\">\n            <span class=\"alloc__center-num\" id=\"allocClasses\">5</span>\n            <span class=\"alloc__center-label\">asset classes</span>\n          </div>\n        </div>\n        <ul class=\"alloc__legend\" id=\"allocLegend\"></ul>\n      </div>\n      <div class=\"alloc__action\">\n        <p>Selling $14,900 of US equities restores your 60/40 target.</p>\n        <button class=\"btn btn--ghost\" type=\"button\" id=\"rebalanceBtn\">\n          <i data-lucide=\"scale\" aria-hidden=\"true\"></i>\n          Preview rebalance\n        </button>\n      </div>\n    </section>\n\n    <section class=\"panel panel--cash\" aria-labelledby=\"cashTitle\">\n      <div class=\"panel__head\">\n        <h2 class=\"panel__title\" id=\"cashTitle\">Cash flow</h2>\n        <span class=\"panel__note\">Last 6 months</span>\n      </div>\n      <div class=\"cash__chart-wrap\">\n        <svg id=\"cashChart\" role=\"img\" aria-label=\"Monthly money in and money out, last six months\"></svg>\n      </div>\n      <div class=\"cash__keys\">\n        <span class=\"cash__key\"><span class=\"cash__swatch cash__swatch--in\" aria-hidden=\"true\"></span>Money in</span>\n        <span class=\"cash__key\"><span class=\"cash__swatch cash__swatch--out\" aria-hidden=\"true\"></span>Money out</span>\n        <span class=\"cash__net\" id=\"cashNet\">Avg saved $0/mo</span>\n      </div>\n    </section>\n\n    <section class=\"panel panel--holdings\" id=\"holdings\" aria-labelledby=\"holdingsTitle\">\n      <div class=\"panel__head\">\n        <h2 class=\"panel__title\" id=\"holdingsTitle\">Holdings</h2>\n        <span class=\"panel__note\" id=\"holdingsNote\">8 positions</span>\n      </div>\n      <div class=\"holdings__scroll\">\n        <table class=\"holdings\">\n          <thead>\n            <tr>\n              <th scope=\"col\">Asset</th>\n              <th scope=\"col\" class=\"holdings__num\">Value</th>\n              <th scope=\"col\" class=\"holdings__num\">Weight</th>\n              <th scope=\"col\" class=\"holdings__num\">1Y</th>\n              <th scope=\"col\" class=\"holdings__spark-col\"><span class=\"visually-hidden\">12-month trend</span>Trend</th>\n            </tr>\n          </thead>\n          <tbody id=\"holdingsBody\"></tbody>\n        </table>\n      </div>\n    </section>\n\n    <section class=\"panel panel--goals\" id=\"goals\" aria-labelledby=\"goalsTitle\">\n      <div class=\"panel__head\">\n        <h2 class=\"panel__title\" id=\"goalsTitle\">Goals</h2>\n        <span class=\"panel__note\">2 of 3 ahead of plan</span>\n      </div>\n      <ul class=\"goals\" id=\"goalsList\"></ul>\n      <button class=\"btn btn--solid\" type=\"button\" id=\"addGoalBtn\">\n        <i data-lucide=\"plus\" aria-hidden=\"true\"></i>\n        Add a goal\n      </button>\n    </section>\n\n  </main>\n\n  <footer class=\"foot\">\n    <p>Figures are illustrative. Past performance does not predict future returns.</p>\n    <p class=\"foot__brand\">Meridian</p>\n  </footer>\n\n  <script type=\"module\" src=\"/js/main.js\"></script>\n</body>\n</html>\n"},{"name":"README.md","content":"# Blnq Project\n"}],"folders":[{"folder":"css","files":[{"name":"styles.css","content":"/* Meridian — wealth dashboard\n   Palette strategy: committed. Deep plum carries the hero band (~40% of the\n   first viewport); below it, true off-white surfaces with plum-tinted neutrals.\n   Type: Fraunces (display) · Inter (UI) · Spline Sans Mono (figures). */\n\n:root {\n  /* color */\n  --plum-900: oklch(0.24 0.08 315);\n  --plum-800: oklch(0.30 0.10 315);\n  --plum-700: oklch(0.38 0.12 315);\n  --plum-100: oklch(0.90 0.04 315);\n  --plum-50:  oklch(0.96 0.015 315);\n  --bg:       oklch(0.97 0.005 315);\n  --surface:  oklch(0.995 0.002 315);\n  --ink:      oklch(0.22 0.015 315);\n  --ink-soft: oklch(0.42 0.02 315);\n  --line:     oklch(0.89 0.01 315);\n  --pos:      oklch(0.50 0.11 155);\n  --pos-on-dark: oklch(0.84 0.14 155);\n  --neg:      oklch(0.50 0.16 25);\n  --focus:    oklch(0.55 0.18 315);\n\n  /* type */\n  --font-display: \"Fraunces\", Georgia, serif;\n  --font-ui: \"Inter\", system-ui, sans-serif;\n  --font-num: \"Spline Sans Mono\", ui-monospace, monospace;\n\n  /* shape & space */\n  --radius-s: 8px;\n  --radius-m: 14px;\n  --radius-l: 22px;\n  --gutter: clamp(1rem, 3vw, 2.5rem);\n\n  /* z scale */\n  --z-sticky: 10;\n  --z-tooltip: 30;\n}\n\n*, *::before, *::after { box-sizing: border-box; }\n\nhtml { scroll-behavior: smooth; }\n\nbody {\n  margin: 0;\n  background: var(--bg);\n  color: var(--ink);\n  font-family: var(--font-ui);\n  font-size: 1rem;\n  line-height: 1.55;\n  -webkit-font-smoothing: antialiased;\n}\n\nh1, h2, h3 { text-wrap: balance; margin: 0; }\n\n.visually-hidden {\n  position: absolute;\n  width: 1px; height: 1px;\n  margin: -1px; padding: 0;\n  overflow: hidden;\n  clip-path: inset(50%);\n  white-space: nowrap;\n  border: 0;\n}\n\n:focus-visible {\n  outline: 2px solid var(--focus);\n  outline-offset: 2px;\n}\n\n/* ---------- top bar ---------- */\n\n.topbar {\n  position: sticky;\n  top: 0;\n  z-index: var(--z-sticky);\n  display: flex;\n  align-items: center;\n  gap: 1.5rem;\n  padding: 0.8rem var(--gutter);\n  background: var(--plum-900);\n  color: oklch(0.97 0.01 315);\n}\n\n.topbar__brand {\n  font-family: var(--font-display);\n  font-weight: 600;\n  font-size: 1.3rem;\n  color: inherit;\n  text-decoration: none;\n  letter-spacing: -0.01em;\n}\n\n.topbar__nav {\n  display: flex;\n  gap: 0.25rem;\n  margin-inline-start: 1rem;\n}\n\n.topbar__link {\n  color: oklch(0.85 0.03 315);\n  text-decoration: none;\n  font-size: 0.92rem;\n  font-weight: 500;\n  padding: 0.35rem 0.75rem;\n  border-radius: 999px;\n  transition: background-color 160ms ease-out, color 160ms ease-out;\n}\n\n.topbar__link:hover { background: oklch(0.32 0.09 315); color: oklch(0.98 0.005 315); }\n\n.topbar__link--active {\n  background: oklch(0.36 0.10 315);\n  color: oklch(0.98 0.005 315);\n}\n\n.topbar__market {\n  margin-inline-start: auto;\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  font-size: 0.85rem;\n  color: oklch(0.88 0.03 315);\n}\n\n.topbar__market-dot {\n  width: 8px; height: 8px;\n  border-radius: 50%;\n  background: var(--pos-on-dark);\n}\n\n.topbar__avatar {\n  width: 36px; height: 36px;\n  border-radius: 50%;\n  border: 1px solid oklch(0.45 0.08 315);\n  background: var(--plum-700);\n  color: oklch(0.97 0.01 315);\n  font: 600 0.8rem var(--font-ui);\n  cursor: pointer;\n  transition: background-color 160ms ease-out;\n}\n\n.topbar__avatar:hover { background: oklch(0.44 0.12 315); }\n\n/* ---------- hero band ---------- */\n\n.hero {\n  background: linear-gradient(180deg, var(--plum-900) 0%, var(--plum-800) 100%);\n  color: oklch(0.96 0.01 315);\n  padding: clamp(2rem, 5vw, 4rem) var(--gutter) clamp(2.5rem, 5vw, 4rem);\n}\n\n.hero__inner {\n  max-width: 1180px;\n  margin-inline: auto;\n  display: grid;\n  grid-template-columns: minmax(300px, 5fr) minmax(0, 7fr);\n  gap: clamp(1.5rem, 4vw, 3.5rem);\n  align-items: start;\n}\n\n.hero__date {\n  margin: 0 0 0.75rem;\n  font-size: 0.9rem;\n  color: oklch(0.82 0.04 315);\n}\n\n.hero__title {\n  font-family: var(--font-display);\n  font-weight: 500;\n  font-size: clamp(2rem, 4.5vw, 3.4rem);\n  line-height: 1.08;\n  letter-spacing: -0.015em;\n}\n\n.hero__summary {\n  margin: 1rem 0 0;\n  max-width: 42ch;\n  font-size: 1.02rem;\n  color: oklch(0.88 0.025 315);\n}\n\n.hero__gain { color: var(--pos-on-dark); font-weight: 600; }\n\n.hero__worth { margin-top: 2rem; }\n\n.hero__worth-label {\n  display: block;\n  font-size: 0.85rem;\n  color: oklch(0.8 0.04 315);\n  margin-bottom: 0.3rem;\n}\n\n.hero__figure {\n  display: block;\n  font-family: var(--font-num);\n  font-weight: 600;\n  font-size: clamp(2.1rem, 4.5vw, 3.1rem);\n  letter-spacing: -0.02em;\n  font-variant-numeric: tabular-nums;\n  line-height: 1.1;\n}\n\n.delta {\n  font-family: var(--font-num);\n  font-size: 0.9rem;\n  font-weight: 500;\n  font-variant-numeric: tabular-nums;\n}\n\n.delta--up { color: var(--pos); }\n.delta--down { color: var(--neg); }\n.delta--onbrand.delta--up { color: var(--pos-on-dark); }\n\n.hero__facts {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 1.25rem 2.25rem;\n  margin: 1.75rem 0 0;\n  padding-top: 1.25rem;\n  border-top: 1px solid oklch(0.38 0.08 315);\n}\n\n.hero__fact dt {\n  font-size: 0.8rem;\n  color: oklch(0.8 0.04 315);\n}\n\n.hero__fact dd {\n  margin: 0.15rem 0 0;\n  font-family: var(--font-num);\n  font-size: 1.05rem;\n  font-weight: 500;\n  font-variant-numeric: tabular-nums;\n}\n\n/* hero chart card */\n\n.hero__chart-wrap {\n  background: oklch(0.20 0.06 315 / 0.55);\n  border: 1px solid oklch(0.42 0.08 315);\n  border-radius: var(--radius-l);\n  padding: 1.25rem 1.25rem 1rem;\n  min-width: 0;\n}\n\n.hero__chart-head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 1rem;\n  flex-wrap: wrap;\n}\n\n.hero__chart-title {\n  font-size: 1rem;\n  font-weight: 600;\n  color: oklch(0.93 0.02 315);\n}\n\n.range { display: flex; gap: 2px; background: oklch(0.30 0.07 315); border-radius: 999px; padding: 3px; }\n\n.range__btn {\n  border: 0;\n  background: transparent;\n  color: oklch(0.85 0.03 315);\n  font: 500 0.8rem var(--font-ui);\n  padding: 0.3rem 0.7rem;\n  border-radius: 999px;\n  cursor: pointer;\n  transition: background-color 160ms ease-out, color 160ms ease-out;\n}\n\n.range__btn:hover { color: oklch(0.98 0.005 315); }\n\n.range__btn--active {\n  background: oklch(0.95 0.01 315);\n  color: var(--plum-900);\n}\n\n.hero__chart {\n  position: relative;\n  margin-top: 1rem;\n  height: clamp(220px, 30vw, 320px);\n}\n\n.hero__chart svg { width: 100%; height: 100%; display: block; }\n\n.chart-tip {\n  position: absolute;\n  z-index: var(--z-tooltip);\n  pointer-events: none;\n  background: oklch(0.985 0.005 315);\n  color: var(--ink);\n  border-radius: var(--radius-s);\n  padding: 0.45rem 0.65rem;\n  box-shadow: 0 6px 24px oklch(0.1 0.04 315 / 0.45);\n  transform: translate(-50%, calc(-100% - 14px));\n  white-space: nowrap;\n}\n\n.chart-tip__date { display: block; font-size: 0.72rem; color: var(--ink-soft); }\n\n.chart-tip__value {\n  display: block;\n  font-family: var(--font-num);\n  font-weight: 600;\n  font-size: 0.95rem;\n  font-variant-numeric: tabular-nums;\n}\n\n.hero__chart-foot {\n  margin: 0.9rem 0 0;\n  font-size: 0.85rem;\n  color: oklch(0.82 0.04 315);\n}\n\n/* ---------- board ---------- */\n\n.board {\n  max-width: 1180px;\n  margin-inline: auto;\n  padding: clamp(1.5rem, 4vw, 3rem) var(--gutter);\n  display: grid;\n  grid-template-columns: repeat(12, 1fr);\n  gap: clamp(1rem, 2vw, 1.5rem);\n}\n\n.panel {\n  background: var(--surface);\n  border: 1px solid var(--line);\n  border-radius: var(--radius-l);\n  padding: clamp(1.1rem, 2.5vw, 1.6rem);\n  min-width: 0;\n}\n\n.panel--alloc { grid-column: span 5; }\n.panel--cash { grid-column: span 7; }\n.panel--holdings { grid-column: span 8; }\n.panel--goals { grid-column: span 4; }\n\n.panel__head {\n  display: flex;\n  align-items: baseline;\n  justify-content: space-between;\n  gap: 1rem;\n  margin-bottom: 1.1rem;\n  flex-wrap: wrap;\n}\n\n.panel__title {\n  font-family: var(--font-display);\n  font-weight: 600;\n  font-size: 1.35rem;\n  letter-spacing: -0.01em;\n}\n\n.panel__note { font-size: 0.82rem; color: var(--ink-soft); }\n\n/* buttons */\n\n.btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 0.5rem;\n  font: 500 0.9rem var(--font-ui);\n  border-radius: 999px;\n  padding: 0.55rem 1.1rem;\n  cursor: pointer;\n  transition: background-color 160ms ease-out, border-color 160ms ease-out;\n}\n\n.btn svg { width: 16px; height: 16px; }\n\n.btn--ghost {\n  background: transparent;\n  border: 1px solid var(--line);\n  color: var(--ink);\n}\n\n.btn--ghost:hover { border-color: var(--plum-700); background: var(--plum-50); }\n\n.btn--solid {\n  background: var(--plum-800);\n  border: 1px solid var(--plum-800);\n  color: oklch(0.97 0.01 315);\n}\n\n.btn--solid:hover { background: var(--plum-700); }\n\n/* allocation */\n\n.alloc {\n  display: flex;\n  align-items: center;\n  gap: clamp(1rem, 3vw, 2rem);\n  flex-wrap: wrap;\n}\n\n.alloc__donut-wrap {\n  position: relative;\n  width: 168px;\n  height: 168px;\n  flex-shrink: 0;\n}\n\n.alloc__donut-wrap svg { width: 100%; height: 100%; display: block; }\n\n.alloc__center {\n  position: absolute;\n  inset: 0;\n  display: grid;\n  place-content: center;\n  text-align: center;\n  pointer-events: none;\n}\n\n.alloc__center-num {\n  font-family: var(--font-num);\n  font-size: 1.6rem;\n  font-weight: 600;\n  line-height: 1;\n}\n\n.alloc__center-label { font-size: 0.72rem; color: var(--ink-soft); }\n\n.alloc__legend {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  display: grid;\n  gap: 0.55rem;\n  flex: 1;\n  min-width: 180px;\n}\n\n.alloc__row {\n  display: grid;\n  grid-template-columns: 12px 1fr auto;\n  align-items: center;\n  gap: 0.6rem;\n  font-size: 0.9rem;\n}\n\n.alloc__dot { width: 12px; height: 12px; border-radius: 4px; }\n\n.alloc__pct {\n  font-family: var(--font-num);\n  font-weight: 500;\n  font-variant-numeric: tabular-nums;\n}\n\n.alloc__action {\n  margin-top: 1.25rem;\n  padding-top: 1.1rem;\n  border-top: 1px solid var(--line);\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 1rem;\n  flex-wrap: wrap;\n}\n\n.alloc__action p {\n  margin: 0;\n  font-size: 0.9rem;\n  color: var(--ink-soft);\n  max-width: 30ch;\n}\n\n/* cash flow */\n\n.cash__chart-wrap { height: 220px; }\n.cash__chart-wrap svg { width: 100%; height: 100%; display: block; }\n\n.cash__keys {\n  display: flex;\n  align-items: center;\n  gap: 1.25rem;\n  margin-top: 0.9rem;\n  font-size: 0.85rem;\n  color: var(--ink-soft);\n  flex-wrap: wrap;\n}\n\n.cash__key { display: inline-flex; align-items: center; gap: 0.45rem; }\n\n.cash__swatch { width: 11px; height: 11px; border-radius: 3px; }\n.cash__swatch--in { background: var(--plum-700); }\n.cash__swatch--out { background: var(--plum-100); }\n\n.cash__net {\n  margin-inline-start: auto;\n  font-family: var(--font-num);\n  font-weight: 600;\n  color: var(--pos);\n  font-variant-numeric: tabular-nums;\n}\n\n/* holdings table */\n\n.holdings__scroll { overflow-x: auto; }\n\n.holdings {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.92rem;\n  min-width: 540px;\n}\n\n.holdings th {\n  text-align: left;\n  font-weight: 500;\n  font-size: 0.78rem;\n  color: var(--ink-soft);\n  padding: 0 0.6rem 0.6rem;\n  border-bottom: 1px solid var(--line);\n}\n\n.holdings td {\n  padding: 0.7rem 0.6rem;\n  border-bottom: 1px solid var(--line);\n  vertical-align: middle;\n}\n\n.holdings tbody tr:last-child td { border-bottom: 0; }\n\n.holdings tbody tr { transition: background-color 120ms ease-out; }\n.holdings tbody tr:hover { background: var(--plum-50); }\n\n.holdings__num { text-align: right; }\n\ntd.holdings__num {\n  font-family: var(--font-num);\n  font-variant-numeric: tabular-nums;\n}\n\n.holdings__name { font-weight: 500; }\n\n.holdings__ticker {\n  display: block;\n  font-size: 0.76rem;\n  color: var(--ink-soft);\n  font-family: var(--font-num);\n}\n\n.holdings__spark-col { width: 110px; text-align: right; }\n\n.holdings__spark { width: 96px; height: 28px; display: inline-block; vertical-align: middle; }\n\n/* goals */\n\n.goals {\n  list-style: none;\n  margin: 0 0 1.25rem;\n  padding: 0;\n  display: grid;\n  gap: 1.1rem;\n}\n\n.goal__top {\n  display: flex;\n  justify-content: space-between;\n  align-items: baseline;\n  gap: 0.75rem;\n}\n\n.goal__name { font-weight: 500; font-size: 0.95rem; }\n\n.goal__pct {\n  font-family: var(--font-num);\n  font-weight: 600;\n  font-variant-numeric: tabular-nums;\n}\n\n.goal__bar {\n  margin-top: 0.45rem;\n  height: 8px;\n  border-radius: 999px;\n  background: var(--plum-50);\n  overflow: hidden;\n}\n\n.goal__fill {\n  height: 100%;\n  border-radius: inherit;\n  background: var(--plum-700);\n  transition: width 600ms cubic-bezier(0.22, 1, 0.36, 1);\n}\n\n.goal--ahead .goal__fill { background: var(--pos); }\n\n.goal__meta {\n  margin: 0.4rem 0 0;\n  font-size: 0.8rem;\n  color: var(--ink-soft);\n}\n\n/* footer */\n\n.foot {\n  max-width: 1180px;\n  margin-inline: auto;\n  padding: 1.5rem var(--gutter) 2.5rem;\n  display: flex;\n  justify-content: space-between;\n  gap: 1rem;\n  font-size: 0.8rem;\n  color: var(--ink-soft);\n  flex-wrap: wrap;\n}\n\n.foot p { margin: 0; }\n\n.foot__brand { font-family: var(--font-display); font-weight: 600; color: var(--ink); }\n\n/* chart svg internals (classes used by js/charts.js) */\n\n.perf-grid-line { stroke: oklch(0.42 0.07 315 / 0.5); stroke-width: 1; stroke-dasharray: 2 5; }\n.perf-axis-label {\n  fill: oklch(0.78 0.04 315);\n  font: 500 11px var(--font-num);\n}\n.perf-area { fill: url(#perfFill); }\n.perf-line { fill: none; stroke: oklch(0.88 0.07 315); stroke-width: 2.5; stroke-linejoin: round; stroke-linecap: round; }\n.perf-cursor-line { stroke: oklch(0.9 0.03 315 / 0.7); stroke-width: 1; }\n.perf-cursor-dot { fill: oklch(0.97 0.01 315); stroke: var(--plum-800); stroke-width: 2.5; }\n\n.cash-bar-in { fill: var(--plum-700); }\n.cash-bar-out { fill: var(--plum-100); }\n.cash-axis-label { fill: var(--ink-soft); font: 500 11px var(--font-num); }\n.cash-zero-line { stroke: var(--line); stroke-width: 1; }\n\n.spark-line { fill: none; stroke-width: 1.8; stroke-linejoin: round; stroke-linecap: round; }\n.spark-line--up { stroke: var(--pos); }\n.spark-line--down { stroke: var(--neg); }\n\n/* ---------- responsive ---------- */\n\n@media (max-width: 940px) {\n  .panel--alloc, .panel--cash, .panel--holdings, .panel--goals { grid-column: span 12; }\n  .hero__inner { grid-template-columns: 1fr; }\n}\n\n@media (max-width: 640px) {\n  .topbar { gap: 0.75rem; }\n  .topbar__nav { display: none; }\n  .topbar__market span:last-child { display: none; }\n  .hero__facts { gap: 1rem 1.5rem; }\n  .alloc { justify-content: center; }\n  .cash__net { margin-inline-start: 0; width: 100%; }\n}\n\n/* ---------- motion preferences ---------- */\n\n@media (prefers-reduced-motion: reduce) {\n  html { scroll-behavior: auto; }\n  *, *::before, *::after {\n    transition-duration: 0.01ms !important;\n    animation-duration: 0.01ms !important;\n  }\n}\n"}],"folders":[]},{"folder":"js","files":[{"name":"charts.js","content":"// Hand-rolled SVG charts for Meridian: performance line, allocation donut,\n// cash-flow bars, holding sparklines. No chart library, full styling control.\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\nfunction el(tag, attrs = {}) {\n  const node = document.createElementNS(SVG_NS, tag);\n  for (const [k, v] of Object.entries(attrs)) node.setAttribute(k, v);\n  return node;\n}\n\nfunction clear(svg) {\n  while (svg.firstChild) svg.removeChild(svg.firstChild);\n}\n\nfunction niceTicks(min, max, count = 4) {\n  const span = max - min;\n  const rawStep = span / count;\n  const mag = Math.pow(10, Math.floor(Math.log10(rawStep)));\n  const norm = rawStep / mag;\n  const step = (norm >= 5 ? 5 : norm >= 2 ? 2.5 : 1) * mag;\n  const start = Math.ceil(min / step) * step;\n  const ticks = [];\n  for (let v = start; v <= max; v += step) ticks.push(v);\n  return ticks;\n}\n\n/* ---------------- performance line chart ---------------- */\n\nexport function drawPerfChart(svg, series, { onHover, onLeave, formatY }) {\n  clear(svg);\n  const rect = svg.getBoundingClientRect();\n  const W = Math.max(rect.width, 280);\n  const H = Math.max(rect.height, 180);\n  svg.setAttribute('viewBox', `0 0 ${W} ${H}`);\n\n  const pad = { top: 14, right: 12, bottom: 26, left: 8 };\n  const labelW = 52;\n  const plotW = W - pad.left - pad.right - labelW;\n  const plotH = H - pad.top - pad.bottom;\n\n  const values = series.map((d) => d.value);\n  const min = Math.min(...values);\n  const max = Math.max(...values);\n  const span = (max - min) || 1;\n  const yMin = min - span * 0.08;\n  const yMax = max + span * 0.08;\n\n  const x = (i) => pad.left + (i / (series.length - 1)) * plotW;\n  const y = (v) => pad.top + (1 - (v - yMin) / (yMax - yMin)) * plotH;\n\n  // gradient fill\n  const defs = el('defs');\n  const grad = el('linearGradient', { id: 'perfFill', x1: 0, y1: 0, x2: 0, y2: 1 });\n  const s1 = el('stop', { offset: '0%', 'stop-color': 'oklch(0.88 0.07 315)', 'stop-opacity': 0.28 });\n  const s2 = el('stop', { offset: '100%', 'stop-color': 'oklch(0.88 0.07 315)', 'stop-opacity': 0 });\n  grad.append(s1, s2);\n  defs.append(grad);\n  svg.append(defs);\n\n  // gridlines + y labels\n  for (const t of niceTicks(yMin, yMax, 4)) {\n    const gy = y(t);\n    svg.append(el('line', { x1: pad.left, x2: pad.left + plotW, y1: gy, y2: gy, class: 'perf-grid-line' }));\n    const label = el('text', { x: pad.left + plotW + 8, y: gy + 4, class: 'perf-axis-label' });\n    label.textContent = formatY(t);\n    svg.append(label);\n  }\n\n  // x labels: first, middle, last\n  const xIdx = [0, Math.floor(series.length / 2), series.length - 1];\n  xIdx.forEach((i, k) => {\n    const label = el('text', {\n      x: x(i),\n      y: H - 8,\n      class: 'perf-axis-label',\n      'text-anchor': k === 0 ? 'start' : k === 2 ? 'end' : 'middle',\n    });\n    label.textContent = series[i].date.toLocaleDateString('en-US', { month: 'short', year: '2-digit' });\n    svg.append(label);\n  });\n\n  // area + line paths\n  let line = '';\n  series.forEach((d, i) => {\n    line += (i === 0 ? 'M' : 'L') + x(i).toFixed(1) + ' ' + y(d.value).toFixed(1);\n  });\n  const area = line + `L${(pad.left + plotW).toFixed(1)} ${(pad.top + plotH).toFixed(1)}L${pad.left} ${(pad.top + plotH).toFixed(1)}Z`;\n\n  svg.append(el('path', { d: area, class: 'perf-area' }));\n  svg.append(el('path', { d: line, class: 'perf-line' }));\n\n  // crosshair\n  const cursorLine = el('line', { y1: pad.top, y2: pad.top + plotH, class: 'perf-cursor-line', visibility: 'hidden' });\n  const cursorDot = el('circle', { r: 4.5, class: 'perf-cursor-dot', visibility: 'hidden' });\n  svg.append(cursorLine, cursorDot);\n\n  const hit = el('rect', {\n    x: pad.left, y: pad.top, width: plotW, height: plotH,\n    fill: 'transparent',\n  });\n  svg.append(hit);\n\n  function moveTo(clientX) {\n    const box = svg.getBoundingClientRect();\n    const sx = ((clientX - box.left) / box.width) * W;\n    const ratio = Math.min(1, Math.max(0, (sx - pad.left) / plotW));\n    const i = Math.round(ratio * (series.length - 1));\n    const px = x(i);\n    const py = y(series[i].value);\n    cursorLine.setAttribute('x1', px);\n    cursorLine.setAttribute('x2', px);\n    cursorLine.setAttribute('visibility', 'visible');\n    cursorDot.setAttribute('cx', px);\n    cursorDot.setAttribute('cy', py);\n    cursorDot.setAttribute('visibility', 'visible');\n    onHover(series[i], (px / W) * box.width, (py / H) * box.height);\n  }\n\n  hit.addEventListener('pointermove', (e) => moveTo(e.clientX));\n  hit.addEventListener('pointerdown', (e) => moveTo(e.clientX));\n  hit.addEventListener('pointerleave', () => {\n    cursorLine.setAttribute('visibility', 'hidden');\n    cursorDot.setAttribute('visibility', 'hidden');\n    onLeave();\n  });\n}\n\n/* ---------------- allocation donut ---------------- */\n\nexport function drawDonut(svg, slices) {\n  clear(svg);\n  const SIZE = 168;\n  svg.setAttribute('viewBox', `0 0 ${SIZE} ${SIZE}`);\n  const cx = SIZE / 2, cy = SIZE / 2;\n  const rOuter = 80, rInner = 56;\n  const total = slices.reduce((s, d) => s + d.value, 0);\n  const gap = 0.025; // radians between segments\n\n  let angle = -Math.PI / 2;\n  for (const slice of slices) {\n    const sweep = (slice.value / total) * Math.PI * 2;\n    const a0 = angle + gap / 2;\n    const a1 = angle + sweep - gap / 2;\n    angle += sweep;\n    if (a1 <= a0) continue;\n\n    const large = a1 - a0 > Math.PI ? 1 : 0;\n    const p = (r, a) => `${(cx + r * Math.cos(a)).toFixed(2)} ${(cy + r * Math.sin(a)).toFixed(2)}`;\n    const d = [\n      `M${p(rOuter, a0)}`,\n      `A${rOuter} ${rOuter} 0 ${large} 1 ${p(rOuter, a1)}`,\n      `L${p(rInner, a1)}`,\n      `A${rInner} ${rInner} 0 ${large} 0 ${p(rInner, a0)}`,\n      'Z',\n    ].join('');\n    svg.append(el('path', { d, fill: slice.color }));\n  }\n}\n\n/* ---------------- cash flow grouped bars ---------------- */\n\nexport function drawCashBars(svg, months) {\n  clear(svg);\n  const rect = svg.getBoundingClientRect();\n  const W = Math.max(rect.width, 280);\n  const H = Math.max(rect.height, 160);\n  svg.setAttribute('viewBox', `0 0 ${W} ${H}`);\n\n  const pad = { top: 10, right: 4, bottom: 24, left: 40 };\n  const plotW = W - pad.left - pad.right;\n  const plotH = H - pad.top - pad.bottom;\n\n  const maxVal = Math.max(...months.flatMap((m) => [m.inflow, m.outflow])) * 1.1;\n  const y = (v) => pad.top + (1 - v / maxVal) * plotH;\n\n  // y labels\n  for (const t of niceTicks(0, maxVal, 3)) {\n    const gy = y(t);\n    const label = el('text', { x: pad.left - 8, y: gy + 4, class: 'cash-axis-label', 'text-anchor': 'end' });\n    label.textContent = '$' + Math.round(t / 1000) + 'k';\n    svg.append(label);\n  }\n\n  const group = plotW / months.length;\n  const barW = Math.min(26, group * 0.28);\n\n  months.forEach((m, i) => {\n    const cx = pad.left + group * i + group / 2;\n    const r = Math.min(5, barW / 2);\n\n    const inH = pad.top + plotH - y(m.inflow);\n    const inBar = el('path', {\n      d: roundedTopBar(cx - barW - 2, y(m.inflow), barW, inH, r),\n      class: 'cash-bar-in',\n    });\n    const outH = pad.top + plotH - y(m.outflow);\n    const outBar = el('path', {\n      d: roundedTopBar(cx + 2, y(m.outflow), barW, outH, r),\n      class: 'cash-bar-out',\n    });\n    svg.append(inBar, outBar);\n\n    const label = el('text', { x: cx, y: H - 6, class: 'cash-axis-label', 'text-anchor': 'middle' });\n    label.textContent = m.month;\n    svg.append(label);\n  });\n\n  svg.append(el('line', {\n    x1: pad.left, x2: pad.left + plotW,\n    y1: pad.top + plotH, y2: pad.top + plotH,\n    class: 'cash-zero-line',\n  }));\n}\n\nfunction roundedTopBar(x, y, w, h, r) {\n  if (h <= r) r = Math.max(0, h - 1);\n  return [\n    `M${x} ${y + h}`,\n    `L${x} ${y + r}`,\n    `Q${x} ${y} ${x + r} ${y}`,\n    `L${x + w - r} ${y}`,\n    `Q${x + w} ${y} ${x + w} ${y + r}`,\n    `L${x + w} ${y + h}`,\n    'Z',\n  ].join('');\n}\n\n/* ---------------- sparkline ---------------- */\n\nexport function drawSpark(svg, points, up) {\n  clear(svg);\n  const W = 96, H = 28, pad = 3;\n  svg.setAttribute('viewBox', `0 0 ${W} ${H}`);\n  const min = Math.min(...points);\n  const max = Math.max(...points);\n  const span = (max - min) || 1;\n  const x = (i) => pad + (i / (points.length - 1)) * (W - pad * 2);\n  const y = (v) => pad + (1 - (v - min) / span) * (H - pad * 2);\n  let d = '';\n  points.forEach((v, i) => {\n    d += (i === 0 ? 'M' : 'L') + x(i).toFixed(1) + ' ' + y(v).toFixed(1);\n  });\n  svg.append(el('path', { d, class: `spark-line spark-line--${up ? 'up' : 'down'}` }));\n}\n"},{"name":"data.js","content":"// Seeded, deterministic portfolio data for Meridian.\n// Mulberry32 PRNG so every load shows the same believable numbers.\n\nfunction mulberry32(seed) {\n  let a = seed >>> 0;\n  return function () {\n    a |= 0; a = (a + 0x6D2B79F5) | 0;\n    let t = Math.imul(a ^ (a >>> 15), 1 | a);\n    t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n    return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n  };\n}\n\nconst DAY = 86400000;\nconst TODAY = new Date(2026, 5, 10); // Wed 10 June 2026 (fixed reference date)\n\n/** Generate a daily portfolio-value series ending today. */\nfunction makeSeries(days, endValue, annualDrift, dailyVol, seed) {\n  const rand = mulberry32(seed);\n  const values = new Array(days);\n  values[days - 1] = endValue;\n  // walk backwards so the series always lands exactly on endValue\n  for (let i = days - 2; i >= 0; i--) {\n    const shock = (rand() - 0.5) * 2 * dailyVol;\n    const drift = annualDrift / 252;\n    values[i] = values[i + 1] / (1 + drift + shock);\n  }\n  return values.map((v, i) => ({\n    date: new Date(TODAY.getTime() - (days - 1 - i) * DAY),\n    value: v,\n  }));\n}\n\nconst FULL_SERIES = makeSeries(365 * 3, 2184602, 0.085, 0.006, 20260610);\n\nexport const RANGES = {\n  '1M': 31,\n  '3M': 92,\n  '6M': 183,\n  '1Y': 365,\n  ALL: FULL_SERIES.length,\n};\n\nexport function seriesFor(rangeKey) {\n  const days = RANGES[rangeKey] ?? 365;\n  return FULL_SERIES.slice(FULL_SERIES.length - days);\n}\n\nexport const portfolio = {\n  owner: 'David',\n  total: 2184602,\n  invested: 1968400,\n  cash: 216202,\n  ytdReturn: 0.072,\n  todayChangePct: 0.0124,\n  quarterGain: 48210,\n};\n\nexport const allocation = [\n  { name: 'US equities', value: 911300, color: 'oklch(0.38 0.12 315)' },\n  { name: 'Intl equities', value: 412900, color: 'oklch(0.55 0.13 315)' },\n  { name: 'Bonds', value: 524300, color: 'oklch(0.74 0.09 315)' },\n  { name: 'Real assets', value: 119900, color: 'oklch(0.50 0.11 155)' },\n  { name: 'Cash', value: 216202, color: 'oklch(0.88 0.03 315)' },\n];\n\nexport const holdings = [\n  { name: 'Total Market Index', ticker: 'VTI',  value: 528400, oneYear: 0.118, seed: 11 },\n  { name: 'S&P 500 Index',      ticker: 'VOO',  value: 382900, oneYear: 0.104, seed: 12 },\n  { name: 'Developed Markets',  ticker: 'VEA',  value: 274100, oneYear: 0.067, seed: 13 },\n  { name: 'Aggregate Bond',     ticker: 'BND',  value: 351700, oneYear: 0.031, seed: 14 },\n  { name: 'Treasury Ladder',    ticker: 'GOVT', value: 172600, oneYear: 0.024, seed: 15 },\n  { name: 'Emerging Markets',   ticker: 'VWO',  value: 138800, oneYear: -0.018, seed: 16 },\n  { name: 'Real Estate Index',  ticker: 'VNQ',  value: 119900, oneYear: 0.052, seed: 17 },\n  { name: 'Money Market',       ticker: 'VMFXX', value: 216202, oneYear: 0.046, seed: 18 },\n];\n\n/** 12-point sparkline shaped by the holding's 1-year return. */\nexport function sparkSeries(holding) {\n  const rand = mulberry32(holding.seed * 7919);\n  const pts = [];\n  let v = 1;\n  const step = holding.oneYear / 12;\n  for (let i = 0; i < 12; i++) {\n    v *= 1 + step + (rand() - 0.5) * 0.018;\n    pts.push(v);\n  }\n  return pts;\n}\n\nexport const cashflow = [\n  { month: 'Jan', inflow: 18400, outflow: 11200 },\n  { month: 'Feb', inflow: 17900, outflow: 12600 },\n  { month: 'Mar', inflow: 21300, outflow: 11900 },\n  { month: 'Apr', inflow: 18100, outflow: 14800 },\n  { month: 'May', inflow: 19600, outflow: 11400 },\n  { month: 'Jun', inflow: 18800, outflow: 10700 },\n];\n\nexport const goals = [\n  {\n    name: 'Retire at 58',\n    pct: 64,\n    ahead: true,\n    meta: '$1.41M of $2.2M target · ahead by 14 months',\n  },\n  {\n    name: 'Lake house deposit',\n    pct: 82,\n    ahead: true,\n    meta: '$123k of $150k · on pace for May 2027',\n  },\n  {\n    name: 'College fund',\n    pct: 38,\n    ahead: false,\n    meta: '$87k of $230k · add $450/mo to close the gap',\n  },\n];\n\nexport const fmt = {\n  money(n, opts = {}) {\n    return n.toLocaleString('en-US', {\n      style: 'currency',\n      currency: 'USD',\n      maximumFractionDigits: 0,\n      ...opts,\n    });\n  },\n  moneyCompact(n) {\n    if (Math.abs(n) >= 1e6) return '$' + (n / 1e6).toFixed(2) + 'M';\n    if (Math.abs(n) >= 1e3) return '$' + Math.round(n / 1e3) + 'k';\n    return this.money(n);\n  },\n  pct(x, digits = 1) {\n    const v = (x * 100).toFixed(digits);\n    return (x > 0 ? '+' : '') + v + '%';\n  },\n  date(d) {\n    return d.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' });\n  },\n  longDate(d) {\n    return d.toLocaleDateString('en-US', { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' });\n  },\n};\n\nexport { TODAY };\n"},{"name":"main.js","content":"// Meridian — wire data to the dashboard.\n\nimport {\n  portfolio, allocation, holdings, cashflow, goals,\n  seriesFor, sparkSeries, fmt, TODAY,\n} from './data.js';\nimport { drawPerfChart, drawDonut, drawCashBars, drawSpark } from './charts.js';\n\n/* ---------- hero figures ---------- */\n\ndocument.getElementById('heroDate').textContent = fmt.longDate(TODAY);\ndocument.getElementById('heroGain').textContent = fmt.money(portfolio.quarterGain);\ndocument.getElementById('netWorth').textContent = fmt.money(portfolio.total);\ndocument.getElementById('todayDelta').textContent = fmt.pct(portfolio.todayChangePct, 2) + ' today';\ndocument.getElementById('factInvested').textContent = fmt.moneyCompact(portfolio.invested);\ndocument.getElementById('factCash').textContent = fmt.moneyCompact(portfolio.cash);\ndocument.getElementById('factYtd').textContent = fmt.pct(portfolio.ytdReturn);\n\n/* ---------- performance chart + range tabs ---------- */\n\nconst perfSvg = document.getElementById('perfChart');\nconst chartWrap = document.getElementById('perfChartWrap');\nconst tip = document.getElementById('chartTip');\nconst tipDate = document.getElementById('tipDate');\nconst tipValue = document.getElementById('tipValue');\nconst rangeSummary = document.getElementById('rangeSummary');\n\nconst RANGE_LABELS = {\n  '1M': 'month', '3M': 'three months', '6M': 'six months', '1Y': 'year', ALL: 'three years',\n};\n\nlet currentRange = '1Y';\n\nfunction renderPerf() {\n  const series = seriesFor(currentRange);\n  drawPerfChart(perfSvg, series, {\n    formatY: (v) => fmt.moneyCompact(v),\n    onHover(point, px, py) {\n      tip.hidden = false;\n      tipDate.textContent = fmt.date(point.date);\n      tipValue.textContent = fmt.money(point.value);\n      const wrapW = chartWrap.clientWidth;\n      const clamped = Math.min(wrapW - 70, Math.max(70, px));\n      tip.style.left = clamped + 'px';\n      tip.style.top = py + 'px';\n    },\n    onLeave() { tip.hidden = true; },\n  });\n  const first = series[0].value;\n  const last = series[series.length - 1].value;\n  const change = (last - first) / first;\n  rangeSummary.textContent =\n    `Over the last ${RANGE_LABELS[currentRange]} your portfolio moved from ` +\n    `${fmt.money(first)} to ${fmt.money(last)} (${fmt.pct(change)}).`;\n}\n\ndocument.querySelectorAll('.range__btn').forEach((btn) => {\n  btn.addEventListener('click', () => {\n    currentRange = btn.dataset.range;\n    document.querySelectorAll('.range__btn').forEach((b) => {\n      const active = b === btn;\n      b.classList.toggle('range__btn--active', active);\n      b.setAttribute('aria-selected', String(active));\n    });\n    renderPerf();\n  });\n});\n\n/* ---------- allocation ---------- */\n\nconst donutSvg = document.getElementById('allocDonut');\ndrawDonut(donutSvg, allocation);\ndocument.getElementById('allocClasses').textContent = allocation.length;\n\nconst totalAlloc = allocation.reduce((s, a) => s + a.value, 0);\nconst legend = document.getElementById('allocLegend');\nlegend.innerHTML = allocation.map((a) => `\n  <li class=\"alloc__row\">\n    <span class=\"alloc__dot\" style=\"background:${a.color}\" aria-hidden=\"true\"></span>\n    <span>${a.name}</span>\n    <span class=\"alloc__pct\">${((a.value / totalAlloc) * 100).toFixed(1)}%</span>\n  </li>`).join('');\n\n/* ---------- cash flow ---------- */\n\nconst cashSvg = document.getElementById('cashChart');\ndrawCashBars(cashSvg, cashflow);\nconst avgNet = cashflow.reduce((s, m) => s + m.inflow - m.outflow, 0) / cashflow.length;\ndocument.getElementById('cashNet').textContent = 'Avg saved ' + fmt.money(avgNet) + '/mo';\n\n/* ---------- holdings table ---------- */\n\nconst tbody = document.getElementById('holdingsBody');\nconst totalHoldings = holdings.reduce((s, h) => s + h.value, 0);\n\ntbody.innerHTML = holdings.map((h, i) => `\n  <tr>\n    <td>\n      <span class=\"holdings__name\">${h.name}</span>\n      <span class=\"holdings__ticker\">${h.ticker}</span>\n    </td>\n    <td class=\"holdings__num\">${fmt.money(h.value)}</td>\n    <td class=\"holdings__num\">${((h.value / totalHoldings) * 100).toFixed(1)}%</td>\n    <td class=\"holdings__num\">\n      <span class=\"delta ${h.oneYear >= 0 ? 'delta--up' : 'delta--down'}\">${fmt.pct(h.oneYear)}</span>\n    </td>\n    <td class=\"holdings__spark-col\"><svg class=\"holdings__spark\" id=\"spark-${i}\" role=\"img\" aria-label=\"${h.ticker} 12-month trend, ${h.oneYear >= 0 ? 'up' : 'down'} ${fmt.pct(h.oneYear)}\"></svg></td>\n  </tr>`).join('');\n\nholdings.forEach((h, i) => {\n  drawSpark(document.getElementById(`spark-${i}`), sparkSeries(h), h.oneYear >= 0);\n});\n\ndocument.getElementById('holdingsNote').textContent = holdings.length + ' positions';\n\n/* ---------- goals ---------- */\n\nconst goalsList = document.getElementById('goalsList');\ngoalsList.innerHTML = goals.map((g) => `\n  <li class=\"goal ${g.ahead ? 'goal--ahead' : ''}\">\n    <div class=\"goal__top\">\n      <span class=\"goal__name\">${g.name}</span>\n      <span class=\"goal__pct\">${g.pct}%</span>\n    </div>\n    <div class=\"goal__bar\" role=\"progressbar\" aria-valuenow=\"${g.pct}\" aria-valuemin=\"0\" aria-valuemax=\"100\" aria-label=\"${g.name}: ${g.pct}% funded\">\n      <div class=\"goal__fill\" style=\"width:${g.pct}%\"></div>\n    </div>\n    <p class=\"goal__meta\">${g.meta}</p>\n  </li>`).join('');\n\n/* ---------- redraw responsive charts on resize ---------- */\n\nlet resizeTimer;\nwindow.addEventListener('resize', () => {\n  clearTimeout(resizeTimer);\n  resizeTimer = setTimeout(() => {\n    renderPerf();\n    drawCashBars(cashSvg, cashflow);\n  }, 150);\n});\n\n/* ---------- icons + initial paint ---------- */\n\nrenderPerf();\nif (window.lucide) window.lucide.createIcons();\n"}],"folders":[]},{"folder":"other","files":[{"name":"main.sketch","content":""}],"folders":[]}]},"variants":null,"createdAt":"2026-06-10T13:33:25.121Z","updatedAt":"2026-06-10T13:33:36.173Z"}}