*{box-sizing:border-box;margin:0;padding:0}
body{font-family:-apple-system,"Microsoft YaHei",sans-serif;background:#F5F6F8;color:#24211E;font-size:14px}
.hide{display:none!important}
#login{height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(140deg,#B5412E,#8E2F20)}
.box{width:390px;background:#fff;border-radius:16px;padding:40px 36px;box-shadow:0 20px 60px rgba(0,0,0,.25)}
.box h1{font-size:22px;margin-bottom:8px}
.box p{font-size:13px;color:#8A8478;margin-bottom:24px;line-height:1.7}
.f{margin-bottom:15px}
.f label{display:block;font-size:13px;color:#6B6659;margin-bottom:7px}
.f input{width:100%;padding:11px 13px;border:1px solid #E2DED6;border-radius:9px;font-size:14px;outline:none}
.f input:focus{border-color:#B5412E}
.btn{width:100%;padding:12px;background:#B5412E;color:#fff;border:none;border-radius:9px;font-size:15px;font-weight:600;cursor:pointer}
.err{color:#C0392B;font-size:13px;margin-top:12px;min-height:18px}
.nav-g{padding:16px 22px 7px;font-size:11px;color:#6E6960;letter-spacing:1px}
.box{max-height:92vh;overflow:auto}
.btn.alt{background:#fff;color:#B5412E;border:1px solid #E3B9B0;margin-top:10px;font-size:13px;font-weight:500}
.btn.alt:hover{background:#FDF6F4}
.diag{margin-top:14px;font-size:12.5px;line-height:1.75}
.diag > div{padding:9px 11px;border-radius:8px;margin-bottom:7px;border-left:3px solid #ddd}
.d-ok{background:#EAF7F0;border-left-color:#2E7D5B;color:#1F5C43}
.d-bad{background:#FDECE8;border-left-color:#C0392B;color:#8E2F20}
.d-warn{background:#FDF6E3;border-left-color:#C9A227;color:#7A6212}
.d-wait{background:#F3F4F6;border-left-color:#B8BDC6;color:#4B5159}
.help{margin-top:18px;font-size:12.5px}
.help a{color:#B5412E;cursor:pointer;text-decoration:underline}
#help-box{margin-top:10px;padding:14px;background:#FAF9F6;border-radius:9px;font-size:12.5px;line-height:1.85;color:#45403A}
#help-box .tip{color:#8A8478}
#app{display:flex;height:100vh}
.side{width:205px;background:#26221E;flex-shrink:0;display:flex;flex-direction:column}
.side .logo{padding:22px;font-size:16px;font-weight:700;color:#fff}
.side .logo small{display:block;font-size:11px;color:#8A8478;font-weight:400;margin-top:5px}
.nav{padding:0 12px}
.nav a{display:block;padding:11px 14px;border-radius:8px;font-size:14px;cursor:pointer;margin-bottom:3px;color:#CFC9BE}
.nav a:hover{background:#332E28;color:#fff}
.nav a.on{background:#B5412E;color:#fff;font-weight:600}
.side .foot{margin-top:auto;padding:16px 22px;font-size:12px;color:#6B6659}
.main{flex:1;overflow:auto;padding:26px 30px 60px}
.head{margin-bottom:20px}
.head h2{font-size:21px}
.head .sub{font-size:12px;color:#8A8478;margin-top:5px}
.card{background:#fff;border-radius:13px;padding:22px 24px;margin-bottom:18px;border:1px solid #EDEAE4}
.card h3{font-size:15px;margin-bottom:16px}
.tb{display:flex;gap:10px;margin-bottom:16px;flex-wrap:wrap;align-items:center}
.tb input,.tb select{padding:9px 12px;border:1px solid #E2DED6;border-radius:8px;font-size:13px;outline:none;min-width:240px}
.tb button{padding:9px 18px;background:#B5412E;color:#fff;border:none;border-radius:8px;font-size:13px;cursor:pointer}
.tb button.ghost{background:#F0EDE7;color:#45403A}
table{width:100%;border-collapse:collapse;font-size:13px}
th{text-align:left;padding:11px 10px;background:#FAF9F6;color:#6B6659;font-weight:600;font-size:12px}
td{padding:12px 10px;border-top:1px solid #F1EEE8}
tr:hover td{background:#FCFBF9}
.pill{display:inline-block;padding:3px 9px;border-radius:6px;font-size:11px;background:#EFEAE1;color:#6B6659}
.pill.g{background:#E3F2EC;color:#2E7D5B}
.pill.y{background:#FDF3DC;color:#9A7B1E}
.pill.r{background:#FBE6E2;color:#B5412E}
.mini{padding:5px 13px;border-radius:7px;border:1px solid #E2DED6;background:#fff;cursor:pointer;font-size:12px}
.mini:hover{border-color:#B5412E;color:#B5412E}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(175px,1fr));gap:14px}
.stat{background:#fff;border:1px solid #EDEAE4;border-radius:13px;padding:20px 22px}
.stat .n{font-size:28px;font-weight:800;color:#B5412E}
.stat .l{font-size:12px;color:#8A8478;margin-top:7px}
.row{display:flex;align-items:center;gap:12px;margin-bottom:13px}
.row label{width:150px;font-size:13px;color:#6B6659;flex-shrink:0}
.row input,.row select{flex:1;max-width:250px;padding:9px 12px;border:1px solid #E2DED6;border-radius:8px;font-size:13px;outline:none}
.unit{font-size:13px;color:#8A8478}
.tip{font-size:12px;color:#8A8478;line-height:1.7}
.seg{display:inline-flex;border:1px solid #E2DED6;border-radius:9px;overflow:hidden}
.seg span{padding:8px 16px;font-size:13px;cursor:pointer}
.seg span.on{background:#B5412E;color:#fff;font-weight:600}
.ok{color:#2E7D5B;font-weight:600}
.bad{color:#B5412E;font-weight:600}
.row .ta{flex:1;max-width:100%;height:96px;padding:10px 12px;border:1px solid #E2DED6;border-radius:8px;
  font-size:12px;font-family:monospace;outline:none;resize:vertical}
.row .ta:focus{border-color:#B5412E}
.cmp-item{display:flex;align-items:center;gap:18px;padding:18px 0;border-bottom:1px solid #F1EEE8}
.cmp-item:last-child{border-bottom:none}
.cmp-bc{flex-shrink:0;background:#fff;padding:6px;border:1px solid #EDEAE4;border-radius:8px}
.cmp-info{flex:1;min-width:220px}
.cmp-info .t{font-size:14px;font-weight:600}
.cmp-info .s{font-size:12px;color:#8A8478;margin-top:4px}
.cmp-info .p{font-size:13px;margin-top:6px;color:#B5412E;font-weight:600}
.cmp-acts{display:flex;flex-direction:column;gap:6px;flex-shrink:0}
.cmp-acts .mini{width:120px;text-align:center}
.cmp-empty{text-align:center;color:#8A8478;font-size:13px;padding:36px 0}
.cmp-top{display:flex;gap:22px;align-items:flex-start;padding-top:14px}
.cmp-basic .t{font-size:17px;font-weight:700;line-height:1.5}
.cmp-basic .s{font-size:12px;color:#8A8478;margin-top:6px}
.ai-box{background:#FBF7F0;border:1px solid #EFE4D2;border-radius:10px;padding:16px 18px;
  font-size:13px;line-height:2;color:#45403A}
.legend{font-size:12px;color:#8A8478;margin:6px 0 16px;display:flex;gap:14px;align-items:center;flex-wrap:wrap}
.legend .pill{margin-right:5px}
.src-card{border:1px solid #EDEAE4;border-radius:11px;padding:16px 18px;margin-bottom:12px;background:#FDFCFA}
.src-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.src-name{font-size:14px;font-weight:700}
.src-row{font-size:13px;color:#45403A;display:flex;align-items:center;flex-wrap:wrap;gap:6px}
.mask{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.42);
  display:flex;align-items:center;justify-content:center;z-index:100}
.sheet{background:#fff;border-radius:14px;padding:28px 30px;width:520px;max-height:86vh;overflow:auto;
  box-shadow:0 20px 60px rgba(0,0,0,.22)}
.sheet h3{font-size:16px;margin-bottom:18px}
.sheet.wide{width:880px}
.tb button.danger{background:#B5412E;color:#fff}
.stat.clickable{cursor:pointer;transition:border-color .15s,transform .15s}
.stat.clickable:hover{border-color:#B5412E;transform:translateY(-1px)}
.chk{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:#45403A;white-space:nowrap}
.od-reason{width:170px;padding:5px 9px;border:1px solid #E2DED6;border-radius:7px;font-size:12px;margin-left:8px}
