:root{
  --bg:#f2f5f9;
  --card:#ffffff;
  --border:#e3e8ef;
  --text:#1a2233;
  --muted:#6b7a90;
  --primary:#2563eb;
  --primary-dark:#1d4ed8;
  --green:#059669;
  --red:#dc2626;
  --amber:#f59e0b;
}
*{box-sizing:border-box;}
body{
  margin:0;
  padding:24px 16px 60px;
  background:var(--bg);
  color:var(--text);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  font-size:14px;
  line-height:1.5;
}
.page{max-width:1080px;margin:0 auto;}
h1{font-size:22px;margin:0 0 18px;letter-spacing:.5px;}
.card{
  background:var(--card);
  border:1px solid var(--border);
  border-radius:12px;
  padding:18px;
  margin-bottom:16px;
  box-shadow:0 1px 2px rgba(16,24,40,.04);
}
/* ---------- 输入区 ---------- */
.field-grid{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(190px,1fr));
  gap:14px;
}
.field{display:flex;flex-direction:column;gap:6px;}
.field span{font-size:13px;color:var(--muted);}
.field input{
  height:38px;
  padding:0 10px;
  border:1px solid var(--border);
  border-radius:8px;
  font-size:14px;
  color:var(--text);
  background:#fbfcfe;
  outline:none;
  transition:.15s;
  width:100%;
}
.field input:focus{border-color:var(--primary);background:#fff;box-shadow:0 0 0 3px rgba(37,99,235,.12);}
.actions{display:flex;gap:10px;margin-top:16px;flex-wrap:wrap;}
.btn{
  height:38px;
  padding:0 18px;
  border-radius:8px;
  border:1px solid var(--border);
  background:#fff;
  color:var(--text);
  font-size:14px;
  cursor:pointer;
  transition:.15s;
  font-family:inherit;
}
.btn:hover{background:#f7f9fc;}
.btn.primary{background:var(--primary);border-color:var(--primary);color:#fff;font-weight:500;}
.btn.primary:hover{background:var(--primary-dark);}
.btn.primary:disabled{opacity:.45;cursor:not-allowed;}
.btn.ghost{background:transparent;}
.btn.danger{color:var(--red);border-color:#fbd5d5;}
.btn.danger:hover{background:#fef2f2;}
.btn.sm{height:30px;padding:0 12px;font-size:13px;border-radius:6px;}

/* ---------- 概览 ---------- */
.summary{display:none;}
.summary.show{display:block;}
.stat-grid{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  gap:14px;
}
.stat{background:#f8fafc;border-radius:10px;padding:12px 14px;}
.stat .label{display:block;font-size:12px;color:var(--muted);margin-bottom:4px;}
.stat .value{display:block;font-size:17px;font-weight:600;letter-spacing:.3px;}
.stat .value small{font-size:12px;font-weight:400;color:var(--muted);margin-left:2px;}

/* ---------- 表格 ---------- */
.table-card{padding:0;overflow:hidden;}
.table-wrap{max-height:68vh;overflow:auto;-webkit-overflow-scrolling:touch;}
table{width:100%;border-collapse:separate;border-spacing:0;font-size:13px;min-width:760px;}
thead th{
  position:sticky;top:0;z-index:3;
  background:#f8fafc;
  color:var(--muted);
  font-weight:600;
  font-size:12.5px;
  text-align:left;
  padding:11px 14px;
  border-bottom:1px solid var(--border);
  white-space:nowrap;
}
th.num,td.num{text-align:right;font-variant-numeric:tabular-nums;}
tbody td{padding:9px 14px;border-bottom:1px solid #f1f4f9;white-space:nowrap;}
.data-row:hover{background:#f8fbff;}
.data-row.has-prepay{background:#fffdf5;}
.data-row.has-prepay:hover{background:#fffae8;}
td.strong{font-weight:600;}
td.muted{color:var(--muted);}
.year-row td{
  background:#eef2f8;
  font-weight:700;
  font-size:13px;
  color:#33415c;
  padding:8px 14px;
  letter-spacing:.5px;
  position:sticky;
  top:38px;
  z-index:2;
}
.prepay-row td{padding:0;border-bottom:1px solid #f1f4f9;background:#fffdf5;}

/* ---------- 提前还款 ---------- */
.prepay-trigger{
  display:inline-flex;align-items:center;gap:5px;
  height:28px;padding:0 12px;
  margin:6px 0 6px 14px;
  border-radius:999px;
  border:1px dashed #d9c98a;
  background:#fffdf5;
  color:#92700e;
  font-size:12.5px;
  cursor:pointer;
  font-family:inherit;
  transition:.15s;
}
.prepay-trigger:hover{background:#fff7dc;border-color:#c9b060;}
.prepay-done{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  padding:8px 14px;font-size:12.5px;color:#92700e;
}
.prepay-done .ok{color:var(--green);font-weight:600;}
.prepay-done b{color:#7a5c08;}
.prepay-form{
  margin:8px 14px 12px;
  padding:14px;
  border:1px solid #ecdfb0;
  border-radius:10px;
  background:#fffef9;
  max-width:640px;
}
.prepay-title{font-size:13px;font-weight:600;color:#7a5c08;margin-bottom:10px;}
.prepay-tabs{display:flex;gap:6px;margin-bottom:12px;flex-wrap:wrap;}
.tab{
  height:30px;padding:0 14px;border-radius:999px;
  border:1px solid var(--border);background:#fff;color:var(--muted);
  font-size:12.5px;cursor:pointer;font-family:inherit;transition:.15s;
}
.tab:hover{border-color:#c9d4e5;}
.tab.active{background:var(--primary);border-color:var(--primary);color:#fff;font-weight:500;}
.prepay-field{display:flex;align-items:center;gap:8px;margin-bottom:10px;}
.prepay-field label{font-size:13px;color:var(--muted);min-width:88px;}
.prepay-field input{
  width:150px;height:34px;padding:0 10px;
  border:1px solid var(--border);border-radius:8px;
  font-size:14px;font-family:inherit;outline:none;background:#fff;
  font-variant-numeric:tabular-nums;
}
.prepay-field input:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.12);}
.prepay-field .unit{font-size:13px;color:var(--muted);}
.prepay-preview{
  font-size:13px;color:#7a5c08;background:#fff8e1;
  border-radius:8px;padding:9px 12px;margin-bottom:12px;
  min-height:37px;display:flex;align-items:center;
}
.prepay-preview strong{font-size:15px;color:#b45309;font-variant-numeric:tabular-nums;margin:0 2px;}
.prepay-preview .err{color:var(--red);}
.prepay-actions{display:flex;gap:8px;}

.empty{text-align:center;color:var(--muted);padding:40px 0;font-size:14px;}
@media (max-width:600px){
  body{padding:16px 10px 40px;}
  .card{padding:14px;}
  .prepay-form{margin:8px 8px 12px;padding:12px;}
  .prepay-field label{min-width:74px;}
  .prepay-field input{width:110px;}
}

/* ---------- 生成 PDF（打印） ---------- */
.print-only{display:none;}

@media print{
  @page{size:A4;margin:12mm;}
  body{
    background:#fff;
    padding:0;
    font-size:11px;
    -webkit-print-color-adjust:exact;
    print-color-adjust:exact;
  }
  .page{max-width:none;margin:0;}
  /* 屏幕上的一切都隐藏，只打印 #printArea */
  .page > *:not(#printArea){display:none !important;}
  .print-only{display:block !important;}

  .rpt-head{border-bottom:2px solid var(--text);padding-bottom:8px;margin-bottom:14px;}
  .rpt-head h1{font-size:18px;margin:0 0 3px;}
  .rpt-head .meta{font-size:10px;color:var(--muted);}

  .rpt-sec{margin-bottom:14px;}
  .rpt-sec h2{
    font-size:12px;margin:0 0 7px;padding-left:8px;
    border-left:3px solid var(--primary);color:var(--text);
  }
  .rpt-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:7px;}
  .rpt-grid.g3{grid-template-columns:repeat(3,1fr);}
  .rpt-cell{border:1px solid var(--border);border-radius:6px;padding:6px 8px;background:#f8fafc;}
  .rpt-cell .k{display:block;font-size:9px;color:var(--muted);margin-bottom:2px;}
  .rpt-cell .v{display:block;font-size:12px;font-weight:600;}

  table.rpt-table{width:100%;min-width:0;font-size:9.5px;border-collapse:collapse;}
  table.rpt-table th{
    position:static;background:#eef2f8;color:#33415c;
    padding:5px 6px;border:1px solid #dbe2ec;font-size:9.5px;white-space:nowrap;
  }
  table.rpt-table td{padding:4px 6px;border:1px solid var(--border);white-space:nowrap;}
  table.rpt-table thead{display:table-header-group;}
  table.rpt-table tr{page-break-inside:avoid;}
  table.rpt-table tr.rpt-prepay td{background:#fffdf5;}
  table.rpt-table tr.rpt-year-row td{background:#eef2f8;font-weight:700;color:#33415c;}
  table.rpt-table tr.total-row td{background:#f1f5f9;font-weight:700;}

  .rpt-empty{font-size:11px;color:var(--muted);padding:6px 0;}
  .page-break{page-break-before:always;}
}
