/*!mod=base.css  src=index.html:8-102,106-180,184-205,209-234,238-280,284-339,343-350,354-359,363-380,384-400,404-427  v=89c808f0  —  基础 / 主题 / 登录 / 工作台 / 项目库 / 按钮*/

:root{
  --blue:#1f4e8c; --bg:#eef0eb; --line:#d7dee8;
  --green:#1f8a4c; --red:#c0392b; --gray:#5b6574;
}
*{box-sizing:border-box;margin:0;padding:0;font-family:"Microsoft YaHei","PingFang SC",sans-serif;}
html,body{height:100%;overflow:hidden}
body{background:var(--bg);color:#26333f;font-size:15.5px;}
.main{flex:1;min-width:0;height:calc(100vh - 52px);overflow-y:auto}
.hide{display:none!important;}
#login{position:fixed;inset:0;background:#1f4e8c;display:flex;align-items:center;justify-content:center;z-index:99}
.login-box{background:#fff;border-radius:10px;padding:32px 38px;width:380px;box-shadow:0 8px 30px rgba(0,0,0,.25)}
.login-box h1{font-size:21px;color:var(--blue);text-align:center;margin-bottom:4px}
.login-box .st{text-align:center;color:var(--gray);font-size:12px;margin-bottom:18px}
.f{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}
.f label{font-size:14.5px;color:#444}
.f select,.f input{padding:9px 10px;border:1px solid var(--line);border-radius:6px;font-size:15.5px}
/* 登录：密码可见性 + 验证码 */
.f .field-wrap{position:relative}
.f .field-wrap .eye{position:absolute;right:10px;top:50%;transform:translateY(-50%);cursor:pointer;font-size:16px;user-select:none}
.f .field-wrap input{padding-right:36px}
.f .cap-row{display:flex;gap:8px;align-items:stretch}
.f .cap-row input{flex:1;min-width:0}
.f .cap-row .capimg{height:40px;width:118px;border:1px solid var(--line);border-radius:6px;cursor:pointer;background:#f1f5f9}
#newAcctGrid .f{flex-direction:row;align-items:center;gap:8px;margin-bottom:0}
#newAcctGrid .f label{white-space:nowrap;font-size:13.5px;color:#444;flex:0 0 auto}
#newAcctGrid .f input,#newAcctGrid .f select{flex:1 1 auto;min-width:0;padding:8px 10px;font-size:14.5px}

.btn{border:none;border-radius:6px;padding:10px;font-size:14.5px;cursor:pointer;width:100%;background:var(--blue);color:#fff}
.btn.green{background:var(--green)}
.btn.ghost{background:#fff;color:var(--blue);border:1px solid var(--blue)}
.tip{font-size:13.5px;color:var(--gray);text-align:center;margin-top:12px}
.topbar{display:flex;align-items:center;gap:18px;color:#fff;padding:0 18px;height:40px;position:sticky;top:0;z-index:50;background:linear-gradient(90deg,rgba(13,44,84,.40) 0%,rgba(20,64,120,.25) 55%,rgba(13,44,84,.40) 100%),url('/topbar_bg.jpg') center/cover no-repeat;
  /* 【2026-10-19】通栏：#app 有 padding:16px 18px 0，topbar 被包在内，
     左右各露 18px、顶部露 16px body 背景，视觉上「两头留白 + 顶部有缝」。
     用负 margin + 等量内边距抵消：背景铺满到窗口边缘，
     而内部文字/菜单的左右留白（18px）保持原样不变。
     不用「去掉 #app padding」的方案，因为 68px 硬编码散落在
     base.css × 2 / shell.css / index.html 的 needLayer，
     改动面大且易错位。

     margin-top:-16px 把 topbar 上移到窗口最顶端；
     padding-top 保持 0 —— 高度由 height:40px 决定，
     且 align-items:center 负责垂直居中，内部元素位置不变。
     .main 等高度计算仍按原 68px，无需同步修改。 */
  margin-left:-18px; margin-right:-18px;
  padding-left:36px; padding-right:36px;
}
.topbar .brand{font-size:16.5px;font-weight:700;letter-spacing:.5px;white-space:nowrap}
.menu{display:flex;gap:2px;flex:1}
.menu .mi{padding:9px 14px;cursor:pointer;font-size:14.5px;color:#cfe0f3;border-bottom:3px solid transparent;white-space:nowrap}
.menu .mi:hover{background:#2a5290}
.menu .mi.active{background:#2a5290;color:#fff;border-bottom:3px solid #6aa1ec}
.userbox{font-size:14.5px;color:#ffffff;white-space:nowrap}
.userbox a{color:#ffffff;cursor:pointer;margin-left:8px}
.wdmi{padding:10px 14px;margin:2px 0;cursor:pointer;font-size:15.5px;color:#3b4a5a;font-weight:700;border-radius:6px;border-left:3px solid transparent;white-space:nowrap}
.wdmi:hover{background:#e6eefb}
.wdmi.active{background:#dbe9fb;color:#1f4d8d;border-left:3px solid #2a62ad}
/* 【2026-10-23】去掉 padding-top:topbar 已通栏，内容区顶部不留白；
   配合 68px→52px 的高度调整，.main 正好铺到视口底部无缝隙。 */
#app{padding:0 18px}
.top{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}
.top h2{font-size:20px;color:var(--blue);margin:0;padding-left:1em;transform:translateY(7px)}
.card{background:#fff;border:1px solid var(--line);border-radius:8px;margin-bottom:16px}
.card .hd{padding:12px 16px;border-bottom:1px solid var(--line);font-weight:700;color:#33414f}
.card .bd{padding:16px}
table{width:100%;border-collapse:collapse;font-size:14.5px}
th,td{text-align:left;padding:9px 10px;border-bottom:1px solid #eef1f5}
th{background:#f7f9fc;color:#33414f;font-weight:700}
tr:hover td{background:#f7fafd}
/* 待办任务页表格：标题与内容单行左对齐，宽表允许横向滚动查看 */
/* 待办任务页表格：固定列宽统一对齐，标题与内容单行不换行 */
#todoCard .bd{overflow-x:auto}

#todoCard th,#todoCard td{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 待处理(8列)：编号|名称(auto)|类型|负责人|当前节点|处理|处理人|操作 */


.badge{display:inline-block;padding:2px 9px;border-radius:10px;font-size:13.5px}
.b-ok{background:#e6f4ea;color:var(--green)}
.b-info{background:#e8f0fb;color:var(--blue)}
.b-gray{background:#eef1f5;color:var(--gray)}
.b-fail{background:#fde8e7;color:var(--red)}
#kb,#kb2{display:flex;gap:5px;align-items:flex-start;margin-bottom:14px}
.ks{flex:1;min-width:0;border:1px solid #cfe0f6;border-radius:6px;background:linear-gradient(135deg,#f2f7fe,#dceafb);padding:10px 6px;cursor:pointer;text-align:center;position:relative;box-shadow:0 1px 3px rgba(42,98,173,.08)}
.ks.sel{border:2px solid #2a62ad;background:linear-gradient(135deg,#cfe3fa,#b3d4f7);box-shadow:0 2px 8px rgba(42,98,173,.25)}
.ks .n{font-size:12px;color:#33414f;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ks .cnt{font-size:15.5px;font-weight:700;color:var(--blue);margin-top:2px}
#modalNew{position:fixed;inset:0;z-index:80;display:flex;align-items:flex-start;justify-content:center;padding:0}
#modalMe{position:fixed;inset:0;z-index:90;display:flex;align-items:flex-start;justify-content:flex-end;padding:0}
#modalMe .m-pop{position:fixed;width:334px;max-width:92vw;height:auto;max-height:none;border-radius:10px;box-shadow:0 8px 28px rgba(0,0,0,.18);border:1px solid #e3e8ef}
#modalMe .m-body{padding:14px 16px}
.me-row{display:flex;gap:12px;align-items:flex-start;padding:7px 0;border-bottom:1px dashed #eef1f5;font-size:15.5px}
.me-row .me-lab{width:74px;flex:none;color:#5a6b7c}
#modalMe .m-head{border-radius:10px 10px 0 0}
#modalView{position:fixed;inset:0;z-index:96;display:flex;align-items:flex-start;justify-content:center;padding:0}
#modalViewSm{position:fixed;inset:0;z-index:97;background:rgba(0,0,0,0);pointer-events:auto}
#modalViewSm .m-mask{pointer-events:auto;background:transparent}
#modalViewSm .m-pop{max-width:600px;width:450px;max-height:calc(100vh - 24px);height:auto;overflow:auto;border-radius:12px;box-shadow:0 12px 40px rgba(0,0,0,.25);padding:0;margin:0;position:fixed;pointer-events:auto}
#modalAudit{position:fixed;inset:0;z-index:97;display:flex;align-items:flex-start;justify-content:center;padding:0}
.m-mask{position:absolute;inset:0;background:rgba(20,30,50,.45)}
.m-pop{position:relative;background:#f7f9fc;width:100%;height:100%;max-width:100%;max-height:100%;overflow:auto;border-radius:0}
.m-head{padding:13px 18px;background:var(--blue);color:#fff;font-weight:700;display:flex;justify-content:space-between;align-items:center;position:sticky;top:0;z-index:2}
.m-x{cursor:pointer;font-size:21px;line-height:1;opacity:.85}
.m-body{padding:16px 18px}
.grid3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px}
.gr{display:flex;flex-direction:column;gap:5px;margin-bottom:12px}
.gr label{font-size:14.5px;color:#333;font-weight:600}
.gr input,.gr select{padding:8px 9px;border:1px solid var(--line);border-radius:6px;font-size:15.5px}
.mono{font-family:Consolas,monospace;color:var(--blue);font-weight:700}
.row-btns{display:flex;gap:10px;margin-top:14px}
.upitem{display:flex;justify-content:space-between;align-items:center;padding:8px 10px;border:1px solid #e6ebf2;border-radius:6px;margin-bottom:8px;background:#fafbfd}
.upitem .nm{font-size:14.5px}
.pill{font-size:12px;padding:2px 8px;border-radius:8px;margin-left:6px}
.p-must{background:#fde8e7;color:var(--red)}
.p-opt{background:#eef1f5;color:var(--gray)}
.au-res{padding:2px;}
.au-res .row{display:flex;justify-content:space-between;padding:3px 0;border-bottom:1px dashed #eef1f5;font-size:14.5px}
.au-res .row b{color:var(--blue)}
.ncsec input:focus,.ncsec textarea:focus,input[data-tb]:focus,textarea[data-tb]:focus{border-color:#2f6fe0!important;box-shadow:0 0 0 2px rgba(47,111,224,.12)!important}

/* ==== 主题美化 & 布局优化（美观大方、逻辑清晰） ==== */
:root{
  --blue:#1a56b0; --blue2:#16458f;
  --bg:#f4f6f9; --line:#e5e7eb;
  --green:#16a34a; --red:#dc2626; --gray:#6b7280;
  --shadow:0 1px 3px rgba(16,24,40,.06),0 1px 2px rgba(16,24,40,.04);
}
body{color:#1f2937;font-size:15.5px;}
#login{background:linear-gradient(135deg,#1a56b0 0%,#143d7e 100%);}
.login-box{box-shadow:0 16px 48px rgba(16,24,40,.28);border-radius:12px;}
.card{background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow);margin-bottom:18px;overflow:hidden;}
.card .hd{padding:13px 18px;background:#f8fafc;border-bottom:1px solid var(--line);font-weight:600;color:#334155;font-size:15.5px;}
.card .bd{padding:18px;}
.topbar{box-shadow:0 1px 6px rgba(16,24,40,.18);}
.menu .mi.active{background:var(--blue2);border-bottom-color:#8fb6ff;}
/* 【2026-10-23】顶部「工作台」高亮块调淡（两轮调整）：
   原 #16458f 配 #8fb6ff 下边框，在通栏深色背景上对比过强、显得扎眼。
   这里只覆盖「工作台」这一个菜单项的高亮色，不改 --blue2 变量
   （该变量可能被其他元素引用）。

   第二轮改用**半透明深蓝**（与 topbar 背景的半透明色同源），而非固定实色，
   这样高亮块能随背景图深浅自然过渡。
   注意不能用「半透明白」——实测那样白字对比度只有 2.56:1，低于 WCAG AA
   大字阈值 3.0，白字会发虚；用半透明深色时对比度 3.9:1，清晰可读。 */
.menu .mi.active{background:rgba(13,44,84,.14);border-bottom-color:rgba(143,182,255,.55);}
.menu .mi:hover{background:rgba(13,44,84,.07);}
.wdmi{transition:all .12s ease;padding:10px 14px;border-radius:8px;}
.wdmi:hover{background:#eaf1fb;}
.wdmi.active{background:#dbeafe;color:#1a56b0;border-left-color:#1a56b0;}
th{background:#f8fafc;color:#475569;font-weight:600;font-size:13.5px;}
tbody tr:nth-child(even){background:#fafbfd;}
tr:hover td{background:#eef4fc;}
.btn{border-radius:6px;font-weight:500;transition:all .15s ease;}
.btn:hover{filter:brightness(1.07);}
.btn:active{transform:translateY(1px);}
.gr input,.gr select,.f input,.f select{border-radius:6px;transition:border-color .15s,box-shadow .15s;}
.gr input:focus,.gr select:focus,.f input:focus,.f select:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(26,86,176,.12);outline:none;}
.badge{font-weight:500;padding:3px 10px;}
.top h2{font-size:20px;}

/* ==== 响应式适配（平板/手机） ==== */
@media (max-width: 1024px){
  .grid3{grid-template-columns:1fr 1fr;}
  #newAcctGrid{grid-template-columns:1fr 1fr;}
}
@media (max-width: 768px){
  html,body{overflow:auto;}
  .login-box{width:92vw;max-width:400px;padding:24px 20px;}
  /* 移动端 topbar 高度变成 auto/min-height:52px 且有 8px 纵向 padding，
     桌面端的负 margin 补偿值不再成立，这里重置为自身 padding。 */
  .topbar{height:auto;min-height:52px;flex-wrap:wrap;padding:8px 12px;gap:6px 10px;
    margin-left:-18px; margin-right:-18px;
    padding-left:12px; padding-right:12px;}
  .topbar .brand{font-size:15.5px;}
  .menu{order:3;flex-basis:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;}
  .menu .mi{padding:10px 12px;font-size:13.5px;flex-shrink:0;}
  .userbox{margin-left:auto;font-size:13.5px;}
  .main{height:auto;overflow:visible;}
  [style*="width:188px"],[style*="width:230px"],[style*="width:290px"]{
    width:100%!important;height:auto!important;flex:none!important;
    overflow-x:auto!important;overflow-y:hidden!important;
    border-right:none!important;border-bottom:2px solid #c0c4cc!important;
    white-space:nowrap!important;margin:0 0 10px!important;padding:0!important;
    position:static!important;align-self:stretch!important;
  }
  .wdnav > div{margin-top:0!important;padding:4px 8px!important;display:flex!important;flex-direction:row!important;align-items:center!important;}
  .wdnav > div > div:first-child{display:none!important;}
  .wdmi{display:inline-block!important;margin:0 2px!important;padding:8px 12px!important;}
  [style*="height:calc(100vh - 52px)"]{flex-direction:column!important;height:auto!important;overflow:visible!important;align-items:stretch!important;}
  #p_cg div[style*="gap:0"]{flex-direction:column!important;}
  #dashRight{flex:none!important;padding:12px 8px!important;}
  .card .bd{overflow-x:auto;-webkit-overflow-scrolling:touch;}
  table{min-width:640px;}
  
  #modalViewSm .m-pop{width:100vw!important;max-width:100vw!important;height:100vh!important;max-height:100vh!important;border-radius:0!important;}
  #modalMe .m-pop{width:94vw!important;max-width:94vw!important;}
  #p_audit .bd>div{flex-direction:column!important;}
  #p_audit .bd>div>div{width:100%!important;min-width:0!important;position:static!important;flex:none!important;}
  #p_audit .bd iframe{max-height:60vh;}
  .grid3{grid-template-columns:1fr!important;}
  #newAcctGrid{grid-template-columns:1fr!important;}
  .gr input,.gr select,.f input,.f select{font-size:16.5px!important;padding:10px!important;}
  .btn{padding:12px!important;font-size:16.5px!important;}
  #needLayer{right:0!important;top:52px!important;}   /* left 由 JS 动态贴合政府采购导航栏 */
}
@media (max-width: 480px){
  .login-box{width:94vw;padding:20px 16px;}
  .topbar .userbox a{margin-left:6px;}
}


/* ==== 登录页：参考四川政府采购一体化平台布局 ==== */
#login{background:linear-gradient(135deg,rgba(9,39,80,.70) 0%,rgba(26,86,176,.58) 100%),url('/login_bg.jpg') center/cover no-repeat;overflow:hidden;display:flex;align-items:center;justify-content:center;gap:90px;padding:0 24px;}
#login::before{content:"";position:absolute;width:560px;height:560px;border-radius:50%;background:rgba(255,255,255,.05);top:-180px;right:-120px;z-index:0;}
.login-left{position:relative;z-index:1;max-width:400px;color:#fff;text-align:left;}
.login-left h1{font-size:36.5px;font-weight:700;letter-spacing:2px;margin-bottom:16px;color:#fff;}
.login-left .st{font-size:15.5px;color:rgba(255,255,255,.9);line-height:1.8;letter-spacing:1px;}
.login-box{width:384px;max-width:92vw;min-height:400px;border-radius:5px;padding:0;overflow:hidden;box-shadow:0 14px 44px rgba(8,28,58,.35);position:relative;z-index:1;}
#lgBox,#regBox{padding:22px 34px 30px;}
#lgBox::before{content:"账号登录";display:block;font-size:19px;font-weight:700;color:#303133;text-align:center;margin-bottom:20px;}
.f{margin-bottom:16px;}
.f label{font-size:13.5px;color:#606266;font-weight:500;}
.f input,.f select{height:40px;padding:0 12px;border:1px solid #dcdfe6;border-radius:4px;font-size:14.5px;background:#fff;transition:border-color .2s,box-shadow .2s;}
.f input:focus,.f select:focus{border-color:#1a56b0;box-shadow:0 0 0 2px rgba(26,86,176,.12);outline:none;}
.btn{height:42px;border-radius:4px;background:#1a56b0;font-size:15.5px;font-weight:500;letter-spacing:2px;margin-top:4px;}
.btn:hover{background:#164a9a;filter:none;}
.tip{color:#909399;font-size:12px;}
@media(max-width:768px){
  #login{flex-direction:column;gap:28px;justify-content:flex-start;padding-top:44px;}
  .login-left{text-align:center;max-width:92vw;}
  .login-left h1{font-size:27.5px;margin-bottom:8px;}
}


/* ==== 工作台（参考四川政府采购一体化平台）==== */
.wf-wrap{display:flex;gap:16px;padding:16px;align-items:flex-start;box-sizing:border-box}
.wf-main{flex:1;min-width:0}
.wf-side{width:340px;flex-shrink:0}
.wf-hd{display:flex;justify-content:space-between;align-items:center;font-weight:600}
.wf-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:16px 6px;padding:6px 0}
.wf-app{display:flex;flex-direction:column;align-items:center;gap:8px;cursor:pointer;padding:10px 4px;border-radius:8px;transition:background .15s}
.wf-app:hover{background:#f2f7ff}
.wf-app .ico{width:52px;height:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 12px rgba(0,0,0,.14)}
.wf-app .ico svg{width:24px;height:24px}
.wf-app .lbl{font-size:13.5px;color:#3b4a5a;text-align:center}
.wf-profile{background:linear-gradient(135deg,#2f6fe0 0%,#5b9bf0 100%);border-radius:8px;padding:26px 16px;text-align:center;color:#fff;margin-bottom:16px;position:relative;overflow:hidden}
.wf-profile::after{content:"";position:absolute;right:-40px;bottom:-60px;width:170px;height:170px;background:rgba(255,255,255,.13);transform:rotate(45deg)}
.wf-profile::before{content:"";position:absolute;left:-50px;bottom:-70px;width:130px;height:130px;background:rgba(255,255,255,.08);transform:rotate(45deg)}
.wf-profile .wf-av{width:62px;height:62px;border-radius:50%;background:rgba(255,255,255,.92);color:#2f6fe0;font-size:27.5px;font-weight:700;display:flex;align-items:center;justify-content:center;margin:0 auto 10px;position:relative;z-index:1}
.wf-profile .wf-uname{font-size:15.5px;position:relative;z-index:1}
.wf-profile .wf-usub{font-size:12px;opacity:.85;margin-top:4px;position:relative;z-index:1}
.wf-stat-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.wf-stat{background:#f7f9fc;border:1px solid #e8edf5;border-radius:8px;padding:12px 12px 14px}
.wf-stat .t{font-size:12px;color:#6b7280;margin-bottom:6px;white-space:nowrap}
.wf-stat .v{font-size:15.5px;font-weight:700;color:#1a56b0}
@media(max-width:900px){
  .wf-wrap{flex-direction:column;padding:12px}
  .wf-side{width:100%}
}


/* ==== 采购项目库（参考官方一体化平台）==== */
.cglib-wrap{display:flex;gap:16px;align-items:flex-start}
.cglib-main{flex:1;min-width:0}
.cglib-detail{width:300px;flex-shrink:0;border-left:1px solid #e5e7eb;padding-left:16px;min-height:420px}
.cglib-hd{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}
.cglib-title{font-size:17.5px;font-weight:700;color:#1f2937;display:flex;align-items:center;gap:8px}
.cglib-title .ci{width:16px;height:16px;border:2px solid #1a56b0;border-radius:3px;display:inline-block;position:relative}
.cglib-title .ci::after{content:"";position:absolute;left:3px;top:4px;width:6px;height:2px;background:#1a56b0;box-shadow:0 4px 0 #1a56b0}
.cglib-tools{display:flex;gap:8px}
.cglib-search{width:280px;height:34px;padding:0 12px;border:1px solid #dcdfe6;border-radius:4px;font-size:13.5px}
.cglib-search:focus{border-color:#1a56b0;outline:none;box-shadow:0 0 0 2px rgba(26,86,176,.12)}
.btn-adv{height:34px;padding:0 16px;border:1px solid #1a56b0;background:#fff;color:#1a56b0;border-radius:4px;cursor:pointer;font-size:13.5px;white-space:nowrap}
.btn-adv:hover{background:#f2f7ff}
.cglib-tabs{display:flex;gap:2px;border-bottom:1px solid #e5e7eb;margin-bottom:12px}
.cglib-tabs span{padding:8px 20px;cursor:pointer;font-size:14.5px;color:#6b7280;border-bottom:2px solid transparent;margin-bottom:-1px}
.cglib-tabs span.on{color:#1a56b0;border-bottom-color:#1a56b0;font-weight:600}
.cg-hd{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}
.cg-title{font-size:16.5px;color:#1f2937}
.cg-tools{display:flex;gap:8px}
.cg-search{width:220px;height:32px;padding:0 12px;border:1px solid #dcdfe6;border-radius:4px;font-size:13.5px}
.cg-table{width:100%;border-collapse:collapse;font-size:13.5px}
.cg-table th{background:#eef4fb;color:#334155;font-weight:600;padding:9px 10px;border:1px solid #dbe6f5;text-align:left;white-space:nowrap}
.cg-table td{padding:10px;border:1px solid #e8edf5;vertical-align:top;color:#334155}
.cg-table tbody tr{cursor:pointer}
.cg-table tbody tr:hover td{background:#f7fafd}
.cg-table tbody tr.sel td{background:#e8f1fe}
.cg-lk{color:#1a56b0;cursor:pointer}
.cglib-detail .dtitle{display:flex;justify-content:space-between;align-items:center;font-weight:700;color:#1a56b0;border-bottom:1px solid #e5e7eb;padding-bottom:9px;margin-bottom:4px;font-size:14.5px}
.cglib-detail .dclose{color:#c0c4cc;cursor:pointer;font-size:16.5px}
.cglib-detail .dsec{font-weight:600;color:#334155;margin:14px 0 4px;font-size:13.5px}
.cglib-detail .drow{display:flex;justify-content:space-between;gap:10px;font-size:13.5px;padding:6px 0;border-bottom:1px dashed #eef1f5}
.cglib-detail .drow .k{color:#6b7280;white-space:nowrap}
.cglib-detail .drow .v{color:#1f2937;text-align:right;word-break:break-all}
.btn-primary{background:#1a56b0;color:#fff;border-color:#1a56b0}
.btn-primary:hover{background:#164a9a}
.sc-in{width:100%;box-sizing:border-box;border:none;background:transparent;font-size:13.5px;padding:4px 6px;text-align:center;font-family:inherit}
.sc-in:focus{outline:1px solid #1a56b0;background:#fff}
.stg-hint{color:#64748b;font-size:12px;background:#eef2f7;border-radius:10px;padding:2px 10px}
@media(max-width:1100px){
  .cglib-wrap{flex-direction:column}
  .cglib-detail{width:100%;border-left:none;border-top:1px solid #e5e7eb;padding-left:0;padding-top:14px}
}


/* ==== 项目详情页（参考官方查看页）==== */
#modalProjView{position:fixed;inset:0;z-index:99;background:#fff;overflow:auto}
.pv-top{display:flex;align-items:center;gap:10px;padding:13px 22px;border-bottom:1px solid #e5e7eb;position:sticky;top:0;background:#fff;z-index:3}
.pv-close{margin-left:auto;padding:6px 20px;border:1px solid #dcdfe6;background:#fff;border-radius:4px;cursor:pointer;font-size:13.5px;color:#303133}
.pv-close:hover{border-color:#1a56b0;color:#1a56b0}
.pv-hd{font-size:19px;font-weight:700;color:#1f2937;display:flex;align-items:center;gap:8px;margin-bottom:8px}
.pv-hic{width:20px;height:20px;border-radius:4px;background:#1a56b0;position:relative;display:inline-block;flex-shrink:0}
.pv-hic::after{content:"";position:absolute;left:5px;top:5px;width:8px;height:8px;border:2px solid #fff;border-radius:2px}
.pv-hcode{color:#1a56b0;font-weight:600}
.pv-sub{display:flex;align-items:center;gap:8px;font-size:14.5px;color:#334155;padding:10px 0 13px;border-bottom:1px solid #e5e7eb;margin-bottom:8px;flex-wrap:wrap}
.pv-sic{width:15px;height:15px;border:2px solid #1a56b0;border-radius:3px;display:inline-block;position:relative;flex-shrink:0}
.pv-sic::after{content:"";position:absolute;left:2px;top:3px;width:6px;height:2px;background:#1a56b0;box-shadow:0 4px 0 #1a56b0}
.pv-sname{font-weight:600;color:#1f2937}
.pv-sc{color:#6b7280}
.pv-tag{background:#e8f5e9;color:#2e7d32;border:1px solid #a5d6a7;border-radius:3px;padding:1px 9px;font-size:12px}
.pv-sec{display:flex;align-items:center;gap:8px;font-size:15.5px;font-weight:700;color:#1a56b0;margin:22px 0 16px}
.pv-bar{width:4px;height:15px;background:#1a56b0;border-radius:2px;display:inline-block}
.pv-form{display:grid;grid-template-columns:1fr 1fr;gap:15px 48px}
.pv-r{display:flex;align-items:center;gap:14px}
.pv-r label{width:118px;text-align:right;color:#6b7280;font-size:13.5px;flex-shrink:0}
.pv-in{flex:1;background:#f5f7fa;border:1px solid #e8edf5;border-radius:4px;padding:8px 12px;font-size:13.5px;color:#1f2937;min-height:34px;display:flex;align-items:center}
.pv-table{width:100%;border-collapse:collapse;font-size:13.5px}
.pv-table th{background:#f2f6fc;color:#334155;font-weight:600;padding:10px;border:1px solid #e2eaf6;white-space:nowrap;text-align:center}
.pv-table td{padding:10px;border:1px solid #e8edf5;color:#334155;text-align:center}
.pv-eye{color:#1a56b0;cursor:pointer;display:inline-flex;vertical-align:middle}
.pv-files{font-size:13.5px}
.pv-file{display:flex;justify-content:space-between;gap:12px;padding:8px 0;border-bottom:1px dashed #eef1f5}
.pv-file a{color:#1a56b0;cursor:pointer;white-space:nowrap}
@media(max-width:900px){
  .pv-form{grid-template-columns:1fr;gap:12px}
  .pv-r label{width:96px}
  .pv-body{padding:12px 14px 40px}
}

.pv-layout{display:flex;gap:20px;align-items:flex-start}
.pv-side{width:230px;flex-shrink:0;border-right:1px solid #eef1f5;padding-right:14px;min-height:420px}
.pv-side-t{font-size:13.5px;color:#94a3b8;margin:4px 0 10px;padding-left:8px}
.pv-step{display:flex;align-items:center;gap:9px;padding:10px 8px;font-size:13.5px;color:#6b7280;border-radius:6px;position:relative;white-space:nowrap}
.pv-step .dot{width:18px;height:18px;border-radius:50%;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;font-size:11px;border:1.5px solid #cbd5e1;color:#fff;background:#fff}
.pv-step.done .dot{border-color:#22c55e;background:#22c55e}
.pv-step.cur{background:#eef4fd;color:#1a56b0;font-weight:600}
.pv-step.cur .dot{border-color:#1a56b0;background:#1a56b0}
.pv-step:not(:last-child)::after{content:"";position:absolute;left:16px;top:30px;width:2px;height:13px;background:#e5e7eb}
/* 二级子步骤：与一级明显区分——左侧竖引导线、小空心圆点、更浅文字、更紧行距 */
.pv-step.pv-sub{padding:5px 8px 5px 30px;font-size:12px;color:#9aa4b2;margin-left:2px;border-left:2px solid #eef1f5;border-radius:0 6px 6px 0}
.pv-step.pv-sub .dot{width:12px;height:12px;font-size:9px;border-width:1.5px;border-color:#dbe1e9;background:#fff}
.pv-step.pv-sub:not(:last-child)::after{display:none}
.pv-step.pv-sub.done{color:#8fa0b3}
.pv-step.pv-sub.done .dot{border-color:#9ed3b0;background:#edfaf1;color:#22c55e}
.pv-step.pv-sub.cur{background:#f4f8fe;color:#3b6fb5;font-weight:600}
.pv-step.pv-sub.cur .dot{border-color:#3b6fb5;background:#fff;color:#3b6fb5}
.pv-content{flex:1;min-width:0}
@media(max-width:900px){
  .pv-layout{flex-direction:column}
  .pv-side{width:100%;border-right:none;border-bottom:1px solid #eef1f5;padding:0 0 12px;min-height:0}
}


#modalScView{position:fixed;inset:0;z-index:99;background:#fff;overflow:auto}
.sc-hic{width:20px;height:20px;border-radius:4px;background:#1a56b0;position:relative;display:inline-block;flex-shrink:0}
.sc-hic::after{content:"";position:absolute;left:5px;top:5px;width:8px;height:8px;border:2px solid #fff;border-radius:2px}
.sc-ta{width:100%;box-sizing:border-box;padding:8px 10px;border:1px solid #dcdfe6;border-radius:4px;font-size:13.5px;font-family:inherit}
@media(max-width:1100px){
}


.stg-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:#f5f8fd;border:1px solid #dbe6f6;border-radius:8px;padding:10px 14px;margin:0 0 14px;font-size:13.5px;color:#334155}
.stg-bar .stg-name b{color:#1a56b0}
.stg-bar .stg-pend b{color:#c2410c}
.stg-bar .stg-meta{color:#94a3b8;font-size:12px}
.stg-bar .stg-btns{margin-left:auto;display:flex;gap:8px}
.stg-opinion{background:#fff4f4;border:1px solid #f3c9c9;color:#b3261e;border-radius:8px;padding:8px 14px;margin:-6px 0 14px;font-size:13.5px}

#modalOv{position:fixed;inset:0;z-index:98;background:#f2f5fa;overflow:auto}
.ov-hd{display:flex;align-items:center;gap:10px;padding:14px 22px;background:#fff;border-bottom:1px solid #e5e7eb;position:sticky;top:0;z-index:3;font-size:16.5px;font-weight:700;color:#1f2937}
.ov-src{font-size:12px;color:#64748b;font-weight:400;background:#eef4fd;border:1px solid #dbe6f6;border-radius:12px;padding:2px 10px}
.ov-body{padding:16px 22px 60px}
.ov-cards{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:16px}
.ov-card{background:#fff;border:1px solid #e5eaf3;border-radius:10px;padding:14px 16px;display:flex;flex-direction:column;gap:4px}
.ov-card b{font-size:25.5px;color:#1a56b0}
.ov-card span{font-size:12px;color:#64748b}
.ov-c-op b{color:#c2410c}
.ov-c-rev b{color:#1d4ed8}
.ov-c-done b{color:#16a34a}
.ov-filter{margin-bottom:10px;font-size:13.5px;color:#475569}
.ov-filter select{padding:4px 8px;border:1px solid #d1d5db;border-radius:6px;font-size:13.5px}
.ov-bar{display:inline-block;width:88px;height:8px;background:#e8eef7;border-radius:4px;overflow:hidden;vertical-align:middle;margin-right:6px}
.ov-bar i{display:block;height:100%;background:linear-gradient(90deg,#3b82f6,#1d4ed8);border-radius:4px}
@media(max-width:900px){
  .ov-cards{grid-template-columns:repeat(2,1fr)}
}

#modalAdv{position:fixed;inset:0;z-index:97;background:rgba(15,23,42,.45);display:flex;align-items:flex-start;justify-content:center;padding-top:9vh;overflow:auto}
#modalAdv.hide{display:none!important}
.adv-wrap{background:#fff;border-radius:12px;padding:20px 22px;width:520px;max-width:92vw;box-shadow:0 18px 48px rgba(0,0,0,.22)}
.adv-t{font-size:16.5px;font-weight:700;color:#1a56b0;margin-bottom:14px}
.adv-r{display:flex;align-items:center;gap:8px;margin-bottom:12px;font-size:13.5px;color:#475569}
.adv-r label{width:96px;flex-shrink:0}
.adv-r input{flex:1;padding:6px 9px;border:1px solid #d1d5db;border-radius:6px;font-size:13.5px;min-width:0;box-sizing:border-box}
.adv-btns{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}
#modalLog{position:fixed;inset:0;z-index:97;background:rgba(15,23,42,.45);display:flex;align-items:flex-start;justify-content:center;padding-top:8vh;overflow:auto}
#modalLog.hide{display:none!important}
.log-box{background:#fff;border-radius:12px;width:780px;max-width:94vw;max-height:74vh;overflow:auto;box-shadow:0 18px 48px rgba(0,0,0,.22)}
.log-hd{display:flex;align-items:center;gap:8px;padding:14px 20px;border-bottom:1px solid #e5e7eb;font-weight:700;color:#1f2937;font-size:15.5px;position:sticky;top:0;background:#fff;z-index:2}
.log-row{display:flex;gap:12px;padding:9px 20px;border-bottom:1px dashed #eef1f5;font-size:13.5px;color:#334155;align-items:flex-start}
.log-t{color:#94a3b8;flex-shrink:0;font-family:ui-monospace,monospace;font-size:12px;width:142px}
.log-a{color:#1a56b0;flex-shrink:0;width:64px;font-weight:600}
.log-k{color:#c2410c;flex-shrink:0;width:96px;font-weight:600}
.log-d{flex:1;min-width:0;word-break:break-all}

.nw-wrap{display:flex;gap:16px;align-items:flex-start}
.nw-side{width:330px;flex-shrink:0;position:sticky;top:12px}
.nw-main{flex:1;min-width:0}
.nw-card{background:#fff;border:1px solid #e5eaf3;border-radius:10px;padding:12px 14px;margin-bottom:12px;box-shadow:0 1px 3px rgba(16,42,80,.04)}
.nw-t{font-size:14.5px;font-weight:700;color:#1a56b0;margin-bottom:9px}
.nw-step{display:flex;align-items:center;gap:8px;font-size:14px;color:#64748b;padding:5px 0}
.nw-step .dot{width:17px;height:17px;border-radius:50%;border:1.5px solid #cbd5e1;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;font-size:11px;color:#fff;background:#fff}
.nw-step.on{color:#1a56b0;font-weight:600}
.nw-step.on .dot{background:#1a56b0;border-color:#1a56b0}
.nw-step.ok .dot{background:#22c55e;border-color:#22c55e}
.nw-file{display:flex;justify-content:space-between;gap:6px;font-size:13.5px;padding:4px 0;border-bottom:1px dashed #eef1f5;color:#475569}
.nw-file:last-child{border-bottom:none}
.nw-file .ok{color:#16a34a;flex-shrink:0}
.nw-file .no{color:#d97706;flex-shrink:0}
.nw-item{font-size:14px;color:#334155;padding:7px 9px;border-radius:6px;cursor:pointer;margin-bottom:5px;background:#f8fafc;border:1px solid #eef1f5}
.nw-item:hover{background:#eef4fd;border-color:#c7dbf5}
.nw-item b{color:#1a56b0;font-family:ui-monospace,monospace}
.nw-link{display:block;font-size:14px;color:#1a56b0;padding:6px 0;cursor:pointer;border-bottom:1px dashed #eef1f5}
.nw-link:last-child{border-bottom:none}
.nw-link:hover{color:#0d3f8f}
@media(max-width:1100px){
  .nw-wrap{flex-direction:column}
  .nw-side{width:100%;position:static}
}
