:root{
  --bg:#eef1f6; --panel:#ffffff; --line:#d5dce7; --line-soft:#e7ecf4;
  --txt:#16202c; --txt-2:#54657a; --txt-3:#8b98a8;
  --accent:#1657a8; --accent-2:#123a6b; --accent-soft:#e9f1fb;
  --ok:#0f7a4d; --ok-soft:#e6f6ee; --bad:#c02331; --bad-soft:#fdecee;
  --warn:#a86400; --warn-soft:#fdf4e4;
  --mono:"Consolas","DejaVu Sans Mono","Courier New",monospace;
}
*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
body{background:var(--bg);color:var(--txt);font-family:"Microsoft YaHei","PingFang SC",system-ui,sans-serif;font-size:13px;line-height:1.6;}
a{color:var(--accent);}
h1,h2,h3,h4{margin:0;}

/* ---------- 顶栏 ---------- */
.topbar{background:linear-gradient(135deg,#0f2f57,#1657a8 58%,#1d6fc4);color:#fff;padding:14px 22px 12px;display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:wrap;}
.topbar .brand h1{font-size:18px;font-weight:600;letter-spacing:.5px;}
.topbar .brand .sub{font-size:11.5px;opacity:.85;margin-top:3px;max-width:820px;}
.topbar .me{display:flex;align-items:center;gap:10px;font-size:12.5px;flex-wrap:wrap;}
.chip{display:inline-flex;align-items:center;gap:6px;background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.3);border-radius:20px;padding:4px 12px;}
.chip b{font-weight:600;}
.tagrole{font-size:10.5px;background:#fff;color:#123a6b;border-radius:10px;padding:1px 7px;font-weight:700;}
.btn{border:1px solid rgba(255,255,255,.42);background:rgba(255,255,255,.13);color:#fff;padding:6px 13px;border-radius:6px;cursor:pointer;font-size:12.5px;font-family:inherit;transition:.15s;white-space:nowrap;}
.btn:hover{background:rgba(255,255,255,.26);}
.btn.primary{background:#fff;color:#123a6b;border-color:#fff;font-weight:600;}
.btn.primary:hover{background:#e9f1fb;}

/* ---------- 页签 ---------- */
.tabs{display:flex;gap:2px;background:#fff;border-bottom:1px solid var(--line);padding:0 14px;overflow-x:auto;}
.tabs button{border:0;background:transparent;font-family:inherit;font-size:13px;color:var(--txt-2);padding:11px 16px 9px;cursor:pointer;border-bottom:3px solid transparent;white-space:nowrap;}
.tabs button:hover{color:var(--accent);background:#f6f9fd;}
.tabs button.on{color:var(--accent);border-bottom-color:var(--accent);font-weight:600;}
.tabs .sp{flex:1;}
.tabs-sep{width:1px;background:var(--line);margin:9px 10px;flex:0 0 1px;}

/* ---------- 二级页签（类别内的计算模块） ---------- */
.subtabs{display:flex;gap:6px;background:#f7f9fc;border-bottom:1px solid var(--line);padding:7px 14px;overflow-x:auto;align-items:center;flex-wrap:wrap;}
.subtabs .lb{font-size:11px;color:var(--txt-3);white-space:nowrap;padding-right:2px;}
.subtabs button{border:1px solid var(--line);background:#fff;font-family:inherit;font-size:12px;color:var(--txt-2);padding:5px 12px;border-radius:20px;cursor:pointer;white-space:nowrap;}
.subtabs button:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-soft);}
.subtabs button.on{color:#fff;background:var(--accent);border-color:var(--accent);font-weight:600;}

/* ---------- 首页汇总（简洁大气 · 大标题大字版式） ---------- */
.crumb{font-size:12px;color:var(--txt-3);margin:0 0 12px;}
.crumb a{color:var(--accent);text-decoration:none;}
.crumb a:hover{text-decoration:underline;}
.crumb b{color:var(--txt);}

.home{display:flex;flex-direction:column;gap:20px;}

/* 顶部主视觉 */
.hero{border:0;box-shadow:0 8px 30px rgba(15,47,87,.10);}
.hero .hgrid{display:grid;grid-template-columns:1.1fr .9fr;align-items:stretch;}
.hero .hleft{padding:38px 42px;display:flex;flex-direction:column;justify-content:center;background:linear-gradient(118deg,#ffffff 0%,#f4f8fd 52%,#e8f1fb 100%);}
.hero .hs{font-size:25px;font-weight:800;color:var(--accent);letter-spacing:2.6px;}
.hero .ht{font-size:32px;font-weight:800;color:#0f2f57;line-height:1.32;letter-spacing:2px;margin-top:12px;}
.hero .hd{font-size:12.5px;color:var(--txt-2);line-height:1.95;margin-top:14px;max-width:520px;}
.hero .stats{display:flex;gap:40px;flex-wrap:wrap;margin-top:24px;}
.hero .stat{display:flex;align-items:baseline;gap:8px;}
.hero .stat .n{font-family:var(--mono);font-size:26px;font-weight:800;color:var(--accent);line-height:1;}
.hero .stat .l{font-size:11.5px;color:var(--txt-3);letter-spacing:.6px;}
.hero .hright{position:relative;min-height:262px;background:#0f2f57;overflow:hidden;}
.hero .hright img{width:100%;height:100%;object-fit:cover;object-position:center 32%;display:block;}
.hero .hright::after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,#ffffff 0%,rgba(255,255,255,.55) 8%,rgba(255,255,255,0) 32%);}
@media(max-width:980px){
  .hero .hgrid{grid-template-columns:1fr;}
  .hero .hleft{padding:26px 22px;}
  .hero .ht{font-size:26px;}
  .hero .stats{gap:24px;margin-top:18px;}
  .hero .hright{min-height:180px;}
}

/* 类别区块 */
.catblock{border:1px solid var(--line-soft);box-shadow:0 3px 14px rgba(15,47,87,.05);}
.catblock .cbody{padding:22px 26px 24px;}
.cathead{display:flex;align-items:center;gap:14px;margin-bottom:20px;}
.cathead .no{font-family:var(--mono);font-size:30px;font-weight:800;color:#cadcee;line-height:1;}
.cathead .cn{font-size:20px;font-weight:700;color:#0f2f57;letter-spacing:1.2px;}
.cathead .line{flex:1;height:1px;background:linear-gradient(90deg,var(--line),transparent);}

/* 模块导航块 */
.catgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(212px,1fr));gap:14px;}
.tile{display:flex;flex-direction:column;gap:18px;background:linear-gradient(160deg,#fbfdff,#f0f6fd);
  border:1px solid var(--line-soft);border-radius:12px;padding:22px 18px 16px;cursor:pointer;transition:.18s;}
.tile:hover{border-color:var(--accent);box-shadow:0 12px 26px rgba(22,87,168,.16);transform:translateY(-3px);}
.tile .tn{font-size:18px;font-weight:700;color:#123a6b;line-height:1.5;letter-spacing:.5px;flex:1;}
.tile .tb{border:1px solid var(--accent);background:#fff;color:var(--accent);font-family:inherit;
  font-size:13px;font-weight:600;padding:9px 12px;border-radius:7px;cursor:pointer;width:100%;transition:.15s;letter-spacing:.5px;}
.tile:hover .tb{background:var(--accent);color:#fff;}


/* ---------- 布局 ---------- */
.wrap{padding:16px;max-width:1680px;margin:0 auto;}
.layout{display:grid;grid-template-columns:minmax(400px,1fr) minmax(520px,1.25fr);gap:16px;align-items:start;}
@media(max-width:1200px){.layout{grid-template-columns:1fr;}}
.col{display:flex;flex-direction:column;gap:14px;min-width:0;}
.card{background:var(--panel);border:1px solid var(--line);border-radius:10px;overflow:hidden;}
.card>h2{padding:10px 14px;font-size:13.5px;font-weight:600;color:#123a6b;background:#f7f9fc;border-bottom:1px solid var(--line-soft);display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.card>h2 .tag{font-size:10.5px;font-weight:500;color:#fff;background:var(--accent);padding:1px 8px;border-radius:20px;}
.card>h2 .note{margin-left:auto;font-size:11px;font-weight:400;color:var(--txt-3);}
.card .body{padding:12px 14px 14px;}

/* ---------- 表单 ---------- */
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:10px 14px;}
.f{display:flex;flex-direction:column;gap:3px;min-width:0;}
.f.full{grid-column:1/-1;}
.f label{font-size:11.5px;color:var(--txt-2);display:flex;align-items:baseline;gap:4px;flex-wrap:wrap;}
.f label .u{color:var(--txt-3);font-size:10.5px;}
.f input,.f select{font-family:var(--mono);font-size:13px;color:var(--txt);padding:6px 8px;border:1px solid var(--line);border-radius:5px;background:#fcfdff;width:100%;min-width:0;}
.f select{font-family:inherit;font-size:12.5px;}
.f input:focus,.f select:focus{outline:none;border-color:var(--accent);background:#fff;box-shadow:0 0 0 2px var(--accent-soft);}
.f input[readonly]{background:#f4f7fb;color:#123a6b;font-weight:600;}
.f .hint{font-size:10.5px;color:var(--txt-3);line-height:1.45;}
.chk{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--txt-2);padding-top:17px;}
.chk input{width:15px;height:15px;accent-color:var(--accent);}
.grp{border:1px dashed var(--line);border-radius:8px;padding:10px 12px 12px;margin-top:10px;}
.grp>h4{font-size:11.5px;font-weight:700;color:var(--accent);margin-bottom:8px;letter-spacing:.3px;}
.grp .gt{font-size:11.5px;font-weight:600;color:var(--accent);margin-bottom:8px;}

/* ---------- 结果 ---------- */
.kpi{display:grid;grid-template-columns:repeat(auto-fit,minmax(124px,1fr));gap:9px;}
.kpi .k{background:#f7f9fc;border:1px solid var(--line-soft);border-radius:8px;padding:8px 10px;}
.kpi .k .t{font-size:10.5px;color:var(--txt-2);line-height:1.4;}
.kpi .k .v{font-family:var(--mono);font-size:15px;font-weight:600;color:#123a6b;margin-top:2px;}
.kpi .k .v small{font-size:10.5px;font-weight:400;color:var(--txt-3);margin-left:3px;}
table.res{width:100%;border-collapse:collapse;font-size:12px;}
table.res th,table.res td{border:1px solid var(--line-soft);padding:5px 8px;text-align:left;vertical-align:top;}
table.res th{background:#f7f9fc;font-weight:600;color:var(--txt-2);font-size:11.5px;white-space:nowrap;}
table.res td.num{font-family:var(--mono);text-align:right;white-space:nowrap;}
table.res td.ctr{text-align:center;}
table.res tr.sec td{background:#fbfcfe;}
.badge{display:inline-block;padding:1.5px 8px;border-radius:20px;font-size:11px;font-weight:600;white-space:nowrap;}
.badge.ok{background:var(--ok-soft);color:var(--ok);}
.badge.bad{background:var(--bad-soft);color:var(--bad);}
.badge.pending{background:var(--warn-soft);color:var(--warn);}
.badge.gray{background:#eef1f6;color:var(--txt-2);}
.bar{position:relative;height:6px;background:#eef1f6;border-radius:4px;overflow:hidden;min-width:56px;display:block;}
.bar i{position:absolute;left:0;top:0;bottom:0;border-radius:4px;}
.bar.ok i{background:#2fa36b;} .bar.mid i{background:#e0a32e;} .bar.bad i{background:#d94b57;}
.fx{font-family:var(--mono);font-size:11.5px;color:#123a6b;background:#f4f8fd;border-left:3px solid var(--accent);padding:6px 10px;border-radius:0 6px 6px 0;overflow-x:auto;}
.fx em{font-style:normal;color:#0f7a4d;font-weight:600;}
.callout{border-radius:8px;padding:9px 12px;font-size:12.5px;display:flex;gap:9px;align-items:flex-start;}
.callout.ok{background:var(--ok-soft);color:#0b5c3a;border:1px solid #bfe3d1;}
.callout.bad{background:var(--bad-soft);color:#8e1a25;border:1px solid #f2c7cc;}
.callout.warn{background:var(--warn-soft);color:#7a4a00;border:1px solid #f0dcb4;}
.callout .ic{font-weight:700;font-size:14px;line-height:1.35;}
.std{font-size:11.5px;color:var(--txt-2);background:#fafbfd;border:1px solid var(--line-soft);border-radius:8px;padding:9px 11px;line-height:1.85;}
.std b{color:#123a6b;}
.figwrap{background:#fbfcfe;border:1px solid var(--line-soft);border-radius:8px;padding:8px;overflow:auto;}
.foot{padding:12px 16px 30px;color:var(--txt-3);font-size:11px;text-align:center;}
.beian,.beian a{color:inherit;font-size:11px;text-decoration:none;display:inline-block;margin-top:4px;}
.beian a:hover{color:var(--accent);}

/* ---------- 登录 / 状态页 ---------- */
.gate{max-width:980px;margin:40px auto;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:0 6px 26px rgba(18,58,107,.08);display:grid;grid-template-columns:420px 1fr;overflow:hidden;}
.gate .beian{grid-column:1/-1;margin-top:0;padding:10px 16px;border-top:1px solid var(--line);text-align:center;display:block;width:100%;background:#fafcff;}
.gate-main{padding:26px 28px 22px;}
/* ---------- 登录页右侧：技术宣传片 ---------- */
.gate-promo{background:linear-gradient(160deg,#123a6b 0%,#0d2a4f 100%);color:#e8f0fb;padding:22px 24px;display:flex;flex-direction:column;gap:14px;}
.promo-title{font-size:15px;font-weight:700;color:#fff;letter-spacing:.3px;}
.promo-sub{font-size:11.5px;color:#a9c4e6;margin-top:4px;}
.promo-video{position:relative;width:100%;aspect-ratio:16/9;background:#08192e;border-radius:8px;overflow:hidden;box-shadow:0 4px 16px rgba(0,0,0,.35);}
.promo-el{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;background:#000;}
.promo-cover{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:11px;cursor:pointer;background:radial-gradient(circle at 50% 45%,rgba(255,255,255,.12),rgba(0,0,0,.4));}
.promo-play{width:54px;height:54px;border-radius:50%;border:2px solid rgba(255,255,255,.85);background:rgba(18,58,107,.55);color:#fff;font-size:19px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;padding-left:4px;}
.promo-play:hover{background:var(--accent);border-color:#fff;}
.promo-tip{font-size:11.5px;color:#cfe0f5;}
.promo-full{position:absolute;top:8px;right:8px;z-index:3;width:28px;height:28px;border-radius:6px;border:1px solid rgba(255,255,255,.5);background:rgba(0,0,0,.45);color:#fff;font-size:14px;line-height:1;cursor:pointer;padding:0;}
.promo-full:hover{background:var(--accent);border-color:#fff;}
.promo-list{margin:0;padding-left:16px;font-size:11.5px;line-height:1.9;color:#c3d8f2;}
@media (max-width:900px){
  .gate{grid-template-columns:1fr;max-width:560px;}
  .gate-main{order:1;} .gate-promo{order:2;} .gate .beian{order:3;}
}
.gate h2{font-size:17px;color:#123a6b;margin-bottom:6px;}
.gate .lead{font-size:12.5px;color:var(--txt-2);margin-bottom:16px;line-height:1.7;}
.gate .row{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
.gate .f{margin-bottom:11px;}
.gate .act{display:flex;gap:10px;margin-top:14px;flex-wrap:wrap;}
.gbtn{border:1px solid var(--accent);background:var(--accent);color:#fff;padding:9px 18px;border-radius:7px;font-family:inherit;font-size:13.5px;cursor:pointer;font-weight:600;}
.gbtn:hover{background:#12498f;}
.gbtn.ghost{background:#fff;color:var(--accent);}
.gbtn.ghost:hover{background:var(--accent-soft);}
.gbtn:disabled{opacity:.55;cursor:default;}
.switch{text-align:center;margin-top:14px;font-size:12.5px;color:var(--txt-2);}
.switch a{cursor:pointer;font-weight:600;}
.err{color:var(--bad);font-size:12px;margin-top:8px;min-height:18px;}
.notice{background:var(--accent-soft);border:1px solid #cddff5;color:#123a6b;border-radius:8px;padding:10px 12px;font-size:12.5px;line-height:1.7;}

/* ---------- 列表 ---------- */
.list{display:flex;flex-direction:column;gap:9px;}
.item{border:1px solid var(--line-soft);border-radius:9px;padding:10px 12px;background:#fcfdff;}
.item .h{display:flex;align-items:center;gap:9px;flex-wrap:wrap;}
.item .h b{font-size:13px;color:#123a6b;}
.item .m{font-size:11.5px;color:var(--txt-3);margin-top:3px;display:flex;gap:12px;flex-wrap:wrap;}
.item .ops{display:flex;gap:7px;margin-top:8px;flex-wrap:wrap;}
.mini{border:1px solid var(--line);background:#fff;color:var(--accent);border-radius:6px;padding:4px 11px;font-size:11.5px;font-family:inherit;cursor:pointer;}
.mini:hover{background:var(--accent-soft);}
.mini.ok{border-color:#a8ddc2;color:var(--ok);}
.mini.ok:hover{background:var(--ok-soft);}
.mini.danger{border-color:#f0c2c7;color:var(--bad);}
.mini.danger:hover{background:var(--bad-soft);}
.empty{color:var(--txt-3);font-size:12.5px;padding:18px 4px;text-align:center;}
.toolrow{display:flex;gap:9px;align-items:center;flex-wrap:wrap;margin-bottom:11px;}
.toolrow input[type=text]{font-family:inherit;font-size:12.5px;padding:6px 10px;border:1px solid var(--line);border-radius:6px;min-width:200px;}
.stat{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:9px;margin-bottom:12px;}
.stat .s{background:#f7f9fc;border:1px solid var(--line-soft);border-radius:8px;padding:9px 11px;}
.stat .s .t{font-size:11px;color:var(--txt-2);}
.stat .s .v{font-family:var(--mono);font-size:19px;font-weight:700;color:#123a6b;}
.tblwrap{overflow-x:auto;}
.hidden{display:none !important;}
.banner{background:#fff6e6;border:1px solid #f0dcb4;color:#7a4a00;padding:8px 13px;font-size:12px;border-radius:8px;margin-bottom:12px;}
@media print{body{background:#fff;}.topbar,.tabs,.col-left{display:none;}.wrap{padding:0;}.layout{display:block;}}

/* ---------- 通用弹窗 ---------- */
.modal{position:fixed;inset:0;background:rgba(11,21,35,.55);display:flex;align-items:center;justify-content:center;z-index:80;padding:18px;}
.modal.hidden{display:none;}
.modal-box{background:var(--panel);border-radius:12px;width:100%;max-width:480px;padding:22px 24px;box-shadow:0 24px 70px rgba(0,0,0,.3);max-height:88vh;overflow:auto;}
.modal-box h3{font-size:15px;font-weight:600;margin-bottom:4px;}
.modal-box .lead2{font-size:12px;color:var(--txt-2);margin-bottom:14px;line-height:1.7;}
.modal-box .act{display:flex;gap:10px;margin-top:16px;flex-wrap:wrap;}
.modal-box .act .gbtn{flex:1;min-width:120px;}
.modal-box .row{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
.modal-box .f{margin-bottom:11px;}
.fxgrp{font-size:12px;font-weight:600;color:#123a6b;background:#e9f1fb;border-left:3px solid #1657a8;padding:5px 10px;border-radius:0 6px 6px 0;margin:8px 0 2px;letter-spacing:.3px;}
.fxgrp:first-child{margin-top:0;}
.fx b.no{color:#c02331;font-weight:700;}
