@import "https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,500;9..144,700&family=Manrope:wght@400;500;600;700&display=swap";:root{--bg:#f3efe6;--ink:#1b2a22;--card:#fffdf8;--accent:#2f6b4f;--accent-hover:#24553e;--warn:#c45c26;--line:#e2d6c6;--muted:#8a8175;--ok:#2f6b4f;--error:#b42318;--radius:18px;--shadow:0 10px 28px #1b2a220f;--font-serif:"Fraunces", Georgia, serif;--font-sans:"Manrope", system-ui, sans-serif}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-sans);background:var(--bg);color:var(--ink);min-height:100vh;line-height:1.5}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3,h4{font-family:var(--font-serif);font-weight:700;line-height:1.2}h1{font-size:2rem}h2{font-size:1.5rem}h3{font-size:1.25rem}.top{background:var(--card);border-bottom:1px solid var(--line);z-index:100;justify-content:space-between;align-items:center;padding:16px 24px;display:flex;position:sticky;top:0}.brand{font-family:var(--font-serif);color:var(--ink);font-size:1.5rem;font-weight:700;text-decoration:none}.brand-dot{color:var(--accent)}.nav{align-items:center;gap:16px;display:flex}.btn{background:var(--accent);color:#fffdf8;cursor:pointer;border:none;border-radius:999px;justify-content:center;align-items:center;padding:10px 20px;font-size:.95rem;font-weight:600;transition:background .2s,transform .1s;display:inline-flex}.btn:hover{background:var(--accent-hover);transform:translateY(-1px)}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}.btn.ghost{color:var(--ink);border:1px solid var(--line);background:0 0}.btn.ghost:hover{background:#efe8da}.btn.sm{padding:8px 14px;font-size:.85rem}.hero{grid-template-columns:1.2fr .8fr;align-items:center;gap:48px;max-width:1200px;margin:0 auto;padding:80px 24px;display:grid}.hero h1{margin-bottom:16px;font-size:clamp(2.5rem,5vw,3.5rem)}.hero p{color:var(--muted);max-width:40em;margin-bottom:32px;font-size:1.125rem}.hero-features{grid-template-columns:repeat(2,1fr);gap:16px;margin-bottom:32px;display:grid}.feature{background:var(--card);border-radius:var(--radius);border:1px solid var(--line);align-items:center;gap:12px;padding:12px 16px;display:flex}.feature-icon{font-size:1.5rem}.hero-mark{aspect-ratio:1;width:min(300px,100%);margin:0 auto}.page{max-width:1200px;margin:0 auto;padding:32px 24px 64px}.page-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-bottom:24px;display:flex}.header-actions{flex-wrap:wrap;gap:12px;display:flex}.grid{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:20px;display:grid}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:24px}.card h3{margin-bottom:16px}.mortgage-card{color:inherit;transition:transform .2s,box-shadow .2s;display:block}.mortgage-card:hover{text-decoration:none;transform:translateY(-4px);box-shadow:0 14px 32px #1b2a221a}.mortgage-card-top{justify-content:space-between;align-items:flex-start;margin-bottom:16px;display:flex}.mortgage-card-body{flex-direction:column;gap:8px;display:flex}.next-due{border-top:1px solid var(--line);color:var(--muted);margin-top:16px;padding-top:16px;font-size:.875rem}.next-due.overdue{color:var(--warn);font-weight:600}.next-due.today{color:var(--accent);font-weight:600}.ring{display:block}.ring-text{fill:var(--ink);font-size:1.25rem;font-weight:700;font-family:var(--font-sans)}.progress-wrap{align-items:center;gap:24px;display:flex}.progress-info{flex-direction:column;gap:8px;display:flex}.money{font-variant-numeric:tabular-nums;font-size:1.125rem;font-weight:600}.money.large{font-size:1.75rem}.muted{color:var(--muted);font-size:.875rem}.strike{color:var(--muted);text-decoration:line-through}.ok{color:var(--ok)}.err{color:var(--error);background:#b4231814;border-radius:12px;margin:12px 0;padding:12px}.schedule{flex-direction:column;gap:16px;display:flex}.schedule-summary{flex-wrap:wrap;gap:16px;font-size:.875rem;display:flex}.warn{color:var(--warn)}.ledger-wrap{margin:0 -8px;padding:0 8px;overflow-x:auto}.ledger{border-collapse:collapse;width:100%;min-width:640px;font-size:.875rem}.ledger th{text-align:left;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--line);white-space:nowrap;padding:8px 12px;font-size:.72rem;font-weight:600}.ledger td{border-bottom:1px solid var(--line);vertical-align:middle;white-space:nowrap;font-variant-numeric:tabular-nums;padding:10px 12px}.ledger td.num{color:var(--muted);width:3ch}.ledger td.date{width:8em}.ledger td.status{white-space:nowrap}.ledger-year td{font-family:var(--font-serif);color:var(--ink);background:0 0;border-bottom:none;padding-top:18px;padding-bottom:6px;font-size:1rem;font-weight:700}.ledger-row.paid td{color:var(--muted)}.ledger-row.paid td.strike{text-decoration:line-through}.ledger-row.cancelled td{color:var(--muted)}.ledger-row.cancelled td.strike{text-decoration:line-through}.ledger-row.cancelled td.status{color:var(--warn)}.ledger-early-head td{font-family:var(--font-serif);color:var(--warn);border-bottom:1px dashed var(--line);white-space:normal;background:0 0;padding-top:22px;padding-bottom:8px;font-size:1rem;font-weight:700}.ledger-row.overdue td{color:var(--warn)}.ledger-row.next td{box-shadow:inset 3px 0 0 var(--accent);background:#2f6b4f0f}.payment-log{flex-direction:column;gap:12px;display:flex}.payment-row{background:var(--bg);border-radius:14px;flex-wrap:wrap;align-items:center;gap:12px;padding:12px;display:flex}.payment-kind{border-radius:6px;padding:4px 8px;font-size:.75rem;font-weight:600}.payment-kind.regular{color:var(--accent);background:#2f6b4f1a}.payment-kind.early{color:var(--warn);background:#c45c261f}.payment-goal{color:var(--muted);font-size:.75rem}.form-card{flex-direction:column;gap:16px;display:flex}.form-row{grid-template-columns:1fr 1fr;gap:16px;display:grid}.form-field{flex-direction:column;gap:6px;display:flex}.form-field label{color:var(--muted);font-size:.875rem}input,textarea,select{border:1px solid var(--line);width:100%;color:var(--ink);background:#fff;border-radius:12px;padding:12px;font-family:inherit;font-size:.95rem}input:focus,textarea:focus,select:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 3px #2f6b4f1f}.goal-toggle{gap:8px;display:flex}.goal-toggle button{border:1px solid var(--line);color:var(--ink);cursor:pointer;background:#fff;border-radius:12px;flex:1;padding:10px;transition:background .2s,color .2s}.goal-toggle button.active{background:var(--accent);color:#fffdf8;border-color:var(--accent)}.empty-state{text-align:center;background:var(--card);border-radius:var(--radius);border:1px solid var(--line);padding:48px 24px}.empty-state h2{margin-bottom:8px}.empty-state p{color:var(--muted);margin-bottom:24px}.empty-sm{color:var(--muted);text-align:center;padding:24px}.upcoming-list{flex-direction:column;gap:12px;list-style:none;display:flex}.upcoming-list li{background:var(--bg);border-radius:14px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;padding:12px;display:flex}.upcoming-list li.overdue{border-left:3px solid var(--warn)}.upcoming-title{font-weight:600}.upcoming-date{color:var(--muted);font-size:.875rem}.advice-result{background:var(--bg);border:1px solid var(--line);border-radius:14px;margin-top:24px;padding:16px}.advice-result h3{margin-bottom:12px}.advice-result p{white-space:pre-wrap;line-height:1.6}.what-if-result{background:#2f6b4f0d;border-radius:12px;margin-top:12px;padding:12px;font-size:.9rem}@media (width<=768px){.hero{grid-template-columns:1fr;padding:40px 16px}.hero-mark{display:none}.hero-features,.grid,.form-row{grid-template-columns:1fr}.page{padding:16px}.top{padding:12px 16px}.nav{gap:8px}.ledger{min-width:500px}}
