/* ============================================================
   代理业务台 · 内页组件层
   变量全部来自 tokens.css（分发页原型的 :root），这里只加组件，
   不新增颜色。任何页面需要新样式，先看这里有没有，没有再加到这里，
   不要在模板里写内联 style —— 加了就散了。
   ============================================================ */

/* ---------- 页面骨架：顶栏 + 左导航 + 内容 ---------- */
.shell{display:grid;grid-template-columns:216px minmax(0,1fr);align-items:start;
       max-width:1640px;margin:0 auto;padding:22px 28px 48px;gap:22px}
.shell.wide{grid-template-columns:minmax(0,1fr)}

.side{position:sticky;top:82px;display:flex;flex-direction:column;gap:2px}
.side .grp{font-size:10.5px;color:var(--ink3);letter-spacing:.06em;padding:14px 12px 6px}
.side a{display:flex;align-items:center;gap:9px;padding:8px 12px;border-radius:8px;
        font-size:13px;color:var(--ink2);text-decoration:none;line-height:1.4}
.side a:hover{background:var(--hover);color:var(--ink)}
.side a.on{background:var(--indigo-s);color:var(--indigo);font-weight:500}
.side a .n{margin-left:auto;font-family:"IBM Plex Mono",monospace;font-size:10px;color:var(--ink3)}

.main{display:flex;flex-direction:column;gap:20px;min-width:0}

/* ---------- 面包屑与页头 ---------- */
.crumb{display:flex;align-items:center;gap:7px;font-size:11.5px;color:var(--ink3)}
.crumb a{color:var(--ink3);text-decoration:none}
.crumb a:hover{color:var(--indigo)}
.pagehead{display:flex;align-items:flex-end;gap:14px;flex-wrap:wrap}
.pagehead h1{margin:0;font-size:20px;font-weight:700;letter-spacing:-.01em}
.pagehead .lead{font-size:12px;color:var(--ink3);line-height:1.7;padding-bottom:2px}
.pagehead .acts{margin-left:auto;display:flex;gap:8px;align-items:center}

/* ---------- 按钮 ---------- */
.btn{height:32px;padding:0 14px;border-radius:7px;font-size:12.5px;display:inline-flex;
     align-items:center;justify-content:center;gap:6px;cursor:pointer;border:1px solid transparent;
     background:none;font-family:inherit;color:var(--ink);white-space:nowrap;text-decoration:none}
.btn.p{background:var(--indigo);color:#fff}
.btn.p:hover{background:#1A2E54}
.btn.o{border-color:#D6D3C8;background:#FCFCFA}
.btn.o:hover{background:#F5F4EF;border-color:#C9C5B8}
.btn.r{background:var(--red);color:#fff}
.btn.r:hover{background:#9C3225}
.btn.g{background:var(--green);color:#fff}
.btn.ghost{color:var(--ink2)}
.btn.ghost:hover{background:var(--hover);color:var(--ink)}
.btn.sm{height:27px;padding:0 10px;font-size:12px}
/* 门禁按钮：灰掉 + 说明为什么，不是点了才弹错（UI 约定 1） */
.btn[disabled],.btn.off{background:#EDEDE8;color:#A3A79E;border-color:#E7E5DC;cursor:not-allowed}
.btn[disabled]:hover,.btn.off:hover{background:#EDEDE8}
.gatewhy{font-size:11px;color:var(--red);display:inline-flex;align-items:center;gap:5px}
.gatewhy[hidden]{display:none}

/* ---------- 表单 ---------- */
.form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px 20px}
.form.one{grid-template-columns:minmax(0,1fr)}
.f{display:flex;flex-direction:column;gap:6px;min-width:0}
.f.full{grid-column:1/-1}
.f label{font-size:12px;color:var(--ink2)}
.f label .req{color:var(--red);margin-left:3px}
.f .hint{font-size:11px;color:var(--ink3);line-height:1.6}
.f .err{font-size:11px;color:var(--red);line-height:1.6}
input[type=text],input[type=password],input[type=email],input[type=tel],input[type=number],input[type=search],
input[type=date],input[type=datetime-local],select,textarea{
  height:34px;border:1px solid var(--line);border-radius:7px;background:#FCFCFA;padding:0 11px;
  font-size:13px;font-family:inherit;color:var(--ink);width:100%;outline:none}
textarea{height:auto;min-height:84px;padding:9px 11px;line-height:1.7;resize:vertical}
input:hover,select:hover,textarea:hover{border-color:#D8D5CA;background:#fff}
input:focus,select:focus,textarea:focus{border-color:var(--indigo);background:#fff;
  box-shadow:0 0 0 3px var(--indigo-s)}
input[disabled],select[disabled],textarea[disabled]{background:#F2F2EE;color:var(--ink3);cursor:not-allowed}
.f.bad input,.f.bad select,.f.bad textarea{border-color:var(--red);background:#FDF7F6}
select{appearance:none;
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%238C9188' stroke-width='2.2' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 10px center;padding-right:30px}

/* 勾选：复选与单选统一 */
.ck{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;cursor:pointer;line-height:1.5}
.ck input{width:15px;height:15px;accent-color:var(--indigo);margin:0;flex:none}
.cks{display:flex;flex-wrap:wrap;gap:9px 18px}

/* 开关 */
.sw{position:relative;display:inline-flex;align-items:center;gap:9px;cursor:pointer;font-size:12.5px}
.sw input{position:absolute;opacity:0;width:0;height:0}
.sw .track{width:34px;height:19px;border-radius:10px;background:#DAD8CE;flex:none;transition:background .15s;position:relative}
.sw .track::after{content:"";position:absolute;top:2px;left:2px;width:15px;height:15px;border-radius:50%;
  background:#fff;transition:transform .15s;box-shadow:0 1px 2px rgba(0,0,0,.18)}
.sw input:checked + .track{background:var(--green)}
.sw input:checked + .track::after{transform:translateX(15px)}
.sw input[disabled] + .track{opacity:.45;cursor:not-allowed}

/* ---------- 表格 ---------- */
.tblwrap{overflow-x:auto}
table.tbl{width:100%;border-collapse:collapse;font-size:13px}
table.tbl th{text-align:left;font-weight:500;font-size:11.5px;color:var(--ink3);
  padding:10px 14px;border-bottom:1px solid var(--line);white-space:nowrap;background:#FBFBF8}
table.tbl td{padding:11px 14px;border-bottom:1px solid var(--line2);vertical-align:middle;line-height:1.5}
table.tbl tbody tr:hover{background:var(--hover)}
table.tbl tbody tr:last-child td{border-bottom:none}
table.tbl td.num,table.tbl th.num{font-family:"IBM Plex Mono",monospace;text-align:right}
table.tbl td.act{text-align:right;white-space:nowrap}
table.tbl td.act .btn{margin-left:6px}
table.tbl .muted{color:var(--ink3)}

/* ---------- 标签 ---------- */
.tag{font-family:"IBM Plex Mono",monospace;font-size:10px;padding:2px 8px;border-radius:5px;
     display:inline-flex;align-items:center;letter-spacing:.02em;white-space:nowrap}
.tag.red{color:var(--red);background:var(--red-s)}
.tag.amb{color:var(--amber);background:var(--amber-s)}
.tag.ind{color:var(--indigo);background:var(--indigo-s)}
.tag.grn{color:var(--green);background:var(--green-s)}
.tag.gry{color:var(--ink3);background:#F0F0EC}
.tag.stl{color:var(--steel);background:var(--steel-s)}
.tag.plm{color:var(--plum);background:var(--plum-s)}
.tag.brn{color:var(--brown);background:var(--brown-s)}
.tags{display:flex;flex-wrap:wrap;gap:5px}

/* ---------- 标签页 ---------- */
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);padding:0 20px}
.tabs a{padding:11px 14px;font-size:13px;color:var(--ink2);text-decoration:none;
        border-bottom:2px solid transparent;margin-bottom:-1px}
.tabs a:hover{color:var(--ink)}
.tabs a.on{color:var(--indigo);border-bottom-color:var(--indigo);font-weight:500}

/* ---------- 工具条（筛选/搜索） ---------- */
.toolbar{display:flex;align-items:center;gap:9px;padding:13px 20px;border-bottom:1px solid var(--line2);flex-wrap:wrap}
.toolbar .sp{flex:1}
.toolbar input[type=text],.toolbar select{height:31px;width:auto;min-width:130px;font-size:12.5px}
.toolbar .cnt{font-family:"IBM Plex Mono",monospace;font-size:11px;color:var(--ink3)}

/* ---------- 空态 ---------- */
.empty{padding:56px 20px;text-align:center;color:var(--ink3);display:flex;
       flex-direction:column;align-items:center;gap:10px}
.empty .t{font-size:13.5px;color:var(--ink2)}
.empty .s{font-size:11.5px;line-height:1.7;max-width:420px}

/* ---------- 提示条 ---------- */
.note{display:flex;gap:10px;padding:12px 16px;border-radius:9px;font-size:12.5px;line-height:1.7;align-items:flex-start}
.note.i{background:var(--indigo-s);color:#1B2F55}
.note.w{background:var(--amber-s);color:#7A530F}
.note.e{background:var(--red-s);color:#8E2C1F}
.note.k{background:var(--green-s);color:#14503F}
.note svg{flex:none;margin-top:2px}

/* ---------- 弹窗 ---------- */
.mask{position:fixed;inset:0;background:rgba(28,30,26,.42);backdrop-filter:blur(2px);
      z-index:60;display:flex;align-items:flex-start;justify-content:center;padding:64px 20px 40px;overflow:auto}
.modal{background:var(--panel);border:1px solid var(--line);border-radius:13px;width:100%;
       max-width:640px;box-shadow:0 18px 48px rgba(28,30,26,.16);overflow:hidden}
.modal.lg{max-width:920px}
.mhead{display:flex;align-items:center;gap:11px;padding:16px 20px;border-bottom:1px solid var(--line2)}
.mhead h3{margin:0;font-size:15.5px;font-weight:700}
.mhead .x{margin-left:auto;width:28px;height:28px;border-radius:7px;display:flex;align-items:center;
          justify-content:center;color:var(--ink3);cursor:pointer}
.mhead .x:hover{background:var(--hover);color:var(--ink)}
.mbody{padding:20px}
.mfoot{display:flex;gap:9px;justify-content:flex-end;padding:14px 20px;background:#FBFBF8;border-top:1px solid var(--line2)}

/* ---------- 闪现消息 ---------- */
.flash{position:fixed;top:74px;left:50%;transform:translateX(-50%);z-index:80;
       display:flex;flex-direction:column;gap:8px;align-items:center}
.flash .f{padding:10px 18px;border-radius:9px;font-size:13px;box-shadow:0 6px 20px rgba(28,30,26,.14);
          background:var(--panel);border:1px solid var(--line)}
.flash .f.ok{background:var(--green);color:#fff;border-color:var(--green)}
.flash .f.no{background:var(--red);color:#fff;border-color:var(--red)}

/* ---------- 分页 ---------- */
.pager{display:flex;align-items:center;gap:6px;padding:13px 20px;justify-content:flex-end;
       font-family:"IBM Plex Mono",monospace;font-size:12px}
.pager a,.pager span{min-width:28px;height:28px;border-radius:6px;display:inline-flex;align-items:center;
  justify-content:center;padding:0 8px;color:var(--ink2);text-decoration:none;border:1px solid transparent}
.pager a:hover{background:var(--hover);border-color:var(--line)}
.pager .on{background:var(--indigo);color:#fff}

/* ---------- 登录页 ---------- */
.loginwrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:40px 20px;
           background:radial-gradient(1200px 600px at 50% -10%,#EDF0F6 0%,var(--paper) 60%)}
.loginbox{width:100%;max-width:392px;background:var(--panel);border:1px solid var(--line);
          border-radius:14px;padding:32px;box-shadow:0 12px 40px rgba(28,30,26,.07)}
.loginbox .brand{display:flex;align-items:center;gap:11px;margin-bottom:6px}
.loginbox .brand .logo{width:34px;height:34px;border-radius:9px;background:var(--indigo);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:700}
.loginbox h1{margin:0;font-size:16px;font-weight:700}
.loginbox .sub{font-size:11.5px;color:var(--ink3);margin:0 0 22px 45px}
.captcha-field{gap:7px}.captcha{min-width:0}.captcha-picture{position:relative;width:100%;overflow:hidden;
  border:1px solid var(--line);border-radius:8px;background:var(--grey-s)}
.captcha-bg{display:block;width:100%;height:100%;object-fit:cover}.captcha-piece{position:absolute;left:0;height:auto}
.captcha-track{position:relative;height:44px;margin-top:8px;border:1px solid var(--line);border-radius:8px;
  background:var(--panel);overflow:hidden;touch-action:none;transition:border-color .15s,background .15s}
.captcha-fill{position:absolute;inset:0 auto 0 0;width:0;background:var(--indigo-s)}
.captcha-handle{position:absolute;z-index:2;top:0;left:0;width:44px;height:42px;padding:0;border:0;
  border-right:1px solid var(--line);border-radius:7px;background:var(--indigo);color:var(--panel);
  display:flex;align-items:center;justify-content:center;cursor:grab;touch-action:none;transition:transform .18s}
.captcha.is-dragging .captcha-handle{cursor:grabbing;transition:none}.captcha-status{margin-top:6px;font-size:11px;color:var(--ink3);line-height:1.5}
.captcha.is-passed .captcha-track{border-color:var(--green);background:var(--green-s)}
.captcha.is-passed .captcha-fill,.captcha.is-passed .captcha-handle{background:var(--green)}
.captcha.is-passed .captcha-status{color:var(--green)}.captcha.is-failed .captcha-track{border-color:var(--red);background:var(--red-s)}
.captcha.is-failed .captcha-status,.captcha.is-unavailable .captcha-status{color:var(--red)}
.login-submit{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.login-submit .fullbtn{flex:1}

/* ---------- 杂项 ---------- */
.mono{font-family:"IBM Plex Mono",ui-monospace,monospace}
.muted{color:var(--ink3)}
.rowsp{display:flex;align-items:center;gap:10px}
.rowsp .sp{flex:1}
.stack{display:flex;flex-direction:column;gap:3px}
.stack .s{font-size:11px;color:var(--ink3);line-height:1.4}
.pbody{padding:20px}
.divider{height:1px;background:var(--line2);margin:4px 0}

/* ---------- M01 组织与权限补充 ---------- */
.linkreset{color:inherit;text-decoration:none}
.top .logo{width:34px;height:34px;border-radius:9px;font-size:17px;font-weight:700}
.aibtn.linkreset{color:var(--panel);font-weight:500}.aibtn.linkreset svg{color:var(--green-s)}
.top-popover{position:relative;flex:none}.top .me{border:0;background:none;padding:0;color:inherit;font-family:inherit;text-align:left}
.top .me>span:last-child{display:flex;flex-direction:column}.ava{overflow:hidden}.ava img{width:100%;height:100%;display:block;object-fit:cover}
.top-panel{position:absolute;z-index:50;right:0;top:44px;width:360px;max-height:calc(100vh - 78px);overflow:auto;
  background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:0 18px 48px rgba(28,30,26,.16)}
.top-panel-head{display:flex;align-items:baseline;gap:9px;padding:15px 16px;border-bottom:1px solid var(--line2)}
.top-panel-head b{font-size:13.5px}.top-panel-head span{font-size:10.5px;color:var(--ink3)}
.top-panel-head>a{margin-left:auto;color:var(--indigo);font-size:11px;text-decoration:none}.todo-button{position:relative}
.todo-count{position:absolute;top:-6px;right:-7px;min-width:17px;height:17px;padding:0 4px;border-radius:9px;
  display:grid;place-items:center;background:var(--red);color:var(--panel);font-size:9px;line-height:1}
.top-todo-list{padding:6px}.top-todo-list>a{padding:10px;border-radius:8px;color:var(--ink);text-decoration:none;
  display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:4px 8px}
.top-todo-list>a:hover{background:var(--hover)}.top-todo-list b{min-width:0;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.top-todo-list small{grid-column:2;font-size:10.5px;color:var(--ink3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.apps-panel{width:440px}.app-search{display:block;padding:12px 16px 4px}.app-search input{height:32px;font-size:12px}
.app-groups{padding:8px 10px 14px}.app-group{padding:7px 6px}.app-group h3{margin:0 0 7px;font-size:10.5px;color:var(--ink3);font-weight:500}
.app-links{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:3px}.app-links a{display:flex;align-items:center;gap:8px;
  padding:8px;border-radius:7px;color:var(--ink2);text-decoration:none;font-size:12px}.app-links a:hover{background:var(--hover);color:var(--ink)}
.app-mark{width:9px;height:9px;border-radius:3px;flex:none}.app-mark.flow{background:var(--indigo)}.app-mark.fin{background:var(--green)}
.app-mark.hr{background:var(--amber)}.app-mark.adm{background:var(--brown)}.app-mark.md{background:var(--grey)}
.app-mark.tool{background:var(--steel)}.app-mark.sys{background:var(--plum)}
.top-empty{padding:38px 22px;text-align:center;display:flex;flex-direction:column;gap:7px}.top-empty span{font-size:13px;color:var(--ink2)}
.top-empty small{font-size:11px;line-height:1.7;color:var(--ink3)}.profile-panel{width:350px}.account-card{display:flex;align-items:center;gap:11px;padding:16px;border-bottom:1px solid var(--line2)}
.account-card>span:last-child{display:flex;flex-direction:column;gap:3px;min-width:0}.account-card b{font-size:13.5px}.account-card small{font-size:10.5px;color:var(--ink3);line-height:1.5}
.account-action{border-bottom:1px solid var(--line2)}.account-action summary{padding:11px 16px;font-size:12.5px;cursor:pointer;list-style:none}
.account-action summary:hover{background:var(--hover)}.account-action summary::after{content:"›";float:right;color:var(--ink3)}
.account-action[open] summary::after{transform:rotate(90deg)}.account-action form{padding:3px 16px 15px;display:flex;flex-direction:column;gap:9px}
.account-action form label{display:flex;flex-direction:column;gap:5px;font-size:11px;color:var(--ink2)}.account-action form input{height:31px;font-size:12px}
.account-action input[type=file]{font-size:11px;color:var(--ink2)}.account-action .muted{font-size:10.5px}.account-action .btn{align-self:flex-start}
.account-links{display:grid;grid-template-columns:1fr 1fr;padding:8px}.account-links a{padding:9px;border-radius:7px;text-align:center;
  color:var(--ink2);text-decoration:none;font-size:12px}.account-links a:hover{background:var(--hover);color:var(--ink)}.account-links a.danger{color:var(--red)}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.shell.auth-shell,.shell.workbench-shell{display:block;max-width:none;padding:0}
.shell.auth-shell .main,.shell.workbench-shell .main{display:block}
.bar.flow{background:var(--indigo)}.bar.fin{background:var(--green)}.bar.hr{background:var(--amber)}
.bar.adm{background:var(--brown)}.bar.md{background:var(--grey)}.bar.tool{background:var(--steel)}
.bar.sys{background:var(--plum)}.bar.red{background:var(--red)}.bar.plum{background:var(--plum)}
.bar.amber{background:var(--amber)}
.ico.flow{color:var(--indigo);background:var(--indigo-s)}
.ico.fin{color:var(--green);background:var(--green-s)}
.ico.hr{color:var(--amber);background:var(--amber-s)}
.ico.adm{color:var(--brown);background:var(--brown-s)}
.ico.md{color:var(--grey);background:var(--grey-s)}
.ico.tool{color:var(--steel);background:var(--steel-s)}
.ico.sys{color:var(--plum);background:var(--plum-s)}
.tile.linkreset{color:var(--ink)}
.empty.compact{padding:34px 18px}.empty.compact .t{font-size:11.5px;line-height:1.7;color:var(--ink3)}
.loginform{margin-top:18px}.loginbox .note{margin-top:14px}.fullbtn{width:100%}
.inlineform{display:inline}.modalform{margin-top:18px}.mbody>.note+.modalform{margin-top:18px}
.password-once{justify-content:center}.password-value{font-size:20px;margin:7px 0;letter-spacing:.08em}
.permission-layout{display:grid;grid-template-columns:190px minmax(0,1fr);min-height:560px}
.position-list{border-right:1px solid var(--line2);padding:12px;display:flex;flex-direction:column;gap:3px}
.position-list a{display:flex;justify-content:space-between;gap:12px;padding:9px 10px;border-radius:7px;color:var(--ink2);text-decoration:none;font-size:12.5px}
.position-list a:hover{background:var(--hover);color:var(--ink)}
.position-list a.on{background:var(--indigo-s);color:var(--indigo);font-weight:500}
.permission-editor{min-width:0}.permission-summary{padding:15px 18px;border-bottom:1px solid var(--line2);flex-wrap:wrap;font-size:12px}
.permission-summary .muted{font-size:11px;margin-top:3px}.permgroup{border-bottom:1px solid var(--line)}
.permgroup-title{display:flex;align-items:center;gap:9px;padding:13px 18px;font-size:13.5px;font-weight:700;background:var(--hover)}
.permtable td:not(:first-child),.permtable th:not(:first-child){width:105px}.module-code{display:block;font-size:10px;margin-top:2px}
.grant-permissions{display:flex;flex-direction:column;gap:15px;padding:12px;border:1px solid var(--line);border-radius:8px;max-height:350px;overflow:auto}
.grant-domain{display:flex;flex-direction:column;gap:9px}.grant-domain b{font-size:12.5px}.grant-domain .ck{min-width:190px}
.form-actions{display:flex;justify-content:flex-end;align-items:center;gap:9px;margin-top:18px}
.rowform{display:inline-flex;align-items:center;justify-content:flex-end;gap:6px}.rowform input[type=date]{width:142px;height:29px}.rowform select{width:150px;height:29px}
.is-expired{opacity:.56}

/* ---------- M01D 人事生命周期 ---------- */
.statbar{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:1px;
  background:var(--line);border:1px solid var(--line);border-radius:12px;overflow:hidden}
.statbar .stat{min-height:76px;padding:14px 17px;background:var(--panel);color:var(--ink2);
  text-decoration:none;display:flex;flex-direction:column;justify-content:space-between;gap:7px}
.statbar .stat:hover{background:var(--hover);color:var(--ink)}
.statbar .stat b{font-size:20px;color:var(--ink);font-weight:600}
.statbar .stat.on{background:var(--indigo-s);color:var(--indigo)}
.statbar .stat.on b{color:var(--indigo)}
.detail-drawer{max-width:960px}.detail-drawer .mhead .muted{font-size:10.5px;margin-top:3px}
.detail-tabs{padding:0 12px}.detail-body{display:flex;flex-direction:column;gap:15px;max-height:68vh;overflow:auto}
.profile-group{border:1px solid var(--line2);border-radius:10px;padding:16px;display:flex;flex-direction:column;gap:15px}
.profile-head{display:flex;align-items:center;gap:10px}.profile-head h4{margin:0;font-size:13.5px}
.profile-head a,.profile-links a{margin-left:auto;font-size:12px}.profile-head .muted{margin-left:auto;font-size:11px}
.profile-grid{margin:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px 22px}
.profile-grid div{min-width:0}.profile-grid dt{font-size:11px;color:var(--ink3);margin-bottom:5px}
.profile-grid dd{margin:0;line-height:1.6;overflow-wrap:anywhere}.profile-links{display:flex;gap:15px;justify-content:flex-end}
.timeline{display:flex;flex-direction:column}.timeitem{position:relative;padding:0 0 18px 22px;border-left:1px solid var(--line)}
.timeitem:last-child{padding-bottom:0}.timedot{position:absolute;left:-5px;top:7px;width:9px;height:9px;
  border-radius:50%;background:var(--amber);border:2px solid var(--panel)}
.timecard{border:1px solid var(--line2);border-radius:9px;padding:13px;display:flex;flex-direction:column;gap:9px}
.change-values{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:10px;
  align-items:center;font-family:"IBM Plex Mono",monospace;font-size:11px;overflow-wrap:anywhere}
.change-values b{color:var(--ink3)}
.handover-list{display:flex;flex-direction:column}.handover-row{padding:15px 18px;border-bottom:1px solid var(--line2);
  display:flex;justify-content:space-between;align-items:center;gap:15px}.handover-row:last-child{border-bottom:0}
.handover-row .muted{font-size:11px;margin-top:4px}.handover-row.live{background:var(--green-s)}
.handover-tags{margin-top:9px}.row-alert{background:var(--red-s)}
.field-rows{display:flex;flex-direction:column}.field-row{display:flex;align-items:center;gap:10px;padding:10px 14px;
  border-bottom:1px solid var(--line2);background:var(--panel)}.field-row:last-child{border-bottom:0}
.field-row.dragging{opacity:.5}.drag-handle{color:var(--ink3);cursor:grab;letter-spacing:-.18em}
.field-form{display:grid;grid-template-columns:minmax(90px,.7fr) minmax(130px,1fr) auto auto minmax(210px,1.3fr) auto;
  align-items:center;gap:9px;min-width:0;flex:1}.field-form input,.field-form select{height:29px}
.field-order-form{padding:11px 14px;display:flex;justify-content:flex-end;border-top:1px solid var(--line2)}

/* ---------- M03 文件层自检与附件 ---------- */
.file-upload{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.file-upload input[type=file]{min-width:260px;max-width:520px;padding:7px 10px;border:1px solid var(--line);
  border-radius:7px;background:var(--panel);font-size:12px;font-family:inherit;color:var(--ink2)}
.file-digest{min-width:310px;overflow-wrap:anywhere}.file-key{min-width:210px;overflow-wrap:anywhere}

/* ---------- M20A 云盘 ---------- */
.drive-disks,.drive-tree{display:flex;flex-direction:column;gap:2px}
.drive-tree{margin-top:8px;padding-top:6px;border-top:1px solid var(--line)}
.drive-shell .side a.on,.side .drive-disks a.on,.side .drive-tree a.on{background:var(--steel-s);color:var(--steel)}
.tree-indent{display:inline-block;color:var(--ink3);padding-right:4px}
.btn.tool{background:var(--steel);color:var(--panel)}.btn.tool:hover{background:var(--steel)}
.drive-toolbar{align-items:center}.drive-upload{flex-wrap:nowrap}.drive-upload input[type=file]{min-width:210px;max-width:300px}
.drive-search{display:flex;align-items:center;gap:7px}.drive-search input[type=text]{width:210px}
.drive-gate{padding:0 20px 12px;border-bottom:1px solid var(--line2)}
.drive-table{min-width:920px}.drive-table td:first-child{min-width:230px}.drive-table td.act{min-width:290px}
.drive-name{display:inline-flex;align-items:center;gap:8px;color:var(--ink);text-decoration:none;font-weight:500}
.drive-name:hover{color:var(--steel)}.drive-file-icon{display:inline-flex;color:var(--steel);flex:none}
.drive-ext{width:35px;padding:3px 2px;border-radius:5px;background:var(--steel-s);color:var(--steel);
  font-size:8.5px;font-weight:600;text-align:center;line-height:1.2;flex:none;overflow:hidden}
.drive-actions{display:flex;align-items:center;justify-content:flex-end;gap:10px;white-space:nowrap}
.drive-actions a,.drive-actions button{border:0;padding:0;background:none;color:var(--steel);font:inherit;font-size:11.5px;text-decoration:none;cursor:pointer}
.drive-actions a:hover{color:var(--ink)}.drive-actions a.danger{color:var(--red)}
.drive-actions button[disabled]{color:var(--ink3);cursor:not-allowed}
.handover-action{display:flex;align-items:center;justify-content:flex-end;gap:9px;flex-wrap:wrap}

/* ---------- M23 文件侧栏预览 ---------- */
.file-preview-layout{--preview-width:50vw;position:relative;min-width:0}.file-preview-layout.is-open{display:block}
.file-preview-main{min-width:0}.file-preview-resizer{position:fixed;z-index:71;top:60px;right:var(--preview-width);bottom:0;
  width:7px;height:auto;padding:0;border:0;border-left:1px solid var(--line);border-right:1px solid var(--line);
  background:var(--line2);cursor:col-resize;touch-action:none}
.file-preview-resizer:hover,.file-preview-resizer:focus{background:var(--steel-s);border-color:var(--steel);outline:0}
.is-resizing-preview{user-select:none;cursor:col-resize}.file-preview{position:fixed;z-index:70;top:60px;right:0;bottom:0;
  width:var(--preview-width);min-width:0;background:var(--panel);border:1px solid var(--line);border-radius:12px 0 0 0;
  display:flex;flex-direction:column;overflow:hidden}
.file-preview-head{min-height:58px;padding:9px 12px;border-bottom:1px solid var(--line2);display:flex;align-items:center;gap:10px}
.file-preview-title{min-width:0;flex:1;display:flex;flex-direction:column;gap:2px}.file-preview-title b{font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.file-preview-title span{font-size:10px;color:var(--ink3)}.file-preview-actions{display:flex;align-items:center;gap:6px}.file-preview-close,
.file-preview-back{border:0;background:none;color:var(--ink2);font:inherit;cursor:pointer}.file-preview-close{width:28px;height:28px;border-radius:7px;font-size:20px}
.file-preview-close:hover,.file-preview-back:hover{background:var(--hover);color:var(--ink)}.file-preview-back{display:none;font-size:12px}
.file-preview-body{min-height:0;flex:1;display:flex;overflow:auto;background:var(--hover)}.file-preview-body>.empty{width:100%;align-self:center}
.file-preview-frame{width:100%;height:100%;min-height:0;border:0;background:var(--panel)}.file-preview-image{width:100%;padding:18px;display:flex;align-items:flex-start;justify-content:center}
.file-preview-image img{display:block;max-width:100%;height:auto;border:1px solid var(--line);background:var(--panel)}
.file-preview-text{width:100%;min-height:100%;margin:0;padding:18px;white-space:pre-wrap;overflow-wrap:anywhere;
  font-family:"IBM Plex Mono",monospace;font-size:11.5px;line-height:1.7;color:var(--ink);background:var(--panel)}
.file-preview-layout.is-fullscreen .file-preview{z-index:72;top:0;left:0;width:100vw;border-radius:0}
.file-preview-layout.is-fullscreen .file-preview-resizer{display:none}

/* ---------- M20B 在线文档与 OCR ---------- */
.shell.doc-editor-shell{display:block;max-width:none;height:calc(100dvh - 60px);padding:0}
.shell.doc-editor-shell.external-doc-shell{height:100dvh}
.shell.doc-editor-shell .main{height:100%;display:flex;flex-direction:column;gap:0;min-height:0}
/* ONLYOFFICE 初始化时量一次高度：宿主必须有确定高度，min-height 不算，
   否则 iframe 塌缩成只剩工具栏。flex 子项还要 min-height:0 才肯收缩。 */
.doc-editor-head{min-height:62px;padding:10px 22px;border-bottom:1px solid var(--line);background:var(--panel);
  display:flex;align-items:center;justify-content:space-between;gap:16px}
.doc-editor-head.external{justify-content:center;text-align:center}.doc-editor-title{display:flex;align-items:center;gap:9px;margin-top:5px}
.doc-editor-title b{font-size:15.5px}.doc-editor-head .muted{font-size:11px;line-height:1.6}
.doc-editor-host{flex:1 1 auto;min-height:0;height:100%;background:var(--panel)}
.doc-editor-host iframe{display:block;width:100%;height:100%;border:0}.doc-editor-shell>.main>.note{margin:10px 22px}
.notice-page{width:min(680px,100%);margin:8vh auto 0}.share-table{min-width:1060px}
.share-table td:nth-child(2){min-width:330px}.share-url{height:29px;min-width:320px;font-size:10.5px}
.ocr-review{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:20px;align-items:stretch}
.ocr-review .panel{min-width:0;display:flex;flex-direction:column}.ocr-preview{width:100%;min-height:620px;flex:1;border:0;background:var(--panel)}
.ocr-text{padding:14px;display:flex;flex:1}.ocr-text textarea{min-height:590px;flex:1;font-family:"IBM Plex Mono",monospace;font-size:12px}
.ocr-confirm{display:flex;align-items:center;justify-content:flex-end;gap:10px;flex-wrap:wrap}

/* ---------- M22 AIWORK ---------- */
[hidden]{display:none!important}
.shell.aiwork-page-shell{display:block;max-width:none;height:calc(100dvh - 60px);padding:0}
.shell.aiwork-page-shell .main{display:block;height:100%}
.aiwork-workspace{height:100%;display:grid;grid-template-columns:292px minmax(0,1fr);overflow:hidden;background:var(--paper)}
.aiwork-history.aicard{height:100%;min-height:0;border-radius:0;padding:18px 14px;overflow:hidden}
.aiwork-history-head{padding:0 5px}.aiwork-history-head h3{flex:1}
.aiwork-icon-btn{width:32px;height:32px;padding:0;border:1px solid var(--line);border-radius:7px;
  background:var(--panel);color:var(--ink2);display:inline-flex;align-items:center;justify-content:center;cursor:pointer}
.aiwork-icon-btn:hover{background:var(--hover);color:var(--ink)}
.aiwork-history-close,.aiwork-history-open{display:none}
.aiwork-history .aiwork-icon-btn{border-color:currentColor;background:transparent;color:inherit;opacity:.72}
.aiwork-new{width:100%;height:35px;border:1px solid currentColor;border-radius:8px;background:transparent;
  color:inherit;font:inherit;font-size:12.5px;cursor:pointer;opacity:.84;display:flex;align-items:center;justify-content:center;gap:6px}
.aiwork-new:hover{opacity:1;background:var(--green)}
.aiwork-conversation-groups{flex:1;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:17px;padding:2px}
.aiwork-conversation-group{display:flex;flex-direction:column;gap:4px}.aiwork-group-label{font-size:10.5px;opacity:.52;padding:0 8px 4px}
.aiwork-conversation-row{display:flex;align-items:center;gap:3px;min-width:0;border-radius:8px}
.aiwork-conversation-row:hover,.aiwork-conversation-row:has(.on){background:var(--green)}
.aiwork-conversation-link{flex:1;min-width:0;padding:8px;color:inherit;text-decoration:none;font-size:12px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:.76}
.aiwork-conversation-link.on{font-weight:500;opacity:1}.aiwork-row-actions{display:none;align-items:center;padding-right:4px}
.aiwork-conversation-row:hover .aiwork-row-actions{display:flex}.aiwork-row-actions button{width:24px;height:24px;padding:0;
  border:0;background:transparent;color:inherit;cursor:pointer;opacity:.64}.aiwork-row-actions button:hover{opacity:1}
.aiwork-history .ft{padding:2px 5px 0}
.today.no-ai{grid-template-columns:minmax(0,1fr)}.aicard a.ask{text-decoration:none}.aicard .aiopen{
  color:inherit;text-decoration:none;font-size:11.5px;font-weight:500;align-self:flex-start}
/* 上固定、中间滚、下固定。原来用 grid-template-rows: auto auto minmax(0,1fr) auto，
   消息一多就把 1fr 那行算成 643px，只给输入框留 30px（它要 121px），
   输入框整个掉到容器外面——而整页又没有滚动条，用户根本找不回来。
   flex 列 + 消息区 min-height:0 是这类布局最稳的写法。 */
.aiwork-chat{min-width:0;min-height:0;display:flex;flex-direction:column;background:var(--paper)}
.aiwork-chat>.aiwork-chat-head,.aiwork-chat>.aiwork-provider-error,
.aiwork-chat>.aiwork-composer-wrap{flex:0 0 auto}
.aiwork-chat-head{height:58px;padding:0 24px;border-bottom:1px solid var(--line);background:var(--panel);
  display:flex;align-items:center;gap:12px}.aiwork-chat-title{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.aiwork-chat-title b{font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.aiwork-chat-title span{font-size:10.5px;color:var(--ink3)}.aiwork-provider-label{font-size:11px;color:var(--ink3)}
.aiwork-provider{width:250px;height:32px;font-size:11.5px}.aiwork-provider-error{margin:12px 24px 0}
.aiwork-messages{flex:1 1 auto;min-height:0;overflow-y:auto;padding:32px max(28px,calc((100% - 880px)/2));scroll-behavior:smooth}
.aiwork-message{max-width:820px;margin:0 auto 28px;display:flex;flex-direction:column;gap:8px}
.aiwork-message.user{max-width:680px;margin-left:auto;margin-right:max(0px,calc((100% - 820px)/2));align-items:flex-end}
.aiwork-message-head{width:100%;display:flex;align-items:center;gap:9px;font-size:10.5px;color:var(--ink3)}
.aiwork-message.user .aiwork-message-head{justify-content:flex-end}.aiwork-message-head button,.md-code-head button{
  border:0;background:transparent;color:inherit;font:inherit;cursor:pointer}.aiwork-message-head button{margin-left:auto;font-size:10.5px}
.aiwork-message.user .aiwork-message-head button{margin-left:0}.aiwork-message-body,.doc-body{font-size:13.5px;line-height:1.8;overflow-wrap:anywhere}
.aiwork-message.user .aiwork-message-body{padding:11px 15px;border-radius:12px;background:var(--indigo-s);white-space:pre-wrap}
.aiwork-message.failed .aiwork-message-body{border-left:3px solid var(--red);padding-left:13px;color:var(--ink2)}
.aiwork-message-body p,.doc-body p{margin:0 0 12px}.aiwork-message-body p:last-child,.doc-body p:last-child{margin-bottom:0}
.aiwork-message-body h1,.aiwork-message-body h2,.aiwork-message-body h3,.aiwork-message-body h4,
.aiwork-message-body h5,.aiwork-message-body h6,
.doc-body h1,.doc-body h2,.doc-body h3,.doc-body h4,.doc-body h5,.doc-body h6{margin:20px 0 8px;line-height:1.45}
.aiwork-message-body h1,.doc-body h1{font-size:20px}.aiwork-message-body h2,.doc-body h2{font-size:15.5px}.aiwork-message-body h3,
.aiwork-message-body h4,.aiwork-message-body h5,.aiwork-message-body h6{font-size:13.5px}
.aiwork-message-body ul,.aiwork-message-body ol,.doc-body ul,.doc-body ol{margin:8px 0;padding-left:24px}.aiwork-message-body li,.doc-body li{margin:3px 0}
.aiwork-message-body a,.doc-body a{color:var(--steel)}.aiwork-message-body code,.doc-body code{font-family:"IBM Plex Mono",monospace;font-size:12px;
  padding:2px 5px;border-radius:5px;background:var(--grey-s)}
.md-code{margin:12px 0;border:1px solid var(--line);border-radius:9px;overflow:hidden;background:var(--ink);color:var(--paper)}
.md-code-head{height:32px;padding:0 12px;border-bottom:1px solid var(--ink2);display:flex;align-items:center;
  justify-content:space-between;font-family:"IBM Plex Mono",monospace;font-size:10px;color:var(--ink3)}
.md-code pre{margin:0;padding:14px;overflow:auto}.md-code pre code{padding:0;background:none;color:inherit;white-space:pre}
.md-table-wrap{overflow-x:auto;margin:12px 0;border:1px solid var(--line);border-radius:8px}
.md-table-wrap table{width:100%;border-collapse:collapse;font-size:12.5px;background:var(--panel)}
.md-table-wrap th,.md-table-wrap td{padding:9px 11px;text-align:left;border-right:1px solid var(--line2);border-bottom:1px solid var(--line2)}
.md-table-wrap th{font-weight:500;background:var(--hover)}.md-table-wrap tr:last-child td{border-bottom:0}
.aiwork-empty{height:100%;min-height:430px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}
.aiwork-empty .ring{width:42px;height:42px;border-radius:12px;background:var(--green-s);color:var(--green);
  display:flex;align-items:center;justify-content:center}.aiwork-empty h1{margin:14px 0 3px;font-size:20px}
.aiwork-empty>p{margin:0;color:var(--ink3);font-size:11.5px}.aiwork-suggestions{width:min(680px,100%);margin-top:22px;
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.aiwork-suggestions .ask{text-align:left;
  background:var(--panel);border-color:var(--line);color:var(--ink2);font-family:inherit}.aiwork-suggestions .ask:hover{
  background:var(--hover);border-color:var(--line);color:var(--ink)}
.aiwork-composer-wrap{padding:8px max(28px,calc((100% - 880px)/2)) 22px;background:var(--paper)}
.aiwork-composer-wrap>.gatewhy{max-width:880px;margin:0 auto 7px}.aiwork-composer{max-width:880px;margin:0 auto;
  padding:10px;border:1px solid var(--line);border-radius:13px;background:var(--panel)}
.aiwork-composer textarea{border:0;background:transparent;min-height:52px;max-height:180px;padding:4px 6px;resize:none}
.aiwork-composer textarea:hover,.aiwork-composer textarea:focus{border:0;background:transparent;box-shadow:none}
.aiwork-composer-actions{display:flex;align-items:center;gap:8px;padding-top:7px;border-top:1px solid var(--line2)}
.aiwork-key-hint{font-size:10px;color:var(--ink3);margin-right:auto}.aiwork-modal{max-width:480px}.aiwork-modal .err{color:var(--red);font-size:11px;margin-top:10px}
.aiwork-attachments{padding:0 3px 9px}.attachment-cards{display:flex;flex-wrap:wrap;gap:7px}.attachment-card{max-width:260px;
  min-width:0;padding:7px 9px;border:1px solid var(--line);border-radius:8px;background:var(--panel);display:flex;align-items:center;gap:7px}
.attachment-card a{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--steel);text-decoration:none;font-size:11.5px}
.attachment-card span{flex:none;font-family:"IBM Plex Mono",monospace;font-size:9.5px;color:var(--ink3)}.attachment-card button{width:20px;height:20px;
  padding:0;border:0;border-radius:5px;background:none;color:var(--ink3);font-size:16px;cursor:pointer}.attachment-card button:hover{background:var(--red-s);color:var(--red)}
.attachment-notice{flex-basis:100%;font-size:10.5px;line-height:1.6;color:var(--ink3)}.attachment-notice a{margin-left:4px;color:var(--steel)}
.aiwork-message.user .attachment-cards{justify-content:flex-end;max-width:680px}.aiwork-message.user .attachment-notice{text-align:right}
.aiwork-drive-picker{max-width:680px}.drive-picker-search{display:flex;gap:8px}.drive-picker-list{margin-top:12px;max-height:52vh;overflow:auto;
  border:1px solid var(--line);border-radius:9px}.drive-picker-list>button{width:100%;padding:10px 12px;border:0;border-bottom:1px solid var(--line2);
  background:var(--panel);color:var(--ink);font:inherit;text-align:left;display:flex;align-items:center;gap:10px;cursor:pointer}
.drive-picker-list>button:last-child{border-bottom:0}.drive-picker-list>button:hover{background:var(--hover)}.drive-picker-list>button b{font-size:12.5px;
  min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.drive-picker-list>button span{margin-left:auto;color:var(--ink3);font:10px "IBM Plex Mono",monospace;white-space:nowrap}

/* ---------- M09 单位库 ---------- */
.unit-statbar .stat:nth-child(-n+2){background:var(--grey-s)}.unit-statbar .stat.on{background:var(--indigo-s)}
.unit-filters{display:grid;grid-template-columns:minmax(190px,1.4fr) repeat(7,minmax(118px,1fr)) auto auto auto}
.unit-filters input,.unit-filters select{min-width:0;width:100%}.unit-table{min-width:1180px}
.unit-table td:first-child{min-width:220px}.unit-table td:nth-child(3){min-width:180px}
.unit-profile{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.unit-profile .profile-group{margin:0}
.profile-grid .profile-wide{grid-column:1/-1}.unit-tabs{margin-bottom:0}
.unit-org-layout{display:grid;grid-template-columns:300px minmax(0,1fr);gap:16px;align-items:start}
.unit-dept-tree,.unit-contact-panel{min-width:0}.unit-dept-tree .phead,.unit-contact-panel .phead{gap:8px;flex-wrap:wrap}
.unit-dept-tree .phead .btn,.unit-contact-panel .phead .btn:first-of-type{margin-left:auto}
.unit-contact-panel .phead .btn+.btn{margin-left:0}.unit-dept-list{display:flex;flex-direction:column;padding:8px}
.unit-dept-list>a{min-width:0;padding:9px 10px;border-radius:7px;color:var(--ink2);text-decoration:none;display:flex;align-items:center;gap:7px}
.unit-dept-list>a:hover{background:var(--hover);color:var(--ink)}.unit-dept-list>a.on{background:var(--grey-s);color:var(--grey);font-weight:500}
.unit-dept-list>a.dragging{opacity:.45}.unit-dept-list .drag-handle{flex:none;color:var(--ink3);cursor:grab}
.unit-contact-cards{padding:14px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.unit-contact-card{min-width:0;padding:14px;border:1px solid var(--line);border-radius:10px;background:var(--panel);display:flex;flex-direction:column;gap:9px}
.unit-contact-card .rowsp{min-width:0}.unit-sensitive{padding-top:9px;border-top:1px solid var(--line2);display:flex;flex-direction:column;gap:8px}
.unit-sensitive .note{padding:8px 10px}.sensitive-denied{padding:10px;border-radius:7px;background:var(--grey-s);color:var(--ink3)}
.unit-card-actions{padding-top:8px;border-top:1px solid var(--line2);font-size:11.5px}.unit-card-actions a{color:var(--grey)}
.unit-upload-row td{padding-top:7px;padding-bottom:11px;background:var(--hover)}.unit-upload-row .file-upload{justify-content:flex-end;margin-top:9px}
.unit-attachment-list{display:flex;flex-direction:column;gap:5px}.unit-attachment{min-width:0;display:flex;align-items:center;gap:12px;
  padding:7px 9px;border:1px solid var(--line2);border-radius:7px;background:var(--panel)}.unit-attachment>span:first-child{min-width:0;flex:1}
.unit-attachment b{display:block;font-size:11.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.unit-attachment small{display:block;margin-top:2px;color:var(--ink3);font-size:10px}
.unit-attachment-actions{display:flex;gap:9px;flex:none}.unit-attachment-actions a{color:var(--steel);font-size:11px;text-decoration:none}
.unit-attachment-actions a.danger{color:var(--red)}
.unit-project-table{min-width:980px}.unit-project-table td:first-child{min-width:230px}
.unit-project-table [data-project-row]{cursor:pointer}
@media (max-width:1100px){
  .shell{grid-template-columns:minmax(0,1fr)}
  .side{position:static;flex-direction:row;flex-wrap:wrap;gap:4px}
  .side .grp{display:none}
  .form{grid-template-columns:minmax(0,1fr)}
  .hi,.dt{display:none}
  .search{width:190px}
  .statbar{grid-template-columns:repeat(auto-fit,minmax(120px,1fr))}
  .field-form{grid-template-columns:minmax(100px,1fr) minmax(130px,1fr);width:100%}
  .field-row{align-items:flex-start;flex-wrap:wrap}.profile-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .file-upload{align-items:stretch;flex-direction:column}.file-upload input[type=file]{min-width:0;width:100%}
  .drive-disks{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}
  .drive-tree{width:100%;margin-top:0;padding-top:0;border-top:0;flex-direction:row;overflow-x:auto}
  .drive-tree a{flex:none}.drive-toolbar{align-items:stretch}.drive-upload{flex-direction:row;flex:1}
  .drive-search{width:100%}.drive-search input[type=text]{flex:1;width:auto}
  .ocr-review{grid-template-columns:minmax(0,1fr)}.ocr-preview{min-height:480px}.ocr-text textarea{min-height:460px}
  .unit-filters{grid-template-columns:repeat(3,minmax(0,1fr))}.unit-profile{grid-template-columns:minmax(0,1fr)}
}
@media (max-width:899px){
  .file-preview{z-index:72;inset:0;width:100vw;border-radius:0}.file-preview-resizer{display:none}
  .file-preview-back{display:inline-flex}.file-preview-frame{height:100%;min-height:0}
}
@media (max-width:1000px){
  .aiwork-workspace{grid-template-columns:minmax(0,1fr)}.aiwork-history{position:fixed;z-index:55;left:0;top:60px;
    bottom:0;width:min(330px,88vw);transform:translateX(-105%);transition:transform .16s}
  .aiwork-history-visible .aiwork-history{transform:translateX(0)}.aiwork-history-close,.aiwork-history-open{display:inline-flex}
  .aiwork-chat-head{padding:0 16px}.aiwork-provider{width:min(220px,32vw)}
  .aiwork-messages{padding-left:22px;padding-right:22px}.aiwork-composer-wrap{padding-left:18px;padding-right:18px}
  .unit-org-layout{grid-template-columns:minmax(0,1fr)}.unit-dept-list{flex-direction:row;overflow-x:auto}
  .unit-dept-list>a{flex:none;max-width:280px}.unit-contact-cards{grid-template-columns:minmax(0,1fr)}
}
@media (max-width:820px){
  .permission-layout{grid-template-columns:minmax(0,1fr)}
  .position-list{border-right:none;border-bottom:1px solid var(--line2);flex-direction:row;flex-wrap:wrap}
  .rowform{flex-wrap:wrap}
  .profile-grid{grid-template-columns:minmax(0,1fr)}.change-values{grid-template-columns:minmax(0,1fr)}
  .change-values b{display:none}.handover-row{align-items:flex-start;flex-direction:column}
  .drive-upload{flex-direction:column}.handover-action{justify-content:flex-start}
  .aiwork-chat-head{height:auto;min-height:58px;flex-wrap:wrap;padding-top:9px;padding-bottom:9px}
  .aiwork-chat-title{min-width:150px}.aiwork-provider-label{display:none}.aiwork-provider{width:100%;order:4}
  .aiwork-messages{padding:22px 14px}.aiwork-message.user{max-width:88%}.aiwork-composer-wrap{padding:6px 10px 10px}
  .aiwork-suggestions{grid-template-columns:minmax(0,1fr)}.aiwork-empty{min-height:510px}.aiwork-key-hint{display:none}.aiwork-composer-actions{flex-wrap:wrap}
  .top{padding-left:12px;padding-right:12px;gap:8px}.bname,.search{display:none}.apps-panel{width:min(440px,calc(100vw - 24px));right:-92px}
  .profile-panel{width:min(350px,calc(100vw - 24px))}.todo-panel{width:min(360px,calc(100vw - 24px))}.app-links{grid-template-columns:minmax(0,1fr)}
  .unit-filters{grid-template-columns:minmax(0,1fr)}
}
@media (max-width:420px){
  .loginwrap{padding:20px 12px}.loginbox{padding:24px 20px}.login-submit{align-items:stretch;flex-direction:column}
}

/* ---------- M02/M05 项目登记与三栏分发 ---------- */
.flow-register-panel{max-width:880px}.flow-register-form{padding:20px}
.flow-steps{display:flex;align-items:center;justify-content:center;min-height:76px;padding:12px 24px;
  background:var(--panel);border:1px solid var(--line);border-radius:12px;overflow-x:auto}
.flow-step{display:flex;align-items:center;gap:10px;min-width:168px}.flow-step>span{width:31px;height:31px;border-radius:50%;display:grid;
  place-items:center;color:var(--ink3);background:var(--grey-s);font-size:11px;font-weight:600;flex:none}
.flow-step.done>span{color:var(--green);background:var(--green-s)}.flow-step.current>span{color:var(--panel);background:var(--indigo)}
.flow-step small{display:block;color:var(--ink3);font-size:10px;margin-bottom:2px}.flow-step b{font-size:13px;font-weight:500;white-space:nowrap}
.flow-steps>i{width:min(8vw,120px);height:1px;background:var(--line);margin:0 14px;flex:none}.flow-steps>i:first-of-type{background:var(--green)}
.flow-assign-grid{display:grid;grid-template-columns:minmax(210px,1fr) minmax(0,2fr) minmax(210px,1fr);gap:16px;align-items:start;min-width:0}
.flow-queue-panel,.flow-operation-panel,.flow-result-panel{min-width:0}.flow-queue{padding:8px}
.flow-queue-item{display:flex;flex-direction:column;gap:7px;padding:11px;border:1px solid transparent;border-radius:9px;
  color:var(--ink);text-decoration:none;margin-bottom:4px;position:relative}.flow-queue-item:hover{background:var(--hover)}
.flow-queue-item.on{background:var(--indigo-s);border-color:var(--line)}.flow-queue-item>div{display:flex;align-items:center;justify-content:space-between;gap:6px}
.flow-queue-item>div>.mono{font-size:10px;color:var(--ink3)}.flow-queue-item b{font-size:12.5px;line-height:1.55}
.flow-queue-item small{font-size:10.5px;color:var(--ink3);line-height:1.5}.flow-queue-item em{font-style:normal;font-size:10.5px;color:var(--ink2)}
.flow-project-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:18px 20px;border-bottom:1px solid var(--line)}
.flow-project-head>div>span{margin-right:7px}.flow-project-head h2{font-size:18px;margin:8px 0 4px}.flow-project-head p{font-size:11.5px;color:var(--ink3);margin:0;line-height:1.6}
.flow-error-summary{margin:16px 20px 0}.flow-form-section{padding:18px 20px;border-bottom:1px solid var(--line)}.flow-form-section:last-child{border-bottom:0}
.flow-section-title{display:flex;align-items:center;gap:9px;margin-bottom:16px}.flow-section-title>span{width:24px;height:24px;border-radius:7px;
  display:grid;place-items:center;background:var(--indigo-s);color:var(--indigo);font-size:10px;font-weight:600;flex:none}
.flow-section-title b{display:block;font-size:13.5px}.flow-section-title small{display:block;font-size:10.5px;color:var(--ink3);margin-top:2px}
.flow-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:13px 18px;margin:0 0 18px}.flow-summary div{min-width:0}
.flow-summary dt,.project-detail-grid dt{font-size:10.5px;color:var(--ink3);margin-bottom:4px}.flow-summary dd{font-size:12px;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.flow-fee-form{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.flow-people-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.flow-assistants{display:flex;flex-direction:column;gap:5px;min-height:34px}.flow-assistant{display:flex;gap:7px;align-items:center;padding:6px 8px;
  border:1px solid var(--line);border-radius:7px;cursor:pointer;background:var(--panel)}
.flow-assistant:has(input:checked){background:var(--indigo-s);border-color:var(--indigo)}.flow-assistant:has(input:disabled){color:var(--ink3);cursor:not-allowed;background:var(--grey-s)}
.flow-assistant input{width:15px;height:15px;margin:0;accent-color:var(--indigo)}.flow-assistant b{font-size:11.5px;font-weight:500;display:block}
.flow-assistant small{font-size:9.5px;color:var(--ink3);display:block}.flow-mode-switches{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.flow-mode-switches fieldset{border:0;padding:0;margin:0;min-width:0}.flow-mode-switches legend{font-size:12px;color:var(--ink2);margin-bottom:7px}
.flow-mode-switches fieldset>label{display:flex;align-items:center;gap:8px;padding:9px 10px;border:1px solid var(--line);border-radius:8px;margin-bottom:6px;cursor:pointer}
.flow-mode-switches fieldset>label:has(input:checked){border-color:var(--indigo);background:var(--indigo-s)}.flow-mode-switches input{width:15px;height:15px;margin:0;accent-color:var(--indigo);flex:none}
.flow-mode-switches b{display:block;font-size:11.5px}.flow-mode-switches small{display:block;font-size:9.5px;color:var(--ink3);margin-top:2px}.flow-entity-fields{margin-top:14px}
.flow-mode-card{display:grid;grid-template-columns:auto auto minmax(0,1fr);align-items:center;gap:10px;margin-top:14px;padding:11px 13px;
  border:1px solid var(--line);border-radius:9px;background:var(--green-s)}.flow-mode-card>span{font-size:10px;color:var(--green)}
.flow-mode-card>b{font-size:11.5px;color:var(--green)}.flow-mode-card>p{font-size:11px;line-height:1.65;margin:0;color:var(--ink2)}.is-hidden{display:none!important}
.flow-result-panel{position:sticky;top:82px;padding-bottom:14px}.flow-result-project{display:flex;flex-direction:column;gap:5px;padding:14px 16px;
  background:var(--hover);border-top:1px solid var(--line2);border-bottom:1px solid var(--line2)}.flow-result-project span{font-size:10px;color:var(--ink3)}
.flow-result-project b{font-size:12px;line-height:1.5}.flow-result-rows{padding:4px 16px;margin:0}.flow-result-rows div{display:flex;justify-content:space-between;
  align-items:center;gap:10px;min-height:36px;border-bottom:1px dashed var(--line2)}.flow-result-rows dt{font-size:10.5px;color:var(--ink3)}
.flow-result-rows dd{font-size:11.5px;font-weight:500;margin:0;text-align:right;overflow-wrap:anywhere}.flow-result-panel>.note{margin:10px 16px 12px;font-size:11px}
.flow-submit{width:calc(100% - 32px);margin:0 16px;min-height:38px;height:auto;text-align:center}.flow-submit-gate{margin:8px 16px 0}
.flow-success{min-height:560px;padding:50px 28px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:12px}
.flow-success>span{width:58px;height:58px;border-radius:18px;display:grid;place-items:center;background:var(--green-s);color:var(--green);font-size:28px}
.flow-success h2{font-size:20px;margin:6px 0 0}.flow-success p{font-size:12px;color:var(--ink3);margin:0;line-height:1.7}.flow-success .note{max-width:480px;text-align:left}
.project-detail-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;padding:20px;margin:0}.project-detail-grid dd{font-size:13px;margin:0;line-height:1.65;overflow-wrap:anywhere}
.flow-node-list{display:flex;flex-direction:column}.flow-node-row{min-width:0;display:grid;
  grid-template-columns:42px minmax(190px,1fr) minmax(170px,auto) auto 92px;align-items:center;gap:12px;
  padding:10px 14px;border-bottom:1px solid var(--line2)}.flow-node-row:last-child{border-bottom:0}
.flow-node-row:target{background:var(--indigo-s)}.flow-node-no{color:var(--ink3);font-size:11px}.flow-node-main{min-width:0}
.flow-node-main b{display:block;font-size:12.5px}.flow-node-main small{display:block;margin-top:3px;color:var(--ink3);font-size:10.5px}
.flow-deadlines{display:flex;align-items:center;justify-content:flex-end;gap:6px;flex-wrap:wrap}.flow-deadlines>span{display:flex;align-items:center;gap:5px}
.deadline-maintenance{display:block;color:var(--amber);font-size:10px;line-height:1.5}.flow-node-action{text-align:right}.flow-node-action form{display:inline}

/* ---------- M07 时限与待办 ---------- */
.todo-list{display:flex;flex-direction:column}.todo-row{min-width:0;display:grid;grid-template-columns:auto minmax(220px,1fr) minmax(220px,1fr);
  align-items:center;gap:12px;padding:13px 16px;border-bottom:1px solid var(--line2);color:var(--ink);text-decoration:none}
.todo-row:last-child{border-bottom:0}.todo-row:hover{background:var(--hover)}.todo-main{min-width:0}.todo-main b{display:block;font-size:13px}
.todo-main small{display:block;margin-top:3px;color:var(--ink3);font-size:10.5px}.todo-desc{font-size:11.5px;color:var(--ink2);line-height:1.6}
@media (max-width:1000px){.flow-assign-grid{grid-template-columns:minmax(0,1fr)}.flow-result-panel{position:static}.flow-queue{display:flex;overflow-x:auto}
  .flow-queue-item{min-width:230px;flex:none}.flow-people-grid{grid-template-columns:minmax(0,1fr)}
  .flow-node-row{grid-template-columns:36px minmax(0,1fr) auto}.flow-deadlines{grid-column:2;justify-content:flex-start}.flow-node-action{grid-column:3;grid-row:1/3}}
@media (max-width:700px){.flow-steps{justify-content:flex-start}.flow-step{min-width:145px}.flow-steps>i{width:34px;margin:0 8px}
  .flow-summary,.flow-mode-switches,.flow-fee-form,.project-detail-grid{grid-template-columns:minmax(0,1fr)}.flow-mode-card{grid-template-columns:auto minmax(0,1fr)}
  .flow-mode-card>p{grid-column:1/-1}.flow-project-head{flex-direction:column}.todo-row{grid-template-columns:auto minmax(0,1fr)}
  .todo-desc{grid-column:2}.flow-node-row{grid-template-columns:30px minmax(0,1fr)}.flow-node-action{grid-column:2;grid-row:auto;text-align:left}}

/* ── 立项页：多行对接人 ── */
.kickoff-contact-row{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr) minmax(0,1.2fr) auto;
  gap:9px;align-items:center;margin-bottom:9px}
.kickoff-contact-row select,.kickoff-contact-row input{margin:0}
@media (max-width:1100px){.kickoff-contact-row{grid-template-columns:minmax(0,1fr)}}

.flow-success-acts{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}
.flow-node-action{display:flex;gap:8px;align-items:center;justify-content:flex-end}

.agreement-doc{display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:14px 16px;border:1px solid var(--line);border-radius:10px;background:var(--bg-soft);margin-bottom:12px}
.agreement-doc-main b{display:block}
.agreement-doc-main small{color:var(--fg-dim)}
.agreement-doc-acts{display:flex;gap:8px;flex-shrink:0}
.agreement-decide{display:flex;gap:10px;align-items:center;margin-top:12px}
.agreement-history{margin-top:18px}
.agreement-history h3{font-size:13px;color:var(--fg-dim);margin:0 0 10px;font-weight:600}
.agreement-history-row{display:flex;gap:10px;padding:10px 0;border-top:1px solid var(--line)}
.agreement-history-row small{color:var(--fg-dim);margin-left:6px}
.agreement-history-row p{margin:6px 0 0;font-size:13px;white-space:pre-wrap}
form.inline{display:inline}
.ta-r{text-align:right}

.drive-preset-hint{align-self:center;color:var(--fg-dim);font-size:12px}

.demand-filelist{list-style:none;margin:0 0 12px;padding:0;display:flex;flex-direction:column;gap:6px}
.demand-filelist li{display:flex;justify-content:space-between;gap:12px;padding:8px 12px;
  border:1px solid var(--line);border-radius:8px;background:var(--bg-soft);font-size:13px}
.demand-filelist small{color:var(--fg-dim);flex-shrink:0}
.demand-filelist li{align-items:center}
.demand-start{display:flex;flex-direction:column;gap:14px}
.demand-upload{display:flex;gap:10px;align-items:center;flex-wrap:wrap;
  padding-top:14px;border-top:1px dashed var(--line)}
.empty.sm{padding:16px 0}
.doc-preview-block{padding:2px 0 14px;border-bottom:1px solid var(--line2)}
.doc-preview-heading{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 0 8px}
.doc-preview-heading b{font-size:12px}.doc-preview-heading span{font-size:10px;color:var(--ink3)}
.doc-preview-card{display:block;min-width:0;padding:10px;border:1px solid var(--line);border-radius:8px;
  background:var(--hover);color:var(--ink);text-decoration:none}.doc-preview-card:not(.is-empty):hover{border-color:var(--indigo)}
.doc-preview-open{display:flex;align-items:center;justify-content:flex-end;gap:3px;margin-bottom:7px;
  color:var(--indigo);font-size:10.5px}.doc-preview-open svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:1.8}
.doc-preview-text{max-height:230px;overflow:hidden;padding:10px;border:1px solid var(--line2);border-radius:6px;
  background:var(--panel);font-size:11.5px;line-height:1.65}.doc-preview-text p{margin:0 0 7px;white-space:pre-wrap;overflow-wrap:anywhere}
.doc-preview-text p:last-of-type{margin-bottom:0}.doc-preview-text>span{display:block;color:var(--ink3);text-align:center}
.doc-preview-empty{padding:20px 8px;color:var(--ink3);font-size:11px;line-height:1.6;text-align:center}

.arg-tasks{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:18px}
.arg-task-card{display:flex;flex-direction:column;gap:4px;padding:12px 16px;min-width:180px;
  border:1px solid var(--line);border-radius:10px;background:var(--bg-soft);
  text-decoration:none;color:inherit}
.arg-task-card.on{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset}
.arg-task-card b{font-size:14px}
.arg-task-card small{color:var(--fg-dim);font-size:12px}
.arg-conclusion{font-weight:600}
.arg-subhead{font-size:13px;color:var(--fg-dim);margin:16px 0 8px;font-weight:600}
.arg-review-group{margin-bottom:10px;font-size:13px}
.arg-review-group ul{margin:4px 0 0;padding-left:18px;color:var(--fg-dim)}
.arg-opinions{display:flex;flex-direction:column;gap:12px;margin-bottom:16px}
.arg-opinion{border:1px solid var(--line);border-radius:10px;padding:12px 14px}
.arg-opinion.undone{border-left:3px solid var(--warn,#c98a2b)}
.arg-opinion-head{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:6px}
.arg-opinion-head small{color:var(--fg-dim)}
.arg-opinion-text{margin:0 0 8px;white-space:pre-wrap;font-size:13px}
.arg-decision{margin:8px 0 0;font-size:12px;color:var(--fg-dim);display:flex;flex-direction:column;gap:3px}
.arg-decision dt{display:inline;font-weight:600;margin-right:6px}
.arg-decision dd{display:inline;margin:0}
.arg-decision > div{display:block}
.arg-decide-form{border-top:1px dashed var(--line);padding-top:10px;margin-top:8px}
.arg-blockers{margin:0 0 14px;padding-left:18px;font-size:13px;color:var(--fg-dim)}
.arg-blockers li{margin-bottom:6px}

.expert-pick{position:relative}
.expert-hits{position:absolute;z-index:20;left:0;right:0;top:100%;margin-top:4px;
  max-height:280px;overflow-y:auto;background:#fff;border:1px solid var(--line);
  border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.10)}
.expert-hit{display:block;width:100%;text-align:left;padding:9px 12px;border:0;
  background:none;cursor:pointer;border-bottom:1px solid var(--line2)}
.expert-hit:last-child{border-bottom:0}
.expert-hit:hover{background:var(--bg-soft)}
.expert-hit b{display:block;font-size:13px}
.expert-hit small{display:block;color:var(--fg-dim);font-size:11.5px}
.expert-hit.warn{border-left:3px solid var(--amber)}
.expert-conflict{color:var(--amber)!important;margin-top:2px}

/* ---------- M09 采购公告与公示 ---------- */
.notice-shell{max-width:1640px}.notice-steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
  gap:1px;background:var(--line);border:1px solid var(--line);border-radius:12px;overflow:hidden}
.notice-step{display:flex;align-items:center;gap:10px;padding:13px 16px;background:var(--panel);
  color:var(--ink2);text-decoration:none}.notice-step:hover{background:var(--hover)}
.notice-step.on{background:var(--indigo-s);color:var(--indigo)}.notice-step>span{font-size:11px}
.notice-step>b{font-size:13px}.notice-layout{display:grid;grid-template-columns:minmax(0,1fr) 340px;
  gap:18px;align-items:start}.notice-work,.notice-preview-panel{min-width:0}
.notice-preview-panel{position:sticky;top:82px}.notice-section{padding:0 0 24px;margin-bottom:24px;
  border-bottom:1px solid var(--line2)}.notice-section:last-child{margin-bottom:0;border-bottom:0}
.notice-tall{min-height:160px}.notice-routes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.notice-route{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:10px;align-items:start;
  padding:12px;border:1px solid var(--line);border-radius:9px;background:#FCFCFA;cursor:pointer}
.notice-route.selected{border-color:#A9B7CE;background:var(--indigo-s)}
.notice-route>input{width:15px;height:15px;margin:3px 0 0;accent-color:var(--indigo)}
.notice-route b{display:block;font-size:12.5px}.notice-route small{display:block;margin-top:3px;
  font-size:11px;color:var(--ink3);line-height:1.5}.notice-custom-site{margin-top:14px}
.notice-stack{display:flex;flex-direction:column;gap:18px}.notice-methods{display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.notice-method{display:flex;flex-direction:column;
  align-items:flex-start;gap:10px;padding:15px;border:1px solid var(--line);border-radius:10px;background:#FCFCFA}
.notice-method>b{font-size:13.5px}.notice-method>small{min-height:36px;color:var(--ink3);font-size:11px;line-height:1.6}
.notice-method>.btn{margin-top:auto}.notice-checks{display:flex;flex-direction:column;gap:8px}
.notice-files{display:flex;flex-direction:column;gap:8px}.notice-file{display:grid;
  grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;padding:11px 12px;
  border:1px solid var(--line);border-radius:9px;background:#FCFCFA}.notice-file>input{width:15px;height:15px;
  accent-color:var(--indigo)}.notice-file b{display:block;font-size:12.5px}.notice-file small{display:block;
  color:var(--ink3);font-size:11px;margin-top:2px}.notice-file>a{font-size:11.5px;color:var(--indigo);text-decoration:none}
.notice-channel-table{min-width:900px}.notice-channel-form{display:grid;
  grid-template-columns:minmax(150px,1fr) minmax(150px,1fr) auto auto;gap:7px;align-items:center}
.notice-channel-form input{height:29px;font-size:12px}.notice-paper{min-height:470px;padding:28px 24px;
  border:1px solid var(--line);background:#fff;font-family:SimSun,"Songti SC",serif;color:#343832}
.notice-paper h3{text-align:center;font-size:16px;margin:0 0 8px}.notice-paper>p{text-align:center;
  margin:0 0 20px;font-size:10px;color:var(--ink3)}.notice-paper section{margin-top:16px}
.notice-paper section>b{font-size:12px}.notice-paper section p,.notice-paper section ol{font-size:11px;
  line-height:1.8;margin:5px 0}.notice-paper section ol{padding-left:22px}.notice-facts{margin-top:18px}
@media(max-width:1080px){.notice-layout{grid-template-columns:minmax(0,1fr)}.notice-preview-panel{position:static}
  .notice-methods{grid-template-columns:minmax(0,1fr)}}
@media(max-width:700px){.notice-steps{grid-template-columns:repeat(2,minmax(0,1fr))}
  .notice-routes{grid-template-columns:minmax(0,1fr)}.notice-channel-form{grid-template-columns:minmax(0,1fr)}}

/* ---------- M25 供应商服务门户 ---------- */
.portal-body{min-height:100vh;background:var(--paper)}.portal-top{position:sticky;top:0;z-index:30;
  min-height:64px;padding:0 28px;border-bottom:1px solid var(--line);background:rgba(255,255,255,.96);
  display:flex;align-items:center;gap:12px}.portal-brand{display:flex;align-items:center;gap:10px;
  color:var(--ink);text-decoration:none}.portal-brand>span:last-child{display:flex;flex-direction:column;gap:1px}
.portal-brand b{font-size:13.5px}.portal-brand small{font-size:10px;color:var(--ink3);letter-spacing:.08em}
.portal-nav{display:flex;align-items:center;gap:4px;margin-left:28px}.portal-nav a,.supplier-nav a{padding:8px 11px;
  border-radius:7px;color:var(--ink2);font-size:12.5px;text-decoration:none}.portal-nav a:hover,.supplier-nav a:hover{
  background:var(--hover);color:var(--indigo)}.portal-main{width:min(1200px,calc(100% - 40px));margin:0 auto;
  padding:34px 0 56px;display:flex;flex-direction:column;gap:20px}.portal-main.narrow{max-width:860px}
.portal-footer{padding:28px max(20px,calc((100% - 1200px)/2));border-top:1px solid var(--line);
  background:var(--panel);display:flex;justify-content:space-between;gap:20px;color:var(--ink2);font-size:11.5px}
.portal-footer b{font-size:12.5px}.portal-hero{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(280px,.65fr);
  gap:38px;padding:52px 48px;border:1px solid var(--line);border-radius:14px;background:var(--panel)}
.portal-eyebrow{font-size:10px;letter-spacing:.14em;color:var(--indigo)}.portal-hero h1{max-width:700px;
  margin:13px 0 12px;font-size:30px;line-height:1.38}.portal-hero p{margin:0;color:var(--ink2);line-height:1.8}
.portal-search{display:flex;gap:8px;margin-top:26px}.portal-search input{flex:1;min-width:0;height:38px}.portal-search.compact{
  width:min(430px,100%);margin:0}.portal-path{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;
  justify-content:center;gap:1px;border:1px solid var(--line);border-radius:11px;overflow:hidden;background:var(--line)}
.portal-path li{padding:13px 16px;background:#FCFCFA;display:flex;align-items:center;gap:13px}.portal-path b{
  color:var(--indigo);font-size:11px}.portal-path span{font-size:12.5px}.portal-shortcuts{display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;border:1px solid var(--line);border-radius:12px;
  overflow:hidden;background:var(--line)}.portal-shortcuts a{min-height:92px;padding:18px;background:var(--panel);
  display:flex;flex-direction:column;gap:7px;color:var(--ink);text-decoration:none}.portal-shortcuts a:hover{background:var(--hover)}
.portal-shortcuts b{font-size:13.5px}.portal-shortcuts span{font-size:11px;color:var(--ink3);line-height:1.6}
.portal-panel{overflow:hidden}.portal-notice-list{display:flex;flex-direction:column}.portal-notice-list article{
  padding:17px 20px;border-top:1px solid var(--line2);display:flex;justify-content:space-between;gap:24px}
.portal-notice-list article:first-child{border-top:0}.portal-notice-list h3{margin:7px 0 4px;font-size:14px}
.portal-notice-list h3 a{color:var(--ink);text-decoration:none}.portal-notice-list h3 a:hover{color:var(--indigo)}
.portal-notice-list p{margin:4px 0;color:var(--ink3);font-size:11.5px;line-height:1.6}.portal-notice-meta{
  min-width:150px;display:flex;flex-direction:column;align-items:flex-end;gap:5px}.portal-notice-meta span{font-size:10.5px;color:var(--ink3)}
.portal-pagehead{display:flex;align-items:flex-end;justify-content:space-between;gap:20px}.portal-pagehead h1{
  margin:5px 0 4px;font-size:22px}.portal-pagehead p{margin:0;color:var(--ink3);font-size:11.5px;line-height:1.6}
.portal-pagehead>.acts{display:flex;align-items:center;gap:10px}.portal-detail-grid{display:grid;
  grid-template-columns:minmax(0,1.55fr) minmax(280px,.45fr);gap:18px;align-items:start}.portal-article h2,
.portal-files h2{margin:0 0 15px;font-size:15.5px}.portal-article h2:not(:first-child){margin-top:28px}
.portal-article h3{font-size:13px}.portal-article>p{line-height:1.8;color:var(--ink2)}.portal-facts{margin:0;
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;background:var(--line2);border:1px solid var(--line2)}
.portal-facts>div{min-width:0;padding:12px;background:#FCFCFA}.portal-facts dt{font-size:10.5px;color:var(--ink3)}
.portal-facts dd{margin:5px 0 0;overflow-wrap:anywhere;line-height:1.5}.portal-pre{white-space:pre-wrap;line-height:1.8;color:var(--ink2)}
.portal-files{position:sticky;top:84px}.portal-files>a{padding:11px 0;border-top:1px solid var(--line2);
  display:flex;flex-direction:column;gap:3px;color:var(--ink);text-decoration:none}.portal-files>a:hover{color:var(--indigo)}
.portal-files>a b{font-size:12.5px}.portal-files>a span{font-size:10.5px;color:var(--ink3)}.portal-auth{
  min-height:calc(100vh - 130px);padding:42px 20px;display:flex;align-items:center;justify-content:center}
.portal-auth-links{display:flex;justify-content:space-between}.portal-auth-links a{font-size:11.5px;color:var(--indigo)}
.supplier-nav{position:sticky;top:64px;z-index:20;padding:8px max(20px,calc((100% - 1200px)/2));
  border-bottom:1px solid var(--line);background:var(--panel);display:flex;gap:4px;overflow-x:auto;white-space:nowrap}
.portal-kpis{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;border:1px solid var(--line);
  border-radius:12px;overflow:hidden;background:var(--line)}.portal-kpis a{min-height:92px;padding:17px;
  background:var(--panel);display:flex;flex-direction:column;justify-content:space-between;color:var(--ink);text-decoration:none}
.portal-kpis a:hover{background:var(--hover)}.portal-kpis span{font-size:11.5px;color:var(--ink3)}.portal-kpis b{font-size:22px}
.portal-list{display:flex;flex-direction:column}.portal-list>a{padding:13px 18px;border-top:1px solid var(--line2);
  display:flex;align-items:center;justify-content:space-between;gap:14px;color:var(--ink);text-decoration:none}
.portal-list>a>span:first-child{display:flex;flex-direction:column;gap:3px}.portal-list small{font-size:10.5px;color:var(--ink3)}
.signup-start{margin-top:20px}.signup-steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
  gap:1px;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--line)}
.signup-steps a{padding:13px;background:var(--panel);display:flex;align-items:center;gap:8px;color:var(--ink2);
  text-decoration:none}.signup-steps a.on{background:var(--indigo-s);color:var(--indigo)}.signup-steps b{font-size:10.5px}
.supplier-upload{margin:18px 0}.supplier-upload select{height:34px}.supplier-files{display:flex;flex-direction:column;
  border:1px solid var(--line);border-radius:9px;overflow:hidden}.supplier-files a{padding:11px 12px;border-top:1px solid var(--line2);
  display:flex;align-items:center;justify-content:space-between;gap:15px;color:var(--ink);text-decoration:none}
.supplier-files a:first-child{border-top:0}.supplier-files a>span:first-child{display:flex;flex-direction:column;gap:3px}
.supplier-files small{font-size:10.5px;color:var(--ink3)}.supplier-receipt{min-width:230px;display:flex;align-items:center;
  justify-content:flex-end;gap:7px}.supplier-receipt input{max-width:150px;font-size:10.5px}.portal-awards article{
  padding:16px 18px;border-top:1px solid var(--line2);display:flex;align-items:center;justify-content:space-between;gap:20px}
.portal-awards article:first-child{border-top:0}.portal-awards article>div{display:flex;flex-direction:column;gap:4px}
.portal-awards article>div:last-child{align-items:flex-end}.portal-awards article span.mono{font-size:10.5px;color:var(--ink3)}
.supplier-admin-table{min-width:1180px}.supplier-admin-table td small{display:block;margin-top:4px;color:var(--ink3);
  font-size:10.5px;line-height:1.5}.supplier-admin-actions{display:flex;align-items:center;justify-content:flex-end;
  gap:6px;flex-wrap:wrap}.supplier-admin-actions .rowform input{width:145px;height:29px;font-size:11px}
.supplier-reason{color:var(--red)!important}.supplier-file-link{display:block;max-width:240px;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap;color:var(--indigo);font-size:11px;text-decoration:none}
@media(max-width:900px){.portal-nav{display:none}.portal-hero,.portal-detail-grid{grid-template-columns:minmax(0,1fr)}
  .portal-files{position:static}.portal-shortcuts{grid-template-columns:repeat(2,minmax(0,1fr))}.portal-hero{padding:32px 26px}
  .portal-pagehead{align-items:flex-start;flex-direction:column}.portal-pagehead>.acts{align-items:flex-start;flex-direction:column}
  .portal-facts{grid-template-columns:minmax(0,1fr)}}
@media(max-width:600px){.portal-top{padding:8px 14px}.portal-brand b{font-size:12px}.portal-top>.btn.ghost{display:none}
  .portal-main{width:min(100% - 24px,1200px);padding-top:22px}.portal-hero h1{font-size:22px}.portal-search{
  flex-direction:column}.portal-shortcuts,.portal-kpis,.signup-steps{grid-template-columns:minmax(0,1fr)}
  .portal-notice-list article,.portal-awards article{align-items:flex-start;flex-direction:column}.portal-notice-meta{
  align-items:flex-start}.portal-footer{flex-direction:column}.supplier-receipt{align-items:flex-end;flex-direction:column}}

/* 采购需求 / 采购文件的编制工作台：顶部三步 + 三种成文方式并列 */
.wb-steps{display:flex;gap:1px;background:var(--line);border:1px solid var(--line);
  border-radius:10px;overflow:hidden;margin-bottom:18px}
.wb-step{flex:1;display:flex;flex-direction:column;gap:2px;padding:11px 14px;
  background:#fff;text-decoration:none;color:inherit}
.wb-step .mono{font-size:11px;color:var(--fg-dim)}
.wb-step b{font-size:13.5px}
.wb-step small{font-size:11.5px;color:var(--fg-dim)}
.wb-step.on{background:var(--bg-soft);box-shadow:inset 0 -2px 0 var(--indigo)}
.wb-step.done .mono::after{content:" ✓";color:var(--green)}
.wb-current{display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:14px 16px;border:1px solid var(--line);border-radius:10px;
  background:var(--bg-soft);margin-bottom:14px}
.wb-current-main b{display:block;font-size:14px}
.wb-current-main small{color:var(--fg-dim);font-size:12px}
.wb-current-acts{display:flex;gap:8px;flex-shrink:0}
.wb-methods{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:12px}
.wb-method{display:flex;flex-direction:column;gap:9px;padding:14px;
  border:1px solid var(--line);border-radius:10px}
.wb-method-head{display:flex;gap:10px;align-items:flex-start}
.wb-method-head b{display:block;font-size:13.5px}
.wb-method-head small{display:block;color:var(--fg-dim);font-size:11.5px;line-height:1.5}
.wb-badge{flex-shrink:0;width:26px;height:26px;border-radius:7px;display:flex;
  align-items:center;justify-content:center;font-size:12px;font-weight:600;
  background:var(--bg-soft);color:var(--fg-dim);border:1px solid var(--line)}
.wb-method-note{margin:0;font-size:12px;color:var(--fg-dim);line-height:1.6}
.wb-method .hint{font-size:11.5px}

/* ---------- 评审中心 · 开标准备 ---------- */
.prep-meta{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:0;border-bottom:1px solid var(--line2)}
.prep-meta>div{display:flex;flex-direction:column;gap:5px;padding:13px 16px;border-right:1px solid var(--line2);min-width:0}
.prep-meta>div:last-child{border-right:0}.prep-meta small{font-size:10.5px;color:var(--ink3)}
.prep-meta b{font-size:12.5px;overflow-wrap:anywhere}.prep-section+.prep-section{border-top:1px solid var(--line)}
.prep-batch{margin-left:auto;display:flex;gap:7px;align-items:center}.prep-batch select{height:29px;min-width:180px}
.prep-items-table{min-width:1260px}.prep-items-table textarea{min-width:220px;min-height:58px}
.prep-items-table select[multiple]{min-width:190px;height:82px;background-image:none;padding:5px}
.prep-items-table td:nth-child(2){min-width:250px}.prep-items-table td:nth-child(6){min-width:170px}
.prep-items-table td:nth-child(6) select+select{margin-top:6px}.prep-confirm{margin-top:14px;max-width:720px}
.prep-add-people{display:grid;grid-template-columns:1fr 1fr;gap:24px}.prep-button-field{justify-content:flex-end}
.prep-inline-details{display:inline-block;text-align:left;margin-left:6px}.prep-inline-details summary{font-size:12px;color:var(--indigo);cursor:pointer}
.prep-inline-details .form{position:absolute;z-index:20;width:320px;padding:14px;background:var(--panel);border:1px solid var(--line);border-radius:9px;box-shadow:0 12px 34px rgba(28,30,26,.15)}
.hint{display:block;font-size:11px;color:var(--ink3);line-height:1.6}.pbody{padding:18px 20px}
@media(max-width:800px){.prep-meta{grid-template-columns:repeat(2,minmax(0,1fr))}.prep-add-people{grid-template-columns:minmax(0,1fr)}}

/* 供应商大屏不带业务台导航，必须自己占满投影画布；深色底也降低现场眩光。 */
.bidroom{min-height:100vh;padding:34px 42px;background:var(--ink);color:var(--paper);
  display:flex;flex-direction:column;gap:25px}.bidroom-head{display:flex;justify-content:space-between;
  align-items:flex-end;gap:30px;border-bottom:1px solid var(--ink2);padding-bottom:20px}
.bidroom-head small,.bidroom-head span{display:block;color:var(--ink3);font-size:12px}
.bidroom-head h1{margin:7px 0 4px;font-size:30px}.bidroom-head>div:last-child{text-align:right}
.bidroom-head>div:last-child b{font-size:20px}.bidroom-count{display:flex;align-items:baseline;
  justify-content:center;gap:14px;flex-wrap:wrap}.bidroom-count>span{font-size:20px}
.bidroom-count>b{font-size:54px;color:var(--amber)}.bidroom-count>small{margin-left:18px;
  color:var(--ink3);font-size:16px}.bidroom-table{flex:1;border:1px solid var(--ink2);
  border-radius:12px;overflow:hidden}.bidroom-table table{width:100%;border-collapse:collapse}
.bidroom-table th{padding:15px 20px;text-align:left;color:var(--ink3);font-size:14px;
  border-bottom:1px solid var(--ink2)}.bidroom-table td{padding:18px 20px;font-size:21px;
  border-bottom:1px solid var(--ink2)}.bidroom-table td:first-child,
.bidroom-table td:nth-child(3){font-family:"IBM Plex Mono",monospace}.bidroom-table tr.called{
  background:var(--indigo);color:var(--panel)}.bidroom>.note{margin:0;border-color:var(--ink2);
  background:var(--ink2);color:var(--paper)}.bidroom-step{display:flex;align-items:center;gap:13px}
.bidroom-step span,.bidroom-step small{color:var(--ink3)}.bidroom-step b{font-size:15px}
.bidroom-step small{margin-left:auto}
@media(max-width:900px){.bidroom{padding:24px 20px}.bidroom-head{align-items:flex-start;
  flex-direction:column}.bidroom-head>div:last-child{text-align:left}}
@media(max-width:600px){.bidroom-count>b{font-size:38px}.bidroom-table td{font-size:16px;
  padding:13px 10px}.bidroom-step{align-items:flex-start;flex-direction:column}.bidroom-step small{
  margin-left:0}}

/* 项目办理页的项目识别与返回条（改造任务书第 28 项）。
   面包屑里那个小编号既是唯一的返回入口、又是唯一的项目标识，两件事都不称职。 */
.project-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:0 0 14px;
  padding:9px 13px;background:var(--panel);border:1px solid var(--line);border-radius:10px}
.project-bar-back{display:inline-flex;align-items:center;gap:5px;height:28px;padding:0 11px;
  border:1px solid var(--line);border-radius:7px;background:#FCFCFA;color:var(--ink);
  font-size:12.5px;font-weight:600;text-decoration:none;white-space:nowrap}
.project-bar-back:hover{background:var(--hover)}
.project-bar-name{font-size:13.5px;font-weight:700;color:var(--ink)}
.project-bar-code{font-size:11.5px;color:var(--ink3)}
.crumb .mono{font-size:11px;color:var(--ink3)}
@media(max-width:600px){.project-bar{align-items:flex-start;flex-direction:column;gap:7px}}

/* 服务类预算的「N 年 N 月 N 天」三格（改造任务书第 13 项）。 */
.service-period{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.service-period input{width:88px}
.service-period span{color:var(--ink3);font-size:12.5px}

/* 项目流程按前期/中期/后期分段（改造任务书第 09、10、11 项）。
   29 个节点等权重竖排时，已完成的和待办的一样高，用户得一路滚才知道现在办什么。 */
.flow-phases{display:flex;flex-direction:column;gap:10px;padding:12px 14px}
.flow-phase{border:1px solid var(--line);border-radius:10px;background:#FCFCFA;overflow:hidden}
.flow-phase.is-active{border-color:var(--indigo);background:var(--panel)}
.flow-phase-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  padding:10px 13px;cursor:pointer;list-style:none;user-select:none}
.flow-phase-head::-webkit-details-marker{display:none}
.flow-phase-head::before{content:"▸";color:var(--ink3);font-size:11px;transition:transform .15s}
.flow-phase[open] .flow-phase-head::before{transform:rotate(90deg)}
.flow-phase-name{font-size:13.5px;font-weight:700}
.flow-phase-hint{color:var(--ink3);font-size:11.5px}
.flow-phase-count{margin-left:auto;color:var(--ink3);font-size:11.5px}
/* 已完成节点压扁：仍可回溯，但不再和待办抢注意力 */
.flow-node-row.is-done{opacity:.66}
.flow-node-row.is-done .flow-node-main small{display:none}
.flow-node-row.is-current{background:var(--hover)}
/* 第 10 项：节点名本身就是入口，不用再去右边找按钮 */
.flow-node-title{font-weight:700;font-size:13px;color:var(--ink);text-decoration:none}
.flow-node-title:hover{color:var(--indigo);text-decoration:underline}

/* 单位档案三级科室、人员详情与协议取得人员（改造任务书第 01–05 项）。 */
.unit-dept-list>a.unit-dept-level-2{margin-left:18px}.unit-dept-list>a.unit-dept-level-3{margin-left:36px}
.unit-dept-list>a>span:last-child{min-width:0;display:flex;flex-direction:column;gap:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.unit-dept-list>a>span>small{color:var(--ink3);font-size:10px;font-weight:400}.unit-contact-card[data-contact-detail-url]{cursor:pointer}
.unit-contact-card[data-contact-detail-url]:focus{background:var(--hover);outline:1px solid var(--grey)}
.unit-contact-card b>a{color:var(--ink);text-decoration:none}.unit-contact-roles{display:flex;flex-wrap:wrap;gap:5px}
.unit-framework-table{min-width:1320px}.framework-owner-rows{display:flex;flex-direction:column;gap:7px}
.framework-owner-row{display:grid;grid-template-columns:minmax(150px,1fr) minmax(140px,1fr) 100px auto auto;gap:7px;align-items:center}
.framework-owner-row select,.framework-owner-row input{min-width:0;width:100%}.framework-owner-row>span{color:var(--ink3);font-size:11px}
.framework-owner-tools{display:flex;align-items:center;gap:10px;margin-top:8px}.framework-owner-tools [data-owner-total]{color:var(--ink3);font-size:10.5px}
.framework-current-scans{margin-bottom:8px}
@media (max-width:1000px){
  .unit-dept-list>a.unit-dept-level-2,.unit-dept-list>a.unit-dept-level-3{margin-left:0}
  .framework-owner-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr) 90px auto}
  .framework-owner-row .btn{grid-column:1/-1;justify-self:start}
}
@media (max-width:680px){.framework-owner-row{grid-template-columns:minmax(0,1fr) 80px auto}.framework-owner-row>select,.framework-owner-row>input[name=owner_person_name]{grid-column:1/-1}}

/* 正文与附件合到一步后的附件区，以及定稿哈希（改造任务书第 15、16、17 项）。 */
.wb-attach{margin-top:18px;padding-top:16px;border-top:1px solid var(--line2)}
.wb-attach-preview{margin-left:auto;font-size:11.5px}
.wb-hash{font-size:10.5px;word-break:break-all;color:var(--ink2)}

/* 公告报名中心按项目和轮次组织（改造任务书第 26、31 项）。
   原页面是三张跨项目的大表，看不出「要办的是哪个项目、第几次采购」。 */
.signup-cards{display:flex;flex-direction:column;gap:12px;padding:12px 14px}
.signup-card{border:1px solid var(--line);border-radius:10px;background:#FCFCFA;padding:12px 13px}
.signup-card-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.signup-card-title{display:flex;flex-direction:column;gap:2px;min-width:0}
.signup-card-title b{font-size:13.5px}
.signup-card-title small{color:var(--ink3);font-size:11px}
.signup-card-acts{margin-left:auto;display:flex;gap:6px;flex-wrap:wrap}
.signup-card-stats{display:flex;gap:18px;flex-wrap:wrap;margin:0 0 10px}
.signup-card-stats dt{color:var(--ink3);font-size:11px}
.signup-card-stats dd{margin:0;font-size:14px;font-weight:700}
.signup-raw{margin-top:14px}
.signup-raw>summary{cursor:pointer;padding:9px 13px;border:1px solid var(--line);border-radius:10px;
  background:var(--panel);font-size:12.5px;color:var(--ink2)}
.signup-raw[open]>summary{margin-bottom:10px}

/* 项目基础信息变更：字段按业务组提交，版本卡只展示翻译后的中文前后值。 */
.project-change-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-bottom:16px}
.project-change-field{display:flex;flex-direction:column;gap:11px;padding:14px;border:1px solid var(--line2);
  border-radius:10px;background:var(--panel)}
.project-change-field.full{grid-column:1/-1}.project-change-budget{padding-top:2px}
.project-change-lines{display:flex;flex-direction:column;gap:8px}.project-change-line{display:grid;
  grid-template-columns:100px minmax(0,1fr);gap:12px;align-items:center}
.project-change-line>b{font-size:11.5px;color:var(--ink2)}.project-change-meta{display:flex;flex-wrap:wrap;gap:6px 18px;
  color:var(--ink3);font-size:11.5px}.project-change-decision{padding-top:12px;border-top:1px solid var(--line2)}
.project-change-compact{display:flex;flex-direction:column}.project-change-compact>article{padding:12px 0;
  border-bottom:1px solid var(--line2)}.project-change-compact>article:first-child{padding-top:0}
.project-change-compact>article:last-child{padding-bottom:0;border-bottom:0}
@media(max-width:680px){.project-change-fields{grid-template-columns:minmax(0,1fr)}
  .project-change-field.full{grid-column:auto}.project-change-line{grid-template-columns:minmax(0,1fr)}}
/* 评审中心四阶段进度条（改造任务书第 27 项）。
   功能本来就都在，缺的是一条把开标前准备 → 现场开标 → 审查与评审 → 报告与归档
   串起来的主线；客户的原话是「看不出现在在哪个阶段、第一步该办什么」。 */
.review-phases{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 14px}
.review-phase{flex:1 1 200px;display:flex;align-items:center;gap:9px;padding:10px 13px;
  border:1px solid var(--line);border-radius:10px;background:var(--panel);
  color:var(--ink);text-decoration:none;min-width:0}
.review-phase:hover{background:var(--hover)}
.review-phase.on{border-color:var(--indigo);background:var(--indigo-s)}
.review-phase-no{width:24px;height:24px;flex-shrink:0;display:flex;align-items:center;
  justify-content:center;border-radius:50%;border:1px solid var(--line);
  background:#FCFCFA;font-size:11px;color:var(--ink2)}
.review-phase.on .review-phase-no{border-color:var(--indigo);color:var(--indigo)}
.review-phase-text{min-width:0;display:flex;flex-direction:column;gap:1px}
.review-phase-text b{font-size:12.5px}
.review-phase-text small{color:var(--ink3);font-size:10.5px;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
@media(max-width:760px){.review-phase{flex:1 1 100%}}

/* 预览解析失败时的兜底出口（改造任务书第 19 项）。 */
.doc-preview-fallback{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}

/* 文内意见必须在不挤压 Office 编辑区的前提下随时可查，所以台账用右侧抽屉覆盖呈现。 */
.doc-comments-drawer{position:fixed;z-index:55;top:60px;right:0;width:min(430px,100vw);
  height:calc(100dvh - 60px);display:flex;flex-direction:column;background:var(--panel);
  border-left:1px solid var(--line)}
.doc-comments-drawer[hidden],#doc-comment-modal[hidden]{display:none}
.doc-comments-drawer-head{display:flex;align-items:center;gap:10px;padding:15px 18px;
  border-bottom:1px solid var(--line2)}
.doc-comments-drawer-head>div{display:flex;flex-direction:column;gap:2px;min-width:0}
.doc-comments-drawer-head b{font-size:15.5px}.doc-comments-drawer-head small{font-size:11px;color:var(--ink3)}
.doc-comments-drawer-head .x,.doc-comments-drawer .x,#doc-comment-modal .x{margin-left:auto;width:28px;height:28px;
  border:0;border-radius:7px;background:none;color:var(--ink3);font:inherit;font-size:18px;cursor:pointer}
.doc-comments-drawer-head .x:hover,#doc-comment-modal .x:hover{background:var(--hover);color:var(--ink)}
.doc-comments-drawer-body{min-height:0;overflow:auto;flex:1;padding:14px}
.doc-comment-ledger-summary{display:flex;align-items:center;gap:14px;padding:0 2px 10px;
  color:var(--ink3);font-size:11.5px}.doc-comment-ledger-summary b{color:var(--ink)}
.doc-comment-list{display:flex;flex-direction:column;gap:10px}
.doc-comment-card{padding:13px;border:1px solid var(--line);border-radius:10px;background:var(--panel)}
.doc-comment-card-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.doc-comment-card-head>.mono{font-size:11px;color:var(--ink2)}
.doc-comment-card blockquote,.doc-comment-selected blockquote{margin:10px 0;padding:9px 11px;
  border-left:3px solid var(--steel);background:var(--steel-s);color:var(--ink2);
  font-size:11.5px;line-height:1.65;white-space:pre-wrap;overflow-wrap:anywhere}
.doc-comment-content{margin:10px 0;font-size:13px;line-height:1.7;white-space:pre-wrap;overflow-wrap:anywhere}
.doc-comment-meta{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px 12px;
  margin:0;padding-top:10px;border-top:1px solid var(--line2)}
.doc-comment-meta div{min-width:0}.doc-comment-meta dt{font-size:10.5px;color:var(--ink3)}
.doc-comment-meta dd{margin:2px 0 0;font-size:11.5px;overflow-wrap:anywhere}
.doc-comment-record{margin-top:10px;padding:9px 10px;border-radius:8px;background:var(--hover);
  display:flex;flex-direction:column;gap:3px;font-size:11.5px}
.doc-comment-record>span{color:var(--ink3)}.doc-comment-record p{margin:2px 0 0;line-height:1.6;white-space:pre-wrap}
.doc-comment-action{display:flex;flex-direction:column;align-items:flex-start;gap:9px;margin-top:11px;
  padding-top:11px;border-top:1px solid var(--line2);width:100%}
.doc-comment-action .f{width:100%}.doc-comment-action textarea{min-height:60px}
.doc-comment-selected>b{font-size:12px}.doc-comment-selected+ .f{margin-top:16px}
.doc-comment-badge{display:flex;align-items:center;justify-content:space-between;gap:10px;
  margin:10px 16px;padding:9px 11px;border:1px solid var(--line);border-radius:8px;
  background:var(--indigo-s);color:var(--indigo);font-size:12px;text-decoration:none}
.doc-comment-badge:hover{border-color:var(--indigo)}
@media(max-width:700px){.doc-editor-head{align-items:flex-start;flex-direction:column}
  .doc-editor-head>.rowsp{flex-wrap:wrap}.doc-comments-drawer{top:60px;height:calc(100dvh - 60px)}
  .doc-comment-meta{grid-template-columns:minmax(0,1fr)}}
/* 采购包与「轮次 × 包」表（改造任务书第 12 项）。 */
.tbl td[rowspan]{vertical-align:top;background:var(--bg-soft)}
.tbl td small.s{display:block;color:var(--ink3);font-size:10.5px;margin-top:2px}

/* ── 评审中心骨架（改造任务书第 27 项，照客户认可的原型）─────────────
   原型是：左侧固定深色导航 + 项目头 + 四阶段 + 主体两栏（办理区 + 右侧状态栏）。
   我们原来是通栏加一排页签，所以客户说「UI 还是原来的」。
   颜色只用 tokens.css 里已有的变量，深色底用 --indigo。 */
.rc-shell{display:grid;grid-template-columns:196px minmax(0,1fr);min-height:100vh;
  background:var(--paper)}
.rc-side{position:sticky;top:0;align-self:start;height:100vh;display:flex;
  flex-direction:column;gap:14px;padding:16px 12px;background:var(--indigo);color:#fff}
.rc-brand{display:flex;align-items:center;gap:9px}
.rc-logo{width:32px;height:32px;flex:none;border-radius:9px;background:rgba(255,255,255,.14);
  display:flex;align-items:center;justify-content:center;font-size:15px;font-weight:700}
.rc-brand b{display:block;font-size:13.5px}
.rc-brand small{display:block;font-size:10.5px;opacity:.62}
.rc-side-group{font-size:10.5px;opacity:.55;padding:0 4px}
.rc-nav{display:flex;flex-direction:column;gap:2px}
.rc-nav-item{display:block;padding:8px 11px;border-radius:8px;color:rgba(255,255,255,.78);
  font-size:12.5px;text-decoration:none}
.rc-nav-item:hover{background:rgba(255,255,255,.09);color:#fff}
.rc-nav-item.on{background:rgba(255,255,255,.16);color:#fff;font-weight:600}
.rc-side-foot{margin-top:auto;padding:0 4px}
.rc-side-foot b{display:block;font-size:11.5px}
.rc-side-foot small{display:block;font-size:10px;opacity:.55;line-height:1.5;margin-top:3px}

.rc-main{min-width:0;padding:18px 24px 40px}
.rc-head{display:flex;align-items:flex-start;gap:11px;margin-bottom:14px}
.rc-back{width:28px;height:28px;flex:none;border:1px solid var(--line);border-radius:8px;
  background:var(--panel);color:var(--ink2);display:flex;align-items:center;
  justify-content:center;text-decoration:none;font-size:15px}
.rc-back:hover{background:var(--hover);color:var(--ink)}
.rc-head-title{min-width:0}
.rc-head-line{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.rc-head-line h1{margin:0;font-size:19px;font-weight:700;letter-spacing:-.01em}
.rc-head-meta{display:flex;gap:14px;flex-wrap:wrap;margin-top:4px;
  color:var(--ink3);font-size:11.5px}

/* 主体两栏；没有右栏的页面就一栏 */
.rc-body{display:grid;grid-template-columns:minmax(0,1fr);gap:16px;align-items:start}
.rc-body.has-rail{grid-template-columns:minmax(0,1fr) 264px}
.rc-work{min-width:0;display:flex;flex-direction:column;gap:14px}
.rc-rail{position:sticky;top:16px;display:flex;flex-direction:column;gap:12px}
.rc-rail-card{background:var(--panel);border:1px solid var(--line);border-radius:12px;
  padding:13px 14px}
.rc-rail-head{font-size:12.5px;font-weight:700;margin-bottom:9px}
.rc-rail-big{display:flex;align-items:baseline;gap:5px}
.rc-rail-big b{font-size:30px;font-weight:700;letter-spacing:-.02em}
.rc-rail-big span{color:var(--ink3);font-size:13px}
.rc-rail-sub{color:var(--ink3);font-size:11px;margin-top:2px}
.rc-meter{height:4px;border-radius:2px;background:var(--line2);margin-top:9px;overflow:hidden}
.rc-meter>i{display:block;height:100%;background:var(--indigo)}
.rc-rail-rows{margin:0;background:var(--panel);border:1px solid var(--line);
  border-radius:12px;padding:11px 14px;display:flex;flex-direction:column;gap:8px}
.rc-rail-rows>div{display:flex;justify-content:space-between;gap:10px}
.rc-rail-rows dt{color:var(--ink3);font-size:11.5px}
.rc-rail-rows dd{margin:0;font-size:12px;font-weight:600;text-align:right}
.rc-checklist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px}
.rc-checklist li{position:relative;padding-left:17px;font-size:12px;color:var(--ink2)}
.rc-checklist li::before{content:"○";position:absolute;left:0;color:var(--ink3);font-size:11px}
.rc-checklist li.done{color:var(--ink)}
.rc-checklist li.done::before{content:"●";color:var(--green)}
.rc-rail-note{color:var(--ink3);font-size:11px;line-height:1.7;margin:0}
.rc-rail-links{display:flex;flex-direction:column;gap:6px}

/* 子页签：原来那排 .tabs 挪进办理区，样式跟着骨架收窄一点 */
.rc-subtabs{display:flex;gap:4px;flex-wrap:wrap;background:var(--panel);
  border:1px solid var(--line);border-radius:12px;padding:5px}
.rc-subtabs>a{padding:7px 13px;border-radius:8px;color:var(--ink2);font-size:12.5px;
  text-decoration:none}
.rc-subtabs>a:hover{background:var(--hover);color:var(--ink)}
.rc-subtabs>a.on{background:var(--indigo-s);color:var(--indigo);font-weight:600}

@media(max-width:1180px){
  .rc-body.has-rail{grid-template-columns:minmax(0,1fr)}
  .rc-rail{position:static;flex-direction:row;flex-wrap:wrap}
  .rc-rail>*{flex:1 1 240px}
}
@media(max-width:900px){
  .rc-shell{grid-template-columns:minmax(0,1fr)}
  .rc-side{position:static;height:auto;flex-direction:row;align-items:center;
    gap:10px;overflow-x:auto}
  .rc-side-group,.rc-side-foot{display:none}
  .rc-nav{flex-direction:row}
  .rc-main{padding:14px 14px 32px}
}
/* 右栏的表格预览卡（改造任务书第 27 项第 4 条，照原型）。 */
.rc-sheets{display:flex;flex-direction:column;gap:8px}
.rc-sheet{display:flex;flex-direction:column;align-items:center;gap:6px;padding:14px 12px;
  border:1px solid var(--line);border-radius:12px;background:var(--panel);
  color:var(--ink);text-decoration:none;text-align:center}
.rc-sheet:hover{background:var(--hover)}
.rc-sheet b{font-size:12px;font-weight:600;line-height:1.5}
.rc-sheet-doc{width:34px;height:42px;border:1px solid var(--line);border-radius:4px;
  background:repeating-linear-gradient(var(--panel) 0 9px,var(--line2) 9px 10px)}
.rc-sheet-go{color:var(--ink3);font-size:11px}

/* 视频监督中心：两路监控并排。客户对这一页的要求就是「只有监控」，
   所以画面要占满宽度，其余信息一律往下排，别跟画面抢位置。 */
.mon-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;
  align-items:start;margin-bottom:16px}
.mon-frame{position:relative;width:100%;aspect-ratio:16/9;overflow:hidden;
  border:1px solid var(--line);border-radius:8px;background:#0b0d10}
.mon-frame>iframe,.mon-frame>video{position:absolute;inset:0;width:100%;height:100%;border:0}
@media(max-width:900px){
  .mon-grid{grid-template-columns:minmax(0,1fr)}
}

/* 版本链必须把业务信息和默认收起的校验字段分层；哈希只在主动展开时出现。 */
.version-chain{min-width:0}.version-list{display:flex;flex-direction:column}
.version-entry{padding:18px 20px;border-bottom:1px solid var(--line2)}
.version-entry:last-child{border-bottom:0}.version-entry.is-final{background:var(--green-s)}
.version-entry-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}
.version-title,.version-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.version-title strong{font-size:15.5px}.version-actions{justify-content:flex-end}
.version-meta{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px 18px;
  margin:14px 0 0;padding:13px 0;border-top:1px solid var(--line2);border-bottom:1px solid var(--line2)}
.version-meta div{min-width:0}.version-meta dt{font-size:10.5px;color:var(--ink3);margin-bottom:3px}
.version-meta dd{margin:0;font-size:12px;line-height:1.6;overflow-wrap:anywhere}
.version-finalize>summary{list-style:none;cursor:pointer}.version-finalize>summary::-webkit-details-marker{display:none}
.version-finalize form{max-width:310px;margin-top:8px;padding:10px;border:1px solid var(--line);
  border-radius:8px;background:var(--panel)}
.version-finalize form p{margin:0 0 9px;color:var(--ink2);font-size:11.5px;line-height:1.6}
.version-final-note{margin:12px 0 0}.version-checksum{margin-top:10px;font-size:11px;color:var(--ink3)}
.version-checksum summary{cursor:pointer}.version-checksum code{display:block;margin-top:7px;padding:8px 10px;
  border-radius:7px;background:var(--hover);color:var(--ink2);overflow-wrap:anywhere}
.version-comments{margin-top:14px}.version-comments h3{margin:0 0 9px;font-size:12.5px}
.version-comments h3 span{margin-left:4px;color:var(--ink3)}
.version-comment{padding:11px 12px;border:1px solid var(--line);border-radius:9px;background:var(--panel)}
.version-comment+.version-comment{margin-top:8px}.version-comment>div{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.version-comment>div>.mono{margin-right:auto;font-size:11px;color:var(--ink2)}
.version-comment blockquote{margin:9px 0;padding:8px 10px;border-left:3px solid var(--steel);
  background:var(--steel-s);color:var(--ink2);font-size:11.5px;line-height:1.6;white-space:pre-wrap}
.version-comment p{margin:8px 0;font-size:12.5px;line-height:1.7;white-space:pre-wrap;overflow-wrap:anywhere}
.version-comment small{color:var(--ink3);font-size:10.5px}
@media(max-width:900px){.version-meta{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:620px){.version-entry{padding:15px}.version-entry-head{flex-direction:column}
  .version-actions{justify-content:flex-start}.version-meta{grid-template-columns:minmax(0,1fr)}}
/* 协议扫描件必须区分服务器原件与浏览器待上传文件，避免用户把“选中”误当成“已归档”。 */
.framework-scan-manager{gap:10px}.framework-scan-section{padding:11px;border:1px solid var(--line2);
  border-radius:8px;background:var(--hover)}.framework-scan-section>b{display:block;margin-bottom:7px;
  font-size:11.5px;color:var(--ink2)}.framework-scan-mode{margin-top:2px}.framework-file-picker{
  display:flex;flex-direction:column;gap:6px}.framework-file-picker input[type=file]{padding:8px;
  border:1px solid var(--line);border-radius:7px;background:var(--panel)}.framework-pending-files{
  display:flex;flex-direction:column;gap:6px}.framework-pending-file small{line-height:1.8}
.unit-attachment-actions .link-button{padding:0;border:0;background:transparent;color:var(--steel);
  font:inherit;font-size:11px;cursor:pointer}.unit-attachment-actions .link-button.danger{color:var(--red)}
.flow-readonly-value{min-height:34px;padding:8px 11px;border:1px solid var(--line2);border-radius:7px;
  background:var(--hover);color:var(--ink);line-height:1.5;overflow-wrap:anywhere}
@media(max-width:600px){.framework-scan-manager .unit-attachment{align-items:flex-start;flex-direction:column}
  .framework-scan-manager .unit-attachment-actions{flex-wrap:wrap}}

/* ---------- 第二轮 07 · 采购需求成文与同版只读预览 ---------- */
.demand-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(230px,280px);gap:16px;align-items:start}
.demand-main-panel{min-width:0;overflow:visible}.demand-summary{min-width:0}.demand-history{margin-top:16px;border-top:1px solid var(--line2);padding-top:12px}
.demand-history summary{color:var(--indigo);font-size:12px;cursor:pointer}.demand-history .agreement-history{margin-top:10px}
.demand-current-empty{margin-bottom:14px}.demand-method-switch{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  gap:1px;margin-top:14px;border:1px solid var(--line);border-radius:9px;overflow:hidden;background:var(--line)}
.demand-method-tab{min-height:42px;padding:8px 10px;border:0;background:var(--panel);color:var(--ink2);
  font:inherit;font-size:12.5px;cursor:pointer}.demand-method-tab:hover{background:var(--hover);color:var(--ink)}
.demand-method-tab.on{background:var(--indigo-s);color:var(--indigo);font-weight:600;box-shadow:inset 0 -2px 0 var(--indigo)}
.demand-method-panel{margin-top:10px}.demand-method-form{background:var(--panel)}
.demand-method-actions{display:flex;align-items:center;gap:9px;flex-wrap:wrap}.demand-method-actions select{min-width:260px;flex:1}
.demand-material-link{align-self:flex-start}.demand-attachments{margin-top:18px;padding-top:16px;border-top:1px solid var(--line2)}
.demand-upload-picker{display:flex;align-items:center;gap:10px;padding:11px 12px;border:1px dashed var(--line);
  border-radius:8px;background:var(--bg-soft);font-size:12px;color:var(--ink2)}
.demand-upload-picker input{min-width:0;flex:1}.demand-upload-file{display:flex;align-items:center;justify-content:space-between;
  gap:12px;padding:11px 12px;border:1px solid var(--line);border-radius:8px}
.demand-upload-file b{display:block;font-size:12.5px;overflow-wrap:anywhere}.demand-upload-file small{display:block;margin-top:3px;color:var(--ink3);font-size:10.5px}
.demand-upload-error{display:flex;align-items:center;justify-content:space-between;gap:10px}.demand-upload-error span{flex:1}
.demand-upload-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.demand-upload-retry{display:flex;align-items:center;
  justify-content:space-between;gap:10px;padding:10px 12px;border:1px solid var(--red);border-radius:8px;color:var(--red);font-size:12px}
.demand-adopt-result{display:flex;flex-direction:column;gap:4px;padding:12px;border:1px solid var(--green);
  border-radius:8px;background:var(--green-s);color:var(--green);font-size:12px}.demand-adopt-result b{font-size:13px}
.demand-action-bar{position:sticky;z-index:8;bottom:0;display:flex;align-items:center;gap:9px;flex-wrap:wrap;
  margin:18px -16px -16px;padding:12px 16px;border-top:1px solid var(--line);background:var(--panel)}
.demand-action-bar form{margin:0}.demand-preview-layout{--demand-preview-width:min(76vw,1100px)}
.demand-preview-layout.is-open{display:block;min-height:0}.demand-preview-layout.is-open>.file-preview-main{min-width:0}
.demand-preview{position:fixed;z-index:48;top:60px;right:0;bottom:0;width:var(--demand-preview-width);
  border-radius:12px 0 0 0;background:var(--panel)}
.demand-preview-resizer{position:fixed;z-index:49;top:60px;bottom:0;right:var(--demand-preview-width);height:auto}
.demand-preview .file-preview-head{flex-wrap:wrap}.demand-preview .file-preview-frame{height:100%;min-height:0}
.demand-preview-body{height:calc(100dvh - 119px)}.demand-version-picker{display:flex;align-items:center;gap:6px;
  color:var(--ink3);font-size:10.5px}.demand-version-picker select{width:86px;height:30px}
.demand-preview-layout.is-fullscreen .demand-preview{top:0;left:0;width:100vw;border-radius:0}
.demand-preview-layout.is-fullscreen .demand-preview-resizer{display:none}.demand-preview-layout.is-fullscreen .demand-preview-body{height:calc(100dvh - 59px)}
@media(max-width:1000px){.demand-layout{grid-template-columns:minmax(0,1fr)}.demand-summary{position:static}
  .demand-method-switch{grid-template-columns:minmax(0,1fr)}.demand-preview{inset:60px 0 0;width:100vw;border-radius:0}
  .demand-preview-resizer{display:none}.demand-upload-file{align-items:flex-start;flex-direction:column}}
@media(max-width:620px){.demand-current{align-items:flex-start;flex-direction:column}.demand-current-acts{flex-wrap:wrap}
  .demand-method-actions{align-items:stretch;flex-direction:column}.demand-method-actions select{width:100%;min-width:0}
  .demand-action-bar{align-items:stretch;flex-direction:column}.demand-action-bar .btn,.demand-action-bar form{width:100%}}

/* 开标大厅顶部的项目基本信息（第二轮 12）。客户要的是「一眼确认自己没进错项目、
   没进错轮次」，所以八项并排铺开、深色底上分两级字号，不折叠、不省略号截断。 */
.bidroom-info{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px 26px;
  padding:18px 20px;border:1px solid var(--ink2);border-radius:10px}
.bidroom-info div{min-width:0}
.bidroom-info dt{margin:0 0 4px;color:var(--ink3);font-size:13px}
.bidroom-info dd{margin:0;font-size:17px;line-height:1.5;overflow-wrap:anywhere}
.bidroom-stagebox{text-align:right}
@media(max-width:1100px){.bidroom-info{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:700px){.bidroom-info{grid-template-columns:minmax(0,1fr)}}

/* 采购需求页收在折叠里的「采购人给的」素材清单：名字要看得见，但不占版面。 */
.demand-materials{margin-top:8px;font-size:12px}
.demand-materials>summary{cursor:pointer;color:var(--ink2)}
.demand-materials ul{margin:8px 0 0;padding-left:18px;display:flex;flex-direction:column;gap:5px}
.demand-materials li small{margin-left:8px;color:var(--ink3)}
/* 代理协议把草稿、定稿、送审拆成三件事；操作并排是为了让“定稿后提交”保持连续。 */
.agreement-submit-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:12px}
.agreement-submission{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;
  margin:0;background:var(--line);border:1px solid var(--line);border-radius:9px;overflow:hidden}
.agreement-submission>div{padding:11px 13px;background:var(--panel)}
.agreement-submission dt{font-size:10.5px;color:var(--ink3);margin-bottom:3px}
.agreement-submission dd{margin:0;font-size:12.5px;line-height:1.6}

/* 公告页按状态只呈现一组卡；统计块本身就是带筛选条件的名单入口。 */
.signup-center{overflow:visible}.signup-tabs{position:sticky;top:62px;z-index:8;background:var(--panel)}
.signup-tabs a{display:flex;align-items:center;gap:6px}.signup-tabs .mono{font-size:10.5px;color:var(--ink3)}
.signup-filters input[type=text]{min-width:150px}.signup-filters input[type=date]{width:136px;height:31px;font-size:12px}
.signup-buyer{color:var(--ink2);font-size:11.5px}.signup-card-info{display:grid;
  grid-template-columns:repeat(5,minmax(0,1fr));gap:1px;margin:0 0 10px;background:var(--line2);
  border:1px solid var(--line2);border-radius:8px;overflow:hidden}
.signup-card-info>div{padding:9px 10px;background:var(--panel);min-width:0}
.signup-card-info dt{font-size:10.5px;color:var(--ink3);margin-bottom:4px}
.signup-card-info dd{margin:0;font-size:11.5px;line-height:1.6;overflow-wrap:anywhere}
.signup-card-info dd .tag{margin:0 4px 3px 0}.signup-card-note{margin:0 0 10px;padding:8px 11px}
.signup-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;
  margin-bottom:10px;background:var(--line);border:1px solid var(--line);border-radius:9px;overflow:hidden}
.signup-metrics>a{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:11px 13px;
  background:var(--panel);color:var(--ink2);text-decoration:none}
.signup-metrics>a:hover{background:var(--hover);color:var(--indigo)}
.signup-metrics span{font-size:11px}.signup-metrics b{font-size:18px;color:var(--ink)}
.signup-card-detail{margin-top:4px}.signup-card-detail>summary{cursor:pointer;color:var(--indigo);font-size:11.5px}
.signup-card-detail[open]>summary{margin-bottom:8px}

/* 评审中心主页磁贴容纳两个同属该模块的入口，不再另起“开标现场”面板。 */
.review-home-tile{cursor:default}.review-home-main{display:flex;flex-direction:column;gap:6px}
.review-home-actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:auto;padding-top:4px}
.review-home-actions a{font-size:11.5px;color:var(--indigo);text-decoration:none}
.review-home-actions a:hover{text-decoration:underline}
.today-bidroom-list{display:flex;flex-direction:column;gap:10px}
.today-bidroom-list>article{display:grid;grid-template-columns:minmax(220px,1.3fr) minmax(320px,1fr) auto;
  gap:16px;align-items:center;padding:13px;border:1px solid var(--line);border-radius:9px;background:var(--panel)}
.today-bidroom-list>article>div{display:flex;flex-direction:column;gap:4px}
.today-bidroom-list small{color:var(--ink3);font-size:10.5px}.today-bidroom-list dl{display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:0}.today-bidroom-list dt{font-size:10px;color:var(--ink3)}
.today-bidroom-list dd{margin:3px 0 0;font-size:11.5px;line-height:1.5}
@media(max-width:900px){.signup-card-info{grid-template-columns:repeat(2,minmax(0,1fr))}
  .today-bidroom-list>article{grid-template-columns:minmax(0,1fr)}.today-bidroom-list .btn{justify-self:start}}
@media(max-width:620px){.agreement-submission,.signup-card-info,.signup-metrics{grid-template-columns:minmax(0,1fr)}
  .signup-tabs{overflow-x:auto;padding:0 10px}.signup-tabs a{white-space:nowrap}.today-bidroom-list dl{grid-template-columns:minmax(0,1fr)}}

/* ---------- 第二轮 11 / 15 · 评审收口与项目管理器 ---------- */
/* 列很多是业务事实决定的，桌面端允许横向浏览，不能靠删字段换取“整齐”。 */
.project-manager-stats .stat{text-decoration:none}.project-manager-stats .stat.on{background:var(--indigo-s)}
.project-manager-panel{overflow:visible}.project-manager-filters{flex-wrap:wrap}
.project-manager-filters input[type=search]{min-width:210px}.project-manager-filters input[type=text]{min-width:150px}
.project-manager-filters select{max-width:160px}.project-manager-table{min-width:1480px}
.project-manager-table td{vertical-align:top}.project-manager-table .stack{gap:4px;min-width:130px}
.project-manager-table .stack small{color:var(--ink3);font-size:10.5px;line-height:1.5}
.project-manager-table tr.is-overdue td:first-child{box-shadow:inset 3px 0 0 var(--red)}

.project-view-controls{display:flex;align-items:center;justify-content:space-between;gap:12px;
  flex-wrap:wrap;margin:16px 0}.project-view-tabs{margin:0}
.project-scope-switch{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.project-scope-switch form{margin:0}.project-scope-switch label{display:flex;align-items:center;gap:6px;
  color:var(--ink3);font-size:11.5px}.project-scope-switch select{height:31px;min-width:128px}

.project-progress{display:flex;flex-direction:column;gap:10px}
.project-progress-phase{border:1px solid var(--line);border-radius:12px;background:var(--panel);overflow:hidden}
.project-progress-phase>summary{display:grid;grid-template-columns:100px minmax(0,1fr) auto;gap:10px;
  align-items:center;padding:12px 15px;cursor:pointer}.project-progress-phase>summary>span{font-weight:700}
.project-progress-phase>summary>small{color:var(--ink3)}.project-progress-phase>summary>b{font-size:11px}
.project-progress-phase.is-active>summary{background:var(--indigo-s)}
.project-progress-phase>div{border-top:1px solid var(--line2)}
.project-progress-item{display:grid;grid-template-columns:14px minmax(0,1fr) auto;gap:10px;
  align-items:center;padding:11px 15px;border-bottom:1px solid var(--line2)}
.project-progress-item:last-child{border-bottom:0}.project-progress-item.is-done{opacity:.72}
.project-progress-item.is-exception{background:var(--red-s)}
.project-progress-mark{width:9px;height:9px;border:2px solid var(--indigo);border-radius:50%}
.project-progress-item.is-done .project-progress-mark{border-color:var(--green);background:var(--green)}
.project-progress-item.is-exception .project-progress-mark{border-color:var(--red);background:var(--red)}
.project-progress-item>div{display:flex;flex-direction:column;gap:3px}.project-progress-item a{text-decoration:none}
.project-progress-item small{color:var(--ink3);font-size:10.5px}

.project-files-table{min-width:980px}.project-files-table td{vertical-align:top}
.review-aggregate{min-height:88px}.review-aggregate-meta{display:flex;gap:10px;flex-wrap:wrap;
  margin-top:5px;color:var(--ink3);font-size:10.5px}.review-aggregate-alert{color:var(--red)!important}

/* 快捷导航位置统一放在项目识别条下；灰按钮旁必须把不能去的原因直接写出来。 */
.project-step-nav{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:10px;
  align-items:center;margin:0 0 14px}.project-step-nav>a:first-child{justify-self:start}
.project-step-nav>a:nth-child(2){justify-self:center}.project-step-nav>a:last-child{justify-self:end}
.project-step-nav>span{display:flex;align-items:center;gap:7px}.project-step-nav>span:last-child{justify-self:end}
.project-leave-modal .mbody p{margin:0 0 12px;line-height:1.7}
.rc-return{display:flex;align-items:center;gap:6px;flex:none}.rc-return>a:last-child{color:var(--ink2);
  font-size:11.5px;text-decoration:none;white-space:nowrap}.rc-return>a:last-child:hover{color:var(--indigo)}

@media(max-width:780px){
  .project-view-controls{align-items:stretch;flex-direction:column}.project-scope-switch{align-items:stretch}
  .project-scope-switch form,.project-scope-switch label{width:100%}.project-scope-switch select{flex:1}
  .project-progress-phase>summary{grid-template-columns:80px minmax(0,1fr) auto}
  .project-step-nav{grid-template-columns:minmax(0,1fr)}.project-step-nav>a,.project-step-nav>span{
    justify-self:stretch!important}.project-step-nav .btn{width:100%;justify-content:center}
  .rc-return>a:last-child{display:none}
}

/* ---------- 第二轮 09A · 需求审查与论证前三步 ---------- */
.argument-type-cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:14px}
.argument-type-card{position:relative;min-height:104px;padding:16px 17px;border:1px solid var(--line);border-radius:12px;
  background:var(--panel);color:var(--ink);text-decoration:none;display:flex;flex-direction:column;align-items:flex-start;gap:7px}
.argument-type-card:hover{background:var(--hover)}.argument-type-card.on{border-color:var(--indigo);background:var(--indigo-s)}
.argument-type-card.off{background:var(--grey-s);color:var(--ink3)}
.argument-type-card>b{font-size:15.5px}.argument-type-card>small{color:var(--ink3);font-size:11.5px;line-height:1.5}
.argument-type-state{position:absolute;right:14px;top:14px;color:var(--green);font-size:10.5px}
.argument-steps{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:1px;margin-bottom:16px;border:1px solid var(--line);
  border-radius:12px;overflow:hidden;background:var(--line)}
.argument-step{min-width:0;padding:11px 12px;background:var(--panel);color:var(--ink2);text-decoration:none;display:flex;align-items:center;gap:9px}
.argument-step:hover{background:var(--hover)}.argument-step.on{background:var(--indigo-s);color:var(--indigo)}
.argument-step.done{color:var(--green)}.argument-step.locked{background:var(--grey-s);color:var(--ink3);cursor:not-allowed}
.argument-step-number{width:27px;height:27px;border-radius:50%;background:var(--grey-s);display:flex;align-items:center;justify-content:center;flex:none}
.argument-step.on .argument-step-number{background:var(--indigo);color:var(--panel)}.argument-step.done .argument-step-number{background:var(--green-s)}
.argument-step b,.argument-step small{display:block}.argument-step b{font-size:12.5px}.argument-step small{margin-top:2px;font-size:10px;color:var(--ink3)}
.argument-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:16px;align-items:start;--preview-width:520px}
.argument-main{min-width:0}.argument-panel-body{display:flex;flex-direction:column;gap:16px}.argument-work-panel{overflow:visible}
.argument-material-list{display:flex;flex-direction:column;gap:9px}.argument-material-card{display:grid;grid-template-columns:42px minmax(0,1fr) auto;
  align-items:center;gap:12px;padding:13px;border:1px solid var(--line);border-radius:9px}
.argument-file-mark{width:42px;height:42px;border-radius:8px;background:var(--indigo-s);color:var(--indigo);display:flex;align-items:center;
  justify-content:center;font-family:"IBM Plex Mono",monospace;font-size:10px;font-weight:700}.argument-file-mark.sheet{background:var(--green-s);color:var(--green)}
.argument-material-copy{min-width:0}.argument-material-copy>div{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.argument-material-copy b{font-size:13px}
.argument-material-copy>small{display:block;margin-top:4px;color:var(--ink3);font-size:11px;line-height:1.5}
.argument-material-actions,.argument-row-actions{display:flex;align-items:center;justify-content:flex-end;gap:6px;flex-wrap:wrap}
.argument-material-actions form,.argument-row-actions form,.argument-footer-actions form{margin:0}
.argument-upload-block{padding:15px;border:1px dashed var(--line);border-radius:9px;background:var(--hover);display:flex;align-items:center;
  justify-content:space-between;gap:14px}.argument-upload-block h3,.argument-add-expert h3,.argument-collection h3,
.argument-opinion-list h3,.argument-buyer-summary h3{margin:0 0 5px;font-size:13.5px}.argument-upload-block p{margin:0;color:var(--ink3);font-size:11px}
.argument-upload-block form{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.argument-upload-block input[type=file]{max-width:260px}
.argument-pending-file{padding:12px 14px;border:1px solid var(--green);border-radius:9px;background:var(--green-s);display:flex;align-items:center;
  justify-content:space-between;gap:12px}.argument-pending-file b,.argument-pending-file small{display:block}.argument-pending-file small{margin-top:3px;color:var(--green);font-size:10.5px}
.argument-footer-actions{padding-top:15px;border-top:1px solid var(--line2);display:flex;align-items:center;justify-content:space-between;gap:10px}
.argument-footer-actions>div{display:flex;align-items:center;gap:8px}.argument-footer-actions .btn.disabled{background:var(--grey-s);color:var(--ink3);pointer-events:none}
.argument-review-items{border:1px solid var(--line);border-radius:9px}.argument-review-items>summary{padding:11px 13px;cursor:pointer;font-size:12px;font-weight:700}
.argument-review-columns{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.5fr);gap:18px;padding:0 14px 14px;border-top:1px solid var(--line2)}
.argument-review-columns h3{font-size:13px}.argument-review-columns h4{margin:10px 0 4px;font-size:11.5px}.argument-review-columns ol{margin:0;padding-left:20px;color:var(--ink2);font-size:11px;line-height:1.65}
.argument-expert-table{min-width:930px}.argument-expert-table td{vertical-align:top}.argument-expert-table td>small{display:block;margin-top:3px;color:var(--ink3);font-size:10.5px}
.argument-mode-form{display:flex;align-items:center;gap:5px}.argument-mode-form select,.argument-row-actions select{height:29px;min-width:72px}
.argument-row-actions form{display:flex;align-items:center;gap:5px}.argument-add-expert{padding-top:4px}.argument-add-expert>h3{margin-bottom:10px}
.argument-custom-expiry{height:29px;max-width:164px;font-size:10.5px}
.argument-channel-summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.argument-channel-summary>div{padding:13px;border:1px solid var(--line);border-radius:9px}
.argument-channel-summary p{margin:7px 0 0;color:var(--ink3);font-size:11px}.argument-offline-files{display:flex;flex-direction:column;gap:8px}
.argument-offline-files article{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 13px;border:1px solid var(--line);border-radius:8px}
.argument-offline-files b,.argument-offline-files span,.argument-offline-files small{display:block}.argument-offline-files span{margin-top:2px;font-size:12px}
.argument-offline-files small{margin-top:2px;color:var(--ink3);font-size:10.5px}.argument-opinion-list{display:flex;flex-direction:column;gap:8px}
.argument-opinion-list>h3{margin-bottom:2px}.argument-opinion-list article{padding:12px 14px;border:1px solid var(--line);border-radius:8px}
.argument-opinion-list header{display:flex;align-items:center;justify-content:space-between;gap:10px}.argument-opinion-list header span,.argument-opinion-list small{color:var(--ink3);font-size:10.5px}
.argument-opinion-list p,.argument-summary-text{white-space:pre-wrap;line-height:1.7}.argument-buyer-summary{padding:15px;border:1px solid var(--line);border-radius:9px}
.argument-buyer-summary>h3{margin-bottom:10px}.argument-buyer-summary .flow-result-rows{margin-top:13px}.argument-link-expiry{max-width:220px}
.argument-status-rail{position:sticky;top:82px}.argument-next-action{margin:14px 0;padding:13px;border-radius:8px;background:var(--indigo-s)}
.argument-next-action small,.argument-next-action b{display:block}.argument-next-action small{margin-bottom:5px;color:var(--ink3);font-size:10px}.argument-next-action b{font-size:12px;line-height:1.55}
.argument-legacy-history{margin-top:14px;border-top:1px solid var(--line2);padding-top:12px}.argument-legacy-history>summary{cursor:pointer;font-size:11.5px;color:var(--ink2)}
.argument-legacy-history>div{padding:9px 0;border-bottom:1px solid var(--line2)}.argument-legacy-history b,.argument-legacy-history small{display:block}.argument-legacy-history small{margin-top:2px;color:var(--ink3);font-size:10px}.argument-legacy-history p{margin:5px 0 0;font-size:11px;line-height:1.5}
.argument-once-link{margin-bottom:16px;align-items:center;justify-content:space-between}.argument-once-link p{margin:3px 0 7px}.argument-once-link code{display:block;max-width:900px;overflow-wrap:anywhere;font-size:10.5px}
.argument-confirm-modal{max-width:520px}.argument-confirm-modal .mhead b{flex:1}.argument-confirm-modal .mbody p{margin:0;line-height:1.7}

/* 外部链接不使用员工 layout，页面只保留当前事项和填写区。 */
.argument-external-shell{width:min(760px,calc(100% - 28px));margin:30px auto;display:flex;flex-direction:column;gap:14px}
.argument-external-head{display:flex;align-items:center;gap:10px}.argument-external-head b,.argument-external-head small{display:block}
.argument-external-head small{margin-top:2px;color:var(--ink3);font-size:10.5px}.argument-external-card{padding:24px;border:1px solid var(--line);border-radius:13px;background:var(--panel)}
.argument-external-title{margin-bottom:17px}.argument-external-title h1{margin:8px 0 4px;font-size:20px}.argument-external-title p{margin:0;color:var(--ink3)}
.argument-external-section{margin-top:18px}.argument-external-section h2{font-size:14px}.argument-external-material{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px;border:1px solid var(--line);border-radius:9px}
.argument-external-material b,.argument-external-material small{display:block}.argument-external-material small{margin-top:3px;color:var(--ink3);font-size:10.5px}
.argument-external-form{margin-top:20px}.argument-external-form textarea{min-height:170px}.argument-summary-text{padding:15px;border-radius:9px;background:var(--hover)}
.argument-external-result{text-align:center;padding:34px 14px}.argument-result-mark{width:52px;height:52px;margin:0 auto 14px;border-radius:50%;background:var(--green-s);color:var(--green);
  display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:700}.argument-result-mark.is-muted{background:var(--grey-s);color:var(--grey)}
.argument-external-result h1{font-size:20px}.argument-external-result p{max-width:520px;margin:0 auto;color:var(--ink2);line-height:1.7}
.argument-external-foot{text-align:center;color:var(--ink3);font-size:10.5px}

@media(max-width:1050px){.argument-layout{grid-template-columns:minmax(0,1fr)}.argument-status-rail{position:static}.argument-type-cards{grid-template-columns:minmax(0,1fr)}
  .argument-steps{overflow-x:auto;grid-template-columns:repeat(5,minmax(150px,1fr))}}
@media(max-width:700px){.argument-material-card{grid-template-columns:38px minmax(0,1fr)}.argument-material-actions{grid-column:1/-1;justify-content:flex-start}
  .argument-upload-block,.argument-pending-file,.argument-offline-files article,.argument-external-material{align-items:stretch;flex-direction:column}.argument-review-columns,.argument-channel-summary{grid-template-columns:minmax(0,1fr)}
  .argument-footer-actions{align-items:stretch;flex-direction:column}.argument-footer-actions>div{align-items:flex-start;flex-direction:column}.argument-external-card{padding:18px}}

/* 在线文档「怎样加批注」指引：第一次打开自动展开，看过一次就记住。
   批注要在编辑器里自己加（社区版没有替人插批注的接口），所以写到每一步点哪儿。 */
.doc-guide{margin:0 0 12px;padding:14px 16px;border:1px solid var(--line);border-radius:10px;
  background:var(--panel)}
.doc-guide-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.doc-guide-head b{font-size:14px}
.doc-guide-steps{margin:0;padding-left:22px;display:flex;flex-direction:column;gap:6px}
.doc-guide-steps li{font-size:13px;line-height:1.7;color:var(--ink)}
.doc-guide-note{margin:10px 0 0;padding-top:9px;border-top:1px solid var(--line2);
  font-size:12px;line-height:1.8;color:var(--ink2)}

/* 公告页的资料费变更：默认收起，只有真要改的人才展开。 */
.notice-fee-change{display:flex;flex-direction:column;gap:8px}
.notice-fee-form>summary,.notice-fee-history>summary{cursor:pointer;color:var(--ink2);font-size:12px}
.notice-fee-history ul{margin:8px 0 0;padding-left:18px;display:flex;flex-direction:column;gap:6px}
.notice-fee-history li{font-size:12px;line-height:1.7}
/* R2 预览统一：Office 先转同版本 PDF，人在办理页旁边只读核对，不能误进编辑器改正文。 */
.doc-preview{position:fixed;z-index:48;top:60px;right:0;bottom:0;width:var(--doc-preview-width,min(55vw,1100px));
  border-radius:12px 0 0 0;background:var(--panel);display:flex;flex-direction:column;overflow:hidden}
.doc-preview-resizer{position:fixed;z-index:49;top:60px;bottom:0;right:var(--doc-preview-width,min(55vw,1100px));height:auto}
.doc-preview .file-preview-head{flex-wrap:wrap}.doc-preview .file-preview-frame{height:100%;min-height:0}
.doc-preview-body{height:calc(100dvh - 119px)}.doc-version-picker{display:flex;align-items:center;gap:6px;color:var(--ink3);font-size:10.5px}
.doc-version-picker select{width:86px;height:30px}.file-preview-layout.is-fullscreen .doc-preview,
.argument-layout.is-fullscreen .doc-preview{top:0;left:0;width:100vw;border-radius:0}
.file-preview-layout.is-fullscreen .doc-preview-resizer,.argument-layout.is-fullscreen .doc-preview-resizer{display:none}
.file-preview-layout.is-fullscreen .doc-preview-body,.argument-layout.is-fullscreen .doc-preview-body{height:calc(100dvh - 59px)}
.doc-preview-image{display:block;max-width:100%;height:auto;margin:auto;padding:18px;background:var(--panel)}
@media(max-width:900px){
  .doc-preview{inset:60px 0 0;width:100vw;border-radius:0}
  .doc-preview-resizer{display:none}.doc-preview-body{height:calc(100dvh - 119px)}
}

/* 办理记录分层（第二轮 08）：主视图是业务时间线，技术操作收进折叠里。
   折叠里的行压暗一档，一眼能看出它们是「过程」不是「结论」。 */
.handle-timeline .handle-detail{margin-top:10px}
.handle-timeline .handle-detail>summary{cursor:pointer;color:var(--ink3);font-size:12px}
.handle-timeline .agreement-history-row.muted{opacity:.72}
/* 第二轮 09B：签字与归档信息按业务块分层，避免敏感信息与上传操作挤在同一张大表里。 */
.argument-section-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:12px}
.argument-section-heading h3{margin:0 0 4px;font-size:13.5px}.argument-section-heading p{margin:0;color:var(--ink3);font-size:11px;line-height:1.6}
.argument-signing-section{padding:15px;border:1px solid var(--line);border-radius:10px;background:var(--panel)}
.argument-signing-section form>.btn{margin-top:11px}.argument-readonly-text{margin:0;white-space:pre-wrap;line-height:1.7}
.argument-settlement-table{min-width:860px}.argument-settlement-table input,.argument-settlement-table select{min-width:140px}
.argument-sensitive-table{min-width:980px}.argument-sensitive-table td>small{display:block;margin-top:3px;color:var(--ink3);font-size:10px}
.argument-signed-list{display:flex;flex-direction:column;gap:8px}.argument-signed-list>article{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:12px 13px;border:1px solid var(--line2);border-radius:8px}
.argument-signed-list b,.argument-signed-list span,.argument-signed-list small{display:block}.argument-signed-list span{margin-top:3px;font-size:11.5px}.argument-signed-list small{margin-top:3px;color:var(--ink3);font-size:10.5px}
.argument-signed-list form{display:flex;align-items:center;gap:6px}.argument-signed-list input[type=file]{max-width:230px}
.argument-archive-checklist{display:flex;flex-direction:column;gap:8px}.argument-archive-checklist>article{display:grid;grid-template-columns:28px minmax(0,1fr) auto;align-items:center;gap:11px;padding:12px 13px;border:1px solid var(--line);border-radius:9px}
.argument-archive-checklist>article.is-missing{border-color:var(--red);background:var(--red-s)}.argument-check-mark{width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--green-s);color:var(--green);font-weight:700}
.argument-archive-checklist .is-missing .argument-check-mark{background:var(--red-s);color:var(--red)}.argument-archive-checklist b,.argument-archive-checklist small{display:block}.argument-archive-checklist small{margin-top:4px;color:var(--ink3);font-size:10.5px;line-height:1.5}
@media(max-width:700px){.argument-section-heading,.argument-signed-list>article{align-items:stretch;flex-direction:column}.argument-signed-list form{align-items:stretch;flex-direction:column}.argument-signed-list input[type=file]{max-width:none}.argument-archive-checklist>article{grid-template-columns:28px minmax(0,1fr)}.argument-archive-checklist>article>.tag{grid-column:2}}
.argument-opinion-decision{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;margin:10px 0 0;background:var(--line2);border:1px solid var(--line2);border-radius:8px;overflow:hidden}
.argument-opinion-decision>div{padding:9px 10px;background:var(--panel)}.argument-opinion-decision dt{font-size:10px;color:var(--ink3)}.argument-opinion-decision dd{margin:3px 0 0;font-size:11.5px;line-height:1.5}
.argument-decision-form{margin-top:11px;padding-top:11px;border-top:1px solid var(--line2)}
@media(max-width:700px){.argument-opinion-decision{grid-template-columns:minmax(0,1fr)}}

/* 第二轮 10C · 公告合并编制：先选来源再展开，避免先填完信息才发现正文要重做。 */
.notice-steps{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}
.notice-file-preview-layout.is-open{display:block;min-height:0}.notice-file-preview-layout>.file-preview-main{min-width:0}
.notice-compile-section{padding-bottom:22px;margin-bottom:22px;border-bottom:1px solid var(--line2)}
.notice-compile-section:last-of-type{margin-bottom:0}.notice-source-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  gap:1px;border:1px solid var(--line);border-radius:11px;overflow:hidden;background:var(--line)}
.notice-source-card{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:11px;min-height:100px;
  padding:16px;border:0;background:var(--panel);color:var(--ink2);font:inherit;text-align:left;cursor:pointer}
.notice-source-card:hover{background:var(--hover);color:var(--ink)}.notice-source-card.on{background:var(--indigo-s);color:var(--indigo)}
.notice-source-card b,.notice-source-card small{display:block}.notice-source-card b{font-size:13.5px}.notice-source-card small{margin-top:5px;
  color:var(--ink3);font-size:11px;line-height:1.6}.notice-source-warning{margin-top:12px;display:flex;flex-direction:column;gap:9px}
.notice-current-body{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:14px;padding:13px 14px;
  border:1px solid var(--line);border-radius:9px;background:var(--bg-soft)}
.notice-current-body b,.notice-current-body small{display:block}.notice-current-body small{margin-top:3px;color:var(--ink3);font-size:10.5px}
.notice-source-panel{display:flex;flex-direction:column;gap:12px;margin-bottom:20px;padding:15px;border:1px solid var(--line);
  border-radius:10px;background:var(--panel)}.notice-panel-intro b,.notice-panel-intro small{display:block}.notice-panel-intro small{margin-top:4px;color:var(--ink3);font-size:11px}
.notice-upload-picker{display:flex;align-items:center;gap:12px;padding:11px 12px;border:1px dashed var(--line);border-radius:8px;
  background:var(--bg-soft);color:var(--ink2);font-size:12px}.notice-upload-picker input{min-width:0;flex:1}
.notice-picked-file{padding:9px 11px;border-radius:7px;background:var(--green-s);color:var(--green);font-size:12px}
.notice-attachment-list{display:flex;flex-direction:column;gap:8px;margin:12px 0}.notice-attachment{display:grid;
  grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:9px;padding:10px 11px;border:1px solid var(--line);
  border-radius:9px;background:var(--panel)}.notice-attachment.selected{border-color:var(--indigo);background:var(--indigo-s)}
.notice-attachment.dragging{opacity:.55}.notice-drag{color:var(--ink3);cursor:grab}.notice-attachment>label{display:flex;align-items:center;gap:9px;min-width:0}
.notice-attachment>label input{width:15px;height:15px;accent-color:var(--indigo)}.notice-attachment b,.notice-attachment small{display:block}
.notice-attachment b{font-size:12.5px;overflow-wrap:anywhere}.notice-attachment small{margin-top:3px;color:var(--ink3);font-size:10.5px}
.notice-file-actions{display:flex;align-items:center;justify-content:flex-end;gap:5px;flex-wrap:wrap}.notice-replace{cursor:pointer}
.notice-action-bar{position:sticky;z-index:8;bottom:0;display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin:18px -16px -16px;
  padding:12px 16px;border-top:1px solid var(--line);background:var(--panel)}.notice-delete-modal{max-width:500px}
@media(max-width:900px){.notice-source-cards{grid-template-columns:minmax(0,1fr)}.notice-current-body{align-items:flex-start;flex-direction:column}
  .notice-attachment{grid-template-columns:auto minmax(0,1fr)}.notice-attachment .notice-file-actions{grid-column:2;justify-content:flex-start}}
@media(max-width:620px){.notice-upload-picker,.notice-action-bar{align-items:stretch;flex-direction:column}.notice-action-bar .btn{width:100%}}

/* 评审台卡片上的中控台直达。整张卡本来就是链接，里面不能再套一个 <a>，
   所以用一个带 data-href 的行内元素，由 JS 接管点击。 */
.cardconsole{display:inline-block;margin-top:8px;color:var(--steel);font-size:12px;cursor:pointer}
.cardconsole:hover{text-decoration:underline}
/* 第一轮 27C · 中控台与评审端内部卡片。
   现场信息必须先按业务步骤分块，否则一张宽表虽然字段齐全，工作人员仍看不出卡在哪一步；
   席位端先给“条款 × 供应商”矩阵，再展开填写区，避免逐家滚动时漏掉自己的任务。 */
.console-dashboard{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.console-card{min-width:0}.console-card-wide{grid-column:1/-1}.console-card>.phead,
.review-work-card>.phead{border-bottom:1px solid var(--line2);flex-wrap:wrap}
.console-summary{display:grid;grid-template-columns:minmax(0,1fr) minmax(180px,.55fr);gap:1px;
  margin-bottom:14px;border:1px solid var(--line2);border-radius:9px;overflow:hidden;background:var(--line2)}
.console-summary>div{padding:14px 16px;background:var(--panel)}
.console-summary-main{display:flex;align-items:baseline;gap:10px}.console-summary-main b{font-size:24px;color:var(--indigo)}
.console-summary-main span,.console-current span{font-size:11.5px;color:var(--ink3)}
.console-current{display:grid;grid-template-columns:1fr auto;gap:3px 10px;align-items:center}.console-current b{text-align:right}
.console-current small{grid-column:1/-1;text-align:right;color:var(--ink3);font-size:10.5px}
.console-checks{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}
.console-checks li{display:flex;align-items:flex-start;gap:9px;padding:9px 10px;border:1px solid var(--line2);
  border-radius:8px;background:var(--panel)}.console-checks li.blocked{border-color:var(--red);background:var(--red-s)}
.console-checks b,.console-checks small{display:block}.console-checks b{font-size:12px}.console-checks small{margin-top:3px;color:var(--ink2);font-size:10.5px;line-height:1.5}
.console-actions,.console-card-foot{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.console-actions{margin-top:14px}.console-actions form{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.console-card-foot{justify-content:flex-end;padding:10px 14px;border-top:1px solid var(--line2);font-size:11px}
.console-card-foot>:first-child:not(:last-child){margin-right:auto}.console-supplier-table{min-width:860px}
.console-supplier-table td>small,.console-call-table td>small{display:block;margin-top:4px;color:var(--ink3);font-size:10px;line-height:1.4}
.console-list{display:flex;flex-direction:column}.console-list-row{display:flex;align-items:center;justify-content:space-between;
  gap:12px;padding:11px 14px;border-bottom:1px solid var(--line2)}.console-list-row:last-child{border-bottom:0}
.console-list-row b,.console-list-row small{display:block}.console-list-row b{font-size:12.5px}.console-list-row small{margin-top:2px;color:var(--ink3);font-size:10.5px}
.console-call-table{min-width:520px}.console-rounds{display:flex;flex-direction:column}
.console-rounds>article{display:grid;grid-template-columns:minmax(100px,.45fr) minmax(0,1fr);gap:12px;
  padding:12px 14px;border-bottom:1px solid var(--line2)}.console-rounds>article:last-child{border-bottom:0}
.console-rounds b,.console-rounds small{display:block}.console-rounds small{margin-top:3px;color:var(--ink3);font-size:10.5px}
.console-rounds dl{margin:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.console-rounds dl>div{min-width:0}.console-rounds dt{font-size:10px;color:var(--ink3)}.console-rounds dd{margin:3px 0 0;font-size:11.5px;overflow-wrap:anywhere}
.console-roles{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;background:var(--line2)}
.console-roles>section{padding:12px 14px;background:var(--panel)}.console-roles h3{margin:0 0 8px;font-size:12.5px}
.console-roles section>div{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:5px 0;font-size:11.5px}
.console-roles p{margin:0;color:var(--ink3);font-size:11px}.console-progress{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;background:var(--line2);border-bottom:1px solid var(--line2)}
.console-progress article{padding:13px 15px;background:var(--panel)}.console-progress span,.console-progress b,.console-progress small{display:block}
.console-progress span{color:var(--ink3);font-size:10.5px}.console-progress b{margin-top:5px;font-size:14px}.console-progress small{margin-top:4px;color:var(--ink3);font-size:10px;line-height:1.5}
.console-alert-summary{display:flex;align-items:center;gap:9px;padding:11px 14px;border-bottom:1px solid var(--line2);font-size:11.5px}
.console-alert-summary .btn{margin-left:auto}.console-log-table{min-width:720px}.console-log-alert{background:var(--red-s)}

.review-matrix-section+.review-matrix-section{border-top:1px solid var(--line)}
.page.wide>.review-work-card{margin-top:14px}
.review-matrix-head{display:flex;align-items:center;gap:9px;padding:12px 16px;background:var(--hover)}
.review-matrix-head h3{margin:0;font-size:13.5px}.review-matrix-head span{color:var(--ink3);font-size:10.5px}
.review-task-matrix{min-width:760px}.review-task-matrix th:first-child,.review-task-matrix td:first-child{min-width:260px}
.review-task-matrix th:not(:first-child),.review-task-matrix td:not(:first-child){min-width:180px}
.review-task-matrix th b,.review-task-matrix th small,.review-task-matrix td:first-child b,
.review-task-matrix td:first-child small,.review-my-state{display:block}
.review-task-matrix th small,.review-task-matrix td:first-child small{margin-top:3px;color:var(--ink3);font-size:10px;line-height:1.5}
.review-my-state{margin-top:6px;color:var(--ink3);font-size:10px}
.review-opinion-list{display:flex;flex-direction:column;gap:12px}.review-opinion-entry{border:1px solid var(--line);border-radius:10px;overflow:hidden}
.review-opinion-entry>header,.review-quote-round>header,.review-score-grid form>header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.review-opinion-entry>header{padding:13px 15px;background:var(--hover)}.review-opinion-entry h3,.review-quote-round h3{margin:0;font-size:13.5px}
.review-opinion-entry>header small,.review-quote-round header small,.review-score-grid header small{display:block;margin-top:3px;color:var(--ink3);font-size:10.5px}
.review-opinion-sheet+.review-opinion-sheet{border-top:1px solid var(--line)}.review-opinion-sheet-head{display:flex;align-items:center;gap:8px;padding:10px 15px;border-bottom:1px solid var(--line2)}
.review-opinion-sheet-head h4{margin:0;font-size:12.5px}.review-task-card{padding:13px 15px;border-bottom:1px solid var(--line2)}
.review-task-card:last-child{border-bottom:0}.review-task-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.review-task-head b,.review-task-head small{display:block}.review-task-head b{font-size:12.5px}.review-task-head small{margin-top:3px;color:var(--ink3);font-size:10.5px;line-height:1.5}
.review-disagreement{margin-top:10px}.review-disagreement>summary{color:var(--red);font-size:11px;cursor:pointer}.review-disagreement .note{margin-top:7px}
.review-opinion-form{display:grid;grid-template-columns:150px minmax(230px,1fr) auto;gap:10px;align-items:end;margin-top:11px}
.review-opinion-form .f{display:flex;flex-direction:column;gap:5px}.review-opinion-form label{font-size:10.5px;color:var(--ink2)}
.review-opinion-actions{display:flex;align-items:center;justify-content:flex-end;gap:7px;flex-wrap:wrap;min-height:34px}
.review-opinion-actions small{max-width:280px;color:var(--ink3);font-size:10px;line-height:1.5}
.review-product-check{margin-top:13px;padding-top:13px;border-top:1px dashed var(--line)}.review-product-check .tbl{min-width:980px}
.review-product-form{margin-top:12px;padding:13px;border:1px solid var(--line2);border-radius:9px;background:var(--hover)}
.review-round-list{display:flex;flex-direction:column;gap:12px}.review-quote-round{border:1px solid var(--line);border-radius:10px;overflow:hidden}
.review-quote-round>header{padding:13px 15px;background:var(--hover);border-bottom:1px solid var(--line2)}
.review-quote-round>header>div:last-child{display:flex;gap:5px;flex-wrap:wrap}.review-round-controls{padding:13px 15px;border-top:1px solid var(--line2)}
.review-round-controls>label{display:flex;flex-direction:column;gap:5px;font-size:11px;color:var(--ink2)}
.review-round-controls>div{display:flex;gap:7px;margin-top:9px}.review-round-basis{margin:0;padding:11px 15px;border-top:1px solid var(--line2);font-size:11.5px;color:var(--ink2)}
.review-quote-round>.review-actions{display:flex;align-items:center;gap:7px;flex-wrap:wrap;padding:0 15px 13px}.review-score-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:12px}
.review-score-grid>form{display:flex;flex-direction:column;gap:10px;padding:13px;border:1px solid var(--line);border-radius:9px}
.review-score-grid label{display:flex;flex-direction:column;gap:5px;color:var(--ink2);font-size:10.5px}
.review-score-grid form>div:last-child{display:flex;align-items:center;gap:7px;flex-wrap:wrap}.review-score-grid form>div:last-child small{color:var(--ink3);font-size:10.5px}

@media(max-width:1050px){.console-dashboard{grid-template-columns:minmax(0,1fr)}.console-card-wide{grid-column:auto}
  .console-progress{grid-template-columns:repeat(2,minmax(0,1fr))}.review-opinion-form{grid-template-columns:repeat(2,minmax(0,1fr))}
  .review-opinion-actions{grid-column:1/-1;justify-content:flex-start}}
@media(max-width:700px){.console-summary,.console-checks,.console-roles,.console-progress,.review-score-grid{grid-template-columns:minmax(0,1fr)}
  .console-rounds>article,.review-opinion-form{grid-template-columns:minmax(0,1fr)}.console-alert-summary{align-items:flex-start;flex-direction:column}
  .console-alert-summary .btn{margin-left:0}.review-task-head,.review-opinion-entry>header,.review-quote-round>header{align-items:flex-start;flex-direction:column}}
/* 评审工作区按席位拆成可见能力卡；按钮和表单只在服务端判定允许时出现。 */
.workspace-signatures .pbody{display:flex;flex-direction:column;gap:12px}
.workspace-confirm-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:1px;
  background:var(--line2);border:1px solid var(--line2);border-radius:9px;overflow:hidden}
.workspace-confirm-grid>div{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:12px;background:var(--panel)}
.workspace-confirm-grid>div>b{width:100%;font-size:12.5px}
.workspace-confirm-grid form{margin:0}.workspace-confirm-grid .btn{margin-left:auto}
.rc-head-actions{margin-left:auto;display:flex;gap:7px}

/* R2-TERMS · 现场步骤来自采购方式配置，未知状态的步骤不贴完成标签，
   避免为了填满进度条把尚无明确业务判据的抽签、排序误报为已完成。 */
.console-stepbar{list-style:none;margin:0 0 14px;padding:0;display:flex;min-width:0;
  overflow-x:auto;border:1px solid var(--line);border-radius:9px;background:var(--line2)}
.console-stepbar li{min-width:104px;flex:1;padding:10px 12px;background:var(--panel);
  border-right:1px solid var(--line2);display:flex;flex-direction:column;gap:3px}
.console-stepbar li:last-child{border-right:0}.console-stepbar b{font-size:12px;white-space:nowrap}
.console-stepbar small{font-size:10px;color:var(--ink3)}
.console-stepbar li.done{background:var(--green-s);color:var(--green)}
.console-stepbar li.done small{color:var(--green)}
.console-progress.without-score{grid-template-columns:repeat(3,minmax(0,1fr))}
@media(max-width:700px){.console-progress.without-score{grid-template-columns:minmax(0,1fr)}}


/* AIWORK 附件的三个动作和页内预览面板（第三轮：预览、下载、存到云盘要分开）。 */
.attachment-act{flex:none;padding:1px 7px;border:1px solid var(--line);border-radius:5px;
  background:var(--panel);color:var(--steel);font-size:10.5px;cursor:pointer}
.attachment-act:hover{border-color:var(--steel);background:var(--hover)}
.attachment-act:disabled{opacity:.6;cursor:default}
.aiwork-preview{flex:0 0 auto;display:flex;flex-direction:column;min-height:0;max-height:46%;
  margin:0 max(28px,calc((100% - 880px)/2));border:1px solid var(--line);border-radius:9px;
  background:var(--panel);overflow:hidden}
.aiwork-preview-head{display:flex;align-items:center;gap:10px;padding:8px 12px;
  border-bottom:1px solid var(--line2)}.aiwork-preview-head b{flex:1;min-width:0;font-size:12.5px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.aiwork-preview-body{flex:1;min-height:220px;display:flex;overflow:auto;background:var(--hover)}
.aiwork-preview-body>.empty{width:100%;align-self:center}
.aiwork-preview-body .file-preview-frame{width:100%;height:100%;border:0;background:var(--panel)}
@media(max-width:900px){.aiwork-preview{margin:0 18px;max-height:56%}}

/* ── 系统说明书正文（ops.docs）──────────────────────────────
   排版复用上面 .aiwork-message-body 那一套，这里只补说明书才有的三样：
   引用块（文档里的「教训 / 注意」提示）、分隔线（更新日志条目之间）、文件页脚。 */
.doc-body{font-size:14px}
.doc-body>*:first-child{margin-top:0}
.doc-body blockquote{margin:14px 0;padding:10px 15px;border-left:3px solid var(--steel);
  background:var(--steel-s);border-radius:0 8px 8px 0}
.doc-body blockquote>*:last-child{margin-bottom:0}
.doc-body hr{margin:22px 0;border:0;border-top:1px solid var(--line)}
.doc-foot{margin-top:18px;padding-top:12px;border-top:1px solid var(--line2);
  font-size:11.5px;color:var(--ink2)}
