:root{
  --bg:#f5f6f8; --card:#fff; --line:#e3e6ea; --line2:#cfd4da;
  --txt:#1f2328; --txt2:#5b6470; --txt3:#8b949e;
  --pri:#185fa5; --pri-bg:#e6f1fb; --pri-line:#b5d4f4;
  --ok:#0f6e56; --ok-bg:#e1f5ee;
  --warn:#854f0b; --warn-bg:#faeeda;
  --dan:#a32d2d; --dan-bg:#fcebeb;
  --r:8px;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{background:var(--bg);color:var(--txt);
  font:14px/1.6 -apple-system,"Segoe UI","Microsoft YaHei",sans-serif}
a{color:var(--pri);text-decoration:none}

/* ── 布局：左侧导航 + 右侧内容 ── */
.app{display:flex;height:100vh;overflow:hidden}
.side{width:248px;flex:0 0 248px;background:#fff;border-right:1px solid var(--line);
  display:flex;flex-direction:column;overflow:hidden}
.side-hd{padding:14px 16px;border-bottom:1px solid var(--line)}
.side-hd .t{font-size:16px;font-weight:500}
.side-hd .s{font-size:12px;color:var(--txt3);margin-top:2px}
.side-st{padding:8px 12px;border-bottom:1px solid var(--line)}
.side-st .st-label{font-size:11px;color:var(--txt3);margin:0 0 6px 2px}
.side-st .st-btns{display:flex;gap:8px}
.st-btn{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;
  padding:8px 4px;border:1px solid var(--line);border-radius:8px;background:#fff;
  cursor:pointer;transition:.15s}
.st-btn b{font-size:14px;font-weight:600;color:var(--txt)}
.st-btn span{font-size:11px;color:var(--txt3)}
.st-btn:hover{border-color:var(--pri-line);background:#f7fbff}
.st-btn.on{background:var(--pri);border-color:var(--pri)}
.st-btn.on b{color:#fff}
.st-btn.on span{color:#d9eaff}
.side-quick{padding:10px 12px;border-bottom:1px solid var(--line)}
.quick-btn{display:block;text-align:center;padding:9px 6px;border:1px dashed var(--pri);
  border-radius:8px;color:var(--pri);font-size:13px;font-weight:500;transition:.15s}
.quick-btn:hover{background:var(--pri-bg)}
.nav{flex:1;overflow-y:auto;padding:6px 0}
.nav .unit{padding:8px 16px 4px;font-size:12px;color:var(--txt2);font-weight:500}
.nav .proj{display:flex;align-items:center;gap:8px;padding:7px 12px 7px 20px;
  cursor:pointer;font-size:13px;color:var(--txt);border-left:3px solid transparent}
.nav .proj:hover{background:#f4f7fa}
.nav .proj.active{background:var(--pri-bg);border-left-color:var(--pri);
  color:var(--pri);font-weight:500}
.nav .proj .code{font-size:11px;color:var(--txt3);width:34px;flex:0 0 34px}
.nav .proj .cnt{margin-left:auto;font-size:11px;color:var(--txt3)}

.main{flex:1;overflow-y:auto;padding:18px 22px 60px}
.crumb{font-size:13px;color:var(--txt2);margin-bottom:12px}
.crumb b{color:var(--txt)}

/* ── 统计条 ── */
.stats{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:16px}
.stat{flex:1;min-width:130px;background:var(--card);border:1px solid var(--line);
  border-radius:var(--r);padding:10px 14px}
.stat .k{font-size:12px;color:var(--txt3)}
.stat .v{font-size:22px;font-weight:500;line-height:1.3}
.stat .v small{font-size:12px;color:var(--txt3);font-weight:400}
.pbar{height:8px;background:#e8ebee;border-radius:4px;overflow:hidden;margin-top:6px}
.pbar i{display:block;height:100%;background:var(--ok);border-radius:4px}

/* ── 卡片 ── */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);
  padding:14px 16px;margin-bottom:14px}
.bar{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.bar label{font-size:12px;color:var(--txt2);margin-right:2px}
select,input[type=text]{font:inherit;font-size:13px;padding:5px 8px;
  border:1px solid var(--line2);border-radius:6px;background:#fff;color:var(--txt)}
select:focus,input:focus{outline:2px solid var(--pri-bg);border-color:var(--pri)}
input[type=text]{min-width:200px}
button{font:inherit;font-size:13px;padding:6px 12px;border-radius:6px;cursor:pointer;
  border:1px solid var(--line2);background:#fff;color:var(--txt)}
button:hover{background:#f0f2f5}
button.pri{background:var(--pri);border-color:var(--pri);color:#fff}
button.pri:hover{background:#0f4c8a}
button.sm{padding:3px 8px;font-size:12px}

/* ── 表格 ── */
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{border-bottom:1px solid var(--line);padding:6px 8px;text-align:left;
  vertical-align:top}
th{background:#eef1f4;font-weight:500;font-size:12px;color:var(--txt2);
  position:sticky;top:0;z-index:2;white-space:nowrap}
tbody tr:hover{background:#f7f9fb}
tbody tr.click{cursor:pointer}
td.name{min-width:240px}
td.small{font-size:12px;color:var(--txt2)}
.tw{max-height:72vh;overflow:auto;border:1px solid var(--line);
  border-radius:var(--r);background:#fff}

/* ── 标签 ── */
.tag{display:inline-block;padding:1px 7px;border-radius:10px;font-size:11px;
  white-space:nowrap}
.s-未开始{background:#f1efe8;color:#5f5e5a}
.s-编制中{background:var(--warn-bg);color:var(--warn)}
.s-待审核{background:var(--pri-bg);color:var(--pri)}
.s-已完成{background:var(--ok-bg);color:var(--ok)}
.s-不适用{background:#f1efe8;color:#8b949e}

.rt-实物{background:#e6f1fb;color:#185fa5}
.rt-台账{background:#e1f5ee;color:#0f6e56}
.rt-模板{background:#faeeda;color:#854f0b}
.rt-文件{background:#f1efe8;color:#5f5e5a}

.t-sub{background:var(--pri-bg);color:var(--pri);border:1px solid var(--pri-line)}
.t-sub:hover{background:#d7e7f7}
.tpl-link{color:var(--pri);border-bottom:1px dashed var(--pri);cursor:pointer}

.empty{padding:40px;text-align:center;color:var(--txt3)}
.note{font-size:12px;color:var(--txt3);line-height:1.7}
.mono{font-family:ui-monospace,Consolas,monospace;font-size:12px}

/* 项目总览卡片网格 */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px}
.pcard{background:var(--card);border:1px solid var(--line);border-radius:var(--r);
  padding:14px 16px;cursor:pointer;transition:border-color .15s}
.pcard:hover{border-color:var(--pri);box-shadow:0 2px 8px rgba(0,0,0,.06)}
.pcard .t{font-size:14px;font-weight:500;margin-bottom:2px}
.pcard .c{font-size:11px;color:var(--txt3);margin-bottom:8px}
.pcard .n{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--txt2)}
.pcard .n .pbar{flex:1}

dialog{border:none;border-radius:12px;padding:0;max-width:1000px;width:94%}
dialog::backdrop{background:rgba(0,0,0,.35)}
dialog .hd{padding:12px 16px;border-bottom:1px solid var(--line);
  font-size:15px;font-weight:500}
dialog .bd{padding:14px 16px;max-height:68vh;overflow:auto}
dialog .ft{padding:10px 16px;border-top:1px solid var(--line);
  display:flex;justify-content:flex-end;gap:8px}
