
:root{
  --bg:#EAF1FB;
  --card:#FFFFFF;
  --line:#E9F0F9;
  --line-soft:#F2F6FC;
  --ink:#1F2937;
  --ink2:#4A5D75;
  --muted:#8A98AB;
  --muted2:#A8B6C8;
  --blue:#2563EB;
  --blue-l:#3B82F6;
  --blue-tint:#E4EEFD;
  --blue-wash:#F1F6FE;
  --amber:#F59E0B;
  --amber-tint:#FEF3E2;
  --amber-ink:#D97706;
  --red:#E5484D;
  --red-tint:#FDE8E8;
  --green:#10B981;
  --green-tint:#DEF7EC;
  --green-ink:#0E9F6E;
  --violet:#8B5CF6;
  --violet-tint:#F1EDFE;
  --slate-tint:#F1F5F9;
  --shadow:0 2px 10px rgba(23,51,97,.05);
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans SC",sans-serif;
  background:var(--bg);color:var(--ink);
  font-size:13px;line-height:1.5;-webkit-font-smoothing:antialiased;
}
.num{font-variant-numeric:tabular-nums;letter-spacing:-.01em}
button{font-family:inherit}
.app{min-height:100vh;display:flex;flex-direction:column}

/* ================= 0. 统一工作门户壳（5.1） ================= */
.portal{display:flex;align-items:center;gap:10px;height:34px;flex:0 0 34px;padding:0 20px;background:#173B72;color:#C7D6EC;font-size:11.5px}
.portal .pl-logo{font-weight:700;color:#fff;letter-spacing:.3px}
.portal .pl-div{width:1px;height:14px;background:rgba(255,255,255,.22)}
.portal a{color:#C7D6EC;text-decoration:none}
.portal a:hover{color:#fff;text-decoration:underline}
.portal .pl-sso{margin-left:auto;display:inline-flex;align-items:center;gap:5px;color:#9FD2FF}
.portal .pl-sso i{width:6px;height:6px;border-radius:50%;background:#10B981;display:block}

/* ================= 1. 顶部导航栏 ================= */
.topbar{
  position:sticky;top:0;z-index:60;height:60px;flex:0 0 60px;
  display:flex;align-items:center;gap:20px;padding:0 20px;
  background:#fff;border-bottom:1px solid #E5EEF9;
}
.brand{display:flex;align-items:center;gap:10px;flex:0 0 auto}
.brand-logo{
  width:30px;height:30px;border-radius:9px;flex:0 0 30px;
  background:linear-gradient(140deg,#2F7BF6,#1E5FD9);
  display:grid;place-items:center;box-shadow:0 3px 8px rgba(37,99,235,.3);
}
.brand-logo svg{width:17px;height:17px}
.brand-txt{display:flex;flex-direction:column;line-height:1.2}
.brand-txt b{font-size:16px;font-weight:700;letter-spacing:-.2px}
.brand-txt span{font-size:9.5px;color:#A8B6C8;letter-spacing:.2px}
.search{
  display:flex;align-items:center;gap:8px;
  width:420px;max-width:38vw;height:34px;padding:0 8px 0 12px;
  border-radius:9px;background:#F5F8FD;border:1px solid #EDF2FA;transition:.16s;
}
.search:focus-within{background:#fff;border-color:#BFD6F5;box-shadow:0 0 0 3px rgba(37,99,235,.08)}
.search svg{width:15px;height:15px;flex:0 0 15px}
.search input{flex:1;min-width:0;border:0;background:transparent;outline:none;font-size:12px;color:var(--ink)}
.search input::placeholder{color:#9CA3AF}
.search kbd{width:20px;height:20px;border-radius:5px;background:#fff;border:1px solid #E2E8F0;display:grid;place-items:center;font-size:11px;color:#94A3B8}
.topbar-right{margin-left:auto;display:flex;align-items:center;gap:16px;flex:0 0 auto}
.btn-primary{
  display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 14px;
  border:0;border-radius:8px;cursor:pointer;font-size:12px;font-weight:500;
  color:#fff;background:linear-gradient(135deg,#3B82F6,#2563EB);
  box-shadow:0 2px 8px rgba(37,99,235,.3);transition:.16s;
}
.btn-primary:hover{box-shadow:0 4px 14px rgba(37,99,235,.4);transform:translateY(-1px)}
.btn-primary svg{width:13px;height:13px}
.tool{position:relative;display:inline-flex;align-items:center;gap:5px;font-size:12px;color:#475569;cursor:pointer;background:none;border:0;padding:0;transition:.16s}
.tool:hover{color:var(--blue)}
.tool svg{width:17px;height:17px}
.tool .dot{position:absolute;top:-2px;left:11px;width:7px;height:7px;border-radius:50%;background:#E5484D;border:1.5px solid #fff}
.user{display:flex;align-items:center;gap:8px;cursor:pointer;padding-left:14px;border-left:1px solid #EDF2FA}
.user .av-wrap{position:relative}
.user .av{width:30px;height:30px;border-radius:50%;background:linear-gradient(135deg,#DBEAFE,#BFDBFE);display:grid;place-items:center;font-size:12px;font-weight:600;color:var(--blue)}
.user .av i{position:absolute;right:-1px;bottom:-1px;width:9px;height:9px;border-radius:50%;background:#10B981;border:1.5px solid #fff}
.user .info{display:flex;flex-direction:column;line-height:1.3}
.user .info b{font-size:12px;font-weight:600}
.user .info span{font-size:9.5px;color:#94A3B8}
.user > svg{width:12px;height:12px}

/* ================= ① 常用功能菜单快捷入口（5.2.1-①） ================= */
.quickbar{display:flex;align-items:center;gap:10px;padding:12px 18px 0;flex:0 0 auto}
.quickbar .qb-title{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:var(--muted);flex:0 0 auto}
.quickbar .qb-title svg{width:13px;height:13px}
.quick{display:flex;flex-wrap:wrap;gap:8px;flex:1;min-width:0}
.quick-item{
  display:inline-flex;align-items:center;gap:7px;height:40px;padding:0 13px 0 11px;
  border-radius:11px;background:#fff;border:1px solid var(--line);
  box-shadow:var(--shadow);cursor:pointer;font-size:12.5px;color:#334155;transition:.16s;
}
.quick-item:hover{border-color:#BFDBFE;box-shadow:0 4px 12px rgba(37,99,235,.14);transform:translateY(-1px)}
.quick-item .qi{width:24px;height:24px;border-radius:8px;display:grid;place-items:center;flex:0 0 24px}
.quick-item .qi svg{width:13px;height:13px}
.quick-item .qi.blue{background:var(--blue-tint)} .quick-item .qi.green{background:var(--green-tint)}
.quick-item .qi.amber{background:var(--amber-tint)} .quick-item .qi.violet{background:var(--violet-tint)}
.quick-item .qi.red{background:var(--red-tint)}
.quick-item em{font-style:normal;font-size:10px;font-weight:700;min-width:16px;height:16px;border-radius:8px;display:inline-grid;place-items:center;background:#E5484D;color:#fff;padding:0 4px}
.quick-more{height:40px;padding:0 12px;border-radius:11px;background:transparent;border:1px dashed #CBD9EA;cursor:pointer;font-size:12px;color:#7A8CA3}
.quick-more:hover{border-color:var(--blue-l);color:var(--blue)}

/* ================= 布局 ================= */
.layout{flex:1;display:flex;align-items:flex-start;gap:14px;padding:12px 18px 14px}

/* ================= 左侧功能侧边栏 ================= */
.sidebar{
  flex:0 0 176px;width:176px;background:rgba(255,255,255,.72);
  border:1px solid #E4EDFA;border-radius:14px;padding:8px;
  backdrop-filter:blur(8px);box-shadow:0 2px 10px rgba(23,51,97,.04);
  display:flex;flex-direction:column;
  position:sticky;top:72px;
  max-height:calc(100vh - 108px);
}
/* 菜单滚动区：超出可视高度时内部滚动，绝不撑破容器 */
.nav-scroll{
  flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;
  margin:2px -4px 0;padding:0 4px;
  scrollbar-width:thin;scrollbar-color:#C7D6EA transparent;
  overscroll-behavior:contain;
}
.nav-scroll::-webkit-scrollbar{width:5px}
.nav-scroll::-webkit-scrollbar-thumb{background:#CFDDF0;border-radius:3px}
.nav-scroll::-webkit-scrollbar-track{background:transparent}
/* 渐隐提示：内容被裁切时出现 */
.nav-fade{position:relative;flex:0 0 auto}
/* 折叠按钮：菜单超长/矮屏时用于收展低频分组 */
.nav-toggle{
  display:none;width:100%;height:24px;margin-top:2px;border:0;border-radius:7px;
  background:#F1F6FE;color:#7A8CA3;font-size:10.5px;cursor:pointer;
  align-items:center;justify-content:center;gap:4px;transition:.15s;
}
.nav-toggle:hover{background:#E8F0FE;color:var(--blue)}
.nav-toggle svg{width:10px;height:10px;transition:transform .2s}
.nav-toggle.open svg{transform:rotate(180deg)}
.sidebar-foot{flex:0 0 auto;border-top:1px solid var(--line-soft);margin-top:4px}
.nav-home{
  display:flex;align-items:center;gap:8px;height:34px;padding:0 8px 0 10px;
  border-radius:9px;cursor:pointer;color:#fff;font-size:12px;font-weight:600;
  background:linear-gradient(100deg,#2563EB,#5B9DFB);
  box-shadow:0 3px 10px rgba(37,99,235,.28);
}
.nav-home svg.i{width:15px;height:15px;flex:0 0 15px}
.nav-home .chev{margin-left:auto;width:12px;height:12px}
/* 折叠态：仅展示常用分组，隐藏低频分组 */
.sidebar.compact .nav-group.optional,
.sidebar.compact .nav-item.optional{display:none}
/* 矮屏（≤820px 高）自动进入折叠态 */
@media (max-height:820px){
  .sidebar .nav-group.optional,
  .sidebar .nav-item.optional{display:none}
  .sidebar .nav-group.optional.force-show,
  .sidebar .nav-item.optional.force-show{display:flex}
}
.nav-group{height:28px;display:flex;align-items:center;padding:0 10px;font-size:10.5px;color:#A8B6C8;letter-spacing:.2px}
.nav-item{
  position:relative;display:flex;align-items:center;gap:8px;height:31px;
  padding:0 8px 0 10px;border-radius:8px;cursor:pointer;
  font-size:12px;color:#55677D;transition:background .14s,color .14s;
}
.nav-item svg{width:15px;height:15px;flex:0 0 15px}
.nav-item svg [stroke-width]{stroke:#A8B6C8;transition:stroke .14s}
.nav-item:hover{background:#EDF4FD}
.nav-item:hover svg [stroke-width]{stroke:#4A5D75}
.nav-item.on{background:#E8F0FE;color:var(--blue);font-weight:600}
.nav-item.on svg [stroke-width]{stroke:var(--blue)}
.nav-item.on::before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:3px;height:15px;border-radius:2px;background:var(--blue-l)}
.nav-item .badge{margin-left:auto;font-size:11px;font-weight:600;font-variant-numeric:tabular-nums}
.nav-item .badge.red{color:#E5484D}
.nav-item .badge.amber{color:#F59E0B}
.nav-item .badge.blue{color:var(--blue)}
.nav-item .badge.gray{color:#94A3B8}
.sidebar-foot{padding:10px 10px 4px;font-size:9.5px;color:#B8C4D4}

/* ================= 主内容区 ================= */
.main{flex:1;min-width:0;display:flex;flex-direction:column;gap:14px}
.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px 16px;box-shadow:var(--shadow)}
.row{display:flex;align-items:flex-start;gap:14px}
.row-top .col-left{flex:1.62 1 0;min-width:0;display:flex;flex-direction:column;gap:14px}
.row-top .col-right{flex:1 0 336px;max-width:336px;display:flex;flex-direction:column;gap:14px}

.card-head{display:flex;align-items:center;gap:8px;margin-bottom:12px}
.head-ico{width:20px;height:20px;border-radius:6px;flex:0 0 20px;display:grid;place-items:center;background:linear-gradient(135deg,#3B82F6,#2563EB)}
.head-ico svg{width:11px;height:11px}
.card-head h3{font-size:13.5px;font-weight:700;letter-spacing:-.1px}
.card-head .sub{font-size:10.5px;color:var(--muted)}
.card-head .right{margin-left:auto;display:flex;align-items:center;gap:10px}
.ghost{
  height:26px;padding:0 10px;border-radius:7px;background:#fff;border:1px solid #E2E8F0;
  color:var(--ink2);font-size:11px;display:inline-flex;align-items:center;gap:5px;
  cursor:pointer;transition:.15s;
}
.ghost:hover{border-color:#BFD6F5;color:var(--blue);background:#F7FBFF}
.ghost svg{width:11px;height:11px}
.link{font-size:11px;color:#7A8CA3;cursor:pointer;background:none;border:0;padding:0;transition:.15s}
.link:hover{color:var(--blue)}
.link.blue{color:var(--blue);font-weight:500}
.chip{
  height:22px;padding:0 8px;border-radius:6px;background:#F4F8FD;border:1px solid #EAF1FA;
  display:inline-flex;align-items:center;gap:3px;font-size:10.5px;color:#6B7C93;cursor:pointer;
}
.chip svg{width:9px;height:9px}
.head-num{height:17px;min-width:17px;padding:0 5px;border-radius:5px;background:#EDF3FC;display:inline-flex;align-items:center;font-size:10px;font-weight:600;color:#5B7291}

/* ---------- ② 通知公告（5.2.1-②） ---------- */
.notice-list{display:flex;flex-direction:column}
.notice{display:flex;gap:10px;padding:9px 0;border-top:1px solid var(--line-soft);cursor:pointer;transition:.14s}
.notice:first-child{border-top:0}
.notice:hover{background:#F8FBFF}
.notice .nt-type{height:19px;padding:0 6px;border-radius:5px;display:inline-flex;align-items:center;flex:0 0 auto;margin-top:1px;font-size:10px;font-weight:600}
.notice .nt-type.blue{background:var(--blue-tint);color:var(--blue)}
.notice .nt-type.orange{background:var(--amber-tint);color:var(--amber-ink)}
.notice .nt-type.red{background:var(--red-tint);color:var(--red)}
.notice .nt-type.green{background:var(--green-tint);color:var(--green-ink)}
.notice .nt-body{flex:1;min-width:0}
.notice .nt-body h4{font-size:12px;font-weight:500;margin-bottom:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.notice .nt-body h4 .nt-new{color:#E5484D;font-size:10px;margin-right:4px;font-weight:700}
.notice .nt-body p{font-size:10.5px;color:#93A3B8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.notice .nt-meta{flex:0 0 auto;display:flex;flex-direction:column;align-items:flex-end;gap:2px;padding-top:2px}
.notice .nt-meta time{font-size:10px;color:#B8C4D4}
.notice .nt-meta .nt-org{font-size:10px;color:#93A3B8}
.notice .nt-star{color:#E5484D;margin-right:3px}

/* ---------- ③ 待办 / 已办事宜（5.2.1-③） ---------- */
.tabs{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.tab{
  height:27px;padding:0 12px;border-radius:14px;background:#F5F8FD;border:0;
  display:inline-flex;align-items:center;gap:5px;cursor:pointer;
  font-size:11px;color:#6B7C93;transition:.15s;
}
.tab i{font-style:normal;color:#A8B6C8;font-variant-numeric:tabular-nums}
.tab:hover{background:#EAEFF7}
.tab.on{background:var(--blue);color:#fff;font-weight:600;box-shadow:0 2px 6px rgba(37,99,235,.28)}
.tab.on i{color:#C7DCFB}
.stats{display:flex;align-items:baseline;gap:30px;flex-wrap:wrap;padding:10px 0 2px}
.stat{display:flex;align-items:baseline;gap:5px}
.stat b{font-size:27px;font-weight:700;line-height:1;letter-spacing:-.03em}
.stat span{font-size:11px;color:#7A8CA3}
.stat.s-blue b{color:#5B8DEF} .stat.s-amber b{color:var(--amber)}
.stat.s-red b{color:var(--red)} .stat.s-ink b{color:#334155}
.todo-list{margin-top:8px}
.todo{display:flex;align-items:center;gap:11px;padding:11px 0;border-top:1px solid var(--line-soft)}
.todo:first-child{border-top:0}
.todo-ico{flex:0 0 34px;width:34px;height:34px;border-radius:10px;display:grid;place-items:center}
.todo-ico svg{width:16px;height:16px}
.todo-ico.blue{background:#EAF2FE} .todo-ico.green{background:#E4F7EF}
.todo-ico.amber{background:#FEF4E4} .todo-ico.violet{background:#F0EDFE}
.todo-body{flex:1;min-width:0}
.todo-body h4{font-size:12.5px;font-weight:600;margin-bottom:4px;letter-spacing:-.1px}
.todo-meta{display:flex;align-items:center;gap:6px;min-width:0}
.todo-meta p{font-size:10.5px;color:#93A3B8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.todo-side{display:flex;align-items:center;gap:7px;flex:0 0 auto}
.tag{height:22px;padding:0 9px;border-radius:6px;display:inline-flex;align-items:center;font-size:10.5px;font-weight:500;white-space:nowrap}
.tag.red{background:var(--red-tint);color:var(--red)}
.tag.amber{background:var(--amber-tint);color:var(--amber-ink)}
.tag.blue{background:var(--blue-tint);color:var(--blue)}
.tag.green{background:var(--green-tint);color:var(--green-ink)}
.icon-btn{width:22px;height:22px;border-radius:6px;background:transparent;border:0;cursor:pointer;display:grid;place-items:center;transition:.15s}
.icon-btn:hover{background:#F1F5FB}
.icon-btn svg{width:13px;height:13px}
.act-btn{
  height:26px;padding:0 11px;border-radius:7px;border:0;cursor:pointer;
  font-size:11px;font-weight:500;color:#fff;background:linear-gradient(135deg,#3B82F6,#2563EB);
  box-shadow:0 2px 6px rgba(37,99,235,.26);transition:.15s;
}
.act-btn:hover{transform:translateY(-1px);box-shadow:0 3px 10px rgba(37,99,235,.36)}
.more-btn{width:24px;height:24px;border-radius:7px;background:#F5F8FD;border:0;cursor:pointer;display:grid;place-items:center;transition:.15s}
.more-btn:hover{background:#EAF0F9}
.more-btn svg{width:13px;height:13px}

/* ---------- ④ 全行项目总览态势（5.2.1-④） ---------- */
.ov-hero{padding:2px 0 12px}
.ov-hero b{font-size:32px;font-weight:700;letter-spacing:-.035em;line-height:1;display:block}
.ov-hero b i{font-size:13px;font-weight:500;font-style:normal;letter-spacing:0;margin-left:2px}
.ov-hero span{display:block;font-size:10.5px;color:#A8B6C8;margin-top:4px}
.ov-3{display:flex;gap:10px;padding-bottom:12px;border-bottom:1px solid var(--line-soft)}
.ov-3 > div{flex:1;min-width:0}
.ov-3 span{font-size:10.5px;color:#A8B6C8;display:block;margin-bottom:2px}
.ov-3 b{font-size:14px;font-weight:700;letter-spacing:-.02em}
.ov-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;padding-top:12px}
.ov-cell{background:linear-gradient(160deg,#F8FBFF,#F2F7FE);border-radius:10px;padding:10px 11px}
.ov-cell .lb{display:flex;align-items:center;gap:5px;margin-bottom:5px}
.ov-cell .lb svg{width:12px;height:12px;flex:0 0 12px}
.ov-cell .lb span{font-size:10px;color:#93A3B8}
.ov-cell b{font-size:20px;font-weight:700;display:block;line-height:1.15;letter-spacing:-.03em}
.c-blue{color:#5B8DEF} .c-red{color:var(--red)} .c-green{color:var(--green-ink)}
.c-amber{color:var(--amber)} .c-ink{color:var(--ink)}
.filter-row{display:flex;align-items:center;gap:8px;margin-bottom:12px}
.seg{display:inline-flex;background:#F1F5FB;border-radius:9px;padding:3px;gap:2px}
.seg button{height:24px;padding:0 11px;border-radius:7px;border:0;background:transparent;cursor:pointer;font-size:11px;color:#6B7C93;transition:.15s}
.seg button:hover{color:var(--blue)}
.seg button.on{background:#fff;color:var(--blue);font-weight:600;box-shadow:0 1px 4px rgba(23,51,97,.1)}

/* ---------- ④b 各区域分布 ---------- */
.region-chart{display:flex;flex-direction:column;gap:9px}
.region-row{display:flex;align-items:center;gap:8px}
.region-row .rg-name{flex:0 0 56px;font-size:11px;color:#55677D}
.region-row .rg-track{flex:1;height:12px;border-radius:6px;background:#F1F5FB;overflow:hidden}
.region-row .rg-bar{height:100%;border-radius:6px;background:linear-gradient(90deg,#8FC0FF,#2563EB);transition:width .5s}
.region-row .rg-bar.g{background:linear-gradient(90deg,#6EE7B7,#059669)}
.region-row .rg-val{flex:0 0 auto;font-size:10.5px;color:#6B7C93;font-variant-numeric:tabular-nums;width:66px;text-align:right}

/* ---------- ④c 质量安全态势 ---------- */
.qs{display:flex;gap:12px}
.qs .qs-donut{flex:0 0 96px;width:96px;height:96px;position:relative}
.qs .qs-legend{flex:1;display:flex;flex-direction:column;gap:7px;justify-content:center}
.qs-legend .ql{display:flex;align-items:center;gap:6px;font-size:10.5px;color:#55677D}
.qs-legend .ql i{width:8px;height:8px;border-radius:50%;display:block;flex:0 0 8px}
.qs-legend .ql b{margin-left:auto;font-size:12px;font-weight:700;font-variant-numeric:tabular-nums;color:#334155}
.qs .donut-c{position:absolute;inset:0;display:grid;place-items:center;text-align:center}
.qs .donut-c b{display:block;font-size:16px;font-weight:700;line-height:1}
.qs .donut-c span{font-size:9px;color:#A8B6C8}

/* ---------- ⑤ 合规预警状态（5.6.7） ---------- */
.risk-list{display:flex;flex-direction:column}
.risk{display:flex;gap:10px;padding:11px 0;border-top:1px solid var(--line-soft)}
.risk:first-child{border-top:0;padding-top:2px}
.risk .no{flex:0 0 22px;width:22px;height:22px;border-radius:50%;display:grid;place-items:center}
.risk .no svg{width:11px;height:11px}
.risk .no.red{background:#FDE8E8} .risk .no.orange{background:#FEF3E2}
.risk .no.blue{background:var(--blue-tint)} .risk .no.green{background:var(--green-tint)}
.risk .no.violet{background:var(--violet-tint)}
.risk .body{flex:1;min-width:0}
.risk .body h4{font-size:11.5px;font-weight:600;margin-bottom:4px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.risk .body h4 .lv{height:17px;padding:0 5px;border-radius:4px;font-size:9.5px;font-weight:700;display:inline-flex;align-items:center}
.risk .body h4 .lv.high{background:#FDE8E8;color:var(--red)}
.risk .body h4 .lv.mid{background:var(--amber-tint);color:var(--amber-ink)}
.risk .body h4 .lv.low{background:#EDF3FC;color:#5B7291}
.risk .body .meta{display:flex;align-items:center;gap:8px;font-size:10px;color:#93A3B8;margin-bottom:3px}
.risk .body .meta time{font-variant-numeric:tabular-nums}
.risk .body .meta .src{display:inline-flex;align-items:center;gap:3px}
.risk .body .meta .src svg{width:10px;height:10px}
.risk .body .concl{font-size:10.5px;color:#6B7C93;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.risk .side{flex:0 0 auto;display:flex;flex-direction:column;align-items:flex-end;gap:5px}
.risk .side .tag{height:20px;padding:0 7px;border-radius:5px;font-size:10px;font-weight:600}
.risk .side .tag.red{background:var(--red-tint);color:var(--red)}
.risk .side .tag.amber{background:var(--amber-tint);color:var(--amber-ink)}
.risk .side .tag.green{background:var(--green-tint);color:var(--green-ink)}
.risk .side .ok{font-size:10px;color:#93A3B8}

/* ---------- ⑥ 项目动态信息列表（5.2.1-⑤） ---------- */
.table{width:100%;border-collapse:collapse}
.table th{text-align:left;font-size:10.5px;font-weight:400;color:#A8B6C8;padding:0 16px 10px 0;white-space:nowrap}
.table th:last-child{padding-right:0}
.table th.r{text-align:right} .table th.c{text-align:center}
.table td{padding:10px 16px 10px 0;border-top:1px solid var(--line-soft);vertical-align:middle}
.table td:last-child{padding-right:0}
.table tr:first-child td{border-top:0}
.table tbody tr{transition:background .15s}
.table tbody tr:hover{background:#F8FBFF}
.tt-name{font-size:11.5px;font-weight:600;display:block;letter-spacing:-.1px}
.tt-code{font-size:9.5px;color:#B8C4D4;display:block;margin-top:2px}
.ptype{height:19px;padding:0 6px;border-radius:4px;display:inline-flex;align-items:center;font-size:10px;font-weight:500;white-space:nowrap}
.ptype.bank{background:#E8F0FE;color:#2563EB}
.ptype.big{background:var(--violet-tint);color:var(--violet)}
.ptype.other{background:var(--slate-tint);color:#64748B}
.role-badge{height:20px;padding:0 8px;border-radius:5px;display:inline-flex;align-items:center;font-size:10px;font-weight:500;white-space:nowrap}
.role-badge.orange{background:var(--amber-tint);color:var(--amber-ink)}
.role-badge.blue{background:var(--blue-tint);color:var(--blue)}
.badge-state{height:20px;padding:0 8px;border-radius:5px;display:inline-flex;align-items:center;font-size:10px;font-weight:600;white-space:nowrap}
.badge-state.blue{background:var(--blue-tint);color:var(--blue)}
.badge-state.green{background:var(--green-tint);color:var(--green-ink)}
.badge-state.amber{background:var(--amber-tint);color:var(--amber-ink)}
.badge-state.gray{background:var(--slate-tint);color:#64748B}
.table td.money{text-align:right;font-size:11.5px;font-weight:600;font-variant-numeric:tabular-nums}
.table td.n{text-align:center;font-size:11px;font-weight:600;font-variant-numeric:tabular-nums;color:#4A5D75}
.table td.n.red{color:var(--red)}
.table td.time{font-size:10.5px;color:#93A3B8;font-variant-numeric:tabular-nums}
.table td.act{text-align:right;white-space:nowrap}
.enter{display:inline-flex;align-items:center;gap:3px;font-size:11px;font-weight:600;color:var(--blue);cursor:pointer}
.enter svg{width:11px;height:11px}
.enter:hover{text-decoration:underline}
.prog{display:flex;align-items:center;gap:8px;min-width:120px}
.prog .track{flex:1;height:7px;border-radius:4px;background:#EDF1F7;overflow:hidden}
.prog .bar{height:100%;border-radius:4px;background:linear-gradient(90deg,#5B9DFB,#2563EB);transition:width .5s}
.prog .bar.done{background:linear-gradient(90deg,#34D399,#059669)}
.prog .bar.expired{background:linear-gradient(90deg,#FDBA74,#E5484D)}
.prog em{font-style:normal;font-size:10.5px;color:#6B7C93;flex:0 0 auto;font-variant-numeric:tabular-nums}

/* ================= 4. 页脚状态栏 ================= */
.statusbar{
  flex:0 0 34px;height:34px;display:flex;align-items:center;justify-content:space-between;
  gap:16px;padding:0 20px;background:#fff;border-top:1px solid #E5EEF9;font-size:10px;color:#A8B6C8;
}
.dot-live{display:inline-flex;align-items:center;gap:5px}
.dot-live i{width:6px;height:6px;border-radius:50%;background:#10B981;display:block;animation:blink 2s infinite}
@keyframes blink{50%{opacity:.3}}

/* ================= 弹窗 ================= */
.mask{position:fixed;inset:0;background:rgba(15,32,60,.42);backdrop-filter:blur(2px);z-index:100;display:none;align-items:center;justify-content:center;padding:24px}
.mask.show{display:flex}
.modal{background:#fff;border-radius:16px;width:560px;max-width:100%;max-height:90vh;overflow:auto;box-shadow:0 20px 60px rgba(15,32,60,.28)}
.modal.wide{width:640px}
.modal-head{display:flex;align-items:center;gap:8px;padding:16px 18px;border-bottom:1px solid var(--line-soft)}
.modal-head h3{font-size:14px;font-weight:700}
.modal-head .close{margin-left:auto;width:26px;height:26px;border-radius:8px;border:0;background:#F5F8FD;cursor:pointer;display:grid;place-items:center}
.modal-head .close:hover{background:#EAF0F9}
.modal-head .close svg{width:13px;height:13px}
.modal-body{padding:16px 18px}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.field{display:flex;flex-direction:column;gap:5px}
.field.full{grid-column:1/-1}
.field label{font-size:11px;color:#5B7291;display:flex;align-items:center;gap:3px}
.field label i{color:var(--red);font-style:normal}
.field input,.field select,.field textarea{
  height:34px;border-radius:8px;border:1px solid #E2E8F0;padding:0 10px;font-size:12px;
  color:var(--ink);outline:none;background:#fff;width:100%;
}
.field textarea{height:64px;padding:8px 10px;resize:none;line-height:1.5}
.field input:focus,.field select:focus,.field textarea:focus{border-color:#93BDF5;box-shadow:0 0 0 3px rgba(37,99,235,.08)}
.modal-foot{display:flex;align-items:center;justify-content:flex-end;gap:10px;padding:14px 18px;border-top:1px solid var(--line-soft)}
.modal-foot .btn-ghost{height:32px;padding:0 16px;border-radius:8px;border:1px solid #E2E8F0;background:#fff;cursor:pointer;font-size:12px;color:var(--ink2)}
.modal-foot .btn-ghost:hover{border-color:#BFD6F5;color:var(--blue)}
.modal-foot .btn-primary{height:32px}
.form-tip{font-size:10.5px;color:#8A98AB;margin-bottom:12px;padding:8px 10px;border-radius:8px;background:#F6F9FD;display:flex;gap:6px;align-items:flex-start}
.form-tip svg{width:12px;height:12px;flex:0 0 12px;margin-top:1px;color:#5B8DEF}
.form-tip b{color:#5B7291}

/* GIS 点位下钻窗 */
.drill{width:380px}
.drill .dr-map{height:120px;border-radius:10px;background:linear-gradient(160deg,#EFF5FE,#E0EAFA);position:relative;overflow:hidden;margin-bottom:14px;border:1px solid #DCE7F6}
.drill .dr-map svg{position:absolute;inset:0;width:100%;height:100%}
.drill .dr-map .pin-d{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:12px;height:12px;border-radius:50%;background:#E5484D;box-shadow:0 0 0 6px rgba(229,72,77,.2),0 0 0 12px rgba(229,72,77,.1)}
.drill .kv{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:12px}
.drill .kv div{background:#F7FAFE;border-radius:9px;padding:9px 10px}
.drill .kv span{display:block;font-size:10.5px;color:#A8B6C8;margin-bottom:2px}
.drill .kv b{font-size:13px;font-weight:700}
.drill .dr-title{font-size:13.5px;font-weight:700;margin-bottom:4px}
.drill .dr-meta{font-size:10.5px;color:#93A3B8;margin-bottom:12px;display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.drill .dr-line{display:flex;gap:8px;font-size:11px;color:#55677D;padding:5px 0;border-top:1px solid var(--line-soft);align-items:center}
.drill .dr-line>span:first-child{flex:0 0 64px;color:#A8B6C8}
.drill .dr-foot{display:flex;gap:8px;margin-top:14px}
.drill .dr-foot .btn-primary{flex:1}

/* ================= 响应式 ================= */
@media (max-width:1280px){
  .row-top .col-right{flex:1 0 300px;max-width:300px}
  .search{width:320px}
  .stats{gap:22px}
  .quick-item{height:38px;font-size:12px}
}
@media (max-width:1120px){
  .row-top{flex-direction:column}
  .row-top .col-right{flex:1 1 auto;max-width:none}
  .brand-txt span{display:none}
  .quick-item .qi{width:22px;height:22px;flex-basis:22px}
}
@media (max-width:900px){
  .topbar{height:auto;flex-wrap:wrap;gap:12px;padding:10px 14px}
  .search{order:3;width:100%;max-width:none}
  .tool span{display:none}
  .tool .dot{left:12px}
  .user .info{display:none}
  .portal{overflow-x:auto;white-space:nowrap;padding:0 14px}
  .portal .pl-sso{display:none}
  .quickbar{padding:10px 10px 0}
  /* 窄屏：侧栏转为横向菜单条独占一行，主内容区紧随其下全宽显示 */
  .layout{flex-direction:column;align-items:stretch;padding:10px}
  .sidebar{
    flex:0 0 auto;width:100%;position:static;max-height:none;
    display:flex;flex-direction:row;gap:6px;overflow-x:auto;padding:6px;
  }
  .sidebar-foot,.nav-group,.nav-toggle{display:none}
  .nav-scroll,.nav-fade{display:contents}
  .nav-item{flex:0 0 auto;white-space:nowrap}
  .nav-home{flex:0 0 auto}
  .nav-home .chev{display:none}
  .table-wrap{overflow-x:auto}
  .table{min-width:1000px}
  .statusbar{height:auto;flex-direction:column;align-items:flex-start;gap:3px;padding:8px 14px}
  .form-grid{grid-template-columns:1fr}
  .modal{width:100%}
}
