> ## Documentation Index
> Fetch the complete documentation index at: https://talunavo.com/llms.txt
> Use this file to discover all available pages before exploring further.

# How it works

> Plans as diffs, scenarios you author, goals that get judged, a ledger that reconciles, four registered strategies, an explorer, annual checkpoints, and uncertainty with its limits printed.

export const LedgerOrnament = () => <svg className="tl-figure" viewBox="0 0 400 200" aria-hidden="true">
    <g stroke="currentColor" strokeWidth="1" opacity="0.25">
      <line x1="0" y1="40" x2="400" y2="40" />
      <line x1="0" y1="80" x2="400" y2="80" />
      <line x1="0" y1="120" x2="400" y2="120" />
      <line x1="0" y1="160" x2="400" y2="160" />
    </g>
    <g fill="currentColor" fontFamily="Inter, system-ui, sans-serif" fontSize="12" opacity="0.8">
      <text x="0" y="28">2031 · retire</text>
      <text x="400" y="28" textAnchor="end">$5.64M</text>
      <text x="0" y="68">2035 · SEPP lock ends</text>
      <text x="400" y="68" textAnchor="end">$5.21M</text>
      <text x="0" y="108">2051 · RMD wall</text>
      <text x="400" y="108" textAnchor="end">$6.02M</text>
      <text x="0" y="148">2074 · horizon</text>
      <text x="400" y="148" textAnchor="end">$7.31M</text>
    </g>
    <path d="M0 190 C 100 184, 200 160, 300 140 S 380 118, 400 110" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" opacity="0.9" pathLength="1" className="tl-draw" />
  </svg>;

export const FanFigure = () => <svg className="tl-figure" viewBox="0 0 520 300" role="img" aria-label="A percentile fan of outcomes with the deterministic plan drawn through it">
    <rect x="0.5" y="0.5" width="519" height="299" rx="12" className="f-surface" stroke="var(--tl-hairline)" />
    <text x="20" y="30" className="f-cap">MONTE CARLO · 1,000 TRIALS</text>
    <text x="500" y="30" textAnchor="end" className="f-mono">stored: false · redraw from seed</text>
    <g className="f-grid">
      <line x1="60" y1="70" x2="500" y2="70" />
      <line x1="60" y1="130" x2="500" y2="130" />
      <line x1="60" y1="190" x2="500" y2="190" />
    </g>
    <line x1="60" y1="250" x2="500" y2="250" className="f-rule" />
    <text x="54" y="74" textAnchor="end" className="f-cap">$12M</text>
    <text x="54" y="134" textAnchor="end" className="f-cap">$8M</text>
    <text x="54" y="194" textAnchor="end" className="f-cap">$4M</text>
    <text x="64" y="266" className="f-cap">2026</text>
    <text x="496" y="266" textAnchor="end" className="f-cap">2074</text>
    <path d="M64 200 C 180 150, 300 60, 496 40 L 496 240 C 300 230, 180 230, 64 200 Z" className="f-band" opacity="0.6" />
    <path d="M64 200 C 180 165, 300 110, 496 90 L 496 190 C 300 200, 180 210, 64 200 Z" className="f-band-2" opacity="0.7" />
    <path d="M64 200 C 180 175, 300 140, 496 128" className="f-accent" pathLength="1" />
    <text x="470" y="56" className="f-cap">90th</text>
    <text x="470" y="122" className="f-cap">deterministic</text>
    <text x="470" y="236" className="f-cap">10th</text>
    <line x1="330" y1="250" x2="330" y2="214" className="f-hair" strokeDasharray="2 3" />
    <text x="280" y="284" textAnchor="middle" className="f-mono">10th pct: 13 years of spending covered · shortfall $0.8M at 2068</text>
  </svg>;

export const DriftFigure = () => {
  const items = [{
    label: "Returns",
    v: 96,
    cls: "f-pos"
  }, {
    label: "Spending",
    v: -21,
    cls: "f-neg"
  }, {
    label: "Contributions",
    v: 8,
    cls: "f-pos"
  }, {
    label: "Income",
    v: 5,
    cls: "f-pos"
  }, {
    label: "Tax",
    v: 44,
    cls: "f-pos"
  }];
  const scale = 2.0;
  let cursor = 0;
  const bars = items.map((it, i) => {
    const x0 = cursor;
    cursor += it.v;
    const left = 160 + Math.min(x0, cursor) * scale;
    const w = Math.abs(it.v) * scale;
    return {
      ...it,
      y: 70 + i * 34,
      left,
      w
    };
  });
  return <svg className="tl-figure" viewBox="0 0 520 300" role="img" aria-label="The year's drift against plan decomposed into causes that sum to the total">
      <rect x="0.5" y="0.5" width="519" height="299" rx="12" className="f-surface" stroke="var(--tl-hairline)" />
      <text x="20" y="30" className="f-cap">CHECKPOINT · 2027 AGAINST BASELINE 2026</text>
      <text x="500" y="30" textAnchor="end" className="f-mono">9 dimensions · 2 accepted · 1 typed</text>
      <line x1="160" y1="52" x2="160" y2="250" className="f-rule" />
      {bars.map(b => <g key={b.label}>
          <text x="148" y={b.y + 14} textAnchor="end" className="f-label">{b.label}</text>
          <rect x={b.left} y={b.y} width={b.w} height="20" className={b.cls} />
          <text x={b.v >= 0 ? b.left + b.w + 8 : b.left - 8} y={b.y + 14} textAnchor={b.v >= 0 ? "start" : "end"} className="f-cap">{b.v >= 0 ? "+" : "−"}${Math.abs(b.v)}K</text>
        </g>)}
      <line x1="20" y1="248" x2="500" y2="248" className="f-rule" />
      <text x="148" y="272" textAnchor="end" className="f-strong">Total drift</text>
      <rect x="160" y="258" width={132 * scale} height="20" className="f-accent-fill" />
      <text x={160 + 132 * scale + 8} y="272" className="f-strong">+$132K</text>
      <text x="500" y="290" textAnchor="end" className="f-mono">sums to the cent</text>
    </svg>;
};

export const ExplorerGrid = () => {
  const rows = ["$120K", "$140K", "$160K", "$180K"];
  const cols = ["2029", "2031", "2033", "2035", "2037"];
  const cells = [[0, 0, 0, 0, 0], [1, 0, 0, 0, 0], [2, 1, 0, 0, 0], [2, 2, 1, 1, 0]];
  const fill = ["var(--tl-funded)", "var(--tl-tight)", "var(--tl-short)"];
  const op = [0.9, 0.55, 0.28];
  return <svg className="tl-figure" viewBox="0 0 520 300" role="img" aria-label="A grid of retirement year against income floor, each cell a verdict">
      <rect x="0.5" y="0.5" width="519" height="299" rx="12" className="f-surface" stroke="var(--tl-hairline)" />
      <text x="20" y="30" className="f-cap">EXPLORE · WHAT IS FUNDABLE?</text>
      <text x="500" y="30" textAnchor="end" className="f-mono">first row 0.41 s · complete 3.2 s</text>
      <text x="300" y="60" textAnchor="middle" className="f-label">Retirement year →</text>
      <text x="26" y="170" className="f-label" transform="rotate(-90 26 170)" textAnchor="middle">Income floor ↑</text>
      {cols.map((c, j) => <text key={c} x={120 + j * 76 + 32} y="80" textAnchor="middle" className="f-cap">{c}</text>)}
      {rows.map((r, i) => <g key={r}>
          <text x="104" y={100 + i * 44 + 20} textAnchor="end" className="f-cap">{r}</text>
          {cols.map((c, j) => <g key={c} className="tl-cell" style={{
    animationDelay: `${0.3 + i * 0.55 + j * 0.09}s`
  }}>
              <rect x={120 + j * 76} y={100 + i * 44} width="64" height="36" rx="5" fill={fill[cells[i][j]]} opacity={op[cells[i][j]]} />
              {cells[i][j] === 0 ? <circle cx={120 + j * 76 + 32} cy={100 + i * 44 + 18} r="3.5" fill="var(--tl-surface)" /> : null}
              {cells[i][j] === 1 ? <circle cx={120 + j * 76 + 32} cy={100 + i * 44 + 18} r="3.5" fill="none" stroke="var(--tl-surface)" strokeWidth="1.5" /> : null}
            </g>)}
        </g>)}
      <rect x="348" y="144" width="64" height="36" rx="5" fill="none" stroke="var(--tl-ink)" strokeWidth="1.5" />
      <text x="120" y="290" className="f-mono">tap a cell: the sandbox plan, the candidate goal, the verdict · nothing saved until you adopt</text>
    </svg>;
};

export const TraceFigure = () => <svg className="tl-figure" viewBox="0 0 520 300" role="img" aria-label="A figure in the ledger drilling into the flows and cited tax lines behind it">
    <rect x="0.5" y="0.5" width="519" height="299" rx="12" className="f-surface" stroke="var(--tl-hairline)" />
    <text x="20" y="30" className="f-cap">LEDGER · 2033</text>
    <text x="500" y="30" textAnchor="end" className="f-mono">projected · confidence: estimated</text>
    <line x1="20" y1="42" x2="500" y2="42" className="f-rule" />
    <text x="20" y="66" className="f-label">Federal income tax</text>
    <text x="500" y="66" textAnchor="end" className="f-strong">$41,318</text>
    <line x1="20" y1="80" x2="500" y2="80" className="f-hair" />
    <text x="20" y="104" className="f-label">Roth conversion · policy: fill the 24% bracket</text>
    <text x="500" y="104" textAnchor="end" className="f-strong">$112,400</text>
    <path d="M500 112 v 10" className="f-accent" />
    <rect x="40" y="128" width="460" height="152" rx="8" className="f-surface-2" />
    <text x="56" y="152" className="f-cap">WHY THIS NUMBER</text>
    <g>
      <circle cx="60" cy="176" r="3" className="f-accent-fill" />
      <text x="72" y="180" className="f-label">Headroom to the top of the 24% bracket</text>
      <text x="484" y="180" textAnchor="end" className="f-label">$124,871</text>
      <circle cx="60" cy="200" r="3" className="f-tax" />
      <text x="72" y="204" className="f-label">IRMAA guard · stays under tier 2</text>
      <text x="484" y="204" textAnchor="end" className="f-label">−$12,471</text>
      <circle cx="60" cy="224" r="3" className="f-goal" />
      <text x="72" y="228" className="f-label">ACA cliff guard · inactive this year</text>
      <text x="484" y="228" textAnchor="end" className="f-label">$0</text>
    </g>
    <line x1="56" y1="242" x2="484" y2="242" className="f-rule" />
    <text x="56" y="264" className="f-mono">ordinary brackets · 2033 · indexed from the cited source · tier: estimated</text>
    <text x="56" y="277" className="f-mono">marginal rate, next dollar: 24.0% · measured, not averaged</text>
  </svg>;

export const CompareTable = () => <div className="tl-table-scroll">
  <table className="tl-compare" aria-label="Illustrative comparison of four plans">
    <thead>
      <tr>
        <th></th>
        <th>Current course<small>do nothing · baseline</small></th>
        <th>Bridge · 24%<small>SEPP + fill bracket</small></th>
        <th>Convert 32%<small>derived from Bridge</small></th>
        <th>Trust '36<small>derived from Convert</small></th>
      </tr>
    </thead>
    <tbody>
      <tr className="is-band"><td colSpan="5">Goals</td></tr>
      <tr><td>Income floor</td><td><span className="tl-dot tl-dot--funded" role="img" aria-label="funded"></span></td><td><span className="tl-dot tl-dot--funded" role="img" aria-label="funded"></span></td><td><span className="tl-dot tl-dot--funded" role="img" aria-label="funded"></span></td><td><span className="tl-dot tl-dot--funded" role="img" aria-label="funded"></span></td></tr>
      <tr><td>College</td><td><span className="tl-dot tl-dot--short" role="img" aria-label="short"></span></td><td><span className="tl-dot tl-dot--tight" role="img" aria-label="tight"></span></td><td><span className="tl-dot tl-dot--tight" role="img" aria-label="tight"></span></td><td><span className="tl-dot tl-dot--tight" role="img" aria-label="tight"></span></td></tr>
      <tr><td>Dynastic trust</td><td><span className="tl-dot tl-dot--short" role="img" aria-label="short"></span></td><td><span className="tl-dot tl-dot--short" role="img" aria-label="short"></span></td><td><span className="tl-dot tl-dot--short" role="img" aria-label="short"></span></td><td><span className="is-diff" title="The one cell that differs"><span className="tl-dot tl-dot--funded" role="img" aria-label="funded, the one cell that differs"></span></span></td></tr>
      <tr className="is-band"><td colSpan="5">Metrics · deltas vs. baseline · real 2026 $</td></tr>
      <tr><td>Lifetime federal tax</td><td>$2.41M</td><td className="is-pos">−$190K</td><td className="is-pos">−$262K</td><td className="is-pos">−$262K</td></tr>
      <tr><td>To heirs, after their tax</td><td>$6.69M</td><td className="is-pos">+$212K</td><td className="is-pos">+$341K</td><td className="is-pos">+$355K</td></tr>
      <tr><td>Tight-years liquidity</td><td>$0.9M</td><td className="is-neg">−$140K</td><td className="is-neg">−$310K</td><td className="is-neg">−$310K</td></tr>
      <tr><td>Holds under 1966 start</td><td>no · 2061</td><td>no · 2066</td><td>yes</td><td>yes</td></tr>
    </tbody>
  </table>
  </div>;

export const SiteFooter = () => <footer className="tl-footer">
    <div className="tl-wrap">
      <div className="tl-footer__grid">
        <div className="tl-footer__brand">
          {Wordmark({})}
          <p className="tl-caption">Retirement planning that shows its work. Tax-aware plans you can compare, trace, adopt, and check against reality.</p>
        </div>
        <div>
          <h5>Product</h5>
          <ul>
            <li><a href="/product">How it works</a></li>
            <li><a href="/product#strategies">Strategies</a></li>
            <li><a href="/product#live">Checkpoints</a></li>
            <li><a href="/principles">Principles</a></li>
          </ul>
        </div>
        <div>
          <h5>Company</h5>
          <ul>
            <li><a href="/who-its-for">Who it's for</a></li>
            <li><a href="/faq">FAQ</a></li>
            <li><a href="/get-started">Get started</a></li>
            <li><a href="https://app.talunavo.com">Open the app</a></li>
            <li><a href="mailto:support@talunavo.com">support@talunavo.com</a></li>
          </ul>
        </div>
        <div>
          <h5>Honesty</h5>
          <ul>
            <li><a href="/principles#not-advice">Not financial advice</a></li>
            <li><a href="/principles#planning-grade">Planning-grade tax</a></li>
            <li><a href="/principles#privacy">Your data stays yours</a></li>
          </ul>
        </div>
      </div>
      <div className="tl-footer__legal">
        <span>© 2026 Talunavo. Models arithmetic under stated assumptions. It is not financial, tax, or legal advice.</span>
        <span>Every figure cites its source.</span>
      </div>
    </div>
  </footer>;

export const CtaBand = ({title, lede, primary = "Try Talunavo", primaryHref = "https://app.talunavo.com", secondary = "See the product", secondaryHref = "/product", figure = null}) => <div className="tl-cta" data-reveal="">
    <div>
      <h2 className="tl-h2">{title}</h2>
      {lede ? <p className="tl-lede">{lede}</p> : null}
      <div className="tl-actions">
        {CtaLink({
  href: primaryHref,
  children: primary
})}
        {secondary ? CtaLink({
  href: secondaryHref,
  children: secondary,
  variant: "ghost",
  arrow: false
}) : null}
      </div>
    </div>
    {figure ? <div className="tl-cta__figure">{figure}</div> : null}
  </div>;

export const SectionHead = ({eyebrow, title, lede, center = false}) => <div className={["tl-section-head", center ? "tl-section-head--center" : null].filter(Boolean).join(" ")} data-reveal="">
    {eyebrow ? <p className="tl-eyebrow">{eyebrow}</p> : null}
    <h2 className="tl-h2">{title}</h2>
    {lede ? <p className="tl-lede">{lede}</p> : null}
  </div>;

export const Section = ({children, tight = false, id}) => <section id={id} className={["tl-section", tight ? "tl-section--tight" : null].filter(Boolean).join(" ")}>
    <div className="tl-wrap">{children}</div>
  </section>;

export const Glyph = ({name}) => {
  const paths = {
    compare: <path d="M4 5h6v14H4zM14 9h6v10h-6z" />,
    trace: <path d="M4 18L9 10l4 5 7-11M4 21h16" />,
    track: <path d="M3 17l5-5 4 4 9-9M15 7h6v6" />,
    tax: <path d="M4 4h16v16H4zM8 9h8M8 13h8M8 17h5" />,
    goals: <path d="M12 3v3M12 18v3M3 12h3M18 12h3M12 8a4 4 0 100 8 4 4 0 000-8z" />,
    shield: <path d="M12 3l8 3v6c0 5-3.5 8-8 9-4.5-1-8-4-8-9V6l8-3z" />,
    grid: <path d="M4 4h7v7H4zM13 4h7v7h-7zM4 13h7v7H4zM13 13h7v7h-7z" />,
    scale: <path d="M12 3v18M5 7h14M5 7l-3 7a3 3 0 006 0zM19 7l-3 7a3 3 0 006 0z" />,
    home: <path d="M3 12l9-8 9 8M5 10v10h14V10" />,
    sparkle: <path d="M12 3l2 6 6 2-6 2-2 6-2-6-6-2 6-2z" />,
    clock: <path d="M12 3a9 9 0 100 18 9 9 0 000-18zM12 8v4l3 2" />,
    lock: <path d="M6 10h12v10H6zM8 10V7a4 4 0 018 0v3" />
  };
  return <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
      {paths[name] || paths.sparkle}
    </svg>;
};

export const Wordmark = ({className = ""}) => <svg className={className} viewBox="0 0 172 40" role="img" aria-label="Talunavo">
    <path d="M7 32 H15 V24 H23 V16 H31 V8" fill="none" stroke="currentColor" strokeWidth="3" strokeLinejoin="round" strokeLinecap="round" />
    <circle cx="31" cy="8" r="3" fill="var(--tl-accent-ink)" />
    <text x="46" y="27" fontFamily="Inter, system-ui, sans-serif" fontSize="22" fontWeight="600" letterSpacing="-0.5" fill="currentColor">Talunavo</text>
  </svg>;

export const CtaLink = ({href, children, variant = "primary", arrow = true}) => <a className={["tl-btn", "tl-btn--" + variant].join(" ")} href={href}>
    <span>{children}</span>
    {arrow ? <svg viewBox="0 0 16 16" fill="none" aria-hidden="true">
        <path d="M3 8h10M9 4l4 4-4 4" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round" />
      </svg> : null}
  </a>;

<div className="tl-page">
  <div className="tl-wrap">
    <div className="tl-pagehead">
      <p className="tl-eyebrow tl-eyebrow--accent tl-fade-up">Product</p>
      <h1 className="tl-display tl-fade-up d1">Not prediction. <em>Comparison.</em> Then monitoring.</h1>
      <p className="tl-lede tl-fade-up d2">A single projected number is false precision that invites false confidence. The unit of value in Talunavo is the difference between two plans under identical assumptions, and then, once you have chosen, whether reality is still matching the plan you chose.</p>
    </div>
  </div>

  <Section tight id="compare">
    <div className="tl-split">
      <div className="tl-split__copy" data-reveal="">
        <p className="tl-eyebrow">Plans and scenarios</p>
        <h2 className="tl-h2">A plan is a two-line diff, not a copy.</h2>
        <p className="tl-body">A plan declares a <strong>base</strong> and overrides it. The library prints the lineage: <em>Current Course</em>, then <em>Bridge · 24%</em>, then <em>Convert 32%</em> derived from the bridge, then <em>Trust '36</em> derived from that. Open the third one and its diff against its base is one line: the bracket.</p>
        <p className="tl-body">Scenarios are separate from plans. Returns per asset class with per-account overrides, inflation, longevity, contingency resolutions, and the tax regime are editable field by field, each with its plausible band. Saving writes a new version rather than overwriting one, so every projection ever computed stays reproducible from its own inputs.</p>
        <p className="tl-body">A validation list under the plan editor reads your goals as well as your plan. "This plan's conversion policy has no tax source while the college earmark holds the taxable account" is a finding neither the plan nor the goal is wrong about.</p>
      </div>

      <div data-reveal="2">
        <CompareTable />
      </div>
    </div>
  </Section>

  <Section tight id="trace">
    <div className="tl-split tl-split--rev">
      <div className="tl-split__copy" data-reveal="">
        <p className="tl-eyebrow">The ledger</p>
        <h2 className="tl-h2">Every figure drills to the rule that produced it.</h2>
        <p className="tl-body">A projection you cannot audit is astrology with a chart library. So every year is projected into a ledger you can read, drill into, reconcile, and export. Every figure drills into the flows and the cited tax lines that produce it, and every flow carries the module that originated it.</p>
        <p className="tl-body">Tax law is <strong>data</strong>: versioned per year and jurisdiction, every figure carrying its citation, its indexing rule, and its confidence tier, content-hashed into the run's fingerprint. Golden files pin every cliff against official publications.</p>
        <p className="tl-body">Upload your own spreadsheet's balance-by-year and the app keeps it, re-running the diff on every review and flagging divergence beyond a tolerance, stating exactly which lines both sides model.</p>
      </div>

      <div data-reveal="2">
        <TraceFigure />
      </div>
    </div>
  </Section>

  <Section tight id="goals">
    <SectionHead eyebrow="Goals" title="Judged, not just stored." lede="State what you are actually trying to do. Each goal comes back funded, tight, short, or needs input, with its margin in its own unit, its binding year, and the flows the verdict rests on." />

    <div className="tl-grid tl-grid--4">
      <div className="tl-card" data-reveal="">
        <span className="tl-dot tl-dot--funded" />

        <h3 className="tl-h4">Funded</h3>
        <p className="tl-body">With room. The margin tells you how much, in the goal's own units: dollars per year for a floor, a lump sum for a legacy.</p>
      </div>

      <div className="tl-card" data-reveal="2">
        <span className="tl-dot tl-dot--tight" />

        <h3 className="tl-h4">Tight</h3>
        <p className="tl-body">Funded, with little cushion. The margin says how little, and the binding year says when the plan is tightest.</p>
      </div>

      <div className="tl-card" data-reveal="3">
        <span className="tl-dot tl-dot--short" />

        <h3 className="tl-h4">Short</h3>
        <p className="tl-body">Below the funded test. The gap is paired with its effect and its cheapest lever. This is the only state that wears the decision red.</p>
      </div>

      <div className="tl-card" data-reveal="4">
        <span className="tl-dot tl-dot--input" />

        <h3 className="tl-h4">Needs input</h3>
        <p className="tl-body">The app cannot judge this yet. An honest gap, not a warning, and it names the answer that would close it.</p>
      </div>
    </div>

    <p className="tl-body tl-mt-8" data-reveal="">
      The projection engine never knows a goal exists. Evaluation is a pass over ledgers, and everything one ledger cannot answer, such as which goals survive a bad decade or whether a six-year care event is absorbable, is answered by orchestrating more deterministic runs inside a budget of at most 30 runs and half a second. A status chip reads the range across your named scenarios, so "funded under Expected, short under 5% tuition inflation" is one honest mark rather than a flattering one.
    </p>
  </Section>

  <Section id="strategies">
    <SectionHead eyebrow="Strategies" title="Four named levers, and what each one does not model." lede="Each registers through the same plugin API a third party would use. The assumptions screen draws a strategy's form from a schema it has never read." />

    <div className="tl-feature" data-reveal="">
      <span className="tl-feature__num">01</span>

      <div className="tl-feature__body">
        <h3 className="tl-h4">RMDs and the RMD wall</h3>
        <p className="tl-body">Forced distributions, and the first year the forced draw exceeds the spending need. The wall is the thing most households half-know is coming and have never seen drawn.</p>
      </div>
    </div>

    <div className="tl-feature" data-reveal="">
      <span className="tl-feature__num">02</span>

      <div className="tl-feature__body">
        <h3 className="tl-h4">Roth conversion policies</h3>
        <p className="tl-body">Re-decided every year against that year's measured tax, with IRMAA, ACA-cliff and 0%-gains guards that trim the amount and say what the guard cost.</p>
      </div>
    </div>

    <div className="tl-feature" data-reveal="">
      <span className="tl-feature__num">03</span>

      <div className="tl-feature__body">
        <h3 className="tl-h4">SEPP under § 72(t)</h3>
        <p className="tl-body">All three methods, on an account carved out of the IRA, with the rate cap from data, a duration lock computed rather than typed, and a modification inside the lock modelled as the retroactive 10% plus interest. The save refuses it rather than warning about it.</p>
      </div>
    </div>

    <div className="tl-feature" data-reveal="">
      <span className="tl-feature__num">04</span>

      <div className="tl-feature__body">
        <h3 className="tl-h4">Social Security claiming</h3>
        <p className="tl-body">With spousal and survivor benefits, and a cost-of-living adjustment that the scenario's own inflation drives.</p>
      </div>
    </div>

    <p className="tl-caption tl-mt-6">What each strategy does not model is written down in the product rather than left to be discovered.</p>
  </Section>

  <Section tight id="explore">
    <div className="tl-split tl-split--rev">
      <div className="tl-split__copy" data-reveal="">
        <p className="tl-eyebrow">The Explorer</p>
        <h2 className="tl-h2">Ask the inverse question: what is fundable?</h2>
        <p className="tl-body">Every other screen answers "is this goal funded?" The Explorer answers "what is fundable?" as a grid of candidate worlds that streams in as each cell is computed. One cell is one projection and one evaluation through the same evaluator the goal board uses.</p>
        <p className="tl-body">The grid asks <strong>your household's two questions</strong>, not two fixed ones. Still earning: retirement year across the top, income floor down the side. Already retired: spending down the side, longevity across. A grid with fixed axes would ask a 68-year-old widow when she plans to retire.</p>
        <p className="tl-body">Tap a cell for the sandbox behind it. Adopt it and the goal is born carrying the cell it came from, so a goal reached by exploring can always say what question it was the answer to.</p>
      </div>

      <div data-reveal="2">
        <ExplorerGrid />
      </div>
    </div>
  </Section>

  <Section tight id="live">
    <div className="tl-split">
      <div className="tl-split__copy" data-reveal="">
        <p className="tl-eyebrow">Checkpoints and watches</p>
        <h2 className="tl-h2">A plan stops being a decision you made once.</h2>
        <p className="tl-body">Adopting a plan freezes a <strong>baseline</strong>: the resolved plan, the assumptions, the balance sheet, the run's identity, and one line you write about why. It cannot be edited, only superseded, and the chain of superseded baselines is a decision journal nobody had to remember to keep.</p>
        <p className="tl-body">Once a year, quarterly at most, a checkpoint measures the year against it. Nine dimensions, each pre-filled with the planned figure so confirming an on-plan year is one click. Missing numbers never block the verdict. The drift is decomposed into spending, contributions, income, tax and returns, and the pieces sum exactly to the total.</p>
        <p className="tl-body">The verdict is one of three: <strong>on track</strong>, <strong>drifted but the conclusion is unchanged</strong>, or <strong>review warranted</strong>, the last unconstructible without a named reason. A <strong>watch</strong> is a decision left running against the real world. When its condition binds it produces a finding, never an execution.</p>
      </div>

      <div data-reveal="2">
        <DriftFigure />
      </div>
    </div>
  </Section>

  <Section tight id="uncertainty">
    <div className="tl-split tl-split--rev">
      <div className="tl-split__copy" data-reveal="">
        <p className="tl-eyebrow">Uncertainty</p>
        <h2 className="tl-h2">Three modes, with their limits printed rather than implied.</h2>
        <p className="tl-body">Deterministic is the default and what plans are compared in. Historical sequences are built to answer "how would this plan have fared starting in 1966?" and every band keeps the year that produced it. Monte Carlo returns a distribution: a percentile fan with the deterministic run pinned through it, the shortfall's magnitude and timing, and the years of spending covered at the 10th percentile.</p>
        <p className="tl-body">Progress is reported in trials, not percentages. Click a band edge and the trial behind it is redrawn from its seed, because no trial ledger is stored anywhere, and the payload says so.</p>
      </div>

      <div data-reveal="2">
        <FanFigure />
      </div>
    </div>
  </Section>

  <Section tight id="monitoring">
    <div className="tl-grid tl-grid--2">
      <div className="tl-card" data-reveal="">
        <div className="tl-card__glyph">
          <Glyph name="home" />
        </div>

        <h3 className="tl-h4">For the household that never wanted to state a target</h3>
        <p className="tl-body">Home becomes a solvency verdict instead of a board. Does the money hold, in which of your named scenarios, and where does it stop? Sustainability tiles are drawn from the same rules layer, each citing your own numbers.</p>
      </div>

      <div className="tl-card" data-reveal="2">
        <div className="tl-card__glyph">
          <Glyph name="scale" />
        </div>

        <h3 className="tl-h4">For what happens after both deaths</h3>
        <p className="tl-body">Estate routing, an exemption ledger, trusts, and a gift modelled as the two flows it really is, at transfer-date valuation and carryover basis. Every figure these touch is labelled hypothetical with its assumption cited.</p>
      </div>
    </div>
  </Section>

  <Section>
    <CtaBand title="See your own numbers, with their sources." lede="Early access is open to households who want their own model, whether they have an advisor, are shopping for one, or deliberately don't." secondary="Read the principles" secondaryHref="/principles" figure={<LedgerOrnament />} />
  </Section>

  <SiteFooter />
</div>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.