* { box-sizing: border-box; margin: 0; padding: 0; }
  :root{
    --bg:#f5f6f8; --panel:#ffffff; --line:#f0f0f0; --txt:rgba(0,0,0,.65); --sub:#8c8c8c;
    --brand:#0ea5e9; --brand-d:#0284c7; --side:#ffffff; --side-h:#f5f5f5;
    --ok:#16a34a; --warn:#d97706; --bad:#dc2626; --info:#0ea5e9;
    --r:4px; --sh:0 1px 2px rgba(0,0,0,.04);
  }
  body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",sans-serif;background:var(--bg);color:var(--txt);font-size:14px;line-height:1.5}
  .app{display:flex;min-height:100vh}
  .sidebar{width:256px;background:#fff;color:rgba(0,0,0,.65);display:flex;flex-direction:column;flex:0 0 256px;border-right:1px solid #f0f0f0}
  .brand{padding:20px 18px 16px;border-bottom:1px solid #f0f0f0}
  .brand b{display:block;color:#1f1f1f;font-size:15px;letter-spacing:.3px}
  .brand span{font-size:11px;color:#7d8ba0}
  nav{padding:10px 0;flex:1}
  nav a{display:flex;align-items:center;gap:10px;padding:10px 18px;color:#c9d3e1;text-decoration:none;font-size:13.5px;border-left:3px solid transparent;cursor:pointer}
  nav a:hover{background:var(--side-h);color:#fff}
  nav a.on{background:var(--side-h);color:#fff;border-left-color:var(--brand);font-weight:600}
  nav a i{width:16px;text-align:center;font-style:normal;opacity:.85}
  .side-foot{padding:12px 18px;font-size:11px;color:#61708a;border-top:1px solid rgba(255,255,255,.08)}
  main{flex:1;min-width:0;display:flex;flex-direction:column}
  .topbar{background:#fff;border-bottom:1px solid var(--line);padding:0 22px;height:56px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:20}
  .topbar h1{font-size:16px;font-weight:600}
  .topbar h1 em{font-size:12px;color:var(--sub);font-style:normal;font-weight:400;margin-left:8px}
  .top-right{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--sub)}
  .chip{background:#eaf2fd;color:#1f4e85;border:1px solid #d3e2f7;padding:2px 9px;border-radius:20px;font-size:11px}
  /* 角色切换按钮组：超级管理员 / 我的角色 */
  .role-toggle{display:inline-flex;border:1.5px solid #3f8fd8;border-radius:8px;overflow:hidden;background:#fff;
               box-shadow:0 1px 6px rgba(63,143,216,.25)}
  .role-toggle .rb{border:0;background:#fff;font-size:12px;padding:5px 12px;cursor:pointer;color:#2b6cb0;
                   border-right:1px solid #d3e2f7;transition:.15s;white-space:nowrap;font-weight:500}
  .role-toggle .rb:last-child{border-right:0}
  .role-toggle .rb:hover{background:#f2f8ff}
  .role-toggle .rb.on{background:linear-gradient(135deg,#2b6cb0,#3f8fd8);color:#fff;font-weight:600}
  /* 预览态提示条 */
  #view-hint{display:none;background:#fff7e6;color:#874d00;border:1px solid #ffd591;border-radius:6px;
             padding:5px 12px;margin:0 0 12px;font-size:12px}
  #view-hint b{color:#d46b08}
  .wrap{padding:18px 22px 40px}
  .page{display:none}.page.on{display:block}
  .cards{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:16px}
  .card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:16px 18px;box-shadow:var(--sh)}
  .card .k{font-size:12px;color:var(--sub);margin-bottom:6px}
  .card .v{font-size:26px;font-weight:700;letter-spacing:-.5px}
  .card .v small{font-size:12px;color:var(--sub);font-weight:400;margin-left:4px}
  .card.accent{background:linear-gradient(135deg,#2b6cb0,#3f8fd8);border-color:transparent;color:#fff}
  .card.accent .k{color:rgba(255,255,255,.8)}.card.accent .v{color:#fff}
  /* 看板总览：5 个扁方形指标块（紧凑，点数字跳转对应页面） */
  .kpis{display:grid;grid-template-columns:repeat(5,1fr);gap:12px}
  /* ★ 2026-10-18：团队总览与上方 5 卡拉开距离，不再挤成一坨 */
  .kpis{margin-top:18px;padding-top:16px;border-top:1px dashed #e2e8f0}
  .kpi{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;
       text-decoration:none;cursor:pointer;background:var(--panel);border:1px solid var(--line);
       border-radius:var(--r);padding:12px 8px 22px;transition:.15s;position:relative;
       height:112px;}
  .kpi:hover{border-color:#3f8fd8;box-shadow:0 3px 12px rgba(63,143,216,.2);transform:translateY(-2px)}
  .kpi .k{font-size:12px;color:var(--sub);margin-bottom:5px}
  .kpi .v{font-size:27px;font-weight:700;letter-spacing:-1px;color:#1f4e85;line-height:1.05}
  .kpi .v small{font-size:11px;color:var(--sub);font-weight:400;margin-left:3px}
  .kpi .sub{font-size:11px;color:var(--sub);margin-top:4px;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
  .kpi .go{position:absolute;left:0;right:0;bottom:6px;font-size:11px;color:#a8b8ca}
  .kpi:hover .go{color:#3f8fd8}
  .kpi.new{background:linear-gradient(135deg,#f6fbff,#eaf4ff);border-color:#d3e2f7}
  .kpi.new .v{font-size:22px;color:#2b6cb0}
  .kpi.new .v small{font-size:11px}
  /* 紧凑面板（「我的任务」「我的开发量」等） */
  /* ★ 问题库表格排版修正（老张 2026-10-13）：
     原问题：8 列里只有「操作」固定 230px，其余自适应 ⇒「标题/描述」被挤成 2~3 字一行、
     行高暴涨、右侧横向溢出。现改为固定列宽 + 标题列吃满剩余 + 长文本限行。 */
  #page-issue table{table-layout:fixed;width:100%;min-width:820px}
  #page-issue table th,#page-issue table td{overflow:hidden;vertical-align:top}
  #page-issue .panel-b{overflow-x:auto}
  #page-issue table th:nth-child(1){width:44px}     /* 编号 */
  #page-issue table th:nth-child(2){width:auto}     /* 标题/描述 —— 吃剩余空间 */
  #page-issue table th:nth-child(3){width:78px}     /* 提交企业 */
  #page-issue table th:nth-child(4){width:58px}     /* 提交人 */
  #page-issue table th:nth-child(5){width:92px}     /* 模块 */
  #page-issue table th:nth-child(6){width:70px}     /* 状态 */
  #page-issue table th:nth-child(7){width:58px}     /* 关联任务 */
  #page-issue table th:nth-child(8){width:96px}     /* 操作 */
  #page-issue table th,#page-issue table td{font-size:12px;padding:6px 8px}
  /* 长文本：按单词断行 + 最多 4 行后省略，避免撑高整行 */
  #page-issue table td:nth-child(2){
    word-break:break-word;overflow-wrap:anywhere;line-height:1.5;
    display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}
  #page-issue table td:nth-child(3),#page-issue table td:nth-child(5){
    word-break:break-word;overflow-wrap:anywhere}
  /* 操作列：按钮横排、去掉单元格内多余换行 */
  #page-issue table td:nth-child(8) .btn{margin:0 4px 4px 0;white-space:nowrap}

  /* ★ 2026-10-15：第 5 卡「协同流」加入 ⇒ 4 列改 5 列（窄屏逐级退化，不横向溢出） */
  .mine3{display:grid;grid-template-columns:repeat(5,1fr);gap:16px}
  @media(max-width:1560px){.mine3{grid-template-columns:repeat(3,1fr)}}
  @media(max-width:1100px){.mine3{grid-template-columns:repeat(2,1fr)}}
  .m3{display:block;text-decoration:none;cursor:pointer;background:var(--panel);border:1px solid var(--line);
      border-radius:var(--r);padding:16px 18px;transition:.15s;box-shadow:var(--sh)}
  .m3:hover{border-color:#3f8fd8;box-shadow:0 3px 14px rgba(63,143,216,.2);transform:translateY(-2px)}
  .m3 h3{margin:0 0 12px;font-size:14px;font-weight:600;color:#1f4e85;display:flex;align-items:center;gap:6px}
  .m3 h3 .go{margin-left:auto;font-size:11px;font-weight:400;color:#a8b8ca}
  .m3:hover h3 .go{color:#3f8fd8}
  .m3 .big{font-size:34px;font-weight:700;letter-spacing:-1.2px;color:#2b6cb0;line-height:1}
  .m3 .big small{font-size:12px;color:var(--sub);font-weight:400;margin-left:4px;letter-spacing:0}
  .m3 .rows{margin-top:10px;font-size:12px;color:var(--sub);line-height:1.9}
  .m3 .rows b{color:#33506e;font-weight:600}
  .m3 .bar{height:6px;border-radius:3px;background:#eef3f9;overflow:hidden;margin-top:8px}
  .m3 .bar i{display:block;height:100%;background:linear-gradient(90deg,#3f8fd8,#2b6cb0)}
  .panel.compact{margin-bottom:10px}
  .panel.compact .panel-h{padding:8px 14px}
  .panel.compact .panel-b{padding:8px 10px}
  .panel.compact table th,.panel.compact table td{padding:5px 8px;font-size:12px}
  .panel.compact .grid2{gap:10px}
  .panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh);margin-bottom:16px}
  .panel-h{padding:13px 16px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
  .panel-h b{font-size:14px}
  .panel-h .hint{font-size:12px;color:var(--sub);font-weight:400}
  .panel-b{padding:14px 16px}
  .grid2{display:grid;grid-template-columns:1.15fr 1fr;gap:16px}
  .toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
  input,select,textarea{font-family:inherit;font-size:13px;color:var(--txt);background:#fff;border:1px solid var(--line);border-radius:8px;padding:7px 10px;outline:none}
  input:focus,select:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(43,108,176,.12)}
  input[type=text]{min-width:150px}
  .btn{font-family:inherit;font-size:13px;border:1px solid var(--line);background:#fff;color:var(--txt);border-radius:6px;padding:7px 13px;cursor:pointer;white-space:nowrap}
  .btn:hover{border-color:#c8d2e2;background:#fafbfe}
  .btn.pri{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}
  .btn.pri:hover{background:var(--brand-d)}
  .btn.sm{padding:4px 9px;font-size:12px;border-radius:6px}
  .btn.danger{color:var(--bad);border-color:#f2cfcf}
  .btn.danger:hover{background:#fdf3f3}
  table{width:100%;border-collapse:collapse;font-size:13px}
  th{text-align:left;font-weight:600;color:var(--sub);font-size:12px;padding:9px 10px;border-bottom:1px solid var(--line);background:#fafbfd;white-space:nowrap}
  td{padding:9px 10px;border-bottom:1px solid #f1f4f9;vertical-align:middle}
  tbody tr:hover{background:#fafcff}
  tbody tr:last-child td{border-bottom:none}
  .num{text-align:right;font-variant-numeric:tabular-nums}
  .empty{text-align:center;color:var(--sub);padding:26px 0;font-size:13px}
  .tag{display:inline-block;padding:1px 8px;border-radius:20px;font-size:11.5px;font-weight:600;white-space:nowrap}
  .t-green{background:#e7f6ef;color:var(--ok)}.t-red{background:#fdecec;color:var(--bad)}
  .t-amber{background:#fef4e6;color:var(--warn)}.t-blue{background:#eaf2fd;color:var(--info)}
  .t-gray{background:#f0f2f6;color:var(--sub)}.t-purple{background:#f2ecfd;color:#0ea5e9}
  tr.hl{background:#fff7e6;outline:2px solid #f0b429;outline-offset:-2px}
  .bar{height:9px;background:#eef1f7;border-radius:20px;overflow:hidden}
  .bar>i{display:block;height:100%;border-radius:20px;background:var(--brand)}
  .score{font-weight:700;color:var(--brand);font-variant-numeric:tabular-nums}
  .mask{position:fixed;inset:0;background:rgba(20,28,40,.42);display:flex;align-items:center;justify-content:center;z-index:50}
  .mask.hidden{display:none}
  .modal{background:#fff;border-radius:8px;width:520px;max-width:94vw;max-height:90vh;overflow:auto;box-shadow:0 18px 50px rgba(15,25,40,.28)}
  .modal-h{padding:15px 18px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}
  .modal-h b{font-size:15px}.modal-h span{cursor:pointer;color:var(--sub);font-size:18px;line-height:1}
  .modal-b{padding:16px 18px;display:grid;grid-template-columns:1fr 1fr;gap:12px}
  .fld{display:flex;flex-direction:column;gap:5px}
  .fld.full{grid-column:1 / -1}
  .fld label{font-size:12px;color:var(--sub)}
  .modal-f{padding:13px 18px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:9px}
  .toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%) translateY(20px);background:#1f2733;color:#fff;padding:9px 18px;border-radius:8px;font-size:13px;opacity:0;transition:.25s;z-index:80;pointer-events:none;max-width:80vw}
  .toast.on{opacity:1;transform:translateX(-50%) translateY(0)}
  .toast.err{background:#b32d2d}
  .note{font-size:12px;color:var(--sub);line-height:1.7}
  .formula{background:#f7f9fd;border:1px dashed #cbd8ea;border-radius:8px;padding:10px 12px;font-size:12.5px;color:#33445c;margin-top:6px}
  .formula code{background:#fff;border:1px solid var(--line);border-radius:4px;padding:1px 5px;font-size:12px}
  .login{position:fixed;inset:0;background:linear-gradient(135deg,#1e2836,#2b3d57);display:flex;align-items:center;justify-content:center;z-index:100}
  .login.hidden{display:none}
  .login-box{background:#fff;border-radius:14px;padding:30px 32px;width:360px;box-shadow:0 24px 60px rgba(0,0,0,.35)}
  .login-box h2{font-size:18px;margin-bottom:4px}
  .login-box p{font-size:12px;color:var(--sub);margin-bottom:20px}
  .login-box .fld{margin-bottom:13px}
  .login-box input{width:100%}
  .login-box .btn.pri{width:100%;padding:10px;margin-top:6px}
  .login-err{color:var(--bad);font-size:12px;min-height:16px;margin-top:8px}
  .mono{font-family:ui-monospace,Consolas,"Courier New",monospace;font-size:12px}
  @media(max-width:1080px){.cards{grid-template-columns:repeat(2,1fr)}.grid2{grid-template-columns:1fr}}

/* ★ 2026-10-18 对齐测试环境（8080 会施工 / Ant Design 风格）
   统一：表头底色 #fafafa、分隔线 #f0f0f0、行高更紧凑、字体 13px */
table thead th{background:#fafafa !important;color:#1f2329 !important;font-weight:600 !important;border-bottom:1px solid #f0f0f0 !important}
table tbody td{border-bottom:1px solid #f5f5f5 !important}
table tbody tr:hover{background:#f5f9ff !important}
.btn{border-radius:6px !important}
.btn.pri{background:#0ea5e9 !important;border-color:#0ea5e9 !important}
.btn.pri:hover{background:#38bdf8 !important;border-color:#38bdf8 !important}

/* ★ 侧边栏（对齐装企端实测：白底 + 深字 65% + 选中浅蓝底/蓝字 + 40px 行高 + 256px 宽） */
.sidebar .brand span{color:#8c8c8c !important}
.sidebar a{color:rgba(0,0,0,.65) !important;height:40px !important;line-height:40px !important;padding:0 16px 0 24px !important;margin:0 !important;border-radius:0 !important;font-size:14px}
.sidebar a i{color:#8c8c8c !important;margin-right:8px;font-style:normal}
.sidebar a:hover{background:#f5f5f5 !important;color:#0ea5e9 !important}
.sidebar a:hover i{color:#0ea5e9 !important}
.sidebar a.on{background:#e6f7ff !important;color:#0ea5e9 !important;border-right:3px solid #0ea5e9;font-weight:600}
.sidebar a.on i{color:#0ea5e9 !important}
.side-foot{color:#8c8c8c !important;border-top:1px solid #f0f0f0}

/* ★ 2026-10-18 老张：左侧菜单图标逐个上色（鲜艳、一眼能分辨） */
.sidebar a[data-p="dash"]       i{color:#0ea5e9 !important}
.sidebar a[data-p="task"]       i{color:#52c41a !important}
.sidebar a[data-p="assign"]     i{color:#fa8c16 !important}
.sidebar a[data-p="proto"]      i{color:#722ed1 !important}
.sidebar a[data-p="taskcoop"]   i{color:#13c2c2 !important}
.sidebar a[data-p="report"]     i{color:#eb2f96 !important}
.sidebar a[data-p="perf"]       i{color:#faad14 !important}
.sidebar a[data-p="board"]      i{color:#2f54eb !important}
.sidebar a[data-p="iter"]       i{color:#a0d911 !important}
.sidebar a[data-p="exec"]       i{color:#52c41a !important}
.sidebar a[data-p="bug"]        i{color:#f5222d !important}
.sidebar a[data-p="issue"]      i{color:#fa541c !important}
.sidebar a[data-p="workbench"]  i{color:#595959 !important}
.sidebar a[data-p="member"]     i{color:#0ea5e9 !important}
.sidebar a[data-p="audit"]      i{color:#722ed1 !important}
.sidebar a[data-p="wbtodo"]     i{color:#faad14 !important}
.sidebar a[data-p="coop"]       i{color:#13c2c2 !important}
.sidebar a[data-p="case"]       i{color:#52c41a !important}
.sidebar a.on i{color:inherit !important}

/* ★ 控件规格（实测装企端：圆角 4px / 输入框边框 #d9d9d9 / 控件高 32px / 字号 14px） */
.btn{border-radius:4px !important;height:32px !important;font-size:14px !important;padding:0 15px !important;box-shadow:none !important}
.btn.sm{border-radius:4px !important;height:24px !important;font-size:14px !important;padding:0 7px !important}
.btn.pri{background:#0ea5e9 !important;border-color:#0ea5e9 !important;color:#fff !important}
.btn.pri:hover{background:#38bdf8 !important;border-color:#38bdf8 !important}
input:not([type=checkbox]):not([type=radio]),select{border:1px solid #d9d9d9 !important;border-radius:4px !important;height:32px !important;font-size:14px !important;padding:0 11px !important;box-sizing:border-box}
textarea{border:1px solid #d9d9d9 !important;border-radius:4px !important;font-size:14px !important;padding:4px 11px !important}
input:focus,select:focus,textarea:focus{border-color:#38bdf8 !important;box-shadow:0 0 0 2px rgba(24,144,255,.2) !important;outline:none !important}

/* ★ 表格规格（Ant Design：表头 #fafafa / 单元格 padding 16px / 分隔线 #f0f0f0 / 悬停 #fafafa） */
table thead th{background:#fafafa !important;color:rgba(0,0,0,.85) !important;font-size:14px !important;font-weight:500 !important;padding:12px 16px !important;border-bottom:1px solid #f0f0f0 !important}
table tbody td{font-size:14px !important;padding:12px 16px !important;border-bottom:1px solid #f0f0f0 !important;color:rgba(0,0,0,.65)}
table tbody tr:hover>td{background:#fafafa !important}

/* ★ 卡片标题（实测装企端 16~18px 粗体） */
.panel-h b{font-size:16px;color:rgba(0,0,0,.85)}
.panel-h{border-bottom:1px solid #f0f0f0}


  /* ★★★ 2026-10-19 任务分派 · 6 步逐步弹窗（老张确认版原型）
     上次这整块没插进 <style>，页面退化成纯文字竖排 —— 必须放在 <style> 内部 */
  .sys-ports{display:flex;gap:9px}
  .sys-ports .sp{flex:1;height:42px;display:flex;align-items:center;justify-content:center;gap:7px;
    border:1.5px solid #e5e8ef;border-radius:8px;background:#fbfcfe;font-size:13px;color:#4a5568;cursor:pointer}
  .sys-ports .sp.on{border-color:#0ea5e9;background:#e0f2fe;color:#0ea5e9;font-weight:600}
  .sys-grid{display:grid;grid-template-columns:1fr 1fr;gap:11px;margin-top:12px}
  .sys-card{background:#fff;border:1px solid #eef1f6;border-radius:10px;padding:12px 14px;cursor:pointer;position:relative}
  .sys-card:hover{border-color:#7dd3fc;box-shadow:0 3px 10px rgba(24,144,255,.08)}
  .sys-card .no{position:absolute;top:9px;right:12px;font-size:11px;color:#c3ccd9}
  .sys-card .t{font-size:12.5px;color:#8c8c8c;margin-bottom:5px}
  .sys-card .v{font-size:14px;color:#8c8c8c}
  .sys-card .v.ok{color:#1f2329;font-weight:600}
  .sys-card .hint{font-size:11.5px;color:#b0b8c4;margin-top:4px}
  .sys-card.filled{border-color:#b7e0ff;background:#fbfdff}
  .sys-card.next{border-color:#0ea5e9;box-shadow:0 0 0 3px rgba(24,144,255,.12)}
  .sys-card.next .no{color:#0ea5e9;font-weight:600}
  .sys-card .nx{display:none;margin-top:9px;font-size:12.5px;color:#0ea5e9;font-weight:600}
  .sys-card.next .nx{display:block}
  .sys-card.dim{opacity:.55}
  .sys-sum{background:#fafcff;border:1px dashed #b7d9ff;border-radius:9px;padding:11px 13px;font-size:13px;line-height:1.95;color:#3c4757}
  .sys-sum b{color:#0ea5e9}
  #sys-mask{position:fixed;inset:0;background:rgba(20,26,36,.42);display:none;align-items:center;justify-content:center;z-index:9999}
  #sys-mask.on{display:flex}
  #sys-mask .dlg{background:#fff;border-radius:12px;width:720px;max-height:78vh;display:flex;flex-direction:column;box-shadow:0 18px 50px rgba(0,0,0,.2)}
  #sys-mask .dh{padding:14px 18px;border-bottom:1px solid #f0f2f5;display:flex;align-items:center;gap:10px}
  #sys-mask .dh b{font-size:15.5px}
  #sys-mask .dh .x{margin-left:auto;cursor:pointer;color:#98a2b3;font-size:18px}
  #sys-mask .db{padding:13px 18px;overflow:auto;flex:1}
  #sys-mask .df{padding:11px 18px;border-top:1px solid #f0f2f5;display:flex;align-items:center;gap:10px}
  #sys-mask .df .cnt{margin-left:auto;font-size:12.5px;color:#8c8c8c}
  #sys-mask .src{width:100%;height:33px;border:1px solid #dfe4ec;border-radius:7px;padding:0 10px;font-size:13px;margin-bottom:11px;outline:none}
  #sys-mask .opt{display:flex;align-items:center;gap:10px;padding:8px 9px;border-radius:7px;font-size:13.5px;cursor:pointer}
  #sys-mask .opt:hover{background:#f7fbff}
  #sys-mask .opt .c{margin-left:auto;font-size:12px;color:#98a2b3}
  #sys-mask .grp{margin-bottom:13px;border:1px solid #f0f2f5;border-radius:9px;overflow:hidden}
  #sys-mask .grp .gh{display:flex;align-items:center;gap:9px;background:#fafbfd;padding:8px 11px;font-size:13px;font-weight:600}
  #sys-mask .grp .gh .all{margin-left:auto;font-size:11.5px;color:#0ea5e9;cursor:pointer;font-weight:400}
  #sys-mask .grp .gb{display:flex;flex-wrap:wrap;gap:7px;padding:10px 11px}
  #sys-mask .pgc{display:inline-flex;align-items:center;gap:5px;border:1px solid #e0e5ee;border-radius:6px;padding:5px 9px;font-size:12.5px;color:#3c4757;background:#fff;cursor:pointer}
  #sys-mask .pgc.on{border-color:#0ea5e9;background:#e0f2fe;color:#0ea5e9;font-weight:600}
  #sys-mask .tpg{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
  #sys-mask .tpi{height:50px;display:flex;align-items:center;justify-content:center;border:1.5px solid #e5e8ef;border-radius:8px;background:#fbfcfe;font-size:13.5px;color:#4a5568;cursor:pointer;position:relative}
  #sys-mask .tpi.on{border-color:#0ea5e9;background:#e0f2fe;color:#0ea5e9;font-weight:600}
  #sys-mask .tpi.on::after{content:"\2713";position:absolute;top:3px;right:6px;font-size:12px}
  #sys-mask .ppg{display:grid;grid-template-columns:1fr 1fr;gap:10px}
  #sys-mask .ppi{border:1.5px solid #e5e8ef;border-radius:8px;padding:10px 12px;background:#fbfcfe;cursor:pointer;font-size:13px;position:relative}
  #sys-mask .ppi b{display:block;font-size:14px;margin-bottom:3px}
  #sys-mask .ppi span{font-size:11.5px;color:#8c8c8c}
  #sys-mask .ppi.on{border-color:#0ea5e9;background:#e0f2fe}
  #sys-mask .ppi.on b{color:#0ea5e9}
  #sys-mask .ppi.on::after{content:"\2713";position:absolute;top:8px;right:9px;color:#0ea5e9;font-size:13px}

/* ═══ 2026-10-20 任务分派 · 临时任务（v6 原型落地）══════════════════════ */
.tmp-row4{display:grid;grid-template-columns:560px 1fr 1fr 1fr;gap:12px;align-items:end;margin-bottom:16px}
.tmp-cell{display:flex;flex-direction:column;gap:6px;min-width:0}
.tmp-cell label{font-size:12.5px;color:#4a5568;font-weight:600;white-space:nowrap}
.tmp-cell label em{font-style:normal;color:#f5222d}
/* ★ 必须带 !important：app.css 上方有一条全局 input/select 的 !important 规则（height:32px），
   否则这里的 44px 会被压回去（实测踩过） */
.tmp-cell input[type=text],.tmp-cell select{width:100%;height:44px !important;border:1px solid #dfe4ec !important;
  border-radius:7px !important;font-family:inherit;font-size:13.5px !important;color:#1f2329;background:#fff;
  outline:none;padding:0 11px !important;transition:.15s;box-sizing:border-box}
.tmp-cell select{cursor:pointer;padding:0 8px}
.tmp-cell input[type=text]:focus,.tmp-cell select:focus{border-color:#0ea5e9;box-shadow:0 0 0 3px rgba(24,144,255,.1)}
.tmp-pri{display:flex;gap:6px}
.tmp-pri span{flex:1;height:44px;display:flex;align-items:center;justify-content:center;border:1.5px solid #e5e8ef;
  border-radius:7px;background:#fbfcfe;font-size:13px;color:#4a5568;cursor:pointer;user-select:none}
.tmp-pri span.on{border-color:#0ea5e9;background:#e0f2fe;color:#0ea5e9;font-weight:700}
.tmp-field{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}
.tmp-field>label{font-size:12.5px;color:#4a5568;font-weight:600}
.tmp-field>label .sub{font-size:11.5px;color:#b0b8c4;font-weight:400;margin-left:6px}
.tmp-editor{border:1px solid #dfe4ec;border-radius:8px;overflow:hidden;background:#fff;transition:.15s}
.tmp-editor:focus-within{border-color:#0ea5e9;box-shadow:0 0 0 3px rgba(24,144,255,.1)}
.tmp-editor textarea{width:100%;border:0;outline:none;padding:11px 12px;font-family:inherit;font-size:13.5px;
  line-height:1.75;min-height:150px;resize:vertical;background:transparent;color:#1f2329}
.tmp-bar{display:flex;align-items:center;gap:8px;padding:8px 11px;border-top:1px solid #f0f3f8;background:#fafbfd}
.tmp-mic{height:30px;padding:0 13px;border:1.5px solid #7dd3fc;background:#e0f2fe;color:#0ea5e9;border-radius:15px;
  font-size:12px;font-family:inherit;cursor:pointer}
.tmp-mic.rec{background:#fff1f0;border-color:#ffa39e;color:#f5222d}
.tmp-att{height:30px;padding:0 12px;border:1.5px solid #d9d9d9;background:#fff;color:#8c8c8c;border-radius:15px;
  font-size:12px;font-family:inherit;cursor:pointer}
.tmp-bar .hook{font-size:11.5px;color:#b0b8c4}
.tmp-bar .cnt{margin-left:auto;font-size:11.5px;color:#b0b8c4}
.tmp-brk{border:1px solid #e8eef7;border-radius:10px;background:#fafcff;overflow:hidden;margin-bottom:18px}
.tmp-brk-h{display:flex;align-items:center;gap:9px;padding:12px 14px;border-bottom:1px solid #eef3fa;background:#f5f9ff}
.tmp-brk-h b{font-size:13.5px;color:#0f172a}
.tmp-brk-h .n{font-size:11.5px;color:#8c8c8c;font-weight:400}
.tmp-brk-h .act{margin-left:auto;display:flex;gap:7px}
.tmp-brk-note{padding:9px 14px;font-size:11.5px;color:#8c8c8c;background:#fcfdff;border-bottom:1px solid #f4f7fb;line-height:1.7}
.tmp-brk-note b{color:#4a5568}
.tmp-brk-b{padding:12px 14px;min-height:130px}
.tmp-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;height:110px;
  color:#b0b8c4;font-size:12.5px;text-align:center;line-height:1.9}
.tmp-subs{width:100%;border-collapse:collapse}
.tmp-subs th{text-align:left;font-size:11.5px;color:#8c8c8c;font-weight:600;padding:7px 8px;border-bottom:1px solid #eef3fa}
.tmp-subs td{padding:7px 8px;border-bottom:1px solid #f4f7fb;vertical-align:middle}
.tmp-subs td input[type=text]{width:100%;height:32px !important;border:1px solid #e5e8ef !important;
  border-radius:6px !important;font-family:inherit;font-size:12.5px !important;padding:0 8px !important;outline:none}
.tmp-subs td input[type=text]:focus{border-color:#0ea5e9}
.tmp-subs .del{color:#ff4d4f;cursor:pointer;font-size:13px;padding:0 4px}
.tmp-foot{display:flex;align-items:center;gap:11px;padding-top:16px;border-top:1px solid #f0f2f5}
.tmp-main{height:44px !important;padding:0 34px !important;font-size:14.5px !important;border-radius:9px !important;
  background:#0ea5e9 !important;border-color:#0ea5e9 !important;color:#fff !important}
.tmp-main:hover{background:#38bdf8}
.tmp-ghost{height:44px;padding:0 19px;font-size:13px;border-radius:9px}
.tmp-foot .hint{font-size:12px;color:#8c8c8c}
.tmp-foot .tmp-note{margin-left:auto;font-size:11.5px;color:#b0b8c4;text-align:right;line-height:1.6}

/* 语音按钮（🎤）+ 上传箭头（➤）：2026-10-20 按老张要求 */
.tmp-up{width:34px;height:30px;border:1.5px solid #0ea5e9;background:#0ea5e9;color:#fff;border-radius:15px;
  font-size:13px;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0}
.tmp-up:hover{background:#38bdf8;border-color:#38bdf8}
.tmp-mic{min-width:34px;padding:0 10px}
.tmp-mic.rec{background:#fff1f0;border-color:#ffa39e;color:#f5222d;animation:tmpPulse 1.1s infinite}
@keyframes tmpPulse{0%{box-shadow:0 0 0 0 rgba(245,34,45,.45)}70%{box-shadow:0 0 0 7px rgba(245,34,45,0)}100%{box-shadow:0 0 0 0 rgba(245,34,45,0)}}
#sys-tmp-live{max-width:520px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;vertical-align:middle}

/* ═══ 2026-10-20 任务分派 · 系统任务 v7（端口胶囊 + 三卡一排 + 页面大区 + 备注）═══ */
.sys-ports-row{display:flex;align-items:center;gap:9px;margin-bottom:16px}
.sys-ports-row .lb{font-size:12.5px;color:#4a5568;font-weight:600}
.sys-ports{display:flex;gap:8px;flex-wrap:wrap;flex:1 1 auto;max-width:620px}
/* ★ 2026-10-20 老张：端口胶囊被压窄后「供应商端/板材商端」竖排成两行 ⇒ 禁止换行 + 等宽分段 */
.sys-ports .sp{height:36px !important;padding:0 10px !important;display:inline-flex;align-items:center;justify-content:center;gap:6px;
  flex:1 1 0 !important;min-width:max-content !important;white-space:nowrap !important;word-break:keep-all !important;
  border:1.5px solid #e5e8ef !important;border-radius:18px !important;background:#fbfcfe;font-size:13px !important;
  color:#4a5568;cursor:pointer;font-weight:400 !important}
.sys-ports .sp .dot{width:6px;height:6px;border-radius:50%;background:#d9d9d9}
.sys-ports .sp.on{border-color:#0ea5e9 !important;background:#e0f2fe !important;color:#0ea5e9 !important;font-weight:600 !important}
.sys-ports .sp.on .dot{background:#0ea5e9}

.sys-row3{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:16px}
.sys-pick{border:1.5px solid #e5e8ef;border-radius:10px;background:#fbfcfe;padding:13px 15px;cursor:pointer;
  min-height:92px;display:flex;flex-direction:column;gap:6px;transition:.15s;position:relative}
.sys-pick:hover{border-color:#7dd3fc;box-shadow:0 2px 10px rgba(24,144,255,.08)}
.sys-pick.filled{border-color:#7dd3fc;background:#f7fbff}
.sys-pick.next{border-color:#0ea5e9;box-shadow:0 0 0 3px rgba(24,144,255,.12)}
.sys-pick.dim{opacity:.7}
.sys-pick .t{font-size:12.5px;color:#8c8c8c;display:flex;align-items:center;gap:5px}
.sys-pick .t em{font-style:normal;color:#f5222d}
.sys-pick .v{font-size:14px;color:#b0b8c4;font-weight:600;line-height:1.5}
.sys-pick .v.ok{color:#1f2329}
.sys-pick .go{margin-top:auto;font-size:12px;color:#0ea5e9;font-weight:600}

.sys-pages{border:1.5px solid #dfe8f5;border-radius:10px;background:#fafcff;overflow:hidden;margin-bottom:16px}
.sys-pages-h{display:flex;align-items:center;gap:10px;padding:12px 15px;background:#f5f9ff;border-bottom:1px solid #eaf1fa}
.sys-pages-h b{font-size:13.5px;color:#0f172a}
.sys-pages-h .n{font-size:12px;color:#8c8c8c}
.sys-pages-h .act{margin-left:auto;display:flex;gap:7px}
.sys-pages-b{padding:14px 15px;min-height:130px}
.sys-pages-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;height:110px;
  color:#b0b8c4;font-size:12.5px;text-align:center;line-height:1.9}
.sys-chips{display:flex;flex-wrap:wrap;gap:8px}
.sys-chip{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 11px;border:1px solid #7dd3fc;
  border-radius:16px;background:#e0f2fe;color:#0ea5e9;font-size:12.5px}
.sys-chip .x{color:#69b1ff;cursor:pointer;font-weight:700}
.sys-chip.grp{border-color:#d6e4ff;background:#f0f5ff;color:#2f54eb}

.sys-remark{border:1px solid #e5e8ef;border-radius:10px;padding:12px 14px;background:#fff;margin-bottom:16px}
.sys-remark .t{font-size:12.5px;color:#4a5568;font-weight:600;margin-bottom:7px}
.sys-remark .t .opt{font-size:11.5px;color:#b0b8c4;font-weight:400;margin-left:6px}
.sys-remark textarea{width:100%;min-height:64px;border:1px solid #dfe4ec !important;border-radius:7px !important;
  padding:9px 11px !important;font-family:inherit;font-size:13px !important;line-height:1.7;resize:vertical;outline:none;color:#1f2329}
.sys-remark textarea:focus{border-color:#0ea5e9 !important;box-shadow:0 0 0 3px rgba(24,144,255,.1)}
.sys-confirm{border-top:1px solid #f0f2f5;padding-top:16px}
.sys-sum .k{color:#8c8c8c;display:inline-block;min-width:52px}
.sys-sum b{color:#0ea5e9}

/* 方向按钮（系统任务 / 临时任务）：图标加大 2026-10-20 */
.sys-dir{display:flex;gap:12px;margin-bottom:18px;align-items:center}
.sys-dir button{height:50px !important;padding:0 30px !important;border:1.8px solid #e5e8ef !important;border-radius:10px !important;
  background:#fbfcfe;font-size:15.5px !important;color:#4a5568;font-family:inherit;cursor:pointer;
  display:inline-flex;align-items:center;gap:10px;font-weight:400 !important}
.sys-dir button .ico{font-size:22px;line-height:1}
.sys-dir button.pri{border-color:#0ea5e9 !important;background:#e0f2fe !important;color:#0ea5e9 !important;
  font-weight:700 !important;box-shadow:0 2px 10px rgba(24,144,255,.2)}
.sys-dir .sp{margin-left:auto;font-size:12.5px;color:#b0b8c4}

/* 个人小浮窗（点右上角姓名）2026-10-20 */
#me-pop{position:fixed;z-index:10000;width:310px;background:#fff;border:1px solid #e5e8ef;border-radius:12px;
  box-shadow:0 12px 32px rgba(20,26,36,.18);padding:0;overflow:hidden;font-size:13px}
#me-pop .me-h{display:flex;align-items:center;gap:10px;padding:14px 15px;background:#f7fbff;border-bottom:1px solid #eef3fa}
#me-pop .me-av{width:36px;height:36px;border-radius:50%;background:#0ea5e9;color:#fff;display:flex;
  align-items:center;justify-content:center;font-size:16px;font-weight:700;flex:0 0 auto}
#me-pop .me-h b{font-size:14px;display:block}
#me-pop .me-sub{font-size:11.5px;color:#8c8c8c;margin-top:2px}
#me-pop .me-x{margin-left:auto;color:#b0b8c4;cursor:pointer;font-size:14px}
#me-pop .me-sec{padding:12px 15px;border-bottom:1px solid #f4f7fb}
#me-pop .me-lb{font-size:12px;color:#4a5568;font-weight:600;margin-bottom:6px}
#me-pop .me-tip{font-size:11px;color:#b0b8c4;font-weight:400;margin-left:4px}
#me-pop input{width:100%;height:34px !important;border:1px solid #dfe4ec !important;border-radius:6px !important;
  padding:0 9px !important;font-family:inherit;font-size:12.5px !important;outline:none;color:#1f2329}
#me-pop input:focus{border-color:#0ea5e9 !important;box-shadow:0 0 0 3px rgba(24,144,255,.1)}
#me-pop .me-foot{display:flex;align-items:center;gap:8px;padding:12px 15px;background:#fafbfd}
#me-pop .me-hint{font-size:11.5px;color:#8c8c8c;margin-left:auto;max-width:140px;text-align:right}

/* ══════════════════════════════════════════════════════════════════════
   2026-10-20 老张：整个页面颜色不够鲜艳、不够丰富，向 8080（Ant Design）看齐
   · 修根因：侧边栏原本是深底配色（字 #c9d3e1 / hover 白字），后来底改成白色
     但字色没跟着改 ⇒ 白底浅字几乎看不见、hover 白字白底
   · 加丰富度：主色渐变标题、彩色统计卡、浅蓝表头、卡片悬浮阴影
   ══════════════════════════════════════════════════════════════════════ */
nav a{color:#43506b}
nav a:hover{background:#e0f2fe;color:#0284c7}
nav a.on{background:linear-gradient(90deg,#e0f2fe,#f0f9ff);color:#0284c7;border-left-color:#0ea5e9;font-weight:600}
nav a.on i{opacity:1}
.sidebar{box-shadow:1px 0 4px rgba(15,23,42,.04)}
.brand b{background:linear-gradient(90deg,#0284c7,#38bdf8);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;font-weight:800}

/* 卡片统一：更明显的圆角 + 悬浮层次（Ant Design 观感） */
.panel,.card{border-radius:8px;box-shadow:0 1px 3px rgba(15,23,42,.05);transition:box-shadow .18s,border-color .18s}
.panel:hover,.card:hover{box-shadow:0 4px 14px rgba(24,144,255,.10)}
.panel-h{border-bottom:1px solid #eef2f7;background:linear-gradient(180deg,#fbfdff,#fff)}

/* 表头浅蓝 + 斑马纹（数据表一眼能读） */
table thead th{background:#fafcff!important;color:#5b6b85!important;font-weight:600}
tbody tr:hover>td{background:#f7fbff}

/* 统计数字：主色加粗，突出层次 */
.big,.kpi-v,.stat-v{color:#0284c7}

/* 标签/徽标走 Ant 色板 */
.tag,.badge{border-radius:4px}
.t-blue{background:#e0f2fe;color:#0958d9;border-color:#7dd3fc}
.t-green{background:#f6ffed;color:#389e0d;border-color:#b7eb8f}
.t-amber{background:#fffbe6;color:#d46b08;border-color:#ffe58f}
.t-red{background:#fff1f0;color:#cf1322;border-color:#ffa39e}
.t-gray{background:#fafafa;color:#595959;border-color:#d9d9d9}

/* 主按钮：渐变，比纯色更有质感 */
.btn-primary,button.primary{background:linear-gradient(180deg,#38bdf8,#0ea5e9);border-color:#0ea5e9}
.btn-primary:hover,button.primary:hover{background:linear-gradient(180deg,#7dd3fc,#38bdf8)}

/* ══════════════════════════════════════════════════════════════════════
   2026-10-20 老张选定方案 ②「极简白」—— 覆盖式主题（本段在最后，优先级最高）
   底色 #f8fafc · 主色 #0ea5e9 · 绿 #10b981 · 蓝紫 #6366f1 · 橙 #f59e0b
   ══════════════════════════════════════════════════════════════════════ */
:root{
  --bg:#f8fafc; --panel:#ffffff; --line:#e8eef6; --txt:#1e293b; --sub:#8496ad;
  --brand:#0ea5e9; --brand-d:#0284c7; --side:#ffffff; --side-h:#eff9ff;
  --ok:#10b981; --warn:#f59e0b; --bad:#ef4444; --info:#0ea5e9;
  --r:8px; --sh:0 1px 2px rgba(15,23,42,.04);
  --c1:#0ea5e9; --c2:#6366f1; --c3:#10b981; --c4:#f59e0b;
}
body{background:var(--bg);color:var(--txt)}

/* 侧边栏：白底 + 浅蓝选中 + 渐变品牌名 */
.sidebar{background:#fff;box-shadow:1px 0 4px rgba(15,23,42,.04);border-right:1px solid var(--line)}
nav a{color:#475569}
nav a:hover{background:#eff9ff;color:#0284c7}
nav a.on{background:linear-gradient(90deg,#eff9ff,rgba(240,249,255,.4));color:#0284c7;border-left-color:#0ea5e9;font-weight:600}
.brand b{background:linear-gradient(90deg,#0284c7,#38bdf8);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;font-weight:800}

/* 卡片：更大圆角 + 柔和阴影 + 悬浮蓝光 */
.panel,.card{border-radius:12px;border:1px solid #eef2f7;box-shadow:0 1px 2px rgba(15,23,42,.05);transition:box-shadow .2s,transform .2s}
.panel:hover{box-shadow:0 6px 20px rgba(14,165,233,.10)}
.panel-h{background:linear-gradient(180deg,#fbfdff,#fff);border-bottom:1px solid #eef2f7}
.panel-h b{color:#0f172a}

/* 表格：浅蓝表头 + 行悬停 + 首列加强 */
table thead th{background:#fbfdff!important;color:#64748b!important;font-weight:600}
tbody tr:hover>td{background:#f7fbff}

/* 主按钮渐变 */
.btn-primary,button.primary{background:linear-gradient(180deg,#38bdf8,#0ea5e9);border-color:#0ea5e9}
.btn-primary:hover,button.primary:hover{background:linear-gradient(180deg,#7dd3fc,#38bdf8)}

/* 状态标签走 ② 的语义色 */
.t-blue{background:#e0f2fe;color:#0369a1;border-color:#bae6fd}
.t-green{background:#ecfdf5;color:#059669;border-color:#a7f3d0}
.t-amber{background:#fffbeb;color:#b45309;border-color:#fde68a}
.t-red{background:#fef2f2;color:#dc2626;border-color:#fecaca}
.t-gray{background:#f8fafc;color:#64748b;border-color:#e2e8f0}

/* 关键数字用主色，一眼抓得住 */
.big,.kpi-v,.stat-v{color:#0284c7}

/* ══════════════════════════════════════════════════════════════════════
   2026-10-21 窄屏/手机适配（老张在手机上看，侧边栏被压成一条、表格溢出）
   ══════════════════════════════════════════════════════════════════════ */
@media (max-width: 1100px){
  .sidebar{width:150px;flex:0 0 150px}
  .sidebar .brand{padding:14px 12px 10px}
  .sidebar .brand b{font-size:13px}
  .sidebar .brand span{display:none}
  nav a{padding:9px 12px;font-size:12.5px;gap:7px}
  .main{padding:10px 12px;min-width:0}
  .panel-b{overflow-x:auto}
  .panel-b>table,table.b6{min-width:640px}
}
@media (max-width: 820px){
  /* 手机上侧边栏收成图标条，只留符号 */
  .sidebar{width:56px;flex:0 0 56px}
  .sidebar .brand{padding:10px 6px;text-align:center}
  .sidebar .brand b{font-size:0}
  .sidebar .brand b:before{content:"◈";font-size:18px;color:#0ea5e9}
  nav a{padding:11px 0;justify-content:center;font-size:0}
  nav a i{font-size:17px;opacity:1}
  .main{padding:8px}
  .panel-h{flex-wrap:wrap;gap:6px}
  .panel-h b{font-size:14px}
  .grid2,.grid3,.grid4,.cards{grid-template-columns:1fr!important}
  .panel-b>table{min-width:560px}
  .pfov-p{width:98vw;max-height:94vh}
  .pfov-b{padding:12px}
  .ev-ability{grid-template-columns:1fr}
  .ev-grid{grid-template-columns:repeat(2,1fr)}
}
