:root{
  --bg:#f4f6fb; --panel:#ffffff; --ink:#1f2a37; --muted:#667085; --line:#e5e9f2;
  --brand:#1d4ed8; --brand2:#0e7490; --brandsoft:#eef3ff; --soft:#f7f9fc;
  --ok:#15803d; --okbg:#e8f7ee; --warn:#b45309; --warnbg:#fdf3e3; --danger:#b91c1c; --dangerbg:#fdecec;
  --red:#d92d20; --yellow:#d97706; --green:#12b76a;
  --radius:14px; --shadow:0 1px 2px rgba(16,24,40,.04),0 8px 24px rgba(16,24,40,.06);
}
*{box-sizing:border-box}
html,body{margin:0;padding:0;height:100%}
body{font-family:"Microsoft YaHei","PingFang SC","Helvetica Neue",Arial,sans-serif;background:var(--bg);color:var(--ink);font-size:14px;line-height:1.65;-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
button{font-family:inherit}
.app{display:flex;min-height:100vh}

/* sidebar */
.sidebar{width:240px;flex:0 0 240px;background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column;position:sticky;top:0;height:100vh}
.brand{padding:18px 16px 14px;border-bottom:1px solid var(--line)}
.brand .logo{display:flex;align-items:center;gap:10px}
.brand .mark{width:34px;height:34px;border-radius:9px;flex:0 0 34px;background:linear-gradient(135deg,var(--brand),var(--brand2));display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:15px}
.brand h1{font-size:14.5px;margin:0;font-weight:700}
.brand p{margin:2px 0 0;font-size:11px;color:var(--muted)}
.nav{padding:10px 8px;overflow:auto;flex:1}
.nav .group{font-size:11px;color:#98a2b3;padding:10px 10px 6px;letter-spacing:1px}
.nav a{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:10px;color:#344054;font-size:13.5px;margin-bottom:2px;cursor:pointer;transition:.15s}
.nav a svg{width:17px;height:17px;flex:0 0 17px;stroke:#667085;stroke-width:1.7;fill:none;stroke-linecap:round;stroke-linejoin:round}
.nav a:hover{background:var(--soft)}
.nav a.on{background:var(--brandsoft);color:var(--brand);font-weight:700}
.nav a.on svg{stroke:var(--brand)}
.nav a .cnt{margin-left:auto;background:#f1f3f8;color:#475467;border-radius:999px;padding:1px 8px;font-size:11px;font-weight:700}
.nav a.on .cnt{background:#fff;color:var(--brand)}
.sidefoot{padding:12px 14px;border-top:1px solid var(--line);font-size:11.5px;color:var(--muted)}

/* main */
.main{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{height:58px;background:rgba(255,255,255,.9);backdrop-filter:blur(6px);border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 22px;gap:14px;position:sticky;top:0;z-index:20}
.crumb{font-size:13px;color:var(--muted)}
.crumb b{color:var(--ink)}
.topbar .sp{flex:1}
.chip{background:var(--brandsoft);color:var(--brand);border-radius:999px;padding:5px 12px;font-size:12px;font-weight:700}
.chip.gray{background:#f1f3f8;color:#475467}
.view{padding:22px;max-width:1280px;width:100%;margin:0 auto}

h2.page{font-size:20px;margin:0 0 4px}
.sub{color:var(--muted);font-size:13px;margin:0 0 18px}
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}
.pad{padding:18px}
.grid{display:grid;gap:14px}
.g4{grid-template-columns:repeat(4,1fr)}
.g3{grid-template-columns:repeat(3,1fr)}
.g2{grid-template-columns:repeat(2,1fr)}
@media(max-width:1100px){.g4{grid-template-columns:repeat(2,1fr)}.g3{grid-template-columns:repeat(2,1fr)}}
@media(max-width:860px){.g4,.g3,.g2{grid-template-columns:1fr}.sidebar{display:none}}

.stat{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px;box-shadow:var(--shadow)}
.stat .k{font-size:12px;color:var(--muted)}
.stat .v{font-size:26px;font-weight:800;letter-spacing:.5px;margin-top:4px}
.stat .d{font-size:12px;color:var(--muted);margin-top:2px}
.stat.b1 .v{color:var(--brand)} .stat.b2 .v{color:var(--brand2)}
.stat.b3 .v{color:var(--warn)} .stat.b4 .v{color:var(--ok)}

.btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);background:#fff;color:#344054;padding:8px 14px;border-radius:10px;font-size:13px;cursor:pointer;transition:.15s;font-weight:600}
.btn:hover{border-color:#c9d2e3;background:var(--soft)}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}
.btn.primary:hover{background:#1a43bb}
.btn.sm{padding:5px 10px;font-size:12px;border-radius:8px}
.btn.ok{background:var(--ok);border-color:var(--ok);color:#fff}
.btn.warn{background:var(--warn);border-color:var(--warn);color:#fff}
.btn.danger{background:var(--danger);border-color:var(--danger);color:#fff}
.btn.ghost{background:transparent}

.badge{display:inline-block;padding:2px 9px;border-radius:999px;font-size:11.5px;font-weight:700;line-height:1.7}
.b-gray{background:#f1f3f8;color:#475467} .b-blue{background:var(--brandsoft);color:var(--brand)}
.b-teal{background:#e6f6f5;color:#0f766e} .b-green{background:var(--okbg);color:var(--ok)}
.b-amber{background:var(--warnbg);color:var(--warn)} .b-red{background:var(--dangerbg);color:var(--danger)}
.tag{display:inline-block;padding:2px 8px;border-radius:7px;font-size:11.5px;background:var(--soft);border:1px solid var(--line);color:#475467;margin:2px 4px 2px 0}

table.tbl{width:100%;border-collapse:collapse;font-size:13px}
table.tbl th{text-align:left;font-weight:700;color:#475467;background:var(--soft);padding:10px 12px;border-bottom:1px solid var(--line);white-space:nowrap;font-size:12.5px}
table.tbl td{padding:10px 12px;border-bottom:1px solid #f0f2f7;vertical-align:middle}
table.tbl tr:hover td{background:#fbfcfe}
table.tbl tr.click{cursor:pointer}
.lk{color:var(--brand);font-weight:700;cursor:pointer}
.lk:hover{text-decoration:underline}

.filters{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end}
.fld{display:flex;flex-direction:column;gap:5px}
.fld label{font-size:11.5px;color:var(--muted);font-weight:600}
select,input[type=text],input[type=number],input[type=date],input[type=password],input[type=tel],textarea{border:1px solid var(--line);border-radius:9px;padding:8px 10px;font-size:13px;background:#fff;color:var(--ink);outline:none;font-family:inherit;width:100%}
select:focus,input:focus,textarea:focus{border-color:#9db4f0;box-shadow:0 0 0 3px #eaf1ff}
textarea{resize:vertical;line-height:1.7}
.formgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}
.formgrid .full{grid-column:1/-1}
@media(max-width:860px){.formgrid{grid-template-columns:1fr}}

.dot{width:9px;height:9px;border-radius:50%;display:inline-block;margin-right:6px}
.dot.red{background:var(--red)} .dot.yellow{background:var(--yellow)} .dot.green{background:var(--green)}

.pager{display:flex;gap:6px;align-items:center;justify-content:flex-end;padding:12px 4px 2px;flex-wrap:wrap}
.pager button{min-width:32px;height:32px;border-radius:8px;border:1px solid var(--line);background:#fff;cursor:pointer;font-size:13px}
.pager button.on{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:700}
.pager button:disabled{opacity:.45;cursor:not-allowed}

.section-title{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:800;margin:2px 0 12px}
.section-title i{width:4px;height:15px;border-radius:2px;background:var(--brand);display:inline-block}

.hl{background:#fff3cd;border-radius:4px;padding:0 3px;font-weight:700;color:#8a5a00}
.hl-amt{background:#e8f7ee;color:#12693a;border-radius:4px;padding:0 3px;font-weight:700}
.hl-date{background:#eef3ff;color:#1d4ed8;border-radius:4px;padding:0 3px;font-weight:700}

/* modal */
.mask{position:fixed;inset:0;background:rgba(16,24,40,.45);display:flex;align-items:flex-start;justify-content:center;z-index:60;padding:36px 16px;overflow:auto}
.modal{background:#fff;border-radius:16px;max-width:880px;width:100%;box-shadow:0 20px 60px rgba(16,24,40,.25);overflow:hidden}
.modal.wide{max-width:1080px}
.modal header{display:flex;align-items:center;gap:10px;padding:16px 20px;border-bottom:1px solid var(--line)}
.modal header h3{margin:0;font-size:16px;flex:1}
.modal .body{padding:20px;max-height:72vh;overflow:auto}
.modal .foot{padding:14px 20px;border-top:1px solid var(--line);display:flex;gap:10px;justify-content:flex-end;background:var(--soft)}
.x{cursor:pointer;color:var(--muted);font-size:20px;line-height:1;border:0;background:none}

/* timeline */
.tl{position:relative;padding-left:22px}
.tl:before{content:"";position:absolute;left:6px;top:6px;bottom:6px;width:2px;background:var(--line)}
.tl .it{position:relative;padding:0 0 16px}
.tl .it:before{content:"";position:absolute;left:-20px;top:5px;width:10px;height:10px;border-radius:50%;background:#fff;border:2px solid var(--brand)}
.tl .it.done:before{background:var(--brand)}
.tl .it .t{font-weight:700;font-size:13.5px}
.tl .it .m{font-size:12px;color:var(--muted)}
.progress{height:8px;border-radius:999px;background:#eef1f7;overflow:hidden}
.progress i{display:block;height:100%;background:linear-gradient(90deg,var(--brand),var(--brand2))}

/* login */
.login-wrap{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#eef3ff,#e9f7f6);z-index:200}
.login-card{width:400px;background:#fff;border-radius:18px;box-shadow:0 24px 60px rgba(16,24,40,.16);padding:34px 32px}
.login-card .logo{display:flex;align-items:center;gap:12px;margin-bottom:22px}
.login-card .mark{width:44px;height:44px;border-radius:12px;background:linear-gradient(135deg,var(--brand),var(--brand2));display:flex;align-items:center;justify-content:center;color:#fff;font-weight:800;font-size:19px}
.login-card h2{margin:0;font-size:17px}
.login-card p.s{margin:2px 0 0;font-size:12px;color:var(--muted)}
.login-hint{margin-top:16px;background:var(--soft);border:1px solid var(--line);border-radius:10px;padding:10px 12px;font-size:12px;color:var(--muted);line-height:1.9}

/* toast */
.toast{position:fixed;left:50%;bottom:40px;transform:translateX(-50%);background:#111827;color:#fff;padding:11px 20px;border-radius:10px;font-size:13px;z-index:999;box-shadow:0 10px 30px rgba(0,0,0,.25);max-width:80vw}
.toast.err{background:#b91c1c}

/* print */
#printArea{display:none}
@media print{
  body{background:#fff}
  .app,#modal,.mask,.login-wrap{display:none !important}
  #printArea{display:block !important;padding:0 8mm}
  #printArea h1{font-size:20pt;text-align:center;margin:0 0 6pt}
  #printArea .pdoc{font-size:12pt;line-height:2;white-space:pre-wrap;font-family:"FangSong","STFangsong","SimSun",serif}
}

/* resident phone */
.phone{max-width:420px;margin:0 auto;background:#fff;border:10px solid #111827;border-radius:34px;box-shadow:0 24px 60px rgba(16,24,40,.25);overflow:hidden}
.phone .scr{padding:18px 16px 26px;background:#fff;min-height:640px}
.bigtext{font-size:19px;line-height:1.9}
.bigbtn{display:block;width:100%;font-size:20px;font-weight:800;padding:15px;border-radius:16px;border:0;background:var(--brand);color:#fff;cursor:pointer;margin-top:10px}
.bigbtn.warn{background:var(--danger)} .bigbtn.ok{background:var(--ok)}
.bignav{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:6px}
.bignav button{font-size:18px;font-weight:800;padding:18px 10px;border-radius:16px;border:2px solid #dbe3f0;background:#f7f9ff;color:#1f2a37;cursor:pointer;line-height:1.4}
.sigbox{border:2px dashed #c9d2e3;border-radius:12px;background:#fbfcfe;touch-action:none}
.docview{background:#fff;border:1px solid var(--line);border-radius:12px;padding:22px;font-family:"FangSong","STFangsong","SimSun",serif;font-size:14.5px;line-height:2.1;white-space:pre-wrap;min-height:240px;color:#1f2a37}
.empty{text-align:center;color:var(--muted);padding:34px 10px;font-size:13px}
.kv{display:flex;gap:10px;padding:6px 0;border-bottom:1px dashed #eef1f7}
.kv .k{flex:0 0 118px;color:var(--muted);font-size:12.5px}
.kv .v{font-size:13px;flex:1;word-break:break-all}
