:root{--bg:#e9e8e3;--surface:#f6f6f2;--surface-2:#e0dfd9;--surface-3:#d3d2cb;--ink:#1d2822;--muted:#56635b;--line:#d8d6ce;--green:#0c6b48;--green-deep:#095538;--green-soft:#dcebe1;--copper:#83501a;--copper-soft:#f1e6d1;--red:#b23a2e;--red-soft:#f7e4e0;--amber:#8a6200;--amber-soft:#f5ebd0;--ledger:#16231c;--ledger-2:#1e2d24;--ledger-3:#2a3b30;--ledger-muted:#9db0a3;--ledger-ink:#e6ece7;--r-card:18px;--r-control:10px;--r-inner:12px;--r-pill:999px;--font-sans:"PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", system-ui, -apple-system, "Segoe UI", sans-serif;--ease-out:cubic-bezier(.22, 1, .36, 1)}*{box-sizing:border-box}[hidden]{display:none!important}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--ink);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;margin:0;font-size:15px;line-height:1.6}.app-header{background:var(--ink);color:var(--surface);position:relative;overflow:hidden}.app-header-inner{z-index:1;max-width:1120px;margin:0 auto;padding:46px 24px 52px;position:relative}.app-header h1{letter-spacing:-.02em;color:var(--surface);animation:rise .4s var(--ease-out) both;margin:0;font-size:clamp(34px,4.4vw,52px);font-weight:800;line-height:1.12}.subtitle{color:#b9c6bd;max-width:44em;animation:rise .4s var(--ease-out) 80ms both;margin:10px 0 0;font-size:15px}.header-curve{opacity:.95;width:52%;height:100%;animation:16s ease-in-out infinite alternate drift;position:absolute;top:0;bottom:0;right:-30px}.header-curve-fill{fill:#2a3931;animation:9s ease-in-out infinite alternate glow}.header-curve-line{fill:none;stroke:#6d8f7c;stroke-width:2px;vector-effect:non-scaling-stroke;animation:7s ease-in-out infinite alternate glow}@keyframes drift{0%{transform:translate(-10px)}to{transform:translate(10px)}}@keyframes glow{0%{opacity:.55}to{opacity:1}}#app{max-width:1120px;margin:0 auto;padding:24px 24px 64px}.card{background:var(--surface);border-radius:var(--r-card);animation:rise .35s var(--ease-out) both;margin-bottom:18px;padding:22px 24px}.card h2{letter-spacing:-.01em;margin:0 0 6px;font-size:20px;font-weight:700}#form-section{border-top:3px solid var(--green)}.muted{color:var(--muted)}.small{font-size:13px}.hidden{display:none!important}.form-row{flex-wrap:wrap;gap:12px;margin-bottom:12px;display:flex}.loan-form label{color:var(--muted);flex-direction:column;gap:5px;font-size:13px;display:flex}.loan-form .grow{flex:240px}input,select,button{font:inherit}input,select{border:1px solid var(--line);border-radius:var(--r-control);color:var(--ink);background:#fff;min-width:120px;padding:10px 12px;transition:border-color .15s ease-out,background-color .15s ease-out}input:focus,select:focus{outline:2px solid var(--green);outline-offset:1px;border-color:var(--green)}input.invalid,select.invalid{border-color:var(--red);outline-color:var(--red);background:#fff7f5}button{border-radius:var(--r-control);background:var(--surface-2);color:var(--ink);cursor:pointer;border:none;padding:9px 16px;font-weight:600;transition:background-color .15s ease-out,color .15s ease-out,transform .1s ease-out}button:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--green);outline-offset:2px}button:hover{background:var(--surface-3)}button:active{transform:translateY(1px)}button.primary{background:var(--green);color:#fff}button.primary:hover{background:var(--green-deep)}button.danger{background:var(--red-soft);color:var(--red)}button.danger:hover{background:var(--red);color:#fff}button.active{background:var(--green-soft);color:var(--green)}.form-actions{gap:10px;display:flex}.form-error{color:var(--red);margin:4px 0 12px;font-size:13px;font-weight:600}.list-header{justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:4px;display:flex}.list-header h2{margin-bottom:6px}.sub-title{align-items:center;gap:8px;margin:20px 0 8px;font-size:15px;font-weight:700;display:flex}.sub-title:before{content:"";background:url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2026%209'%3E%3Cpath%20d%3D'M1%201%20C8%201.5%2013%207%2019%207%20C22%207%2024%205%2025%203.5'%20fill%3D'none'%20stroke%3D'%230c6b48'%20stroke-width%3D'2'%20stroke-linecap%3D'round'%2F%3E%3C%2Fsvg%3E") 50%/contain no-repeat;flex:none;width:26px;height:9px}.loan-card{background:var(--bg);border-left:4px solid var(--green);border-radius:var(--r-inner);transition:background-color .18s ease-out, transform .18s var(--ease-out);margin-bottom:12px;padding:16px 18px}.loan-card[data-method=linear]{border-left-color:var(--copper)}.loan-card.open{background:#e6efe7}.loan-card[data-method=linear].open{background:#efe6d6}@media (hover:hover){.loan-card:hover{background:var(--surface-2);transform:translateY(-2px)}.loan-card.open:hover{background:#e0ebe2}.loan-card[data-method=linear].open:hover{background:#ebe0cf}}#loan-list.anim-in .loan-card{animation:rise .32s var(--ease-out) backwards;animation-delay:calc(var(--i,0) * 50ms)}.card-head{justify-content:space-between;align-items:flex-start;gap:10px;display:flex}.card-title{margin:0;font-size:17px;font-weight:700}.card-badges{flex-wrap:wrap;justify-content:flex-end;gap:6px;display:inline-flex}.badge{border-radius:var(--r-pill);white-space:nowrap;padding:3px 10px;font-size:13px;font-weight:600}.badge.annuity{background:var(--green-soft);color:var(--green)}.badge.linear{background:var(--copper-soft);color:var(--copper)}.badge.good{background:var(--green-soft);color:var(--green)}.badge.warn{background:var(--amber-soft);color:var(--amber)}.card-sub{color:var(--muted);margin:2px 0 10px;font-size:13px}.card-figures{color:var(--muted);flex-wrap:wrap;gap:6px 18px;margin-bottom:12px;font-size:13px;display:flex}.card-figures strong{color:var(--ink);font-variant-numeric:tabular-nums}.figure-main{background:var(--green-soft);border-radius:8px;align-items:baseline;gap:6px;padding:3px 10px;display:inline-flex}.loan-card[data-method=linear] .figure-main{background:var(--copper-soft)}.figure-main .figure-label{color:var(--green);font-size:13px}.loan-card[data-method=linear] .figure-main .figure-label{color:var(--copper)}.figure-main strong{color:var(--green);font-size:18px}.loan-card[data-method=linear] .figure-main strong{color:var(--copper)}.card-actions{flex-wrap:wrap;gap:8px;display:flex}.card-progress{margin-bottom:10px}.progress-head{color:var(--muted);justify-content:space-between;align-items:baseline;gap:10px;margin-bottom:4px;font-size:13px;display:flex}.progress-head strong{color:var(--ink);font-variant-numeric:tabular-nums}.progress-track{border-radius:var(--r-pill);background:var(--surface-3);height:8px;margin-bottom:6px;overflow:hidden}.progress-fill,.bar-fill{height:100%;width:var(--w,0%);border-radius:var(--r-pill);background:var(--green);animation:grow .7s var(--ease-out) backwards;transition:width .3s var(--ease-out)}.progress-fill.linear{background:var(--copper)}.progress-meta{color:var(--muted);flex-wrap:wrap;gap:4px 16px;font-size:13px;display:flex}.amort-svg{width:100%;height:30px;margin:8px 0 2px;display:block}.amort-svg.large{height:56px;margin:8px 0 4px}.amort-svg.annuity{color:var(--green)}.amort-svg.linear{color:var(--copper)}.detail-progress .progress-track{height:12px;margin:4px 0 10px}.stat-figures{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin:14px 0 18px;display:grid}.stat-item{background:var(--bg);border-radius:var(--r-inner);flex-direction:column;gap:2px;padding:14px 16px;display:flex}.stat-num{font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:20px;font-weight:700}.stat-label{color:var(--muted);font-size:13px}.stats-hero{background:var(--green-deep);color:var(--surface);border-radius:var(--r-inner);flex-wrap:wrap;align-items:baseline;gap:6px 16px;margin:14px 0 12px;padding:18px 20px;display:flex}.stats-hero-label{color:#bfe0ce;font-size:13px}.stats-hero-num{font-variant-numeric:tabular-nums;letter-spacing:-.01em;color:#fff;font-size:30px;font-weight:800}.stats-hero-sub{color:#bfe0ce;margin-left:auto;font-size:13px}.detail-meta{margin:0;font-size:13px}#stats-section{background:var(--ledger);color:var(--ledger-ink)}#stats-section .list-header h2{color:var(--ledger-ink)}#stats-section .list-header .muted,#stats-section .muted{color:var(--ledger-muted)}#stats-section .sub-title{color:var(--ledger-ink)}#stats-section .sub-title:before{background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2026%209'%3E%3Cpath%20d%3D'M1%201%20C8%201.5%2013%207%2019%207%20C22%207%2024%205%2025%203.5'%20fill%3D'none'%20stroke%3D'%238fd4ae'%20stroke-width%3D'2'%20stroke-linecap%3D'round'%2F%3E%3C%2Fsvg%3E")}#stats-section .stat-item{background:var(--ledger-2)}#stats-section .stat-num{color:var(--ledger-ink)}#stats-section .stat-label{color:var(--ledger-muted)}#stats-section .stats-hero{background:var(--green)}#stats-section .stats-hero-label,#stats-section .stats-hero-sub{color:#d7ecdf}#stats-section .progress-track{background:var(--ledger-3)}#stats-section .progress-head{color:var(--ledger-muted)}#stats-section .progress-head strong{color:var(--ledger-ink)}#stats-section .progress-meta{color:var(--ledger-muted)}#stats-section .bar-label{color:var(--ledger-ink)}#stats-section .bar-value{color:var(--ledger-muted)}#stats-section .bar-track{background:var(--ledger-3)}#stats-section .method-compare{background:var(--ledger-2)}#stats-section .conclusion{color:var(--ledger-ink);background:#103324}.table-wrap{border-radius:var(--r-inner);background:var(--surface-2);max-height:420px;overflow:auto}.schedule-table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:13px}.schedule-table th,.schedule-table td{text-align:right;border-bottom:1px solid var(--line);white-space:nowrap;padding:8px 12px}.schedule-table thead th{background:var(--surface-3);color:var(--ink);z-index:1;font-weight:600;position:sticky;top:0}.schedule-table tbody tr:nth-child(2n){background:#ffffff73}.schedule-table tbody tr:hover{background:#ffffffb3}.schedule-table tbody tr:last-child td{color:var(--green);font-weight:600}.schedule-table tfoot th,.schedule-table tfoot td{background:var(--surface-3);border-top:1px solid var(--line);font-weight:600;position:sticky;bottom:0}.schedule-table tbody tr.row-paid td{color:var(--muted)}.schedule-table tbody tr.row-next td{background:var(--green-soft);font-weight:600}.schedule-table tbody tr.row-next td:first-child{border-left:3px solid var(--green)}.mini-table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:13px}.mini-table th,.mini-table td{text-align:right;border-bottom:1px solid var(--line);white-space:nowrap;padding:8px 12px}.mini-table th:first-child,.mini-table td:first-child{text-align:left}.mini-table thead th{background:var(--surface-3);color:var(--ink);font-weight:600}.mini-table tfoot th{background:var(--surface-3);border-top:1px solid var(--line);font-weight:600}.detail-years .table-wrap{max-height:none}.controls{background:var(--bg);border-radius:var(--r-inner);flex-wrap:wrap;align-items:flex-end;gap:10px 14px;margin:4px 0 16px;padding:14px 16px;display:flex}.controls label,.prepay-fields label{color:var(--muted);flex-direction:column;gap:4px;font-size:13px;display:flex}.controls input,.controls select{min-width:120px}.bar-row{grid-template-columns:minmax(90px,150px) 1fr minmax(120px,auto);align-items:center;gap:10px;margin-bottom:6px;font-size:13px;display:grid}.bar-label{color:var(--ink);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.bar-track{border-radius:var(--r-pill);background:var(--surface-3);height:10px;overflow:hidden}.bar-fill.annuity{background:var(--green)}.bar-fill.linear{background:var(--copper)}.bar-fill.good{background:var(--green)}.bar-value{color:var(--muted);text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}.method-compare{background:var(--bg);border-radius:var(--r-inner);margin-top:4px;padding:16px 18px}.method-compare .stat-figures{margin-bottom:8px}.conclusion{background:var(--green-soft);color:var(--ink);border-radius:10px;margin:10px 0 0;padding:10px 14px;font-size:13px}.prepay{background:var(--bg);border-radius:var(--r-inner);margin-top:24px;padding:18px 20px}.prepay .sub-title{margin-top:0}.prepay-fields{align-items:flex-end}.prepay-cards{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px;margin-top:10px;display:grid}.prepay-card{background:var(--surface);border-radius:var(--r-inner);padding:14px 16px}.prepay-card.better{background:var(--green-soft)}.prepay-card-head{justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;font-size:14px;display:flex}.prepay-figures{grid-template-columns:auto 1fr;gap:2px 10px;margin:0 0 10px;font-size:13px;display:grid}.prepay-figures dt{color:var(--muted)}.prepay-figures dd{text-align:right;font-variant-numeric:tabular-nums;margin:0}.notice{border-left:4px solid var(--green);background:var(--green-soft);animation:rise .35s var(--ease-out) both;border-radius:10px;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:16px;padding:12px 16px;font-size:13px;display:flex}.notice-warn{border-left-color:var(--amber);background:var(--amber-soft)}.notice-error{border-left-color:var(--red);background:var(--red-soft)}.notice-text{flex:auto;min-width:0}.notice-actions{flex:none;align-items:center;gap:8px;display:flex}.notice-close{border-radius:8px;padding:2px 9px;font-size:16px;line-height:1.2}.empty{text-align:center;background:var(--bg);border-radius:var(--r-inner);animation:rise .35s var(--ease-out) both;padding:40px 24px}.empty-motif{width:180px;height:44px;color:var(--muted);opacity:.55;margin:0 auto 12px}.empty-title{margin:0 0 6px;font-size:17px;font-weight:700}.empty .muted{margin:0}.empty-actions{flex-wrap:wrap;justify-content:center;gap:10px;margin-top:16px;display:flex}.detail-actions{flex-wrap:wrap;gap:10px;margin:12px 0 4px;display:flex}.data-actions{flex-wrap:wrap;gap:10px;margin:12px 0 10px;display:flex}#data-section code{background:var(--surface-2);color:var(--ink);border-radius:6px;padding:1px 6px;font-size:13px}#data-msg.danger{color:var(--red)}.app-footer{text-align:center;color:var(--muted);margin-top:8px;padding:18px 0 0;font-size:13px}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes grow{0%{width:0}}@media (prefers-reduced-motion:reduce){.card,.notice,.empty,.header-curve,.header-curve-line,.header-curve-fill,.app-header h1,.subtitle,#loan-list.anim-in .loan-card,.progress-fill,.bar-fill{animation:none}}@media (width<=640px){#app{padding:14px 12px 48px}.app-header-inner{padding:26px 18px 30px}.app-header h1{font-size:26px}.subtitle{margin-top:8px;font-size:13px}.header-curve{opacity:.5;width:78%;right:-25%}.card{border-radius:14px;padding:16px}.loan-form .form-row{grid-template-columns:repeat(2,minmax(0,1fr));align-items:end;gap:10px;display:grid}.loan-form .grow{grid-column:1/-1}.loan-form label{width:100%}.loan-form input,.loan-form select{width:100%;min-width:0}.form-actions button{flex:auto}.card-figures{gap:6px 14px}.stat-figures{grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px}.stats-hero{padding:14px 16px}.stats-hero-num{font-size:24px}.stats-hero-sub{margin-left:0}.bar-row{grid-template-columns:minmax(70px,110px) 1fr}.bar-value{text-align:left;grid-column:2}.controls,.prepay-fields{flex-direction:column;align-items:stretch}.controls label,.prepay-fields label{width:100%}.controls input,.controls select,.prepay-fields input{width:100%;min-width:0}.card-actions button,.empty-actions button,.data-actions button,.notice-actions button{flex:auto}.notice{flex-direction:column}.schedule-table,.mini-table{min-width:520px}}
