:root{--font-display: "Fraunces", Georgia, "Times New Roman", serif;--font-body: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;--fs-xs: .8125rem;--fs-sm: .875rem;--fs-base: 1rem;--fs-lg: 1.25rem;--fs-xl: 1.75rem;--fs-title: clamp(2rem, 5vw, 3rem);--fs-hero: clamp(2.75rem, 9vw, 4.5rem);--bg: #f7f7f4;--surface: #ffffff;--surface-tint: #e7f1ec;--text: #1a1d1f;--muted: #5c6166;--line: #e3e3dd;--line-input: #8a8f94;--primary: #135e4b;--accent: #c9a227;--success: #1e7f4f;--warning-ink: #8a6100;--warning-bg: #fff8e6;--error: #b42318;--focus: 0 0 0 3px var(--surface), 0 0 0 5px var(--primary);--s-1: 4px;--s-2: 8px;--s-3: 12px;--s-4: 16px;--s-5: 20px;--s-6: 24px;--s-7: 32px;--s-8: 48px;--s-9: 64px;--r-sm: 8px;--r-md: 14px;--r-pill: 999px;--shadow-card: 0 1px 2px rgb(26 29 31 / .04), 0 4px 16px rgb(26 29 31 / .06);--dur-fast: .12s;--dur-base: .2s;--dur-count: .4s;--ease-out: cubic-bezier(.2, .8, .2, 1);--ease-standard: cubic-bezier(.4, 0, .2, 1);--maxw: 960px;color-scheme:light;font-family:var(--font-body);font-size:var(--fs-base);line-height:1.5;background:var(--bg);color:var(--text)}*{box-sizing:border-box}body{margin:0;min-height:100vh;font-feature-settings:"tnum" 1}button,input,select{font:inherit;color:inherit}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip{position:absolute;left:var(--s-4);top:-48px;z-index:40;background:var(--surface);color:var(--text);padding:var(--s-2) var(--s-3)}.skip:focus{top:var(--s-3)}.toast{position:sticky;top:0;z-index:30;display:flex;justify-content:space-between;gap:var(--s-4);align-items:center;background:var(--primary);color:#fff;padding:var(--s-3) var(--s-5)}.toast p{margin:0}.toast button{background:transparent;color:#fff;border:1px solid #fff;min-height:44px;padding:6px 12px;border-radius:var(--r-sm);cursor:pointer}.page{width:min(var(--maxw),100%);margin:0 auto;padding:var(--s-5) var(--s-5) var(--s-8)}h1{margin:0 0 var(--s-6);font-family:var(--font-display);font-weight:500;font-size:var(--fs-title);letter-spacing:-.03em;line-height:1.05}.layout{display:grid;gap:var(--s-6);align-items:start}.pay-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:0 var(--s-3);margin:0}.pay-figure{font-family:var(--font-display);font-weight:500;font-size:var(--fs-hero);line-height:1;letter-spacing:-.03em;font-variant-numeric:tabular-nums lining-nums}.pay-suffix{color:var(--muted);font-size:var(--fs-lg);font-weight:500}.breakdown{margin:var(--s-2) 0 var(--s-4);color:var(--muted);font-size:var(--fs-sm);line-height:1.4}.segment{display:flex;gap:2px;padding:4px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);overflow-x:auto;scrollbar-width:none}.segment::-webkit-scrollbar{display:none}.segment label{position:relative;flex:1 1 0;min-width:4.5rem;display:flex;align-items:center;justify-content:center;min-height:44px;padding:8px;cursor:pointer;text-align:center}.segment input{position:absolute;opacity:0;width:1px;height:1px}.segment input:focus-visible{box-shadow:none}.segment-mark{position:absolute;inset:0;z-index:0;background:var(--surface-tint);border-radius:6px}.segment-text{position:relative;z-index:1;font-size:var(--fs-sm);font-weight:500;line-height:1.2;color:var(--muted);white-space:nowrap}.segment-text.wrap{white-space:normal}.segment input:checked~.segment-text{color:var(--primary);font-weight:600}.segment label:has(input:focus-visible){border-radius:6px;box-shadow:var(--focus)}.inputs{min-width:0}.slider-field+.slider-field{margin-top:var(--s-5)}.field-head{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:var(--s-2) var(--s-3)}.field-head>label,.detail-field>label,.choices legend{font-size:var(--fs-sm);font-weight:500;color:var(--muted);padding-top:14px}.num-row{display:flex;flex-wrap:wrap;gap:var(--s-2);margin-left:auto;justify-content:flex-end}.num-wrap{max-width:100%}.num{display:flex;align-items:center;gap:4px;height:48px;padding:0 12px;border:1px solid var(--line-input);border-radius:var(--r-sm);background:var(--surface)}.num.money{width:8.75rem}.num.pct{width:5.5rem}.num.years{width:7.25rem}.num input{width:100%;min-width:0;height:100%;border:0;padding:0;background:transparent;font-size:var(--fs-base);font-weight:600;text-align:right;font-variant-numeric:tabular-nums}.num input:focus,.num input:focus-visible{outline:none;box-shadow:none}.num:focus-within{border-color:var(--primary);box-shadow:var(--focus)}.num-affix{color:var(--muted);flex:none;font-weight:500}.clamp-note{margin:6px 0 0;color:var(--error);font-size:var(--fs-xs);text-align:right}.range{display:block;width:100%;margin:6px 0 0;accent-color:var(--primary);height:28px;cursor:pointer}.warning{display:flex;align-items:flex-start;gap:var(--s-2);margin:var(--s-2) 0 0;padding:var(--s-2) var(--s-3);background:var(--warning-bg);color:var(--warning-ink);border-radius:var(--r-sm);font-size:var(--fs-sm);line-height:1.4;animation:warn-in var(--dur-base) var(--ease-out)}.warn-icon{width:18px;height:18px;flex:none;margin-top:1px}@keyframes warn-in{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}.text-link{margin-top:var(--s-5);padding:var(--s-2) 0;min-height:44px;border:0;background:none;color:var(--primary);font-weight:600;font-size:var(--fs-base);cursor:pointer}.details{margin-top:var(--s-2)}.accordion{border-top:1px solid var(--line)}.accordion summary{display:flex;align-items:center;gap:var(--s-3);min-height:48px;padding:var(--s-3) 0;cursor:pointer;font-weight:600;list-style:none}.accordion summary::-webkit-details-marker{display:none}.accordion summary:after{content:"";margin-left:auto;width:8px;height:8px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(45deg);transition:transform var(--dur-base) var(--ease-standard)}.accordion[open] summary:after{transform:rotate(225deg)}.accordion summary:focus-visible{outline:none;box-shadow:var(--focus);border-radius:var(--r-sm)}.accordion-body{padding:0 0 var(--s-5)}.accordion-body p{margin:var(--s-3) 0 0;max-width:68ch}.detail-field{margin-top:var(--s-4)}.detail-field>label{display:block;padding-top:0;margin-bottom:6px}.detail-field .num{width:100%;max-width:16rem}.select{height:48px;min-width:8rem;border:1px solid var(--line-input);border-radius:var(--r-sm);background:var(--surface);padding:0 12px;font-size:var(--fs-base)}.select:focus-visible{outline:none;box-shadow:var(--focus);border-color:var(--primary)}.choices{border:0;margin:var(--s-4) 0 0;padding:0}.choices legend{padding-top:0;margin-bottom:6px}.choices label,.check{display:flex;align-items:flex-start;gap:10px;min-height:44px;padding:8px 0;cursor:pointer}.choices input,.check input{width:1.15rem;height:1.15rem;margin-top:.15rem;accent-color:var(--primary)}.stats{list-style:none;margin:var(--s-3) 0 0;padding:0}.stats li,.cents-line,.cash-total{display:flex;justify-content:space-between;align-items:baseline;gap:var(--s-3);padding:8px 0;border-bottom:1px solid var(--line)}.cents-line,.cash-total{margin:var(--s-3) 0 0}.stats strong,.cents-line strong,.cash-total strong{font-weight:600;font-variant-numeric:tabular-nums;text-align:right}.cash-total{font-family:var(--font-display);font-size:var(--fs-lg);border-bottom:0}.split{display:flex;height:12px;margin:var(--s-4) 0 var(--s-2);border-radius:var(--r-pill);overflow:hidden;background:var(--line)}.split-principal{background:var(--primary);height:100%}.split-interest{background:var(--accent);height:100%}.swatch{display:inline-block;width:10px;height:10px;margin-right:8px;border-radius:2px;vertical-align:baseline}.swatch-principal{background:var(--primary)}.swatch-interest{background:var(--accent)}.pass{color:var(--success);font-weight:600}.fail{color:var(--error);font-weight:600}.meter{position:relative;height:8px;max-width:520px;margin:6px 0 var(--s-4);background:var(--line);border-radius:var(--r-pill);overflow:hidden}.meter span{display:block;height:100%;background:var(--success);transform-origin:left center}.meter.over span{background:var(--error)}.meter i{position:absolute;top:-3px;width:2px;height:14px;background:var(--text)}.table-wrap{margin-top:var(--s-3);overflow:visible}table{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}caption{caption-side:top;text-align:left;padding:0 0 10px;color:var(--muted);font-size:var(--fs-sm)}th,td{text-align:left;padding:8px 12px 8px 0;border-bottom:1px solid var(--line);font-weight:500;vertical-align:top}td{font-weight:400}.figure{text-align:right}.chart{height:240px;margin-top:var(--s-4)}.sources{list-style:none;margin:var(--s-4) 0;padding:0}.sources li{padding:10px 0;border-top:1px solid var(--line)}.sources a{color:var(--primary)}.sources span{display:block;color:var(--muted);font-size:var(--fs-sm)}.share{margin-top:var(--s-3);min-height:48px;padding:0 16px;border:0;border-radius:var(--r-sm);background:var(--primary);color:#fff;font-weight:600;cursor:pointer}.share:focus-visible{outline:none;box-shadow:var(--focus)}.dock{display:none}:focus-visible{outline:none;box-shadow:var(--focus)}@media(min-width:960px){.page{padding:var(--s-8) var(--s-6) var(--s-9)}.layout{grid-template-columns:minmax(0,7fr) minmax(0,5fr);column-gap:var(--s-7)}.result{grid-column:2;grid-row:1;position:sticky;top:24px;padding:var(--s-6);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-card)}.inputs{grid-column:1;grid-row:1}.pay-figure{font-size:clamp(2.4rem,4vw,3.4rem)}}@media(max-width:959px){.page{padding-bottom:calc(var(--s-6) + 56px + env(safe-area-inset-bottom,0px))}.dock.on{display:flex;align-items:center;position:fixed;left:0;right:0;bottom:0;z-index:20;box-sizing:border-box;min-height:calc(56px + env(safe-area-inset-bottom,0px));padding:0 20px env(safe-area-inset-bottom,0px);background:var(--surface);border-top:1px solid var(--line);box-shadow:var(--shadow-card)}.dock-pay{margin:0;font-family:var(--font-display);font-size:1.35rem;line-height:1;letter-spacing:-.03em;font-variant-numeric:tabular-nums lining-nums}.dock-note{margin:0;color:var(--warning-ink);font-size:var(--fs-sm);line-height:1.3}}@media(prefers-reduced-motion:reduce){:root{--dur-fast: 0ms;--dur-base: .12s;--dur-count: 0ms}.warning{animation:warn-fade var(--dur-base) linear}.accordion summary:after{transition:none}@keyframes warn-fade{0%{opacity:0}to{opacity:1}}}
