:root{
  --bg:#0B1725; --panel:#12253A; --panel2:#16304A; --panel3:#0E2033;
  --ink:#E6EFF8; --muted:#93A9C0; --faint:#65809B;
  --brand:#4FA3E3; --brand-d:#1B4F7E; --brand-soft:#16304A;
  --line:#22384F; --line2:#1A2E44;
  --ok:#3FBF7A; --abn:#FF6B5E; --miss:#FFB454; --todo:#5AA9F0; --na:#8296AD; --pend:#4C6379;
  --gold:#E8B04B;
  --shadow:0 1px 3px rgba(0,0,0,.3),0 6px 22px rgba(0,0,0,.22);
}
*{box-sizing:border-box;margin:0;padding:0}
body{
  font-family:"Microsoft YaHei","微软雅黑","PingFang SC",-apple-system,sans-serif;
  background:var(--bg); color:var(--ink); font-size:14px; line-height:1.6;
  -webkit-font-smoothing:antialiased;
}
button,input,select,textarea{font-family:inherit;font-size:13px;color:var(--ink)}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-track{background:var(--bg)}
::-webkit-scrollbar-thumb{background:#243D57;border-radius:5px}
::-webkit-scrollbar-thumb:hover{background:#2E4C6B}

/* ---------- topbar ---------- */
.topbar{
  height:62px; background:linear-gradient(90deg,#0E2A47,#1B4F7E 60%,#24608F);
  display:flex; align-items:center; gap:18px; padding:0 20px; color:#fff;
  position:sticky; top:0; z-index:60; box-shadow:0 2px 14px rgba(0,0,0,.4);
  border-bottom:1px solid #2A5C88;
}
.brand{display:flex;align-items:center;gap:11px;flex-shrink:0}
.logo{width:34px;height:34px;border-radius:9px;background:rgba(255,255,255,.14);
  display:grid;place-items:center;font-size:19px;border:1px solid rgba(255,255,255,.2)}
.brand h1{font-size:16px;font-weight:700;letter-spacing:1px}
.brand p{font-size:11px;opacity:.72;margin-top:-2px}
.meta{flex:1;display:flex;gap:16px;font-size:12px;opacity:.9;overflow:hidden;white-space:nowrap;color:#CFE3F5}
.meta b{font-weight:600;color:#fff}
.acts{display:flex;gap:8px;flex-shrink:0}
.btn{
  background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.22);color:#fff;
  padding:7px 13px;border-radius:7px;cursor:pointer;font-size:12.5px;transition:.15s;
}
.btn:hover{background:rgba(255,255,255,.22)}
.btn.primary{background:var(--brand);color:#04203A;font-weight:600;border-color:var(--brand)}
.btn.primary:hover{background:#6BB5EA}

/* ---------- layout ---------- */
.layout{display:flex;height:calc(100vh - 62px)}
.sidebar{
  width:256px;background:#0D1E31;border-right:1px solid var(--line);
  display:flex;flex-direction:column;flex-shrink:0;
}
.nav-scroll{flex:1;overflow-y:auto;padding:12px 0}
.nav-group{
  padding:14px 16px 7px;font-size:13px;color:#9CCBF0;letter-spacing:2.2px;font-weight:800;
  border-top:1px solid rgba(255,255,255,.09);margin-top:5px;
  display:flex;align-items:center;text-shadow:0 1px 2px rgba(0,0,0,.35);
}
.nav-group:first-child{border-top:0;margin-top:0}
.nav-group::before{content:"";display:inline-block;width:3px;height:13px;background:var(--brand);
  border-radius:2px;margin-right:8px;box-shadow:0 0 6px rgba(79,163,227,.55)}
.nav-item{
  display:flex;align-items:center;gap:9px;padding:8px 16px;cursor:pointer;
  border-left:3px solid transparent;font-size:13px;color:#A9BFD4;transition:.12s;
}
.nav-item:hover{background:#152B44;color:var(--ink)}
.nav-item.on{background:linear-gradient(90deg,#17395C,#12253A);border-left-color:var(--brand);
  color:#fff;font-weight:600}
.nav-item .ic{width:19px;text-align:center;font-size:14px}
.nav-item .nm{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nav-item .bdg{font-size:11px;padding:1px 7px;border-radius:9px;
  background:#1C3652;color:var(--muted);font-weight:600;min-width:30px;text-align:center}
.nav-item .bdg.done{background:#1B4A34;color:var(--ok)}
.nav-item .bdg.warn{background:#5A2320;color:#FF9A90}
.nav-foot{border-top:1px solid var(--line);padding:14px;display:flex;align-items:center;gap:14px;background:#0A1A2B}
.ring-wrap{position:relative;width:74px;height:74px;flex-shrink:0}
.ring{transform:rotate(-90deg)}
.ring-bg{fill:none;stroke:#1E3852;stroke-width:10}
.ring-fg{fill:none;stroke:var(--brand);stroke-width:10;stroke-linecap:round;
  stroke-dasharray:326.7;stroke-dashoffset:326.7;transition:stroke-dashoffset .5s}
.ring-txt{position:absolute;inset:0;display:grid;place-content:center;text-align:center}
.ring-txt b{font-size:16px;color:var(--brand)}
.ring-txt span{font-size:10px;color:var(--muted)}
.foot-stat{flex:1;font-size:11.5px;color:var(--muted);line-height:1.9}
.foot-stat i{font-style:normal;font-weight:700;color:var(--ink)}

/* ---------- main ---------- */
.main{flex:1;overflow-y:auto;padding:22px 26px 70px;background:var(--bg)}
.page{max-width:1220px}
.page-head{margin-bottom:18px}
.page-head h2{font-size:21px;font-weight:700;color:#fff;display:flex;align-items:center;gap:9px}
.page-head .sub{font-size:13px;color:var(--muted);margin-top:6px;max-width:860px;line-height:1.7}
.crumb{font-size:12px;color:var(--faint);margin-bottom:7px}
.crumb b{color:var(--brand);font-weight:600}

.card{background:var(--panel);border:1px solid var(--line);border-radius:11px;
  box-shadow:var(--shadow);margin-bottom:16px;overflow:hidden}
.card-h{padding:13px 18px;border-bottom:1px solid var(--line2);display:flex;
  align-items:center;gap:10px;background:#143052}
.card-h h3{font-size:14.5px;font-weight:600;flex:1;color:#EAF3FC}
.card-h .tag{font-size:11px;padding:2px 9px;border-radius:11px;background:#1D3F63;color:var(--brand);font-weight:600}
.card-b{padding:16px 18px}

/* 演示数据提示条 */
.demo-bar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  background:#FFF8EC;border:1px solid #F2DDB4;color:#8A5A12;border-radius:10px;
  padding:10px 16px;margin-bottom:15px;font-size:13px}
.demo-bar b{color:#6E4608}
.demo-bar button{border:1px solid #C9A227;background:#fff;color:#8A5A12;border-radius:7px;
  padding:5px 13px;cursor:pointer;font-size:12.5px}
.demo-bar button:hover{background:#C9A227;color:#fff;border-color:#C9A227}

/* ---------- 预警条 ---------- */
.alert{display:flex;align-items:flex-start;gap:11px;padding:12px 16px;border-radius:10px;
  margin-bottom:15px;font-size:13px;line-height:1.7;border:1px solid}
.alert.a-red{background:rgba(255,107,94,.1);border-color:rgba(255,107,94,.42);color:#FFB3AB}
.alert.a-amber{background:rgba(255,180,84,.1);border-color:rgba(255,180,84,.4);color:#FFD79A}
.alert.a-ok{background:rgba(63,191,122,.1);border-color:rgba(63,191,122,.36);color:#95E3B8}
.alert .ai{font-size:16px;line-height:1.3}
.alert b{color:#fff}

/* ---------- kpi ---------- */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(158px,1fr));gap:13px;margin-bottom:16px}
.kpi{background:var(--panel);border:1px solid var(--line);border-radius:11px;padding:15px 17px;
  box-shadow:var(--shadow);position:relative;overflow:hidden}
.kpi::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--brand)}
.kpi.k-ok::before{background:var(--ok)} .kpi.k-abn::before{background:var(--abn)}
.kpi.k-miss::before{background:var(--miss)} .kpi.k-iss::before{background:var(--gold)}
.kpi .lb{font-size:11.5px;color:var(--muted);letter-spacing:.3px}
.kpi .vl{font-size:26px;font-weight:700;margin-top:2px;letter-spacing:-.5px;color:#fff}
.kpi .ft{font-size:11px;color:var(--faint);margin-top:1px}
.kpi.click{cursor:pointer;transition:.16s}
.kpi.click:hover{transform:translateY(-2px);border-color:var(--brand);box-shadow:0 6px 18px rgba(37,99,160,.35)}
.kpi.click .lb{display:flex;align-items:center;gap:5px}
.kpi .karr{font-size:14px;color:var(--brand);font-weight:700;transition:.16s}
.kpi.click:hover .karr{transform:translateX(3px)}

/* 分析条形：模块风险频次 */
.hbar{display:flex;align-items:center;gap:12px;margin:11px 0}
.hbar .hl{flex:0 0 168px;font-size:13px;color:var(--ink);font-weight:600}
.hbar .hb{flex:1;height:13px;background:rgba(37,99,160,.10);border-radius:7px;overflow:hidden}
.hbar .hb i{display:block;height:100%;background:linear-gradient(90deg,#4FA3E3,#2F6CA8);border-radius:7px}
.hbar .hv{flex:0 0 56px;text-align:right;font-size:12.5px;font-weight:700;color:#2F6CA8}

/* 高频问题与责任分布 */
.freq{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:9px 0;border-bottom:1px solid var(--line)}
.freq:last-child{border-bottom:0}
.freq .fn{flex:0 0 auto;background:rgba(192,57,43,.12);color:var(--abn);font-weight:700;font-size:12px;padding:3px 10px;border-radius:9px}
.freq .fd{flex:1;min-width:160px;font-size:13px;color:var(--ink)}
.freq .fsug{flex:0 0 auto;font-size:12px;color:var(--ok);background:rgba(63,191,122,.12);padding:3px 10px;border-radius:9px;font-weight:600}

.grid-mod{display:grid;grid-template-columns:repeat(auto-fill,minmax(272px,1fr));gap:13px}
.mod-card{background:var(--panel);border:1px solid var(--line);border-radius:11px;padding:15px 16px;
  cursor:pointer;transition:.16s;box-shadow:var(--shadow);position:relative}
.mod-card:hover{transform:translateY(-2px);box-shadow:0 8px 26px rgba(0,0,0,.4);border-color:#2F5F8C}
.mod-card .mc-t{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.mod-card .mc-ic{width:26px;height:26px;border-radius:7px;background:#1D3F63;
  color:var(--brand);display:grid;place-items:center;font-size:13px;flex-shrink:0}
.mod-card .mc-n{font-size:14px;font-weight:600;color:#fff}
.mod-card .mc-b{font-size:11.5px;color:var(--muted);line-height:1.55;min-height:34px}
.mod-card .bar{height:6px;background:#1A2E44;border-radius:4px;margin-top:11px;overflow:hidden;display:flex}
.mod-card .bar i{display:block;height:100%}
.mod-card .mc-f{display:flex;justify-content:space-between;font-size:11px;color:var(--muted);margin-top:6px}
.mod-card .risk{position:absolute;right:13px;top:13px;background:rgba(255,107,94,.16);
  color:#FF9A90;border:1px solid rgba(255,107,94,.4);border-radius:9px;font-size:10.5px;
  padding:1px 7px;font-weight:700}

/* ---------- 透视矩阵 ---------- */
.matrix{width:100%;border-collapse:collapse;font-size:12.5px}
.matrix th{background:#143052;padding:9px 8px;text-align:center;font-weight:600;
  color:var(--muted);border-bottom:1px solid var(--line);font-size:11.5px;white-space:nowrap}
.matrix th:first-child{text-align:left;padding-left:14px}
.matrix td{padding:8px;text-align:center;border-bottom:1px solid var(--line2);color:#C9DCEC}
.matrix td:first-child{text-align:left;padding-left:14px;font-weight:500;white-space:nowrap}
.matrix tbody tr:hover{background:#152B44}
.matrix .dot{display:inline-block;min-width:24px;padding:1px 6px;border-radius:9px;font-weight:700;font-size:11.5px}
.matrix .nm-cell{display:flex;align-items:center;gap:7px}
.matrix .sm{width:22px;height:22px;border-radius:6px;display:grid;place-items:center;
  font-size:11px;background:#1D3F63;color:var(--brand);font-weight:700;flex-shrink:0}
.mbar{height:7px;background:#1A2E44;border-radius:4px;overflow:hidden;min-width:78px}
.mbar i{display:block;height:100%;background:var(--brand)}

/* ---------- 清单 ---------- */
.cl-bar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:13px;
  background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px 14px}
.cl-bar .sp{flex:1}
.chip{border:1px solid var(--line);background:var(--panel3);border-radius:16px;padding:5px 13px;
  cursor:pointer;font-size:12.5px;color:var(--muted);transition:.14s}
.chip:hover{border-color:#2F5F8C;color:var(--ink)}
.chip.on{background:var(--brand);border-color:var(--brand);color:#04203A;font-weight:600}
.chip.danger:hover{border-color:var(--abn);color:#FF9A90}

table.cl{width:100%;border-collapse:collapse}
table.cl th{background:#143052;padding:10px 11px;text-align:left;font-size:11.5px;
  color:var(--muted);font-weight:600;border-bottom:1px solid var(--line);white-space:nowrap}
table.cl td{padding:9px 11px;border-bottom:1px solid var(--line2);vertical-align:top;font-size:13px;color:#C9DCEC}
table.cl tbody tr:hover{background:#152B44}
table.cl .idx{color:var(--faint);font-size:12px;width:38px}
table.cl .it{font-weight:600;width:200px;color:#EAF3FC}
table.cl .std{color:#A9BFD4;font-size:12.5px;line-height:1.65}
table.cl .stcell{width:150px;white-space:nowrap}
table.cl .edcell{width:60px;white-space:nowrap}
.sbtn{border:1px solid var(--line);background:var(--panel3);border-radius:6px;padding:3px 8px;
  margin:1px 2px 1px 0;cursor:pointer;font-size:11.5px;color:var(--muted);transition:.12s}
.sbtn:hover{border-color:#2F5F8C;color:var(--ink)}
.sbtn.on{color:#fff;border-color:transparent;font-weight:600}
.mini{width:44px;border:1px solid var(--line);background:var(--panel3);border-radius:5px;
  padding:2px 5px;font-size:11.5px;text-align:center}
.mini:focus{outline:0;border-color:var(--brand)}
.del{border:1px solid rgba(255,107,94,.4);background:rgba(255,107,94,.12);color:#FF9A90;
  border-radius:5px;padding:2px 7px;cursor:pointer;font-size:11px}
.del:hover{background:rgba(255,107,94,.25)}

/* 状态色条：未核对 / 已核对 / 风险 */
tr.st-pending td:first-child{box-shadow:inset 3px 0 0 var(--pend)}
tr.st-ok td:first-child{box-shadow:inset 3px 0 0 var(--ok)}
tr.st-abn{background:rgba(255,107,94,.075)!important}
tr.st-abn td:first-child{box-shadow:inset 3px 0 0 var(--abn)}
tr.st-miss{background:rgba(255,180,84,.075)!important}
tr.st-miss td:first-child{box-shadow:inset 3px 0 0 var(--miss)}
tr.st-todo{background:rgba(90,169,240,.075)!important}
tr.st-todo td:first-child{box-shadow:inset 3px 0 0 var(--todo)}
tr.st-na td:first-child{box-shadow:inset 3px 0 0 var(--na)}
.st-dot{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:6px;vertical-align:middle}

input.fld{width:100%;border:1px solid var(--line);background:var(--panel3);color:var(--ink);
  padding:5px 8px;border-radius:6px;font-size:12.5px}
input.fld:focus{outline:0;border-color:var(--brand)}
table.cl input.note{width:100%;border:1px solid transparent;background:transparent;
  padding:4px 6px;border-radius:6px;font-size:12.5px;color:var(--ink)}
table.cl input.note:hover{border-color:var(--line)}
table.cl input.note:focus{outline:0;border-color:var(--brand);background:var(--panel3)}

/* ---------- 甘特图 ---------- */
.gantt-wrap{overflow-x:auto;padding-bottom:6px}
.gantt{min-width:940px}
.gantt-head{display:flex;position:sticky;top:0;z-index:2;background:var(--panel);
  border-bottom:1px solid var(--line)}
.gantt-head .gn{width:290px;flex-shrink:0;padding:8px 12px;font-size:11.5px;color:var(--muted);font-weight:600}
.gantt-head .gt{flex:1;display:flex}
.gantt-head .gt span{flex:1;text-align:center;font-size:10.5px;color:var(--faint);
  padding:8px 0;border-left:1px solid var(--line2)}
.phase-row{display:flex;align-items:center;background:#143052;border-bottom:1px solid var(--line2)}
.phase-row .pn{width:290px;flex-shrink:0;padding:8px 12px;font-size:12.5px;font-weight:700}
.phase-row .pt{flex:1;height:30px;position:relative}
.grow{display:flex;align-items:center;border-bottom:1px solid var(--line2);min-height:34px}
.grow:hover{background:#152B44}
.grow .tn{width:290px;flex-shrink:0;padding:7px 12px;font-size:12.5px;line-height:1.55;color:#C9DCEC}
.grow .tn .no{color:var(--faint);font-size:11px;margin-right:5px}
.grow .tt{flex:1;position:relative;height:34px;
  background-image:linear-gradient(to right,var(--line2) 1px,transparent 1px)}
.gbar{position:absolute;top:8px;height:18px;border-radius:5px;opacity:.92;
  display:flex;align-items:center;padding:0 7px;font-size:10.5px;color:#04203A;font-weight:700;
  white-space:nowrap;overflow:hidden}
.gbar:hover{opacity:1;box-shadow:0 0 0 1px rgba(255,255,255,.35)}
.today{position:absolute;top:0;bottom:0;width:2px;background:var(--gold);z-index:3}
.today::after{content:"开业";position:absolute;top:-17px;left:-13px;font-size:10px;
  color:var(--gold);font-weight:700}
.today.nolb::after{content:none}
.glegend{display:flex;gap:16px;flex-wrap:wrap;font-size:11.5px;color:var(--muted);
  padding:10px 0 2px}
.glegend span{display:flex;align-items:center;gap:6px}
.glegend i{width:14px;height:9px;border-radius:3px;display:inline-block}

/* ---------- 指引 ---------- */
.stage{border-left:3px solid var(--brand);padding-left:16px;margin-bottom:22px;position:relative}
.stage::before{content:"";position:absolute;left:-7px;top:5px;width:11px;height:11px;
  border-radius:50%;background:var(--brand);border:2px solid var(--panel)}
.stage h4{font-size:14.5px;font-weight:700;margin-bottom:9px}
.stage ol{list-style:none;counter-reset:s}
.stage li{counter-increment:s;position:relative;padding:7px 0 7px 30px;
  border-bottom:1px dashed var(--line2);font-size:13px;line-height:1.7;color:#C9DCEC}
.stage li:last-child{border-bottom:0}
.stage li::before{content:counter(s);position:absolute;left:0;top:8px;width:20px;height:20px;
  border-radius:6px;background:#1D3F63;color:var(--brand);font-size:11px;
  font-weight:700;display:grid;place-items:center}
.stage li .n{display:block;color:var(--muted);font-size:12px;margin-top:2px;white-space:pre-line}

.gline{padding:11px 0;border-bottom:1px solid var(--line2);display:flex;gap:14px}
.gline:last-child{border-bottom:0}
.gline .gt2{width:150px;flex-shrink:0;font-weight:600;font-size:13px;color:#EAF3FC}
.gline .gn2{flex:1;color:#A9BFD4;font-size:13px;line-height:1.75}

.rhythm .rh{display:flex;align-items:center;gap:9px;padding:9px 0;border-bottom:1px solid var(--line2)}
.rhythm .rh:last-child{border-bottom:0}
.rhythm .tm{width:120px;flex-shrink:0;font-weight:600;font-size:12.5px}
.rhythm .ct{flex:1;font-size:13px;color:#A9BFD4;line-height:1.7}

/* ---------- 模版 ---------- */
table.tp{width:100%;border-collapse:collapse;font-size:13px}
table.tp th{background:#143052;padding:10px 11px;text-align:left;font-size:11.5px;
  color:var(--muted);font-weight:600;border-bottom:1px solid var(--line)}
table.tp td{padding:8px 11px;border-bottom:1px solid var(--line2);color:#C9DCEC}
table.tp tbody tr:hover{background:#152B44}
table.tp input,table.tp select{width:100%;border:1px solid transparent;background:transparent;
  padding:4px 6px;border-radius:6px;font-size:12.5px;color:var(--ink)}
table.tp input:hover,table.tp select:hover{border-color:var(--line)}
table.tp input:focus,table.tp select:focus{outline:0;border-color:var(--brand);background:var(--panel3)}
table.tp input::placeholder{color:#4E6B87}
table.tp .ro{color:#A9BFD4;font-size:12.5px;line-height:1.6}

.pur-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(292px,1fr));gap:14px}
.pur{background:var(--panel);border:1px solid var(--line);border-radius:11px;overflow:hidden;box-shadow:var(--shadow)}
.pur h4{padding:11px 15px;font-size:13.5px;font-weight:600;color:#fff;display:flex;
  align-items:center;justify-content:space-between}
.pur h4 span{font-size:11px;opacity:.85;font-weight:400}
.pur .pl{padding:12px 15px;display:flex;flex-wrap:wrap;gap:7px}
.pur .pi{background:#152B44;border:1px solid var(--line2);border-radius:14px;
  padding:4px 11px;font-size:12.5px;color:#A9BFD4}
.pur .pi.on{background:rgba(63,191,122,.14);border-color:rgba(63,191,122,.45);color:var(--ok);font-weight:600}
.main .pur .pi.on{background:#E9F8EF;border-color:#A8DCC0;color:#1E6B44}
.main .pur .pi{display:inline-flex;align-items:center;gap:5px}
.main .pur .pi .pix{color:#B98A88;font-weight:700;font-size:13px;line-height:1;
  padding:0 1px;border-radius:3px}
.main .pur .pi .pix:hover{color:#C0392B;background:rgba(192,57,43,.1)}
.pur h4 .cat-edit{background:rgba(255,255,255,.92);border:1px solid rgba(255,255,255,.6);
  border-radius:6px;padding:2px 8px;font-size:13px;color:#123A5E;font-weight:700;width:62%}
.pur h4 .cat-edit:focus{outline:0;border-color:#fff}
.pi-edit{width:118px;border:1px solid #9CC4E8;background:#fff;color:#1B3B5A;border-radius:14px;
  padding:3px 10px;font-size:12.5px;margin:0 4px 0 0}
.pi-edit:focus{outline:0;border-color:var(--brand)}

/* 文档中心 */
.drop{border:2px dashed #2C4C6C;border-radius:12px;padding:26px;text-align:center;
  background:var(--panel3);transition:.16s;cursor:pointer}
.drop:hover{border-color:var(--brand);background:#14283E}
.drop .di{font-size:26px;color:var(--brand);margin-bottom:6px}
.drop .dt2{font-size:13.5px;color:#C9DCEC;font-weight:600}
.drop .ds{font-size:11.5px;color:var(--faint);margin-top:4px}
.doclist{margin-top:14px}
.docrow{display:flex;align-items:center;gap:11px;padding:10px 12px;border:1px solid var(--line);
  border-radius:9px;margin-bottom:8px;background:var(--panel3)}
.docrow .fic{width:30px;height:30px;border-radius:7px;display:grid;place-items:center;
  font-size:11px;font-weight:700;color:#fff;flex-shrink:0}
.docrow .dn{flex:1;font-size:13px;color:#EAF3FC;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.docrow .dm{font-size:11px;color:var(--faint);flex-shrink:0}
.tpl-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(238px,1fr));gap:13px}
.tpl{background:var(--panel3);border:1px solid var(--line);border-radius:11px;padding:15px 16px}
.tpl .tt2{font-size:13.5px;font-weight:600;color:#EAF3FC;margin-bottom:5px}
.tpl .td2{font-size:11.5px;color:var(--muted);line-height:1.6;min-height:36px}
.tpl button{margin-top:10px;width:100%;border:1px solid var(--brand);background:rgba(79,163,227,.12);
  color:var(--brand);border-radius:7px;padding:7px;cursor:pointer;font-size:12.5px}
.tpl button:hover{background:rgba(79,163,227,.25)}

.issues-empty{padding:34px;text-align:center;color:var(--faint);font-size:13px}
.sign-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(238px,1fr));gap:13px}
.sign{background:var(--panel3);border:1px solid var(--line);border-radius:11px;padding:14px 16px}
.sign .rl{font-size:12.5px;font-weight:600;margin-bottom:7px;color:#EAF3FC}
.sign .ln{border-bottom:1px solid var(--line);height:32px;margin-bottom:5px}
.sign .dt{font-size:11.5px;color:var(--muted);text-align:right}
.doc p{font-size:13px;line-height:1.9;color:#A9BFD4;margin-bottom:8px}
.doc h4{font-size:14px;font-weight:700;color:var(--brand);margin:16px 0 8px}
.doc .chk{font-size:13px;line-height:2;color:#A9BFD4}

/* ---------- modal / toast ---------- */
.mask{display:none;position:fixed;inset:0;background:rgba(0,0,0,.6);z-index:90}
.mask.on{display:block}
.modal{display:none;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);
  background:var(--panel);border:1px solid var(--line);border-radius:13px;z-index:100;width:600px;
  max-width:92vw;max-height:86vh;overflow:auto;box-shadow:0 24px 70px rgba(0,0,0,.6)}
.modal.on{display:block}
.modal .mh{padding:15px 20px;border-bottom:1px solid var(--line2);font-weight:600;font-size:15px;
  display:flex;align-items:center;justify-content:space-between;color:#fff}
.modal .mh .x{cursor:pointer;color:var(--muted);font-size:19px;line-height:1}
.modal .mb{padding:18px 20px}
.modal .mf{padding:13px 20px;border-top:1px solid var(--line2);text-align:right}
.frow{display:flex;align-items:center;gap:11px;margin-bottom:11px}
.frow label{width:104px;font-size:12.5px;color:var(--muted);flex-shrink:0}
.frow input,.frow select{flex:1;border:1px solid var(--line);background:var(--panel3);
  border-radius:7px;padding:7px 10px;color:var(--ink)}
.frow input:focus,.frow select:focus{outline:0;border-color:var(--brand)}

#toast{position:fixed;right:24px;bottom:24px;z-index:200;display:flex;
  flex-direction:column;gap:9px;align-items:flex-end}
.tst{background:var(--panel2);border:1px solid var(--line);border-left:3px solid var(--brand);
  border-radius:9px;padding:11px 16px;font-size:13px;color:var(--ink);
  box-shadow:0 8px 28px rgba(0,0,0,.45);animation:tin .25s;max-width:360px}
.tst.warn{border-left-color:var(--miss)} .tst.err{border-left-color:var(--abn)}
.tst.ok{border-left-color:var(--ok)}
@keyframes tin{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

/* ==========================================================
   主内容区：浅蓝操作区（导航栏保持深蓝，主次分明）
   做法：在 .main 上重定义变量，子元素自动继承浅色方案
   ========================================================== */
.main{
  --bg:#E9F2FB; --panel:#FFFFFF; --panel2:#F7FBFF; --panel3:#F5FAFE;
  --ink:#1B3B5A; --muted:#5A7085; --faint:#8AA0B5;
  --line:#D6E6F5; --line2:#EAF2FB; --brand:#1B6FB5; --brand-soft:#E3EFFA;
  --shadow:0 1px 2px rgba(27,59,90,.06),0 6px 18px rgba(27,59,90,.07);
  background:var(--bg);
}
.main .page-head h2{color:#0E3A63;font-size:24px;font-weight:800;letter-spacing:.5px}
.main .page-head .sub{font-size:13.5px;color:#4A6076}
.main .crumb{font-size:12.5px}
.main .crumb b{color:var(--brand);font-weight:700}
.main .card-h{background:#EDF5FD;border-bottom:1px solid var(--line)}
.main .card-h h3{color:#0E3A63;font-size:16px;font-weight:700}
.main .card-h .tag{background:#D6E9FA;color:#12558F}
.main .tag.done{background:#E4F7EC;color:#177A45;border-color:#B7E3C8}
.main .tag.warn{background:#FFF4E0;color:#9C6208;border-color:#EFD8AE}
.main .kpi .vl{color:#123A5E}
.main .kpi{border-color:var(--line)}

/* 表格 */
.main table.cl th,.main table.tp th,.main .matrix th{background:#EDF5FD;color:#4A6076;border-bottom-color:var(--line)}
.main table.cl td,.main table.tp td,.main .matrix td{color:#2A3F52;border-bottom-color:var(--line2)}
.main table.cl tbody tr:hover,.main table.tp tbody tr:hover,.main .matrix tbody tr:hover{background:#F2F8FD}
.main table.cl .it{color:#123A5E}
.main table.cl .std{color:#4A6076}
.main table.tp .ro{color:#4A6076}
/* 只读态（关闭「编辑」时清单条目 / 指引条文以文本呈现） */
.main table.cl .ro{color:#2A3F52;font-size:13px;line-height:1.6;display:inline-block;padding:4px 6px}
.main table.cl .it .ro{font-weight:600;color:#123A5E}
.main .gline .gt2 .ro{color:#123A5E;font-weight:600;font-size:13.5px}
.main .gline .gn2 .ro{color:#4A6076;font-size:13px;line-height:1.7;display:inline-block;padding:3px 6px}

/* ==========================================================
   语义状态色（跨主题自适应）：深色导航用浅色，浅色操作区自动加深
   修复：原先正文表格内文字用行内浅色，浅底浅字看不清
   ========================================================== */
.c-ok{color:#3FBF7A}
.c-warn{color:#FFB454}
.c-danger{color:#FF9A90}
.c-info{color:#5AA9F0}
.c-muted{color:#93A9C0}
/* 下拉框：按选中值着色（覆盖表格默认文字色） */
table.tp select.c-owner{color:#EAF3FC}
table.tp select.c-ok{color:#3FBF7A}
table.tp select.c-warn{color:#FFB454}
table.tp select.c-danger{color:#FF9A90}
table.tp select.c-info{color:#5AA9F0}
/* 浅色操作区：加深，保证在浅底上清晰可读 */
.main .c-ok,.main table.tp select.c-ok{color:#177A45}
.main .c-warn,.main table.tp select.c-warn{color:#9C6208}
.main .c-danger,.main table.tp select.c-danger{color:#C0392B}
.main .c-info,.main table.tp select.c-info{color:#0F5A9E}
.main .c-muted{color:#7A8EA3}
.main table.tp select.c-owner{color:#1B3B5A}
.main .matrix .sm{background:#DCEBF9;color:#12558F}
.main .mbar{background:#E3EEF9}

/* 模块卡片 */
.main .mod-card .mc-ic{background:#DCEBF9;color:#12558F}
.main .mod-card .mc-n{color:#123A5E}
.main .mod-card .bar{background:#E3EEF9}
.main .mod-card:hover{border-color:#9CC4E8}
.main .mod-card .risk{background:#FFF1F0;border-color:#F3C4BF;color:#C0392B}

/* 甘特图 */
.main .gantt-head{background:#F7FBFF;border-bottom-color:var(--line)}
.main .gantt-head .gt span{border-left-color:#EAF2FB}
.main .phase-row{background:#E4EFFA;border-bottom-color:var(--line2)}
.main .grow .tn{color:#2A3F52}
.main .grow:hover{background:#F2F8FD}
.main .grow .tt{background-image:linear-gradient(to right,#EAF2FB 1px,transparent 1px)}
.main .glegend{color:var(--muted)}

/* 指引 */
.main .stage li{color:#2A3F52;border-bottom-color:var(--line2)}
.main .stage li::before{background:#DCEBF9;color:#12558F}
.main .stage::before{border-color:var(--panel)}
.main .gline .gt2{color:#123A5E}
.main .gline .gn2{color:#4A6076}
.main .rhythm .ct{color:#4A6076}
.main .rhythm .rh{border-bottom-color:var(--line2)}

/* 采购清单 */
.main .pur .pi{background:#F2F8FD;border-color:var(--line);color:#4A6076}
.main .pur .pi.on{background:#E9F8EF;border-color:#A8DCC0;color:#1E6B44}

/* 文档中心 / 模版 */
.main .drop{background:#F7FBFF;border-color:#B9D5EE}
.main .drop:hover{background:#EDF5FD;border-color:var(--brand)}
.main .drop .dt2{color:#123A5E}
.main .docrow{background:#F7FBFF;border-color:var(--line)}
.main .docrow .dn{color:#123A5E}
.main .tpl{background:#F7FBFF;border-color:var(--line)}
.main .tpl .tt2{color:#123A5E}
.main .tpl button{background:#E7F1FC;border-color:#A9CDEA;color:#12558F}
.main .tpl button:hover{background:#D3E6F8}
.main .sign{background:#F7FBFF;border-color:var(--line)}
.main .sign .rl{color:#123A5E}
.main .doc p{color:#3A5064}
.main .doc .chk{color:#3A5064}
.main .doc h4{color:#12558F}
.main .issues-empty{color:var(--faint)}

/* 控件 */
.main .chip{background:#FFFFFF;border-color:var(--line)}
.main .chip:hover{border-color:#9CC4E8;color:#123A5E}
.main .sbtn{background:#FFFFFF;border-color:var(--line)}
.main .sbtn:hover{border-color:#9CC4E8;color:#123A5E}
.main .del{background:#FFF3F2;border-color:#F3C4BF;color:#C0392B}
.main input.fld{background:#FFFFFF;border-color:var(--line);color:var(--ink)}
.main .mini{background:#FFFFFF;border-color:var(--line);color:var(--ink)}
.main input::placeholder,.main table.tp input::placeholder{color:#A9BCCE}

/* 预警（浅底版本） */
.main .alert.a-red{background:#FFF3F2;border-color:#F3C4BF;color:#A32E22}
.main .alert.a-red b{color:#7E221A}
.main .alert.a-amber{background:#FFF8EC;border-color:#F2DDB4;color:#8A5A12}
.main .alert.a-amber b{color:#6E4608}
.main .alert.a-ok{background:#EFFAF3;border-color:#BEE5CE;color:#1E6B44}
.main .alert.a-ok b{color:#14532F}

/* 清单：常驻可编辑字段（默认无边框，聚焦才显形，视觉等同文本） */
.main table.cl input.fld{background:transparent;border-color:transparent;font-size:13px;padding:4px 6px}
.main table.cl input.fld:hover{border-color:var(--line);background:#fff}
.main table.cl input.fld:focus{border-color:var(--brand);background:#fff}
.main table.cl .it input.fld{font-weight:600;color:#123A5E}
.edit-tip{font-size:12.5px;color:var(--muted);margin-bottom:10px}
.edit-tip b{color:var(--brand)}

/* 多行编辑框（指引条文、对接内容等长文本） */
textarea.fld{width:100%;border:1px solid var(--line);background:#FFFFFF;color:var(--ink);
  padding:6px 9px;border-radius:6px;font-size:13px;line-height:1.7;resize:vertical;min-height:56px}
textarea.fld:focus{outline:0;border-color:var(--brand)}
.main .gline textarea.fld,.main table.tp textarea.fld{
  border-color:transparent;background:transparent;min-height:44px;padding:3px 6px}
.main .gline textarea.fld:hover,.main table.tp textarea.fld:hover{border-color:var(--line);background:#fff}
.main .gline textarea.fld:focus,.main table.tp textarea.fld:focus{border-color:var(--brand);background:#fff}
.main .gline{align-items:flex-start}
.main .gline .gt2{padding-top:5px}
.row-act{display:flex;gap:6px;align-items:center;margin-top:4px}
.add-bar{margin-top:12px;display:flex;gap:9px;flex-wrap:wrap}

/* 弹窗：跟随浅色操作区 */
.modal{background:#FFFFFF;border-color:#D6E6F5}
.modal .mh{color:#123A5E;border-bottom-color:#EAF2FB}
.modal .mf{border-top-color:#EAF2FB}
.frow label{color:#5A7085}
.frow input,.frow select{background:#F5FAFE;border-color:#D6E6F5;color:#1B3B5A}
.frow input:focus,.frow select:focus{border-color:var(--brand)}

/* ---------- print ---------- */
@media print{
  .topbar,.sidebar,.cl-bar,.acts,.nav-foot,#toast{display:none!important}
  .layout{display:block;height:auto}
  .main{overflow:visible;padding:0;background:#fff}
  .page{max-width:100%}
  body{background:#fff;color:#000}
  .card{box-shadow:none;border:1px solid #999;break-inside:avoid;background:#fff}
  .card-h{background:#F2F2F2!important;border-bottom:1px solid #999}
  .card-h h3{color:#000!important}
  table.cl th{background:#F2F2F2!important;color:#000!important}
  table.cl td,table.tp td,.matrix td,.doc p,.grow .tn{color:#000!important}
  .page-head h2{color:#000!important}
  .stage li,.gline .gn2,.rhythm .ct{color:#000!important}
  .gbar{color:#fff!important}
  .alert{background:#FFF6E5!important;border-color:#999!important;color:#000!important}
  .alert b{color:#000!important}
}

/* ============ 钉钉双端口：角色门禁 / 执行层 / 响应式 ============ */
body.no-role .sidebar{display:none}
body.no-role .acts{display:none}

/* 门户页 */
.gate{min-height:calc(100vh - 62px);display:grid;place-items:center;padding:30px;
  background:radial-gradient(1200px 600px at 50% -10%,#16365A,#0B1725)}
.gate-in{width:100%;max-width:760px;text-align:center;color:#CFE3F5}
.gate-logo{width:64px;height:64px;margin:0 auto 14px;border-radius:16px;display:grid;place-items:center;font-size:32px;
  background:rgba(79,163,227,.16);border:1px solid rgba(79,163,227,.4)}
.gate-in h1{font-size:27px;font-weight:800;color:#fff;letter-spacing:2px}
.gate-sub{font-size:13.5px;opacity:.8;margin:6px 0 26px}
.gate-cards{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.gcard{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.16);border-radius:16px;
  padding:24px 22px;text-align:left;cursor:pointer;transition:.18s;position:relative;overflow:hidden}
.gcard:hover{transform:translateY(-4px);border-color:rgba(79,163,227,.6);background:rgba(255,255,255,.1)}
.gcard.mgr{border-top:3px solid #5AA9F0}
.gcard.exec{border-top:3px solid #3FBF7A}
.gc-ic{font-size:30px;margin-bottom:10px}
.gc-t{font-size:18px;font-weight:700;color:#fff;margin-bottom:8px}
.gc-d{font-size:12.5px;line-height:1.7;opacity:.82}
.gc-go{margin-top:16px;font-size:13px;font-weight:700;color:#9CCBF0}
.gate-tip{margin-top:24px;font-size:11.5px;opacity:.6;line-height:1.7}

/* 选店网格 */
.store-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px}
.store-card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:16px 16px;cursor:pointer;transition:.16s}
.store-card:hover{border-color:var(--brand);transform:translateY(-3px);box-shadow:var(--shadow)}
.sc-nm{font-size:16px;font-weight:700;color:var(--ink)}
.sc-meta{display:flex;gap:12px;font-size:12px;color:var(--muted);margin-top:6px}
.sc-mg,.sc-par{font-size:12px;color:var(--muted);margin-top:4px}
.sc-go{margin-top:12px;font-size:12.5px;font-weight:700;color:var(--brand)}

/* 执行层首页 */
.big-pct{font-size:40px;font-weight:800;color:var(--brand);line-height:1}
.exec-acts{display:flex;gap:9px;flex-wrap:wrap;justify-content:flex-end}
.exec-acts .btn{background:#fff;border:1px solid var(--line);color:var(--ink);padding:8px 14px;border-radius:8px;cursor:pointer;font-size:13px;transition:.15s}
.exec-acts .btn:hover{border-color:var(--brand);color:var(--brand)}
.exec-acts .btn.primary{background:var(--brand);color:#04203A;font-weight:600;border-color:var(--brand)}
.big-store{font-size:24px;font-weight:800;color:var(--ink);line-height:1.2}
.warn-card{border-left:4px solid var(--abn)}
.tag.warn{background:rgba(255,180,84,.18);color:#FFB454;border:1px solid rgba(255,180,84,.42)}
.tag.done{background:rgba(63,191,122,.16);color:#3FBF7A;border:1px solid rgba(63,191,122,.42)}

/* 筛选标签配色（清单模块 / 概览筛选条）：按含义突显 */
.chip.c-red{color:#C0392B;border-color:#EFC5BF;font-weight:600}
.chip.c-red.on{background:#C0392B;border-color:#C0392B;color:#fff}
.chip.c-amber{color:#8A5A12;border-color:#EAD9AE;font-weight:600}
.chip.c-amber.on{background:#B7791F;border-color:#B7791F;color:#fff}
.chip.c-green{color:#1E6B44;border-color:#BEE5CE;font-weight:600}
.chip.c-green.on{background:#2E7D4F;border-color:#2E7D4F;color:#fff}
.chip.c-gray{color:#5A7085;border-color:#C9D6E2;font-weight:600}
.chip.c-gray.on{background:#5A7085;border-color:#5A7085;color:#fff}
.chip.c-blue{color:#12558F;border-color:#9CC4E8;font-weight:600}
.main .chip.c-red:hover{border-color:#C0392B;color:#C0392B}
.main .chip.c-amber:hover{border-color:#B7791F;color:#8A5A12}
.main .chip.c-green:hover{border-color:#2E7D4F;color:#1E6B44}
.main .chip.c-gray:hover{border-color:#5A7085;color:#3E5A76}
.main .chip.c-blue:hover{border-color:#12558F;color:#12558F}

/* 顶栏：菜单按钮（移动端） */
.btn.menu{display:none}

/* 移动端响应式（钉钉工作台多为手机端） */
@media (max-width: 860px){
  .topbar{flex-wrap:wrap;height:auto;padding:9px 12px;gap:8px}
  .brand p{display:none}
  .meta{order:3;flex-basis:100%;font-size:11px;gap:10px}
  .acts{order:2;flex-wrap:wrap;gap:6px}
  .acts .btn{padding:6px 10px;font-size:12px}
  .btn.menu{display:inline-block}
  .layout{height:auto;display:block}
  .sidebar{position:fixed;top:0;left:0;bottom:0;z-index:60;width:260px;transform:translateX(-100%);transition:.25s;box-shadow:4px 0 20px rgba(0,0,0,.4)}
  body.nav-open .sidebar{transform:translateX(0)}
  body.nav-open::after{content:"";position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:55}
  .main{padding:16px 14px 60px}
  .gate-cards{grid-template-columns:1fr}
  .kpis{grid-template-columns:repeat(2,1fr)}
  .grid-mod{grid-template-columns:1fr}
  .store-grid{grid-template-columns:1fr}
  .exec-acts{justify-content:flex-start}
  table.tp,table.cl{font-size:12px}
}
@media (max-width: 420px){
  .kpis{grid-template-columns:1fr}
}
