:root{--green:#18a058;--red:#d03050;--amber:#d9930d;--blue:#2080f0;}
*{box-sizing:border-box}
body{font-family:-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;margin:0;background:#f5f6f7;color:#222;font-size:14px}
.hidden{display:none!important}
button{font:inherit;cursor:pointer}
input,select,textarea{font:inherit}
.topbar{display:flex;justify-content:space-between;align-items:center;padding:10px 16px;background:#fff;border-bottom:1px solid #e4e7ed;gap:8px;flex-wrap:wrap;position:sticky;top:0;z-index:10}
.tb-title{font-size:17px;font-weight:600;margin-right:8px}
.tb-user{color:#888;font-size:13px;margin-left:8px}
.tb-right{display:flex;align-items:center;gap:8px}
.tb-progress{display:flex;align-items:center;gap:6px;font-variant-numeric:tabular-nums;margin-right:8px}
.tb-bar{width:110px;height:6px;background:#e8eaee;border-radius:99px;overflow:hidden;display:inline-block}
.tb-bar i{display:block;height:100%;background:var(--green);width:0;transition:width .3s}
.btn{border:1px solid #dcdfe5;background:#fff;border-radius:8px;padding:6px 14px;color:#222;text-decoration:none;display:inline-block;font-size:13px}
.btn.primary{background:#222;color:#fff;border-color:#222}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn.mic{font-size:16px;padding:6px 10px}
.qc-tabs{display:flex;gap:4px;padding:12px 16px 0}
.qc-tab{flex:1;padding:9px 4px;border:1px solid #e4e7ed;border-radius:10px;background:#fff;display:flex;flex-direction:column;align-items:center;gap:2px}
.qc-tab .t1{font-weight:600;font-size:14px}
.qc-tab .t2{font-size:12px;color:#909399}
.qc-tab.active{background:#222;color:#fff;border-color:#222}
.qc-tab.active .t2{color:#bbb}
.qc-legend{display:flex;gap:16px;font-size:12px;color:#909399;padding:8px 20px 0}
.qc-legend span{display:flex;align-items:center;gap:5px}
.dot{width:8px;height:8px;border-radius:99px;display:inline-block}
.dot.todo{background:#c4c9d1}.dot.done{background:var(--green)}.dot.warn{background:var(--amber)}
#qc-body{padding:8px 16px 80px;max-width:900px;margin:0 auto}
.qc-group{border:1px solid #e4e7ed;border-radius:10px;background:#fff;margin-bottom:8px;overflow:hidden}
.qc-group-h{display:flex;align-items:center;gap:8px;padding:11px 12px;cursor:pointer;font-weight:600;user-select:none}
.qc-group-h .cnt{margin-left:auto;font-size:12px;color:#909399;font-variant-numeric:tabular-nums}
.qc-group-h .arrow{transition:transform .15s;color:#909399}
.qc-group.closed .arrow{transform:rotate(-90deg)}
.qc-item{border-top:1px solid #eef0f3}
.qc-item-h{display:flex;align-items:center;gap:10px;padding:11px 12px;cursor:pointer}
.qc-item-h .nm{flex:1}
.qc-item-h .tag{font-size:12px;color:#909399}
.qc-item.warn .tag{color:var(--amber)}
.qc-item.done .tag{color:var(--green)}
.qc-form{border-top:1px dashed #e4e7ed;padding:12px;background:#fafbfc}
.qc-form table{width:100%;border-collapse:collapse;font-size:13px;margin-bottom:8px}
.qc-form th{font-size:12px;color:#909399;font-weight:400;text-align:left;padding:4px 6px;border-bottom:1px solid #e4e7ed;white-space:nowrap}
.qc-form td{padding:3px 4px}
.qc-form input,.qc-form select,.qc-form textarea{width:100%;border:1px solid #dcdfe5;border-radius:6px;padding:6px 8px;font-size:13px;background:#fff;min-width:70px}
.qc-form textarea{min-height:48px;resize:vertical}
.qc-form .vio{background:#fdecec;border-color:#f5c1c1}
.qc-form .form-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:8px;flex-wrap:wrap}
.qc-form .row-del{opacity:0;border:none;background:none;color:var(--red);font-size:15px}
.qc-form tr:hover .row-del{opacity:1}
.dual-box{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:8px;background:#fff7e8;border:1px solid #f0d9a8;border-radius:8px;margin-top:8px;font-size:13px}
.vio-banner{background:#fdecec;color:var(--red);border:1px solid #f5c1c1;border-radius:8px;padding:8px 10px;font-size:13px;margin:8px 0}
.ok-banner{background:#e9f7ef;color:var(--green);border:1px solid #b7e4c7;border-radius:8px;padding:8px 10px;font-size:13px;margin:8px 0}
/* AI */
#ai-fab{position:fixed;right:18px;bottom:18px;width:52px;height:52px;border-radius:99px;border:none;background:#222;color:#fff;font-weight:700;z-index:50;box-shadow:0 4px 14px rgba(0,0,0,.25)}
#ai-panel{position:fixed;right:18px;bottom:80px;width:min(420px,calc(100vw - 36px));height:min(560px,70vh);background:#fff;border:1px solid #e4e7ed;border-radius:14px;display:flex;flex-direction:column;z-index:50;box-shadow:0 8px 30px rgba(0,0,0,.18)}
.ai-head{display:flex;justify-content:space-between;align-items:center;padding:12px 14px;border-bottom:1px solid #eef0f3;font-weight:600}
.ai-x{border:none;background:none;font-size:20px;color:#909399}
.ai-context{font-size:12px;color:#909399;padding:8px 14px;background:#fafbfc;border-bottom:1px solid #eef0f3}
.ai-chat{flex:1;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:8px}
.ai-msg{max-width:85%;padding:8px 12px;border-radius:12px;font-size:13px;white-space:pre-wrap;word-break:break-word}
.ai-msg.user{align-self:flex-end;background:#222;color:#fff}
.ai-msg.bot{align-self:flex-start;background:#f2f3f5}
.ai-msg.err{align-self:flex-start;background:#fdecec;color:var(--red)}
.ai-input{display:flex;gap:6px;padding:10px;border-top:1px solid #eef0f3}
.ai-input input{flex:1;border:1px solid #dcdfe5;border-radius:8px;padding:8px 10px}
.ai-hint{font-size:12px;color:#909399;padding:0 12px 8px;min-height:18px}
.ai-hint.rec{color:var(--red)}
/* modal */
.modal-mask{position:fixed;inset:0;background:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;z-index:100}
.modal{background:#fff;border-radius:12px;padding:20px;width:min(420px,92vw);max-height:80vh;overflow-y:auto}
.modal h3{margin:0 0 14px;font-size:16px}
.modal label{display:block;font-size:13px;color:#606266;margin:10px 0 4px}
.modal input,.modal select,.modal textarea{width:100%;border:1px solid #dcdfe5;border-radius:8px;padding:8px 10px}
.modal .modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}
/* login */
.login-page{display:flex;align-items:center;justify-content:center;min-height:100vh}
.login-box{background:#fff;padding:32px;border-radius:14px;width:min(360px,90vw);display:flex;flex-direction:column;gap:12px;box-shadow:0 8px 30px rgba(0,0,0,.08)}
.login-box h1{font-size:19px;margin:0 0 8px;text-align:center}
.login-box label{font-size:13px;color:#606266}
.login-box input{width:100%;border:1px solid #dcdfe5;border-radius:8px;padding:9px 10px;margin-top:4px}
.login-err{background:#fdecec;color:var(--red);border-radius:8px;padding:8px 10px;font-size:13px}
/* admin */
#admin-body .ad-sec{display:none}
#admin-body .ad-sec.active{display:block}
.ad-group{border:1px solid #e4e7ed;border-radius:10px;background:#fff;margin-bottom:10px}
.ad-group-h{padding:10px 12px;font-weight:600;display:flex;gap:8px;align-items:center;background:#fafbfc}
.ad-item{display:flex;gap:8px;align-items:center;padding:8px 12px;border-top:1px solid #eef0f3;font-size:13px}
.ad-item .nm{flex:1}
.ad-item .meta{color:#909399;font-size:12px}
.ad-item .del{opacity:0;border:none;background:none;color:var(--red)}
.ad-item:hover .del{opacity:1}
.field-row{display:flex;gap:6px;margin-bottom:6px;align-items:center}
.field-row input,.field-row select{border:1px solid #dcdfe5;border-radius:6px;padding:6px 8px;font-size:13px}
/* report */
.report-filter{display:flex;gap:8px;align-items:center;margin-bottom:14px;flex-wrap:wrap}
.report-filter select,.report-filter input{border:1px solid #dcdfe5;border-radius:8px;padding:7px 10px;background:#fff}
.rp-table-wrap{overflow-x:auto;background:#fff;border:1px solid #e4e7ed;border-radius:10px}
.rp-table{width:100%;border-collapse:collapse;font-size:12px}
.rp-table th{background:#fafbfc;padding:7px 8px;border-bottom:1px solid #e4e7ed;text-align:left;white-space:nowrap;font-weight:600}
.rp-table td{padding:6px 8px;border-bottom:1px solid #f2f4f7;white-space:nowrap;font-variant-numeric:tabular-nums}
.rp-table tr.vio td{background:#fdecec}
.rp-table tr.vio td:first-child{box-shadow:inset 3px 0 0 var(--red)}
.rp-empty{color:#909399;text-align:center;padding:40px 0}
.rp-summary{background:#fff7e8;border:1px solid #f0d9a8;border-radius:10px;padding:10px 14px;margin-bottom:12px;font-size:13px}
@media print{.topbar,.report-filter{display:none}}

/* ===== 通用补充 ===== */
.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
.qc-form .chk-pwd{width:110px;border:1px solid #dcdfe5;border-radius:6px;padding:5px 8px}
.dual-tag{font-size:11px;background:#fff7e8;color:#d9930d;border-radius:6px;padding:1px 6px}
#ai-mic.recording{background:#d03050;border-color:#d03050;color:#fff;animation:pulse 1s infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.55}}
#mobile-bar{display:none}

/* ===== 手机端（≤768px）===== */
@media (max-width:768px){
  body{padding-bottom:calc(64px + env(safe-area-inset-bottom));font-size:15px}
  .topbar{padding:8px 10px}
  .tb-title{font-size:15px}
  .tb-user{display:none}
  .tb-bar{width:64px}
  .btn{padding:8px 12px;min-height:40px}
  .qc-tabs{position:sticky;top:53px;z-index:9;background:#f5f6f7;padding:8px 10px}
  .qc-tab{padding:10px 2px}
  #qc-body{padding:8px 10px 24px}
  .qc-item-h{padding:14px 12px;min-height:52px}
  .qc-group-h{padding:13px 12px}
  .qc-form{padding:10px}
  .qc-form input,.qc-form select{padding:9px 8px;font-size:15px;min-width:88px}
  .qc-form textarea{font-size:15px}
  .form-actions .btn,.qc-form .add-row{min-height:44px;padding:10px 18px;font-size:15px}
  .form-actions{position:sticky;bottom:0;background:var(--kc-s,#fafbfc);padding:8px 0}
  /* AI面板全屏 */
  #ai-panel{left:8px;right:8px;bottom:calc(64px + env(safe-area-inset-bottom));width:auto;height:52dvh;border-radius:14px;box-shadow:0 -6px 24px rgba(0,0,0,.15)}
  #ai-fab{display:none}
  /* 底部操作栏 */
  #mobile-bar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:60;
    background:#fff;border-top:1px solid #e4e7ed;
    padding:8px 10px calc(8px + env(safe-area-inset-bottom));gap:10px}
  #mobile-bar button{flex:1;min-height:48px;border:none;border-radius:12px;font-size:16px;font-weight:600}
  #mb-voice{background:#222;color:#fff}
  #mb-voice.listening{background:#d03050;animation:pulse 1s infinite}
  #mb-ai{background:#eef0f3;color:#222}
  .ai-input input{padding:11px 10px;font-size:15px}
  .ai-input .btn{min-height:44px}
  .dual-box{flex-direction:column;align-items:stretch}
  .dual-box select,.dual-box input{width:100%!important}
}

.app-foot{text-align:center;font-size:11px;color:#b0b6bf;padding:16px 0 8px}
