
  :root{
    --bg:#f4f6fa; --card:#fff; --ink:#1f2d3d; --muted:#6b7785; --line:#e6eaf0;
    --brand:#2f6fed; --brand-soft:#eaf1ff; --shadow:0 2px 10px rgba(31,111,235,.06);
    --ok:#2f9e44; --warn:#e8590c; --danger:#e03131; --info:#1971c2; --purple:#7048e8;
    --chip:#eef2f7;
  }
  *{box-sizing:border-box}
  html,body{min-height:100%;margin:0;padding:0}
  /* 切换频道不闪动：滚动条槽位常驻，避免滚动条出现/消失引起内容宽度横移（旧浏览器回退常驻滚动条） */
  html{scrollbar-gutter:stable}
  @supports not (scrollbar-gutter:stable){html{overflow-y:scroll}}
  body{min-height:100vh;display:flex;flex-direction:column;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",sans-serif;background:var(--bg);color:var(--ink);line-height:1.55;font-size:14px}
  /* 顶栏 */
  .topbar{position:sticky;top:0;z-index:50;background:rgba(247,250,255,.78);border-bottom:1px solid rgba(255,255,255,.76);box-shadow:0 8px 24px rgba(32,52,82,.08),inset 0 -1px rgba(188,202,224,.48);-webkit-backdrop-filter:blur(18px) saturate(150%);backdrop-filter:blur(18px) saturate(150%)}
  .topbar-in{max-width:1440px;margin:0 auto;display:flex;align-items:center;gap:18px;padding:0 24px;height:68px}
  .logo{display:flex;align-items:center;flex:0 0 auto;white-space:nowrap}
  .top-brand-logo{display:block;width:auto;height:30px;max-width:178px;object-fit:contain}
  .role-sel{font-size:13px;padding:6px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink);cursor:pointer;white-space:nowrap;font-family:inherit}
  nav.tabs{display:flex;gap:4px;flex:1;overflow-x:auto}
  nav.tabs button,nav.tabs .tab-link{display:flex;align-items:center;background:none;border:none;padding:8px 14px;border-radius:8px;cursor:pointer;font-size:14px;color:var(--muted);white-space:nowrap;font-weight:500;text-decoration:none;font-family:inherit}
  nav.tabs button:hover,nav.tabs .tab-link:hover{background:var(--chip);color:var(--ink)}
  nav.tabs button.active{background:var(--brand);color:#fff}
  /* Bug 频道子栏目（Bug / 测试用例）：次级胶囊标签 */
  .subtabs{display:flex;gap:6px;margin:0 0 14px;padding:4px;background:var(--chip);border:1px solid var(--line);border-radius:10px;width:fit-content}
  .subtabs button{background:none;border:none;padding:6px 18px;border-radius:7px;cursor:pointer;font-size:13.5px;color:var(--muted);font-weight:500;font-family:inherit;white-space:nowrap}
  .subtabs button:hover{background:#fff;color:var(--ink)}
  .subtabs button.active{background:var(--brand);color:#fff}
  .topbar .meta{font-size:12px;color:var(--muted);white-space:nowrap}
  .dbstat{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);white-space:nowrap;padding:4px 9px;border:1px solid var(--line);border-radius:20px;background:var(--chip)}
  .dbstat .dot{width:8px;height:8px;border-radius:50%;background:var(--info)}
  .dbstat.online .dot{background:var(--ok)}
  .dbstat.online{color:var(--ok);border-color:#c3e6cb}
  .dbstat.busy .dot{background:var(--info)}
  .dbstat.busy{color:var(--info);border-color:#bfd8f4}
  .dbstat.error .dot,.dbstat.warn .dot{background:var(--danger)}
  .dbstat.error,.dbstat.warn{color:var(--danger);border-color:#f3c1c1}
  .wrap{width:100%;max-width:1440px;flex:1 0 auto;margin:0 auto;padding:20px 24px 80px;overflow-x:clip}
  @supports not (overflow:clip){.wrap{overflow-x:hidden}}
  /* 频道数据与内容渲染期间的统一占位层：仅用 CSS 绘制转圈，顶栏仍可见。 */
  .channel-loading{position:fixed;inset:0;z-index:45;display:grid;place-items:center;background:rgba(244,246,250,.58);opacity:0;visibility:hidden;pointer-events:none;transition:opacity .16s ease,visibility 0s linear .16s}
  .channel-loading.is-loading{opacity:1;visibility:visible;pointer-events:auto;transition:opacity .16s ease}
  .channel-loading-panel{display:flex;flex-direction:column;align-items:center;gap:10px;min-width:108px;padding:18px 20px;border:1px solid #dce6f7;border-radius:8px;background:rgba(255,255,255,.94);box-shadow:0 10px 26px rgba(31,71,128,.12);color:#5e718a;font-size:13px;line-height:1.4}
  .channel-spinner{width:30px;height:30px;border:3px solid #dbe8fb;border-top-color:var(--brand);border-radius:50%;animation:channel-loading-spin .72s linear infinite}
  @keyframes channel-loading-spin{to{transform:rotate(360deg)}}
  @media (prefers-reduced-motion:reduce){.channel-spinner{animation-duration:1.8s}}
  /* 防溢出加固：flex/grid 链允许收缩，杜绝长内容 min-content 撑破布局（桌面宽裕时无副作用） */
  .home-cols,.home-col,.grid,.widget,.ov-grid,.split,.half,
  .dform,.dfield,.rrow,.hv-row,.hv-fields,.asset-card,.asset-body,
  .bug-cols,.bug-col-main,.bug-col-side,.pd-related-split,
  .pd-related-left,.pd-related-mid,.pd-related-right,.pd-head-row,.pd-head-text,
  .iter-mgmt-row,.iter-mgmt-list,.stat-row,.stat-card,.sheet,.sheet-scroll,
  .home-col>*,.widget>*{min-width:0}
  .last-modified{text-align:center;color:#aab2bd;font-size:12px;margin-top:14px}
  .hd-toggle{display:inline-flex;align-items:center;gap:4px;font-size:12.5px;color:var(--muted);cursor:pointer;user-select:none}
  .hd-toggle input{cursor:pointer}
  .hid-tag{display:inline-block;font-size:11px;line-height:1;padding:2px 5px;border-radius:4px;background:#fff0f0;color:#e03131;border:1px solid #ffc9c9;margin-left:6px;margin-right:0;vertical-align:middle}
  /* 隐藏产品：徽章与标题输入框用内层 div.cell-hid-row 做 flex 同行排列，td 保持 table-cell 以让 border-collapse 正常生效。
     标识与左框、与标题分别 6/0px（徽章自身 margin 控制，单元格无左右 padding）。
     注意：别把 <td> 本身改 display:flex，否则 border-collapse 失效、与邻接单元格会出现双层不重合边框。 */
  .cell-hid-row{display:flex;align-items:center;white-space:nowrap}
  .cell-hid-row input{flex:1 1 auto;min-width:0}
  .lm-check{display:inline-flex;width:14px;height:14px;border-radius:50%;background:transparent;border:1px solid currentColor;color:inherit;font-size:10px;line-height:1;align-items:center;justify-content:center;margin-right:6px;vertical-align:middle}
  /* 首页 widget 网格 */
  .grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:16px}
  .widget{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:16px 18px;box-shadow:var(--shadow)}
  .widget h2{margin:0 0 12px;font-size:15px;display:flex;align-items:center;gap:8px;justify-content:space-between;min-width:0}
  .widget h2 .sub{font-size:12px;font-weight:400;color:var(--muted);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .col-12{grid-column:span 12}.col-8{grid-column:span 8}.col-6{grid-column:span 6}.col-4{grid-column:span 4}
  @media(max-width:900px){.col-8,.col-6,.col-4{grid-column:span 12}}
  /* 首页瀑布流：左右两栏各自独立流动，不强制顶对齐 */
  .home-cols{display:flex;align-items:flex-start;gap:18px}
  .home-col{display:flex;flex-direction:column;gap:18px;min-width:0}
  .home-col.main{flex:2 1 0}
  .home-col.side{flex:1 1 0}
  .home-col>.widget{margin:0}
  @media(max-width:980px){.home-cols{flex-direction:column}.home-col.main,.home-col.side{flex:1 1 auto}}
  .feed{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:11px}
  .feed li{display:flex;gap:10px;align-items:baseline;font-size:13px;white-space:nowrap;overflow:hidden}
  .feed .ft{color:var(--muted);font-size:12px;white-space:nowrap;font-variant-numeric:tabular-nums;flex:0 0 auto}
  .feed .fx{color:var(--ink);line-height:1.5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1 1 auto;min-width:0}
  .link{color:var(--brand);cursor:pointer;font-size:12px;text-decoration:none}
  .link:hover{text-decoration:underline}
  /* kanban */
  .kanban{display:flex;gap:10px;overflow-x:auto;padding-bottom:4px}
  .kcol{flex:1;min-width:150px;background:#fafbfd;border:1px solid var(--line);border-radius:10px;padding:8px}
  .kcol h3{margin:0 0 8px;font-size:12.5px;color:var(--muted);display:flex;justify-content:space-between}
  .kcol h3 .n{background:var(--chip);border-radius:999px;padding:0 7px;font-size:11px}
  .kcard{background:#fff;border:1px solid var(--line);border-radius:8px;padding:8px;margin-bottom:8px;cursor:pointer;transition:.12s}
  .kcard:hover{border-color:#bcd0f5;box-shadow:0 2px 8px rgba(31,111,235,.1)}
  .kcard .t{font-size:13px;font-weight:500;margin-bottom:5px}
  .kcard .b{display:flex;justify-content:space-between;font-size:11.5px;color:var(--muted)}
  /* 表格通用 */
  table.tbl{width:100%;border-collapse:collapse;font-size:13px}
  table.tbl th,table.tbl td{border:1px solid var(--line);padding:6px 8px;text-align:left;vertical-align:top}
  table.tbl th{background:#f7f9fc;color:var(--muted);font-weight:600;position:sticky;top:0}
  table.tbl tr:hover td{background:#fcfdff}
  /* 可编辑清单 */
  .sheet{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden;box-shadow:var(--shadow)}
  .prod-switch{display:flex;flex-wrap:wrap;justify-content:flex-start;gap:8px;align-items:center;padding:10px 14px 10px 0;background:transparent}
  .prod-switch .ps-bar{width:4px;height:20px;border-radius:24px;background:var(--brand);flex-shrink:0}
  .prod-switch .ps-label{font-size:13px;line-height:1;color:var(--ink);user-select:none;white-space:nowrap;margin-left:2px}
  .prod-switch .ps{font-size:12px;line-height:1;padding:6px 13px;border:1px solid var(--line);border-radius:999px;cursor:pointer;background:#fff;color:var(--ink);user-select:none;transition:.12s}
  .prod-switch .ps:hover{background:#eef2ff}
  .prod-switch .ps.cur{background:var(--brand);color:#fff;border-color:var(--brand)}
  /* 版本里程碑：已发布在左侧标绿，未发布在右侧；节点大小对应大/中/小版本步进。 */
  .version-milestones{margin:0 0 12px;padding:10px 0 8px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:#fff}
  .version-milestone-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 14px 7px;font-size:12px;color:var(--muted)}
  .version-milestone-head strong{font-size:13px;color:var(--ink)}
  .version-milestone-head span b{color:#2b8a3e}
  .version-milestone-scroll{overflow-x:auto;overflow-y:hidden;overscroll-behavior-inline:contain;padding:2px 0 5px;scrollbar-width:thin;scrollbar-color:#c8d2e1 transparent}
  .version-milestone-scroll:focus{outline:2px solid var(--brand-soft);outline-offset:-2px}
  .version-milestone-track{display:flex;min-width:max(100%,calc(var(--milestone-count) * 164px));padding:0 0 2px}
  .version-milestone-item{position:relative;display:grid;grid-template-rows:46px 36px 36px;align-items:center;justify-items:center;flex:1 0 164px;min-width:164px;padding:0;border:0;background:transparent;color:var(--ink);font-family:inherit;cursor:pointer}
  .version-milestone-item::before,.version-milestone-item::after{content:"";position:absolute;z-index:0;top:63px;height:5px;background:#e6ecf5}
  .version-milestone-item::before{left:0;right:50%}
  .version-milestone-item::after{left:50%;right:0}
  .version-milestone-item.is-first::before,.version-milestone-item.is-last::after{display:none}
  .version-milestone-item.is-published::before,.version-milestone-item.is-published::after{background:#2f9e60}
  .version-milestone-item.is-published-end::after{background:#e6ecf5}
  .version-milestone-title{align-self:end;display:flex;max-width:150px;min-width:0;flex-direction:column;align-items:center;gap:1px;line-height:1.25}
  .version-milestone-title b{font-size:12px;font-weight:700}
  .version-milestone-title span{display:block;max-width:100%;overflow:hidden;color:var(--ink);font-size:12px;font-weight:600;text-overflow:ellipsis;white-space:nowrap}
  .version-milestone-node{position:relative;z-index:1;display:flex;width:36px;height:36px;align-items:center;justify-content:center}
  .version-milestone-dot{display:block;border-radius:50%;background:#fff;border:2px solid #aebbd0;box-shadow:0 0 0 4px #fff}
  .version-milestone-dot.is-major{width:24px;height:24px}
  .version-milestone-dot.is-minor{width:17px;height:17px}
  .version-milestone-dot.is-patch{width:11px;height:11px}
  .version-milestone-item.is-published .version-milestone-title b,.version-milestone-item.is-published .version-milestone-title span{color:#21834d}
  .version-milestone-item.is-published .version-milestone-dot{background:#2f9e60;border-color:#2f9e60;box-shadow:0 0 0 4px #e9f7ef}
  .version-milestone-item:hover .version-milestone-title span,.version-milestone-item:focus-visible .version-milestone-title span{text-decoration:underline}
  .version-milestone-item:focus-visible{outline:2px solid var(--brand);outline-offset:-2px}
  .version-milestone-meta{align-self:start;display:flex;flex-direction:column;align-items:center;gap:1px;color:var(--muted);font-size:11px;line-height:1.25}
  .version-milestone-meta time{font-variant-numeric:tabular-nums}
  .version-milestone-meta em{font-style:normal}
  .version-milestone-item.is-published .version-milestone-meta em{color:#21834d}
  .version-milestone-empty{padding:17px 14px 20px;text-align:center;color:var(--muted);font-size:13px}
  .sheet-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:12px 14px;border-bottom:1px solid var(--line);background:#fafbfd}
  .sheet-toolbar input[type=text],.sheet-toolbar select{font-size:13px;padding:7px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink)}
  .sheet-toolbar input.search{flex:1;min-width:180px}
  .btn{background:var(--brand);color:#fff;border:none;border-radius:8px;padding:7px 13px;font-size:13px;cursor:pointer;font-weight:500}
  .btn:hover{filter:brightness(1.05)}
  .btn.ghost{background:#fff;border:1px solid var(--line);color:var(--ink)}
  .btn.ghost:hover{background:var(--chip)}
  .btn.sm{padding:4px 9px;font-size:12px}
  .btn.danger{background:#fff;border:1px solid #f0c2c2;color:var(--danger)}
  .btn.danger:hover{background:#fff5f5}
  /* 统一显示每页 50 条：表格随内容增高，滚动交由页面本身处理。 */
  .sheet-scroll,.sheet-scroll.no-scroll{overflow:visible;max-height:none}
  table.sheet-tbl{width:100%;border-collapse:collapse;font-size:13px;table-layout:fixed}
  table.sheet-tbl th{background:#f3f6fb;color:var(--muted);font-weight:600;padding:8px 8px;text-align:left;position:sticky;top:0;white-space:nowrap;cursor:pointer;user-select:none}
  table.sheet-tbl th .arrow{font-size:10px;color:var(--brand)}
  table.sheet-tbl td{border:1px solid var(--line);padding:0}
  table.sheet-tbl td.cell input,table.sheet-tbl td.cell select,table.sheet-tbl td.cell textarea{
    width:100%;border:none;background:transparent;padding:7px 8px;font-size:13px;color:var(--ink);font-family:inherit;resize:vertical}
  table.sheet-tbl td.cell textarea{min-height:34px}
  table.sheet-tbl td.cell input:focus,table.sheet-tbl td.cell select:focus,table.sheet-tbl td.cell textarea:focus{outline:2px solid var(--brand-soft);background:#fff}
  /* 版本范围只在列表内展示两行摘要，完整内容仍在版本详情可查看。 */
  table.sheet-tbl td.version-scope-cell{position:relative}
  table.sheet-tbl td.cell .version-scope-summary{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden;min-height:36px;max-height:50px;box-sizing:border-box;padding:7px 8px 5px;line-height:1.45;overflow-wrap:anywhere;text-overflow:ellipsis;cursor:text;outline:none}
  table.sheet-tbl td.version-scope-cell.is-clamped::before{content:"";position:absolute;z-index:1;left:0;right:0;bottom:0;height:7px;background:#fff;pointer-events:none}
  table.sheet-tbl td.version-scope-cell.is-clamped::after{content:"…";position:absolute;z-index:2;right:7px;bottom:5px;min-width:18px;padding-left:10px;background:linear-gradient(90deg,rgba(255,255,255,0),#fff 45%);color:var(--ink);font-size:13px;line-height:19px;text-align:right;pointer-events:none}
  table.sheet-tbl td.cell .version-scope-summary:focus{box-shadow:inset 0 0 0 2px var(--brand-soft)}
  table.sheet-tbl tr:hover td{background:#fcfdff}
  /* 已发布版本以绿色删除线文字标识，保留列表默认底色与悬停反馈。 */
  table.sheet-tbl td.version-published-cell input{color:#2b8a3e;text-decoration:line-through}
  table.sheet-tbl td.cell-center{text-align:center;padding:6px 8px}
  /* 标题：2 行展示，超出省略号 */
  table.sheet-tbl td.cell .cell-title{display:inline-block;vertical-align:middle;overflow:visible;line-height:1.4;padding:12px 4px 12px 6px;max-width:100%;white-space:normal;word-break:break-word;cursor:text;outline:none}
  table.sheet-tbl td.cell .cell-title[data-empty="true"]::before{content:attr(data-placeholder);color:var(--muted);pointer-events:none}
  table.sheet-tbl td.cell .cell-title:focus{background:#fff;box-shadow:inset 0 0 0 2px var(--brand-soft)}
  /* Bug 列表标题前的 [图]/[视频] 标识：flex 布局，标识固定在标题首行左侧垂直居中；点击可打开媒体。
     注意：flex 容器必须放在内层 div.cell-media-row 上，不能放在 <td> 上——否则 border-collapse 失效、
     单元格与邻接单元格画出双层不重合边框（看起来「变粗」）。td 保持 table-cell 让 border-collapse 正常生效。 */
  table.sheet-tbl td.cell .cell-media-row{display:flex;align-items:flex-start;flex-wrap:nowrap;padding:0}
  table.sheet-tbl td.cell .cell-media-row .cell-title-row{flex:1 1 0;min-width:0}
  table.sheet-tbl td.cell .cell-media-row .cell-title{flex:1 1 0;min-width:0;vertical-align:baseline;padding-left:2px}
  table.sheet-tbl td.cell .cell-media-row .mt-tag{align-self:flex-start;flex:0 0 auto;margin:14px 4px 0 10px;font-size:11px;line-height:1.2;font-weight:600;letter-spacing:.2px;cursor:pointer}
  table.sheet-tbl td.cell .mt-img{color:#2b6fe3}
  table.sheet-tbl td.cell .mt-vid{color:#8b3ff0}
  table.sheet-tbl td.cell .mt-tag:hover{text-decoration:underline}
  table.sheet-tbl td.cell input.paused-red,table.sheet-tbl td.cell select.paused-red{color:#e03131;font-weight:600}
  /* 分页 */
  .pager{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between;padding:10px 14px;border-top:1px solid var(--line);background:#fafbfd}
  .pager .pg-info{font-size:12.5px;color:var(--muted)}
  .pager .pg-btns{display:flex;flex-wrap:wrap;gap:4px;align-items:center}
  .pager .pg{font-size:13px;min-width:30px;height:30px;padding:0 8px;border:1px solid var(--line);background:#fff;color:var(--ink);border-radius:7px;cursor:pointer}
  .pager .pg:hover:not(:disabled){border-color:var(--brand);color:var(--brand)}
  .pager .pg:disabled{opacity:.45;cursor:not-allowed}
  .pager .pg.cur{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}
  .pager .pg-nums{display:inline-flex;gap:4px;align-items:center}
  .pager .pg-nums .pg{font-family:inherit}
  .ops{white-space:nowrap}
  .rowview{color:var(--brand);cursor:pointer;padding:0 8px;font-size:12px;white-space:nowrap}
  .rowview:hover{text-decoration:underline}
  .rowdel{color:var(--danger);cursor:pointer;padding:0 8px;font-size:12px;white-space:nowrap}
  .rowdel:hover{text-decoration:underline}
  .rowpause{color:#e8920c;cursor:pointer;padding:0 8px;font-size:12px;white-space:nowrap}
  .rowpause:hover{text-decoration:underline}
  .idx{color:var(--muted);text-align:center;background:#fafbfd;width:34px;font-size:12px}
  .idx.idx-fixed{background:#e6f9ec;color:#1a7f4b;font-weight:600}
  .code{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px;color:var(--info)}
  /* 徽标 */
  .tag{font-size:11px;padding:1px 8px;border-radius:999px;font-weight:600;white-space:nowrap;display:inline-block}
  /* 列表中 priority / severity 下拉的等级配色（圆角胶囊徽章样式） */
  /* 列表等级色块保持紧凑：固定小宽度并居中，让列内两侧留出呼吸空间。 */
  table.sheet-tbl td.cell>select[data-color]{display:block;margin:0 auto;width:42px;min-width:0;max-width:calc(100% - 8px);font-size:12px;font-weight:500;border:none;border-radius:4px;padding:2px 3px;cursor:pointer;background-image:none;-webkit-appearance:none;appearance:none;text-align:center;text-align-last:center}
  table.sheet-tbl td.cell>select[data-color]:focus{outline:none;box-shadow:0 0 0 2px var(--brand-soft)}
  table.sheet-tbl td.cell>select[data-color] option{background:#fff;color:#333;font-weight:400}
  .dform select[data-color]{width:auto;font-size:13px;font-weight:600;border:none;border-radius:999px;padding:3px 24px;cursor:pointer;-webkit-appearance:none;appearance:none;text-align:center}
  .dform select[data-color]:focus{outline:none;box-shadow:0 0 0 2px var(--brand-soft)}
  .dform select[data-color] option{background:#fff;color:#333;font-weight:400}
  .dfield.richfull{grid-column:1/-1}
  .rte{border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#fff}
  .rte-bar{display:flex;gap:4px;flex-wrap:wrap;padding:6px 8px;border-bottom:1px solid var(--line);background:#fafbfc}
  .rbtn{font-size:12px;line-height:1;padding:5px 8px;border:1px solid var(--line);background:#fff;border-radius:6px;cursor:pointer;color:var(--ink)}
  .rbtn:hover{background:#eef2ff}
  .rte-bar .rte-size{font-size:12px;line-height:1;-webkit-appearance:none;appearance:none;width:auto;height:24px;padding:0 20px 0 6px;border:1px solid var(--line);background:#fff url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='6' viewBox='0 0 8 6'%3E%3Cpath d='M0 0l4 6 4-6z' fill='%2393a1b3'/%3E%3C/svg%3E") no-repeat right 5px center/8px 6px;border-radius:6px;color:var(--ink);font-family:inherit;cursor:pointer;flex:0 0 auto}
  .rte-bar .rte-size:hover{background-color:#eef2ff}
  .rte-bar .rte-size:focus{outline:none;border-color:var(--brand)}
  /* 源代码编辑按钮：推到工具栏最右侧 */
  .rte-bar .rte-code{margin-left:auto}
  .rte-code-modal{width:1000px;max-width:94vw}
  .rte-code-area{width:100%;height:60vh;min-height:320px;box-sizing:border-box;font-family:'SFMono-Regular',Consolas,'Liberation Mono',Menlo,monospace;font-size:12.5px;line-height:1.5;padding:12px 14px;border:1px solid var(--line);border-radius:8px;background:#fbfcfe;color:#1f2937;resize:vertical;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word;tab-size:2}
  .rte-code-area:focus{outline:none;border-color:var(--brand)}
  .rte-color{position:relative;display:inline-flex;align-items:center}
  .rte-color-btn{font-weight:700;text-decoration:underline;text-decoration-thickness:3px}
  .rte-body{min-height:130px;padding:10px 12px;font-size:13px;line-height:1.65;outline:none;word-break:break-word}
  .rte-body:focus{border-color:var(--brand)}
  .rte-body img{max-width:360px;border:1px solid var(--line);border-radius:6px;margin:4px auto;display:block;cursor:zoom-in}
  .rte-body video{max-width:360px;border-radius:6px;margin:4px auto;display:block;background:#000;cursor:pointer}
  /* 媒体大屏查看（lightbox）：点击图片/视频弹出，自适应高度，点击遮罩或 Esc 关闭 */
  .media-mask{position:fixed;inset:0;background:rgba(10,15,25,.82);z-index:9999;display:flex;align-items:center;justify-content:center;cursor:zoom-out}
  .media-mask video{max-width:92vw;max-height:86vh;width:auto;height:auto;border-radius:8px;background:#000;box-shadow:0 10px 50px rgba(0,0,0,.55)}
  .media-mask img{max-width:92vw;max-height:86vh;width:auto;height:auto;border-radius:6px;box-shadow:0 10px 50px rgba(0,0,0,.55)}
  /* Bug 分享预览：图片 + 下载/关闭按钮 */
  .share-preview{display:flex;flex-direction:column;align-items:center;gap:14px;max-width:min(92vw,860px)}
  .share-preview img{max-width:100%;max-height:76vh;width:auto;height:auto;border-radius:10px;box-shadow:0 12px 44px rgba(0,0,0,.4);cursor:default}
  .share-actions{display:flex;gap:10px;align-items:center}
  .share-actions .btn{font-size:13px;padding:7px 16px}
  /* Workbench Pager Icons: a two-glyph subset of Font Awesome Free 6.7.2.
     Copyright (c) 2024 Fonticons, Inc. (https://fontawesome.com)
     with Reserved Font Name: "Font Awesome".

     SIL OPEN FONT LICENSE
     Version 1.1 - 26 February 2007

     PREAMBLE
     The goals of the Open Font License (OFL) are to stimulate worldwide
     development of collaborative font projects, to support the font creation
     efforts of academic and linguistic communities, and to provide a free
     and open framework in which fonts may be shared and improved in
     partnership with others.

     The OFL allows the licensed fonts to be used, studied, modified and
     redistributed freely as long as they are not sold by themselves. The
     fonts, including any derivative works, can be bundled, embedded,
     redistributed and/or sold with any software provided that any reserved
     names are not used by derivative works. The fonts and derivatives,
     however, cannot be released under any other type of license. The
     requirement for fonts to remain under this license does not apply
     to any document created using the fonts or their derivatives.

     DEFINITIONS
     "Font Software" refers to the set of files released by the Copyright
     Holder(s) under this license and clearly marked as such. This may
     include source files, build scripts and documentation.

     "Reserved Font Name" refers to any names specified as such after the
     copyright statement(s).

     "Original Version" refers to the collection of Font Software components
     as distributed by the Copyright Holder(s).

     "Modified Version" refers to any derivative made by adding to, deleting,
     or substituting - in part or in whole - any of the components of the
     Original Version, by changing formats or by porting the Font Software
     to a new environment.

     "Author" refers to any designer, engineer, programmer, technical
     writer or other person who contributed to the Font Software.

     PERMISSION & CONDITIONS
     Permission is hereby granted, free of charge, to any person obtaining
     a copy of the Font Software, to use, study, copy, merge, embed, modify,
     redistribute, and sell modified and unmodified copies of the Font
     Software, subject to the following conditions:

     1) Neither the Font Software nor any of its individual components,
     in Original or Modified Versions, may be sold by itself.

     2) Original or Modified Versions of the Font Software may be bundled,
     redistributed and/or sold with any software, provided that each copy
     contains the above copyright notice and this license. These can be
     included either as stand-alone text files, human-readable headers or
     in the appropriate machine-readable metadata fields within text or
     binary files as long as those fields can be easily viewed by the user.

     3) No Modified Version of the Font Software may use the Reserved Font
     Name(s) unless explicit written permission is granted by the corresponding
     Copyright Holder. This restriction only applies to the primary font name
     as presented to the users.

     4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
     Software shall not be used to promote, endorse or advertise any
     Modified Version, except to acknowledge the contribution(s) of the
     Copyright Holder(s) and the Author(s) or with their explicit written
     permission.

     5) The Font Software, modified or unmodified, in part or in whole,
     must be distributed entirely under this license, and must not be
     distributed under any other license. The requirement for fonts to
     remain under this license does not apply to any document created
     using the Font Software.

     TERMINATION
     This license becomes null and void if any of the above conditions are
     not met.

     DISCLAIMER
     THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
     OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
     COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
     INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
     DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
     FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
     OTHER DEALINGS IN THE FONT SOFTWARE.
     Full upstream distribution license: docs/licenses/fontawesome-free-6.7.2.txt */
  @font-face{font-family:"Workbench Pager Icons";src:url("data:font/woff2;base64,d09GMgABAAAAAAIUAAoAAAAABGgAAAHLAwcFAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAANMqBKgE2AiQDCssIBCAFg0wHIBu1AyAuB3gyN9RBEKJ0EY1l5ykm4xC3Csw3U+Pha03f370iOmIHrBJV1kCqukKjErGJUfEd3/GkWZ99v7b9c6TwIupNROK5oU1LpmYst/0Xno0xCvqzwsbnA+WLwVKLzWP2ugw24DhQDSHb9Xwwoyzwf5/3Fvh0wN8HPKW7SwObBtoNfJPseQdggGEiaSHnEES7yGuUri2yB8oBRcr5WQtxzATs9Z/7x+VL0pEB6AcA1dPdAs+v3dc+LgfxYgYCosrCJCAhYxgnMCxhEhQKwde+TPjalUsCBCWmqBmDrdYDqKo41/T93GZwpKXRm0hHR0ezM/9k12hATpuv1QxSr0u1HKZS4s8tmRtlRFZCbzYiRzQ19WWvqcpeTkKQ21rUTvrw+GNK4E1r4PO3OyD0Pu0SCJ7thnuIChhJ0qaEQuWaZQcM2TgGAiEAQJsLnCg6sA5LhGVVJL1ukK1yUNj1Q4tb/+9Vq814qccXeIiYdIYzkiRLIUM+zxnpuFHFfC7ViS9ik6g8MgNZE+lUETIh83liWyrdhUMUmfpGSvKKRm3hkqOSEzORZA0NNbfvK2mpqSgpqyHJq87J1dFTbaQuryGvLHXAkDq8XHeOAAAAAA==") format("woff2");font-style:normal;font-weight:normal;font-display:block}
  /* 详情翻页位于视口左右中部；分享和返回顶部收至右下，避开详情底部操作栏。 */
  .detail-pager{position:fixed;inset:0;pointer-events:none;z-index:60}
  .detail-page-btn{position:absolute;top:50%;display:flex;flex-direction:column;align-items:center;gap:6px;width:64px;height:76px;padding:0;transform:translateY(-50%);border:0;background:transparent;color:var(--ink);font-family:inherit;font-size:11px;font-weight:500;line-height:14px;cursor:pointer;pointer-events:auto}
  .detail-page-circle{display:grid;place-items:center;width:52px;height:52px;flex:none;border-radius:50%;background:rgba(58,67,79,.64);color:#fff;box-shadow:0 2px 8px rgba(20,28,40,.18);transition:background .15s,transform .15s}
  .detail-page-icon{font:normal 23px/1 "Workbench Pager Icons";font-style:normal}
  .detail-page-prev .detail-page-icon::before{content:"\f053"}
  .detail-page-next .detail-page-icon::before{content:"\f054"}
  .detail-page-label{color:#4d5b6c;white-space:nowrap;text-shadow:0 1px 2px #fff}
  .detail-page-btn:hover .detail-page-circle{background:rgba(47,111,237,.92);transform:scale(1.05)}
  .detail-page-btn:focus-visible{outline:3px solid #9ec5ff;outline-offset:3px}
  .detail-page-btn:disabled{visibility:hidden;pointer-events:none}
  .detail-page-prev{left:max(4px,calc(50% - 770px))}
  .detail-page-next{right:max(4px,calc(50% - 770px))}
  /* 分享与返回顶部和右侧翻页按钮共用一条控制线，避开详情正文。 */
  .side-float{position:fixed;right:max(13px,calc(50% - 761px));bottom:82px;display:flex;flex-direction:column;gap:10px;z-index:55}
  .side-float .sf-btn{width:46px;height:46px;border-radius:10px;border:1px solid var(--line);background:#fff;box-shadow:0 4px 14px rgba(0,0,0,.12);cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;font-size:11px;line-height:1;color:var(--ink);transition:border-color .15s,color .15s,box-shadow .15s}
  .side-float .sf-btn:hover{border-color:var(--brand);color:var(--brand);box-shadow:0 6px 18px rgba(0,0,0,.18)}
  .side-float .sf-icon{font-size:17px;line-height:1}
  .side-float .sf-top{display:none}
  .side-float .sf-top.show{display:flex}
  .side-float.is-empty{display:none}
  @media (max-width:640px){ .detail-pager{position:static;inset:auto;display:flex;justify-content:space-between;height:66px;margin:18px 0 110px;padding:0 14px;pointer-events:auto}.detail-page-btn{position:static;top:auto;transform:none;width:46px;height:66px;gap:4px;font-size:10px}.detail-page-circle{width:40px;height:40px}.detail-page-icon{font-size:18px}.side-float{right:27px;bottom:calc(116px + env(safe-area-inset-bottom,0px));gap:8px} .side-float.side-float-inline{position:static;flex-direction:row;justify-content:flex-end;margin:18px 14px 0;gap:8px}.side-float .sf-btn{width:40px;height:40px;font-size:10px} }
  /* 视频封面：360px 宽、高度自适应，半透明遮罩 + 中央播放按钮；编辑态再挂右上角删除按钮 */
  .rte-video-wrap{position:relative;display:table;margin:4px auto;max-width:100%;cursor:pointer}
  .rte-video-caret{display:block;min-height:1.65em;cursor:text}
  .rte-video-wrap video{display:block;width:360px;height:auto;background:#000;border-radius:6px}
  .rte-video-wrap::before{content:"";position:absolute;inset:0;background:rgba(0,0,0,.42);border-radius:6px;transition:background .2s;pointer-events:none}
  .rte-video-wrap:hover::before{background:rgba(0,0,0,.26)}
  .vplay-btn{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:56px;height:56px;border-radius:50%;background:rgba(255,255,255,.94);display:flex;align-items:center;justify-content:center;font-size:20px;color:#1f2d3d;box-shadow:0 4px 16px rgba(0,0,0,.35);pointer-events:none;z-index:2;line-height:1}
  .rte-video-del{position:absolute;top:-9px;right:-9px;width:20px;height:20px;border:none;border-radius:50%;background:#e03131;color:#fff;font-size:13px;line-height:1;cursor:pointer;z-index:3;padding:0;box-shadow:0 1px 4px rgba(0,0,0,.3)}
  .rte-video-del:hover{background:#c92a2a}
  .rte-file{display:none}
  .t-high{background:#ffe3e3;color:#c92a2a}.t-mid{background:#fff3bf;color:#e67700}.t-low{background:#d3f9d8;color:#2b8a3e}.t-imp{background:#f3e8ff;color:#7c3aed}
  .t-sev-crit{background:#ffc9c9;color:#c92a2a}.t-sev-mid{background:#e7f5ff;color:#1971c2}.t-sev-low{background:#d3f9d8;color:#2b8a3e}
  .t-sev-imp{background:#ffe8cc;color:#e8590c}
  .t-new{background:#e7f5ff;color:#1971c2}.t-doing{background:#fff0e6;color:#e8590c}.t-delay{background:#fff7d6;color:#9a6700}
  .t-fix{background:#d3f9d8;color:#2b8a3e}.t-close{background:#eceef1;color:#868e96}
  .t-plan{background:#f3f0ff;color:#6741d9}.t-dev{background:#fff0e6;color:#e8590c}
  .t-test{background:#e7f5ff;color:#1971c2}.t-rel{background:#d3f9d8;color:#2b8a3e}
  .t-crit{background:#ffc9c9;color:#c92a2a}
  .badge{font-size:11px;padding:2px 8px;border-radius:6px;background:var(--chip);color:var(--muted)}
  /* 产品模块树 */
  .module-tree{user-select:none}
  .mnode{display:flex;align-items:center;gap:5px;padding:0 6px;border-radius:6px;height:22px;box-sizing:border-box;line-height:1}
  .mnode:hover{background:#f7f9fc}
  /* 一级模块强制贴左（无论有无二级模块） */
  .mnode.m-d0{padding-left:6px !important}
  .mnode.m-d1{padding-left:28px}
  .mnode.m-d2{padding-left:48px}
  .mnode .caret{display:inline-block;vertical-align:middle;width:14px;height:14px;min-width:14px;max-width:14px;padding:0;border:1px solid #cdd5df;border-radius:3px;background:#fff;font-size:13px;line-height:12px;color:#6b7785;cursor:pointer;box-sizing:border-box;text-align:center;font-weight:600;overflow:hidden}
  .mnode .caret.collapsed::before{content:"+"}
  .mnode .caret:not(.collapsed):not(.empty)::before{content:"−"}
  .mnode .caret:not(.empty):hover{border-color:var(--brand);background:#f3f6fb;color:var(--brand)}
  .mnode .caret.empty{display:inline-block !important;width:14px !important;height:14px !important;min-width:14px !important;max-width:14px !important;cursor:default;border-color:#e4e8ef;background:#fafbfd}
  .mnode .name{flex:1;font-size:12.5px;line-height:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:0;padding:0}
  .mnode .acts{display:flex;gap:2px;opacity:.35;transition:.15s}
  .mnode:hover .acts{opacity:1}
  .mnode .act{width:18px;height:18px;border:1px solid var(--line);background:#fff;border-radius:4px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;font-size:11px;color:var(--muted);line-height:1;padding:0;flex:0 0 18px}
  .mnode .act:hover{border-color:var(--brand);color:var(--brand);background:#f3f6fb}
  .mchildren{padding-left:0;border-left:0;margin-left:0}
  .mnode input[type=text]{height:18px;font-size:12.5px;line-height:18px;padding:0 6px;border:1px solid var(--line);border-radius:6px;flex:1;font-family:inherit;min-width:0;box-sizing:border-box}
  .mnode .act.save{color:var(--ok);border-color:#b5dfb5}
  .mnode .act.cancel{color:var(--muted);border-color:var(--line)}
  /* 迭代/版本时间线 */
  .timeline{position:relative;padding-left:18px}
  .timeline::before{content:"";position:absolute;left:5px;top:4px;bottom:4px;width:2px;background:var(--line)}
  .tl-item{position:relative;margin-bottom:14px}
  .tl-item::before{content:"";position:absolute;left:-16px;top:5px;width:10px;height:10px;border-radius:50%;background:var(--brand);border:2px solid #fff;box-shadow:0 0 0 1px var(--line)}
  .tl-item.done::before{background:var(--ok)}
  .tl-item .h{font-weight:600;font-size:14px}
  .tl-item .d{font-size:12.5px;color:var(--muted);margin-top:2px}
  .people{display:flex;flex-wrap:wrap;gap:10px}
  .pcard{background:#fafbfd;border:1px solid var(--line);border-radius:10px;padding:10px 12px;min-width:140px;flex:1}
  .pcard .name{font-weight:600}
  .pcard .stat{display:flex;gap:14px;margin-top:6px;font-size:12px;color:var(--muted)}
  .pcard .stat b{display:block;font-size:17px;color:var(--ink)}
  .empty{color:var(--muted);text-align:center;padding:26px;font-size:13px}
  table.sheet-tbl td.empty{padding:20px 26px}
  table.sheet-tbl .empty-add-link{padding:0;border:0;background:transparent;color:var(--brand);font:inherit;cursor:pointer;text-decoration:underline;text-underline-offset:2px}
  table.sheet-tbl .empty-add-link:hover{color:#1f5bc8}
  table.sheet-tbl .empty-add-link:focus-visible{outline:2px solid var(--brand);outline-offset:3px;border-radius:2px}
  .note{font-size:12px;color:var(--muted);background:#fff8f1;border:1px solid #f3d9c4;border-radius:10px;padding:10px 12px;margin:12px 0}
  .uin{width:100%;padding:6px 8px;border:1px solid var(--line);border-radius:6px;font-size:13px;box-sizing:border-box;background:#fff}
  .tag-ok{color:#2e9e5b;font-size:12px}.tag-no{color:#aaa;font-size:12px}
  .modal-mask{position:fixed;inset:0;background:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;z-index:9999}
  .modal{background:#fff;border-radius:12px;padding:20px;width:320px;max-width:90vw;box-shadow:0 12px 40px rgba(0,0,0,.25)}
  .modal-h{font-weight:600;margin-bottom:12px}
  .modal-pwd{width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:8px;font-size:14px;margin-bottom:14px;box-sizing:border-box}
  .modal-actions{text-align:right}
  /* 删除二次确认弹窗：红色强提示，确认删除放左侧、取消放右侧，加间距 */
  .del-confirm{width:360px}
  .del-confirm .del-msg{font-size:13.5px;color:var(--ink);line-height:1.6;margin-bottom:14px}
  .del-confirm .del-warn{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:700;color:var(--danger);background:#fff5f5;border:1px solid #f5c2c2;border-radius:8px;padding:9px 11px;margin-bottom:16px}
  .del-confirm .modal-actions{display:flex;justify-content:flex-end;align-items:center;gap:14px;text-align:right}
  .btn.danger-solid{background:var(--danger);color:#fff;border:1px solid var(--danger)}
  .btn.danger-solid:hover{filter:brightness(.94)}
  /* 树形选择器（模块）：触发器 + 弹窗树 */
  .tree-trigger{display:flex;align-items:center;gap:6px;width:100%;min-height:34px;padding:6px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink);font-size:14px;font-family:inherit;cursor:pointer;text-align:left;box-sizing:border-box}
  .tree-trigger:hover{border-color:var(--brand)}
  .tree-trigger .tt-val{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .tree-trigger .tt-val.tval-empty{color:var(--muted)}
  .tree-trigger .tt-caret{color:var(--muted);font-size:11px;flex:0 0 auto}
  .tree-trigger[disabled]{background:#f4f5f7;color:var(--muted);cursor:not-allowed}
  table.sheet-tbl td.cell .tree-trigger{border:none;border-radius:0;background:transparent;padding:7px 8px;font-size:13px;min-height:0}
  table.sheet-tbl td.cell .tree-trigger:hover{background:var(--brand-soft)}
  .tree-popover{position:fixed;z-index:9999;background:#fff;border:1px solid var(--line);border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.14);padding:4px;min-width:200px;max-width:320px;max-height:340px;overflow:auto}
  .tree-popover .tp-clear{display:flex;align-items:center;line-height:24px;padding:0 8px;border-radius:5px;cursor:pointer;font-size:12.5px;color:var(--muted);margin-bottom:2px;min-height:24px}
  .tree-popover .tp-clear:hover{background:var(--chip);color:var(--ink)}
  .tree-popover .tp-node{display:flex;align-items:center;gap:4px;line-height:24px;padding:0 8px;border-radius:5px;cursor:pointer;font-size:13px;color:var(--ink);user-select:none;min-height:24px}
  .tree-popover .tp-node:hover{background:var(--chip)}
  .tree-popover .tp-node.selected{background:var(--brand-soft);color:var(--brand);font-weight:600}
  .tree-popover .tp-caret{display:inline-block;width:12px;text-align:center;color:var(--muted);font-size:10px;cursor:pointer;flex:0 0 auto;line-height:24px}
  .tree-popover .tp-caret.tpc-empty{cursor:default}
  .tree-popover .tp-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:24px}
  .tree-popover .tp-empty{padding:18px;text-align:center;color:var(--muted);font-size:13px}
  /* 迭代管理面板（管理页本期迭代设置右侧） */
  .iter-mgmt-list{display:flex;flex-direction:column;gap:6px;margin-bottom:10px}
  .iter-mgmt-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#fff}
  .iter-mgmt-row .im-info{flex:1;min-width:0}
  .iter-mgmt-row .im-name{font-size:13.5px;font-weight:600;color:var(--ink);display:flex;align-items:center;gap:6px;flex-wrap:wrap}
  .iter-mgmt-row .im-date{font-size:12px;color:var(--muted);margin-top:2px}
  .iter-mgmt-row .im-ops{display:flex;gap:6px;flex:0 0 auto}
  /* 数据统计横向卡片 */
  .stat-row{display:flex;gap:12px;flex-wrap:wrap}
  .stat-card{flex:1;min-width:120px;border:1px solid var(--line);border-radius:8px;padding:12px 14px;background:#fff}
  .stat-card .sc-label{font-size:12px;color:var(--muted)}
  .stat-card .sc-num{font-size:22px;font-weight:700;color:var(--ink);margin-top:4px}
  /* 顶栏用户标识 + 独立登录页 */
  .user-chip{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--ink);background:#f3f6fb;border:1px solid var(--line);border-radius:999px;padding:5px 10px;white-space:nowrap}
  .user-chip b{font-weight:600}
  .user-chip i{font-style:normal;color:var(--muted)}
  .user-chip .btn.xs{padding:2px 8px;font-size:12px;margin-left:2px}
  body.login-page-active{display:block;min-height:100vh;overflow:hidden;background:#165dcc}
  body.login-page-active>.topbar,body.login-page-active>.wrap,body.login-page-active>.channel-loading,body.login-page-active>#syncbanner{display:none!important}
  .login-mask{box-sizing:border-box;overflow-y:auto;padding:40px 20px;background:radial-gradient(120% 95% at 10% 0%,rgba(126,184,255,.9) 0%,rgba(76,139,239,.56) 38%,rgba(47,111,237,0) 72%),radial-gradient(105% 92% at 94% 100%,rgba(12,61,164,.86) 0%,rgba(19,82,196,.48) 44%,rgba(19,82,196,0) 76%),linear-gradient(135deg,#1556c8 0%,#2f7cf2 48%,#144cb5 100%);backdrop-filter:none;isolation:isolate}
  .login-particles{position:fixed;inset:0;z-index:0;width:100%;height:100%;pointer-events:none;opacity:.9}
  .login-stage{position:relative;z-index:1;width:min(100%,400px);display:flex;flex-direction:column;align-items:stretch}
  .login-brand{display:flex;flex-direction:column;align-items:center;text-align:center;color:#fff;margin:0 0 20px;text-shadow:0 2px 16px rgba(9,45,128,.26)}
  .login-brand-title{margin:0;font-size:28px;line-height:1.35;font-weight:700;letter-spacing:0}
  .login-brand-logo{display:block;width:auto;height:38px;max-width:min(100%,214px);object-fit:contain}
  .login-box{box-sizing:border-box;background:#fff;border:1px solid rgba(255,255,255,.7);border-radius:8px;padding:28px 28px 26px;width:100%;box-shadow:0 24px 64px rgba(7,38,105,.3)}
  .login-copyright{margin:18px 0 0;color:rgba(255,255,255,.72);font-size:12px;line-height:1.65;text-align:center;text-shadow:0 1px 8px rgba(9,45,128,.24)}
  .login-logo{font-size:18px;font-weight:700;color:var(--ink);text-align:center;line-height:1.4}
  .login-sub{font-size:12.5px;color:var(--muted);text-align:center;margin:6px 0 20px}
  .login-field{display:flex;flex-direction:column;gap:5px;margin-bottom:14px}
  .login-field span{font-size:12.5px;color:var(--muted)}
  .login-input{font-size:14px;padding:10px 12px;border:1px solid var(--line);border-radius:9px;background:#fff;color:var(--ink);font-family:inherit;width:100%;box-sizing:border-box}
  .login-input:focus{border-color:var(--brand);outline:none}
  .login-hint{font-size:12px;color:var(--muted);text-align:center;margin:-8px 0 10px;letter-spacing:.3px}
  .login-remember{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--muted);margin:-6px 0 12px;cursor:pointer;user-select:none}
  .login-remember input{width:14px;height:14px;accent-color:var(--brand);cursor:pointer}
  .login-err{color:#e5484d;font-size:12.5px;min-height:16px;margin-bottom:8px}
  .login-btn{width:100%;padding:11px;font-size:15px;font-weight:600}
  .login-btn:disabled{cursor:wait;opacity:.75}
  .login-progress{font-size:12px;line-height:1.6;color:var(--muted);margin-bottom:10px;overflow-wrap:anywhere}
  .login-progress progress{display:block;width:100%;height:6px;margin-top:5px;accent-color:var(--brand)}
  @media (prefers-reduced-motion:reduce){.login-particles{opacity:.65}}
  .kv{font-size:13px;color:var(--muted)}
  .kv b{color:var(--ink)}
  .section{margin-bottom:22px}
  .section > h3{font-size:14px;margin:0 0 10px;display:flex;align-items:center;gap:8px}
  .pill{background:var(--brand-soft);color:var(--brand);border-radius:999px;padding:2px 10px;font-size:12px}
  .split{display:flex;gap:16px;flex-wrap:wrap}
  .split .half{flex:1;min-width:300px}
  .filebox{background:#fafbfd;border:1px dashed var(--line);border-radius:10px;padding:14px;font-size:13px;color:var(--muted)}
  .toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);background:#1f2d3d;color:#fff;padding:10px 18px;border-radius:10px;font-size:13px;opacity:0;transition:.25s;z-index:200;pointer-events:none}
  .toast.show{opacity:1}
  .syncbanner{position:fixed;top:14px;left:50%;transform:translateX(-50%);z-index:210;display:flex;align-items:center;gap:12px;max-width:92vw;background:#0c447c;color:#fff;padding:10px 16px;border-radius:10px;font-size:13px;box-shadow:0 6px 20px rgba(0,0,0,.18)}
  .syncbanner .sync-msg{line-height:1.4}
  .syncbanner .sync-actions{display:flex;gap:8px;flex:none}
  .syncbanner .btn.sm{font-size:12px;padding:5px 10px}
  .syncbanner .btn.ghost{background:transparent;border:1px solid rgba(255,255,255,.5);color:#fff}
  /* 详情页 */
  .dhead{display:flex;align-items:center;gap:10px;margin-bottom:4px}
  .dpill{background:var(--brand-soft);color:var(--brand);border-radius:999px;padding:2px 10px;font-size:12px}
  .dtitle{font-size:18px;font-weight:700}
  .dtitle-input{display:block;width:min(100%,680px);min-width:0;box-sizing:border-box;padding:8px 10px;border:1px solid var(--line);border-radius:6px;background:#fff;color:var(--ink);font:inherit;font-weight:700}
  .dtitle-input:focus{outline:2px solid var(--brand);outline-offset:1px}
  /* 产品头部：左 Logo 图 + 右两行文字（名称/负责人等），Logo 圆角、与两行等高 */
  .pd-head-row{display:flex;align-items:center;gap:14px;margin-top:15px}
  .pd-head-text{flex:1;min-width:0}
  .pd-logo{width:54px;height:54px;border-radius:12px;object-fit:cover;flex:0 0 auto;border:1px solid var(--line);background:#fafbfd}
  .pd-meta{display:flex;flex-wrap:wrap;gap:6px 22px;margin-top:0;font-size:13.5px;color:var(--ink)}
  .pd-meta b{color:var(--brand);font-weight:700}
  .pd-intro{margin-top:10px;display:flex;flex-direction:column;gap:4px}
  .pd-intro-label{font-size:12px;color:var(--muted)}
  .pd-intro-text{font-size:14px;line-height:1.6;color:var(--ink);white-space:pre-wrap}
  .pd-intro-edit{width:100%;min-height:64px;resize:vertical;border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-size:14px;font-family:inherit;color:var(--ink);background:#fff}
  .pd-intro.ro .pd-intro-text{background:#f7f8fa;border-radius:8px;padding:8px 10px}
  .dform{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px 18px}
  .dfield.linkrow .linkbox{display:flex;gap:6px;align-items:center}
  .dfield.linkrow .linkbox .urlin{flex:1;min-width:0}
  .dfield.linkrow .openlink{white-space:nowrap;color:var(--brand);cursor:pointer;border:1px solid var(--line);border-radius:6px;padding:4px 10px;font-size:12px;text-decoration:none;background:#fff}
  .dfield.linkrow .openlink:hover{background:var(--brand-soft)}
  .dfield{display:flex;flex-direction:column;gap:4px}
  .dfield label{font-size:12px;color:var(--muted)}
  .dfield input:disabled,.dfield select:disabled,.dfield textarea:disabled{background:#f4f5f7;color:var(--muted);cursor:not-allowed;opacity:.85}
  .rte.ro .rte-bar{display:none}
  .rte.ro .rte-body{background:#f4f5f7;color:var(--ink);border:1px solid var(--line);border-radius:8px;padding:8px 10px;min-height:60px}
  /* 需求详情左栏主字段：子小标题 + 内容块（输入宽度撑满内容区） */
  .req-section{margin-bottom:18px}
  .req-section:last-child{margin-bottom:0}
  .req-section-title{font-size:14px;font-weight:600;color:var(--ink);margin-bottom:10px}
  .req-section-body .dfield{width:100%}
  .req-section-body .dfield input,.req-section-body .dfield textarea,.req-section-body .dfield select{width:100%}
  .req-section-body .dfield textarea{min-height:90px}
  .req-plain{font-size:13.5px;line-height:1.7;color:var(--ink);white-space:pre-wrap;word-break:break-word}
  .req-plain .muted{color:var(--muted)}
  /* 需求拆解：父需求的子需求 / 功能点，仅在父需求详情中编辑。 */
  .req-breakdown-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}
  .req-breakdown-head h2{margin:0}
  .req-breakdown-scroll{overflow:auto}
  .req-breakdown-table{min-width:650px}
  .req-breakdown-table th,.req-breakdown-table td{vertical-align:top}
  .req-item-kind{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;min-width:45px;padding:2px 6px;border-radius:5px;font-size:11px;font-weight:600;line-height:1.35}
  .req-item-kind.sub{color:#225fc7;background:#e7f1ff}
  .req-item-kind.point{color:#18764a;background:#e5f7ed}
  .req-item-title{font-size:13px;font-weight:600;color:var(--ink);line-height:1.5;word-break:break-word}
  .req-item-link{padding:0;border:0;background:transparent;color:var(--brand);font:inherit;text-align:left;cursor:pointer}
  .req-item-link:hover{text-decoration:underline}
  .req-item-desc{margin-top:3px;font-size:12px;color:var(--muted);line-height:1.5;white-space:pre-wrap;word-break:break-word}
  .req-item-ops{white-space:nowrap;display:flex;align-items:center;gap:5px}
  .icon-btn{width:27px;height:27px;padding:0;border:1px solid var(--line);border-radius:6px;background:#fff;color:var(--muted);font:600 14px/1 inherit;cursor:pointer}
  .icon-btn:hover:not(:disabled){color:var(--brand);border-color:#b8cdf2;background:#f4f8ff}
  .icon-btn:disabled{opacity:.42;cursor:not-allowed}
  .req-item-modal{width:560px;max-width:92vw}
  .cell-title-row{display:flex;align-items:center;gap:6px;min-width:0}
  .cell-title-row .cell-title{min-width:0;flex:0 1 auto}
  .req-list-count{display:inline-flex;flex:0 0 auto;padding:1px 5px;border-radius:5px;background:#eef5ff;color:#2f6fed;font-size:11px;line-height:1.45;white-space:nowrap}
  /* 拆解项仍是同一张需求表的行：沿用父行的背景、边框与 hover，只保留层级内容。 */
  table.sheet-tbl .req-list-child td{height:42px;vertical-align:middle}
  .req-code-cell{display:flex;align-items:center;gap:5px;min-width:0}
  .req-code-cell input{min-width:0;flex:1}
  .req-list-toggle{width:18px;height:18px;flex:0 0 18px;padding:0;border:1px solid #cdd5df;border-radius:3px;background:#fff;color:#6b7785;font:600 14px/16px inherit;cursor:pointer;text-align:center}
  .req-list-toggle:hover{border-color:var(--brand);background:#f3f6fb;color:var(--brand)}
  .req-list-child-code,.req-list-child-inherited{padding:7px 8px!important;color:var(--ink);font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .req-list-child-priority,.req-list-child-status,.req-list-child-owner{padding:0!important;white-space:nowrap}
  /* 子需求不适用的字段用斜线占位，避免被误认为是待填写的空内容。 */
  table.sheet-tbl td.req-list-child-empty,
  table.sheet-tbl tr.req-list-child:hover td.req-list-child-empty{
    background-color:#fff;
    background-image:linear-gradient(to top right,transparent calc(50% - .5px),#c7d0dc 50%,transparent calc(50% + .5px));
    background-repeat:no-repeat;
  }
  .req-list-empty{color:#a0abba}
  .req-list-child-title{padding:0!important}
  .req-list-item{display:flex;align-items:center;gap:7px;min-width:0;min-height:42px;padding:0 8px;color:var(--ink);font-size:13px}
  .req-tree-branch{color:#9aadbf;font-family:monospace;font-size:14px}
  .req-list-item-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}
  button.req-list-item-title{padding:0;border:0;background:transparent;color:var(--brand);font:inherit;text-align:left;cursor:pointer}
  button.req-list-item-title:hover{text-decoration:underline}
  @media(max-width:700px){.req-item-ops{gap:3px}.req-list-child-inherited{max-width:110px}}
  .req-item-detail-grid{display:grid;grid-template-columns:minmax(0,3fr) minmax(240px,1fr);gap:16px;align-items:start}
  .req-item-detail-desc{font-size:14px;line-height:1.75;white-space:pre-wrap;word-break:break-word;color:var(--ink);min-height:96px}
  .req-parent-link{display:inline-flex;align-items:center;gap:7px;padding:0;border:0;background:transparent;color:var(--brand);font:inherit;text-align:left;cursor:pointer}
  .req-parent-link:hover{text-decoration:underline}
  /* 管理页频道设置 */
  .channel-manage-scroll{overflow-x:auto}
  .channel-manage-table{min-width:660px}
  .channel-manage-table th:first-child,.channel-manage-table td:first-child{width:44px;text-align:center}
  .channel-manage-table th:nth-child(3){width:150px}
  .channel-manage-table th:nth-child(4){width:110px}
  .channel-manage-table th:last-child{width:118px}
  .channel-order,.channel-key{color:var(--muted);font-variant-numeric:tabular-nums}
  .channel-name-input{width:100%;min-width:150px;border:1px solid transparent;border-radius:5px;padding:6px 7px;background:transparent;color:var(--ink);font:inherit}
  .channel-name-input:focus{outline:none;border-color:#b9d1f8;background:#fff}
  .channel-visible{display:inline-flex;align-items:center;gap:6px;color:var(--ink);font-size:13px;cursor:pointer}
  .channel-visible input{width:15px;height:15px;accent-color:var(--brand);margin:0}
  .channel-actions{display:flex;align-items:center;gap:5px;white-space:nowrap}
  /* 知识库：左侧目录，右侧列表 */
  #view-knowledge button,#view-knowledge input,#view-knowledge select,#view-knowledge textarea,.knowledge-editor button,.knowledge-editor input,.knowledge-editor select,.knowledge-editor textarea{font-family:inherit}
  .knowledge-layout{display:grid;grid-template-columns:220px minmax(0,1fr);min-height:calc(100vh - 126px);border:1px solid var(--line);border-radius:8px;background:#fff;overflow:hidden}
  .knowledge-tree{min-width:0;border-right:1px solid var(--line);background:#f8faff;padding:14px 10px}
  .knowledge-tree-head{display:flex;align-items:center;justify-content:space-between;padding:0 5px 10px}
  .knowledge-tree-head h2{margin:0;font-size:15px;color:var(--ink)}
  .knowledge-primary-actions{display:grid;gap:8px;padding:0 5px 13px}
  .knowledge-primary-action{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;min-height:40px;border:1px solid #cbd9eb;border-radius:6px;background:#fff;color:#365272;font-family:inherit;font-size:13px;font-weight:600;cursor:pointer}
  .knowledge-primary-action:hover{border-color:#8eb5f3;background:#eef5ff;color:#165fc9}
  .knowledge-primary-action.primary{border-color:var(--brand);background:var(--brand);color:#fff}
  .knowledge-primary-action.primary:hover{background:#1d67d5}
  .knowledge-primary-action.active{border-color:#2f7be8;background:#e4efff;color:#1d61c5}
  .knowledge-primary-action b{font-size:17px;line-height:1;font-weight:500}
  .knowledge-tree-list{display:grid;gap:3px}
  .knowledge-tree-item{display:grid;grid-template-columns:13px 16px minmax(0,1fr) auto;align-items:center;gap:5px;width:100%;border:0;border-radius:5px;padding:8px 7px 8px calc(7px + var(--knowledge-tree-depth,0) * 16px);background:transparent;color:#53657b;font-family:inherit;font-size:13px;line-height:1.35;text-align:left;cursor:pointer}
  .knowledge-tree-item:hover{background:#eef4ff;color:var(--brand)}
  .knowledge-tree-item.active{background:#e1edff;color:#1f61cf;font-weight:600}
  .knowledge-tree-item span:nth-child(3){min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .knowledge-tree-item b{font-size:11px;font-weight:500;color:#91a1b5}
  .knowledge-tree-caret{position:relative;display:block;width:13px;height:14px}
  .knowledge-tree-caret.branch{cursor:pointer}
  .knowledge-tree-caret.branch::after{content:"";position:absolute;left:3px;top:4px;width:5px;height:5px;border-right:1.5px solid #8b9ab0;border-bottom:1.5px solid #8b9ab0;transform:rotate(45deg);transition:transform .15s}
  .knowledge-tree-caret.branch.collapsed::after{left:2px;top:4px;transform:rotate(-45deg)}
  .knowledge-tree-icon{position:relative;display:block;width:15px;height:13px;color:#7890ad}
  .knowledge-tree-icon::before{content:"";position:absolute;left:0;right:0;bottom:0;height:9px;border:1.5px solid currentColor;border-radius:2px;background:rgba(255,255,255,.48);box-sizing:border-box}
  .knowledge-tree-icon::after{content:"";position:absolute;left:1px;top:0;width:6px;height:4px;border:1.5px solid currentColor;border-bottom:0;border-radius:2px 2px 0 0;box-sizing:border-box}
  .knowledge-tree-item.active .knowledge-tree-icon{color:#2e74dc}
  .knowledge-tree-icon.all::before{background:#dceaff;border-color:#538bea}
  .knowledge-tree-icon.all::after{border-color:#538bea}
  .knowledge-main{min-width:0;padding:20px 22px}
  .knowledge-toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px}
  .knowledge-toolbar h1{margin:0;font-size:18px;color:var(--ink)}
  .knowledge-manage-tip{margin-top:5px;color:#65809e;font-size:12px}
  .knowledge-tools{display:flex;align-items:center;gap:8px;min-width:0}
  .knowledge-tools input{width:260px;max-width:42vw;border:1px solid var(--line);border-radius:6px;padding:8px 10px;color:var(--ink);font-family:inherit;font-size:13px;background:#fff}
  .knowledge-tools input:focus{outline:2px solid var(--brand-soft);border-color:#91b9f5}
  .knowledge-list{overflow:hidden}
  .knowledge-list-head,.knowledge-list-row{display:grid;grid-template-columns:minmax(0,1fr) 90px 128px 132px;align-items:center;min-width:0}
  .knowledge-list-head{min-height:38px;border-bottom:1px solid #dce3ec;color:#7a8aa0;font-size:12px}
  .knowledge-list-head span{padding:0 10px}
  .knowledge-list-row{min-height:64px;border-bottom:1px solid #dce3ec;color:#506078}
  .knowledge-list-row:hover{background:#fbfdff}
  .knowledge-list-empty{padding:28px 12px;border-bottom:1px solid #dce3ec;text-align:center}
  .knowledge-title{display:inline-flex;align-items:center;gap:9px;min-width:0;max-width:100%;padding:10px;border:0;background:transparent;color:var(--ink);font-family:inherit;font-size:13px;text-align:left;cursor:pointer}
  .knowledge-title:hover{color:var(--brand);text-decoration:none}
  .knowledge-title-copy{display:flex;flex:1 1 auto;flex-direction:column;min-width:0;gap:1px}
  .knowledge-title-line{display:flex;align-items:center;gap:6px;min-width:0}
  .knowledge-title-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:0 1 auto;font-size:14px;font-weight:400}
  .knowledge-pin-badge{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;min-width:18px;height:18px;padding:0 3px;border:1px solid #df6262;border-radius:3px;color:#d93838;font-size:11px;line-height:16px;font-weight:500;flex:0 0 auto}
  .knowledge-title-folder{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#9aa6b6;font-size:11px;line-height:1.35;font-weight:400}
  .knowledge-doc-icon{display:flex;align-items:center;justify-content:center;width:20px;height:20px;flex:0 0 20px}
  .knowledge-doc-icon img{display:block;max-width:100%;max-height:100%;width:auto;height:auto}
  .knowledge-row-author,.knowledge-row-time{padding:0 10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}
  .knowledge-row-time{font-variant-numeric:tabular-nums;color:#667994}
  .knowledge-row-actions{display:flex;align-items:center;justify-content:center;gap:3px;min-height:28px;padding:5px;white-space:nowrap}
  .knowledge-row-actions .icon-btn{flex:0 0 27px}
  .knowledge-row-actions .icon-btn.active{color:#d93838;border-color:#e7a0a0;background:#fffafa}
  .knowledge-row-actions .icon-btn.active:hover{color:#fff;border-color:#d93838;background:#d93838}
  .knowledge-row-actions .icon-btn.danger{color:var(--danger);border-color:#f1c7c7;background:#fffafa}
  .knowledge-row-actions .icon-btn.danger:hover{color:#fff;border-color:var(--danger);background:var(--danger)}
  /* 文档预览解除工作台列表的最大宽度，iframe 视口始终等于当前屏幕可用宽度。 */
  .wrap.knowledge-preview-wrap{max-width:none;padding:0;overflow:visible}
  .knowledge-document-open .topbar{display:none}
  .knowledge-document-open .knowledge-frame-shell{min-height:100dvh}
  .knowledge-frame-shell{display:flex;flex-direction:column;width:100%;min-height:calc(100dvh - 56px);border:1px solid var(--line);border-radius:0;overflow:hidden;background:#fff}
  .knowledge-frame-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:52px;padding:8px 12px;border-bottom:1px solid var(--line);background:#fbfcfe}
  .knowledge-frame-bar>div:first-child{display:flex;gap:7px;align-items:center}
  .knowledge-frame-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink);font-size:14px;font-weight:600}
  .knowledge-frame{display:block;flex:1 1 auto;width:100%;min-height:0;border:0;background:#fff;overflow:auto}
  .knowledge-editor{width:min(590px,calc(100vw - 32px))}
  .knowledge-editor .modal-actions{display:flex;align-items:center;justify-content:flex-end;gap:12px;margin-top:20px}
  .knowledge-editor .modal-actions .btn{min-height:34px;padding:7px 14px;border-radius:7px;font-size:13px}
  .knowledge-title-input,.knowledge-folder-picker{display:flex;align-items:stretch;gap:8px;min-width:0}
  .knowledge-title-input select{flex:0 0 96px;width:96px;padding-left:8px;padding-right:24px}
  .knowledge-title-input input,.knowledge-folder-picker select{min-width:0;flex:1}
  .knowledge-folder-picker .btn{flex:0 0 auto;white-space:nowrap}
  .knowledge-folder-new{margin-top:10px;padding:11px;border:1px solid #dce5f0;border-radius:6px;background:#f8faff}
  .knowledge-folder-new>label{display:block;margin:0 0 7px;color:#53657b;font-size:12px}
  .knowledge-folder-new-controls{display:flex;align-items:center;gap:8px}
  .knowledge-folder-new input{min-width:0;flex:1}
  .knowledge-folder-new .btn{flex:0 0 auto}
  @media(max-width:760px){
    .knowledge-layout{grid-template-columns:1fr;min-height:0}
    .knowledge-tree{border-right:0;border-bottom:1px solid var(--line);padding:10px}
    .knowledge-tree-head{padding:0 4px 7px}
    .knowledge-tree-list{display:grid;gap:3px;max-height:250px;overflow-y:auto;padding-bottom:1px}
    .knowledge-tree-item{width:100%;min-width:0;padding:7px 8px 7px calc(8px + var(--knowledge-tree-depth,0) * 15px)}
    .knowledge-main{padding:14px}
    .knowledge-toolbar{align-items:stretch;flex-direction:column;gap:10px}
    .knowledge-tools{width:100%}
    .knowledge-tools input{width:100%;max-width:none}
    .knowledge-frame-shell{min-height:calc(100dvh - 56px)}
    .knowledge-frame-bar{align-items:flex-start;flex-wrap:wrap}
    .knowledge-frame-title{order:3;flex:1 0 100%}
    .knowledge-frame{min-height:0}
    .knowledge-folder-new-controls{align-items:stretch;flex-wrap:wrap}
    .knowledge-folder-new input{flex:1 0 100%}
  }
  @media(max-width:560px){
    .knowledge-list-head,.knowledge-list-row{grid-template-columns:minmax(0,1fr) 132px}
    .knowledge-list-head span:nth-child(2),.knowledge-list-head span:nth-child(3),.knowledge-row-author,.knowledge-row-time{display:none}
  }
  @media(max-width:960px){.req-item-detail-grid{grid-template-columns:1fr}}
  .detail-actions-widget{position:fixed;left:50%;right:auto;bottom:0;transform:translateX(-50%);z-index:50;display:flex;justify-content:center;padding:8px 18px;background:#fff;border-top:1px solid var(--line);box-shadow:0 -2px 10px rgba(0,0,0,.06);width:calc(100% - 48px);max-width:1392px;box-sizing:border-box}
  .detail-actions{display:flex;gap:12px;align-items:center;padding:0}
  /* 悬浮栏快速改状态：小字标签 + 下拉 */
  .dl-act-status{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);white-space:nowrap}
  .dl-act-status select{font-size:13px;padding:7px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink);cursor:pointer}
  .detail-actions .btn{padding:10px 26px;font-size:14px;border-radius:10px;min-width:96px;transition:.15s}
  .detail-actions .btn.primary{background:var(--brand);color:#fff;border-color:var(--brand)}
  .detail-actions .btn.ghost{background:#fff;border:1px solid var(--line);color:var(--ink)}
  .detail-actions .btn.ghost:hover{background:var(--chip)}
  .dfield input,.dfield select,.dfield textarea{font-size:14px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink);font-family:inherit;width:100%}
  .dfield textarea{min-height:60px;resize:vertical}
  .related{margin-bottom:16px}
  .related h3{font-size:13px;margin:0 0 6px}
  .rrow{display:flex;align-items:center;gap:8px;padding:6px 8px;border:1px solid var(--line);border-radius:8px;margin-bottom:6px;cursor:pointer;font-size:13px}
  .rrow:hover{background:#fcfdff;border-color:#bcd0f5}
  .same-prod-tabs{display:flex;gap:4px;margin:0 0 12px;padding:4px;overflow-x:auto;border:1px solid var(--line);border-radius:8px;background:#f4f6fa;scrollbar-width:thin}
  .same-prod-tab{flex:0 0 auto;min-height:30px;padding:5px 11px;border:0;border-radius:6px;background:transparent;color:var(--muted);font:inherit;font-size:12px;white-space:nowrap;cursor:pointer}
  .same-prod-tab:hover{background:#fff;color:var(--ink)}
  .same-prod-tab.active,.same-prod-tab.active:hover{background:var(--brand);color:#fff}
  .same-prod-tab:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
  .same-prod-tab-count{font-variant-numeric:tabular-nums;opacity:.8}
  .rrow.rrow-closed{text-decoration:line-through;color:var(--muted)}
  /* 版本详情：版本范围卡片（左栏顶部）*/
  .scope-text{font-size:13px;line-height:1.7;color:#2b3a4a;white-space:pre-wrap;word-break:break-word;padding:4px 2px}
  /* 关联管理入口按钮（widget 标题右侧）*/
  .rel-manage{margin-left:auto;font-size:12px;font-weight:500;color:#2f6fed;cursor:pointer;user-select:none;padding:2px 10px;border:1px solid #cfe0ff;border-radius:999px;background:#f3f8ff}
  .rel-manage:hover{background:#e6f0ff}
  .rel-empty{font-size:12px;color:var(--muted);padding:8px 2px}
  /* 关联管理弹窗内的多选列表 */
  .rel-modal{width:480px;max-width:92vw}
  .rel-pick-list{max-height:56vh;overflow:auto;margin:4px -4px 12px;padding:0 4px}
  .rel-pick{display:flex;align-items:center;gap:10px;padding:8px 6px;border-radius:8px;cursor:pointer;font-size:13px;border:1px solid transparent}
  .rel-pick:hover{background:#f5f8ff;border-color:#e2ebfb}
  .rel-pick input[type=checkbox]{width:16px;height:16px;flex:0 0 auto;accent-color:#2f6fed;cursor:pointer}
  .rel-pick-code{flex:0 0 auto;font-weight:600;color:#2f6fed}
  .rel-pick-title{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .rel-pick-badge{flex:0 0 auto;display:flex;gap:4px}
  .clickable{cursor:pointer}
  tr.clickable{cursor:pointer}
  tr.clickable:hover td{background:#fcfdff}
  .tl-item.clickable{cursor:pointer}
  .tl-item.clickable:hover::before{box-shadow:0 0 0 3px var(--brand-soft)}
/* 应用市场版本情况 */
.am-tbl th,.am-tbl td{padding:4px 10px}
.am-mk{font-weight:600}
/* 产品详情页关联区三栏布局：左1/4（产品模块+应用市场）、中（关联Bug）、右（关联需求+关联版本） */
  .pd-related-split{display:grid;grid-template-columns:1fr 1.5fr 1.5fr;gap:18px;align-items:start}
  .pd-related-left,.pd-related-mid,.pd-related-right{display:flex;flex-direction:column;gap:18px;min-width:0}
  .pd-related-widget{margin:0}
  .rel-widget-head{display:flex;align-items:center;gap:8px}
  .rel-widget-head .rel-widget-extra{margin-left:auto;font-weight:400;font-size:13px;color:var(--muted)}
  .rel-chk{display:inline-flex;align-items:center;gap:4px;cursor:pointer;user-select:none;white-space:nowrap}
  .rel-chk input{margin:0;cursor:pointer}
  @media(max-width:900px){.pd-related-split{grid-template-columns:1fr}}
.am-cell.am-edit{cursor:pointer}
.am-cell.am-edit:hover{background:var(--brand-soft)}
.am-cell.am-on{text-align:center;cursor:pointer}
.am-chk{display:inline-block;width:18px;height:18px;line-height:16px;text-align:center;border:1px solid #e3e8ef;border-radius:4px;color:#aaa;font-size:13px}
.am-chk.on{background:#2b8a3e;color:#fff;border-color:#2b8a3e}
.am-tip{margin-top:8px;padding:8px 10px;background:#fff8e6;border:1px solid #ffe1a8;border-radius:8px;color:#95610a;font-size:13px;line-height:1.6}
  /* Bug 备注记录 */
  .remark-list{display:flex;flex-direction:column;gap:10px;margin-bottom:14px}
  .remark{background:#fafbfd;border:1px solid var(--line);border-radius:10px;padding:10px 12px}
  .remark:nth-child(odd){background:#f7f9fc}
  .remark-meta{display:flex;align-items:center;gap:10px;margin-bottom:6px}
  .remark-author{font-weight:600;font-size:13px;color:var(--brand)}
  .remark-time{font-size:12px;color:var(--muted)}
  .remark-content{font-size:13.5px;line-height:1.6;white-space:pre-wrap;word-break:break-word}
  .remark-add{display:flex;flex-direction:column;gap:8px;border-top:1px dashed var(--line);padding-top:12px}
  .remark-add textarea{font-size:14px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink);font-family:inherit;min-height:64px;resize:vertical;width:100%}
  .remark-add-row{display:flex;align-items:center;gap:10px}
  .remark-add-row .ra-label{font-size:12px;color:var(--muted)}
  .remark-add-row select{font-size:14px;padding:7px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink)}
  /* Bug 详情两栏布局：左侧主区 3/4，右侧 Bug详情 1/4 */
  .bug-cols{display:flex;gap:16px;align-items:flex-start}
  .bug-col-main{flex:1 1 75%;min-width:0}
  .bug-col-side{flex:0 0 25%;min-width:0}
  @media(max-width:960px){.bug-cols{flex-direction:column}.bug-col-side{flex:1 1 auto;width:100%}}
  /* 右侧 Bug详情 查看态纯文本项：小字字段名 + 正常字体值，项间 #eaeaea 虚线分割 */
  .bside-item{padding:10px 2px}
  .bside-item + .bside-item{border-top:1px dashed #eaeaea}
  .bside-label{font-size:12px;color:var(--muted);margin-bottom:4px}
  .bside-val{font-size:14px;color:var(--ink);font-weight:500;word-break:break-word}
  .bside-link{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;color:var(--brand);text-decoration:none;border-radius:5px;cursor:pointer}
  .bside-link:hover{color:#1d56bf;text-decoration:none}
  .bside-link:focus-visible{outline:2px solid #9dc0ff;outline-offset:2px}
  .bside-link-arrow{flex:0 0 auto;font-size:16px;line-height:1;color:#6d96dc;transition:transform .14s ease}
  .bside-link:hover .bside-link-arrow{transform:translateX(2px)}
  /* 产品资料 */
  .asset-row{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:0;width:100%}
  #product-assets-widget{width:100%;box-sizing:border-box}
  .asset-form{display:block}
  .asset-grid{flex:0 0 calc(25% - 9px);box-sizing:border-box}
  @media(max-width:600px){.asset-grid{flex:0 0 100%}}
  .asset-card{position:relative;background:#fafbfd;border:1px solid var(--line);border-radius:12px;padding:14px;cursor:pointer;transition:box-shadow .15s,border-color .15s,color .15s;display:flex;gap:12px;align-items:center}
  .asset-card:hover{border-color:var(--brand);box-shadow:0 4px 12px rgba(47,111,237,.18)}
  .asset-card:hover .asset-title{color:var(--brand)}
  .asset-del{position:absolute;top:6px;right:6px;width:22px;height:22px;border:none;background:transparent;border-radius:6px;cursor:pointer;color:var(--muted);font-size:16px;line-height:1;display:flex;align-items:center;justify-content:center;padding:0;z-index:2}
  .asset-del:hover{background:#ffe3e3;color:#e03131}
  .asset-ops{position:absolute;top:6px;right:6px;display:flex;gap:4px;z-index:2}
  .asset-ops .asset-del{position:static}
  .asset-edit-btn{width:22px;height:22px;border:none;background:transparent;border-radius:6px;cursor:pointer;color:var(--muted);font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;padding:0}
  .asset-edit-btn:hover{background:#e7f0ff;color:#1c7ed6}
  .req-star{color:#e03131;font-weight:600}
  .asset-card.ro{cursor:default}
  .asset-card.ro[data-url]{cursor:pointer}
  .asset-card.ro:hover{box-shadow:0 2px 10px rgba(47,111,237,.12);border-color:var(--brand);color:inherit}
  .asset-card.editing{cursor:default;background:#fff}
  .asset-icon{width:38px;height:38px;border-radius:8px;background:#f0e9fe;display:flex;align-items:center;justify-content:center;flex:0 0 auto}
  .asset-icon.proto{background:#e0f2fe}
  .asset-add{position:relative}
  .asset-add-menu{position:absolute;right:0;top:calc(100% + 6px);z-index:30;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 6px 20px rgba(0,0,0,.10);padding:6px;min-width:176px;display:none}
  .asset-add.open .asset-add-menu{display:block}
  .asset-add-item{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:8px;cursor:pointer;font-size:13px;color:var(--ink)}
  .asset-add-item:hover{background:#f4f6fb}
  .asset-add-item .asset-icon{width:30px;height:30px}
  .asset-empty{padding:30px 12px;text-align:center;color:var(--muted);font-size:13px}
  .asset-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px;text-align:left}
  .asset-title{font-size:14px;font-weight:600;color:var(--ink);line-height:1.4;word-break:break-all;text-align:left}
  .asset-title .placeholder{color:var(--muted);font-weight:400}
  .asset-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;font-size:12px;color:var(--muted);text-align:left;justify-content:flex-start}
  .asset-date{text-align:left}
  .asset-update{color:#2b8a3e;font-weight:500}
  .asset-edit{padding-top:4px}
  .asset-edit .dfield{margin-bottom:10px}
  .asset-edit .dfield label{font-size:12px;margin-bottom:4px}
  .asset-edit .dfield input{font-size:13px;padding:7px 10px}
  .asset-actions{display:flex;gap:8px;flex-wrap:wrap}
  .asset-section{margin-top:4px}
  .asset-sec-title{font-size:13px;font-weight:700;color:var(--ink);margin-bottom:10px}
  .hv-list{display:flex;flex-direction:column;gap:8px}
  .hv-more-wrap{margin-top:10px;padding-top:10px;border-top:1px dashed #eaeaea;display:flex;justify-content:center}
  .hv-row{display:flex;align-items:center;gap:8px;background:#fafbfd;border:1px solid var(--line);border-radius:10px;padding:8px 10px}
  .hv-row.readonly{background:#fff}
  .hv-fields{display:flex;flex-wrap:wrap;align-items:center;gap:6px 16px;flex:1;min-width:0}
  .hv-tag{font-size:13px;color:var(--muted);min-width:0}
  .hv-tag i{font-style:normal;color:var(--ink);font-weight:600;margin-right:6px}
  .hv-row .btn{flex:0 0 auto}
  /* 历史版本（数据源=版本频道）：长版本范围独占一行；编辑态仅显示/隐藏勾选 */
  .hv-scope{white-space:pre-wrap;word-break:break-word;line-height:1.6}
  .hv-scope.wide{flex:1 1 100%;padding-top:2px;border-top:1px dashed #ececf1;margin-top:2px}
  .hv-row.edit{align-items:flex-start}
  .hv-row.edit .hv-fields{padding-top:1px}
  .hv-toggle{flex:0 0 auto;display:inline-flex;align-items:center;gap:5px;font-size:12.5px;color:var(--ink);font-weight:600;cursor:pointer;user-select:none;white-space:nowrap}
  .hv-toggle input{width:14px;height:14px;margin:0;accent-color:var(--brand);cursor:pointer;padding:0;border-radius:3px}
  .hv-row.hv-off{background:#f6f7f9;border-style:dashed}
  .hv-row.hv-off .hv-fields{opacity:.5}
  .hv-dl-state{flex:0 0 auto;font-size:12px;color:#9aa1ae;background:#f1f2f5;border-radius:20px;padding:2px 9px;white-space:nowrap}
  .hv-dl-state.on{color:#0f7b4f;background:#e8f6ef}
  .ver-dl-link{color:var(--brand);text-decoration:none;word-break:break-all}
  .ver-dl-link:hover{text-decoration:underline}
  .bside-muted{color:#9aa1ae}
  /* 数据全览图表 */
  .ov-widget .sub{font-weight:400;font-size:11.5px}
  .ov-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}
  .ov-card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:16px 18px;display:flex;flex-direction:column;gap:10px}
  .ov-card.c-blue{border-top:3px solid #2f6fed}
  .ov-card.c-green{border-top:3px solid #2b8a3e}
  .ov-card.c-red{border-top:3px solid #e03131}
  .ov-title{font-size:15px;font-weight:700;color:var(--ink)}
  .ov-line{display:flex;align-items:baseline;gap:8px}
  .ov-tot{margin-top:2px}
  .ov-big{font-size:34px;font-weight:800;line-height:1;letter-spacing:-1px}
  .ov-card.c-blue .ov-big{color:#2f6fed}
  .ov-card.c-green .ov-big{color:#2b8a3e}
  .ov-card.c-red .ov-big{color:#e03131}
  .ov-cap{font-size:12.5px;color:var(--muted)}
  .ov-sum{font-size:18px;font-weight:700;color:var(--ink)}
  .ov-bar{position:relative;height:10px;border-radius:6px;background:rgba(120,130,150,.16);overflow:hidden}
  .ov-card.c-blue .ov-bar{background:rgba(47,111,237,.16)}
  .ov-card.c-green .ov-bar{background:rgba(43,138,62,.16)}
  .ov-card.c-red .ov-bar{background:rgba(224,49,49,.16)}
  .ov-fill{display:block;height:100%;border-radius:6px;background:#c5ccd8;transition:width .4s ease}
  .ov-card.c-blue .ov-fill{background:#2f6fed}
  .ov-card.c-green .ov-fill{background:#2b8a3e}
  .ov-card.c-red .ov-fill{background:#e03131}
  @media(max-width:760px){.ov-grid{grid-template-columns:1fr}}

/* 详情页严重程度/优先级：浅灰底进度条，等级强度按占宽显示 */
.lvlbar{position:relative;display:inline-block;min-width:84px;height:20px;line-height:20px;padding:0 2px;background:#eceff1;border-radius:10px;overflow:hidden;text-align:center;vertical-align:middle;box-shadow:inset 0 1px 2px rgba(0,0,0,.06)}
.lvlbar .lvlbar-fill{position:absolute;left:0;top:0;bottom:0;border-radius:10px;transition:width .2s}
.lvlbar b{position:relative;z-index:1;font-size:12px;font-weight:600;padding:0 8px;text-shadow:0 0 4px rgba(255,255,255,.8)}
.dform.bug-main-fields{grid-template-columns:repeat(4,minmax(0,1fr))}
.bug-main-fields .lvlbar{height:40px;line-height:40px;border-radius:20px}
.bug-main-fields .lvlbar .lvlbar-fill{border-radius:20px}
.detail-level-badge{display:inline-flex;align-self:flex-start;align-items:center;justify-content:center;gap:7px;min-width:86px;max-width:100%;min-height:30px;padding:5px 12px;border:1px solid var(--level-bg);border-radius:6px;background:var(--level-bg);color:var(--level-fg);font-size:13px;font-weight:600;line-height:1.2;vertical-align:middle}
.detail-level-dot{width:7px;height:7px;flex:none;border-radius:50%;background:currentColor}
.bug-level-fields{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:12px;align-items:flex-start}
.bug-level-fields .dfield{flex:0 0 120px;max-width:calc(50% - 6px)}
.dform .detail-level-select select[data-color]{display:block;flex:0 0 42px;width:42px;min-width:0;margin:0;padding:0;border:0;border-radius:0;background:transparent;color:var(--level-fg);font:inherit;text-align:center;text-align-last:center;-webkit-appearance:none;appearance:none;cursor:pointer}
.dform .detail-level-select select[data-color]:focus{outline:none;box-shadow:none}
.detail-level-select:focus-within{outline:2px solid var(--brand);outline-offset:2px}

/* Channel overview stays outside the existing editable sheet. */
.channel-intro{margin-bottom:12px}
.channel-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:12px}
.channel-head h1{margin:0;font-size:20px;line-height:1.35}
.channel-head p{margin:3px 0 0;color:var(--muted);font-size:12px}
.channel-head .btn{flex:0 0 auto;border-radius:6px}
.channel-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border:1px solid var(--line);border-radius:8px;background:#fff;box-shadow:var(--shadow);overflow:hidden}
.channel-stat{min-width:0;padding:12px 15px;border-right:1px solid var(--line)}
.channel-stat:last-child{border-right:0}
.channel-stat span{display:block;color:var(--muted);font-size:11px}
.channel-stat b{display:block;margin-top:2px;font-size:21px;line-height:1.25;font-variant-numeric:tabular-nums}
.channel-stat b.good{color:#1f9d68}.channel-stat b.warn{color:#d97706}.channel-stat b.bad{color:#d64545}

/* Daily workspace, using the same quiet hierarchy as the approved prototype. */
.dash-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:14px}
.dash-title{display:flex;align-items:center;gap:12px;min-width:0}
.dash-title h1{margin:0;font-size:20px;line-height:1.3;white-space:nowrap}
.dash-product{width:min(360px,100%);min-width:220px;height:34px;border:1px solid var(--line);border-radius:6px;padding:0 10px;background:#fff;color:var(--ink);font:inherit}
.dash-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}
.dash-actions .btn{border-radius:6px}
.dash-segment{display:flex;gap:2px;padding:3px;border:1px solid var(--line);border-radius:7px;background:#fff}
.dash-segment button{border:0;border-radius:5px;padding:5px 11px;background:transparent;color:var(--muted);font:inherit;cursor:pointer;white-space:nowrap}
.dash-segment button.active{background:var(--brand-soft);color:var(--brand);font-weight:600}
.dash-focus,.dash-lower{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(300px,.8fr);gap:14px;margin-bottom:14px}
.dash-lower{grid-template-columns:minmax(0,1.45fr) minmax(300px,.75fr)}
.dash-panel{min-width:0;border:1px solid var(--line);border-radius:8px;background:#fff;box-shadow:var(--shadow);overflow:hidden}
.dash-panel-head{min-height:48px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 14px;border-bottom:1px solid var(--line)}
.dash-panel-head h2{margin:0;font-size:15px;line-height:1.3}
.dash-panel-head .sub{margin-left:7px;color:var(--muted);font-size:12px;font-weight:400}
.dash-panel-head .link{border:0;background:transparent;font:inherit;font-size:12px;color:var(--brand);cursor:pointer;white-space:nowrap}
.dash-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));min-height:116px}
.dash-metric{min-width:0;padding:16px 14px;border-right:1px solid var(--line)}
.dash-metric:last-child{border-right:0}
.dash-metric-label,.dash-metric-note{color:var(--muted);font-size:12px}
.dash-metric-label{display:flex;justify-content:space-between;gap:6px}
.dash-metric-label i{width:8px;height:8px;flex:0 0 auto;border-radius:50%;background:var(--brand)}
.dash-metric:nth-child(2) i{background:#d64545}.dash-metric:nth-child(3) i{background:#d97706}.dash-metric:nth-child(4) i{background:#1f9d68}
.dash-metric-value{margin:7px 0 2px;font-size:28px;font-weight:700;line-height:1.1;font-variant-numeric:tabular-nums}
.dash-iteration{padding:14px}
.dash-iteration-title{display:flex;justify-content:space-between;gap:8px;font-weight:600}
.dash-progress{height:8px;margin-top:12px;border-radius:9px;background:#e9edf3;overflow:hidden}
.dash-progress i{display:block;height:100%;background:#1f9d68}
.dash-progress-meta{display:flex;justify-content:space-between;gap:8px;margin-top:6px;color:var(--muted);font-size:12px}
.dash-health{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:14px}
.dash-health span,.dash-health button{padding:7px 4px;border:1px solid var(--line);border-radius:6px;background:#fafbfd;text-align:center;color:var(--muted);font:inherit;font-size:11px}
.dash-health button{cursor:pointer}
.dash-health button:hover{border-color:var(--brand);background:var(--brand-soft)}
.dash-health button:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
.dash-health b{display:block;color:var(--ink);font-size:17px}
.dash-health :nth-child(2) b{color:#d97706}.dash-health :nth-child(3) b{color:#d64545}
.dash-board{margin-bottom:14px}
.dash-board-tools{display:flex;align-items:center;gap:10px;flex-wrap:wrap;color:var(--muted);font-size:12px}
.dash-board-tools b{color:#1f9d68}
.dash-board-tools button{border:1px solid var(--line);border-radius:6px;padding:5px 9px;background:#fff;color:var(--ink);font:inherit;font-size:12px;cursor:pointer}
.dash-board-tools .link{border:0;color:var(--brand)}
.dash-kanban{display:grid;grid-template-columns:repeat(5,minmax(190px,1fr));gap:1px;overflow-x:auto;background:var(--line)}
.dash-kanban-col{min-width:190px;background:#f8fafc}
.dash-kanban-col h3{display:flex;justify-content:space-between;margin:0;padding:11px 12px;border-bottom:1px solid var(--line);color:#4c5c70;font-size:12px}
.dash-kanban-list{min-height:160px;padding:9px}
.dash-work-card{display:block;width:100%;margin:0 0 7px;padding:9px;border:1px solid var(--line);border-radius:6px;background:#fff;color:var(--ink);text-align:left;cursor:pointer}
.dash-work-card:hover{border-color:#aabbd5;background:#fcfdff}
.dash-work-card strong{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;min-height:38px;font-size:12.5px;font-weight:500;line-height:1.5}
.dash-work-card small{display:flex;justify-content:space-between;gap:6px;margin-top:6px;color:var(--muted)}
.dash-task-tabs{display:flex;gap:3px}
.dash-task-tabs button{border:0;border-radius:5px;padding:5px 8px;background:transparent;color:var(--muted);font:inherit;font-size:12px;cursor:pointer}
.dash-task-tabs button.active{background:var(--brand-soft);color:var(--brand);font-weight:600}
.dash-task-list{min-height:230px}
.dash-task-row{display:grid;grid-template-columns:68px minmax(0,1fr) 76px 85px;gap:10px;align-items:center;width:100%;min-height:51px;padding:8px 14px;border:0;border-bottom:1px solid var(--line);background:#fff;color:var(--ink);text-align:left;cursor:pointer}
.dash-task-row:hover{background:#f8fbff}.dash-task-row:last-child{border-bottom:0}
.dash-task-row strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500}
.dash-task-row small,.dash-task-row time{color:var(--muted);font-size:11px}
.dash-task-type{width:max-content;padding:2px 6px;border-radius:4px;background:var(--brand-soft);color:var(--brand);font-size:11px}
.dash-task-type.bug{background:#fff0f0;color:#d64545}.dash-task-type.testcases{background:#e9f7f1;color:#1f9d68}
.dash-task-row time{text-align:right}.dash-task-row time.overdue{color:#d64545;font-weight:600}
.dash-quality{padding:0 14px 10px}
.dash-quality-block{padding:12px 0;border-bottom:1px solid var(--line)}.dash-quality-block:last-child{border-bottom:0}
.dash-quality-line{display:flex;justify-content:space-between;gap:10px;margin-bottom:8px;font-size:13px}
.dash-quality-line button{border:0;background:transparent;color:var(--brand);font:inherit;font-size:12px;cursor:pointer}
.dash-bug-line{display:grid;grid-template-columns:42px minmax(0,1fr) 24px;gap:8px;align-items:center;margin:6px 0;color:var(--muted);font-size:11px}
.dash-bug-line i{height:6px;border-radius:8px;background:#edf0f4;overflow:hidden}.dash-bug-line em{display:block;height:100%;background:#d97706}.dash-bug-line:first-of-type em{background:#d64545}
.dash-bug-line:last-child em{background:#1971c2}
.dash-version-link{border:0;background:none;padding:0;color:var(--ink);font:inherit;font-size:12px;font-weight:600;text-align:left;cursor:pointer}.dash-version-link:hover{color:var(--brand)}
.dash-activity-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}
.dash-activity-item{min-width:0;padding:12px 14px;border-right:1px solid var(--line)}.dash-activity-item:last-child{border-right:0}
.dash-activity-item time{display:block;color:var(--muted);font-size:11px}.dash-activity-item p{margin:3px 0 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}
.dash-footer{display:flex;flex-wrap:wrap;justify-content:center;gap:4px 9px;margin:24px 0 0;padding:0 12px;color:#8a95a5;font-size:11px;font-weight:400;line-height:1.5;text-align:center}
.dash-empty{padding:18px;color:var(--muted);font-size:12px}
@media(max-width:1040px){.dash-focus,.dash-lower{grid-template-columns:1fr}.dash-activity-list{grid-template-columns:1fr}.dash-activity-item{border-right:0;border-bottom:1px solid var(--line)}}
@media(max-width:760px){.channel-summary{grid-template-columns:repeat(2,minmax(0,1fr))}.channel-stat:nth-child(2){border-right:0}.channel-stat:nth-child(-n+2){border-bottom:1px solid var(--line)}.dash-head{display:block}.dash-title{display:block}.dash-title h1{font-size:18px}.dash-product{display:block;width:100%;max-width:none;margin-top:8px}.dash-actions{justify-content:flex-start;margin-top:10px}.dash-segment{width:100%}.dash-segment button{flex:1}.dash-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.dash-metric:nth-child(2){border-right:0}.dash-metric:nth-child(-n+2){border-bottom:1px solid var(--line)}.dash-task-row{grid-template-columns:60px minmax(0,1fr) 72px}.dash-task-row .dash-task-status{display:none}.dash-panel-head{align-items:flex-start}.dash-panel-head .sub{display:block;margin-left:0}.dash-board-tools>span{display:none}.channel-head h1{font-size:18px}}
@media(max-width:420px){.dash-actions>.btn{flex:1}.dash-health{gap:4px}.dash-health span,.dash-health button{padding:6px 2px}.dash-panel-head{padding:10px}.dash-activity{display:none}}

/* ==================== 响应式布局（整体媒体查询） ==================== *//* 大屏微调 */
@media(max-width:1200px){
  .wrap{padding-left:16px;padding-right:16px}
  .topbar-in{padding-left:14px;padding-right:14px;gap:14px}
}
/* 中屏：标题/按钮/元信息适度收缩 */
@media(max-width:1024px){
  .dtitle{font-size:17px}
  .detail-actions .btn{padding:9px 18px;min-width:80px;font-size:13.5px}
  .pd-meta{font-size:13px}
}
/* 平板横屏/小笔记本：可换行元素开启换行、两栏过渡 */
@media(max-width:860px){
  .topbar-in{gap:10px}
  nav.tabs{gap:2px}
  nav.tabs button,nav.tabs .tab-link{padding:7px 11px;font-size:13.5px}
  .split .half{min-width:0}
  .pd-head-row{flex-wrap:wrap}
  .hv-row{flex-wrap:wrap}
  .hv-scope{flex:1 1 100%}
  .iter-mgmt-row{flex-wrap:wrap}
  .remark-add-row{flex-wrap:wrap}
  .detail-actions-widget{width:calc(100% - 24px);padding:8px 12px}
}
/* 平板竖屏：宽表格横向滑动、动态信息自动换行 */
@media(max-width:768px){
  table.sheet-tbl{min-width:640px}
  .kanban .kcol{min-width:135px}
  .feed li{white-space:normal}
  .feed .fx{white-space:normal;overflow:visible;text-overflow:clip}
  .dform{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}
  .dform.bug-main-fields{grid-template-columns:repeat(2,minmax(0,1fr))}
  .bside-item{padding:8px 2px}
}
/* 手机竖屏：紧凑化 */
@media(max-width:640px){
  .wrap{padding:12px 10px 70px}
  .topbar-in{height:60px;padding:0 10px}
  .top-brand-logo{height:27px;max-width:156px}
  nav.tabs button,nav.tabs .tab-link{padding:6px 9px;font-size:13px}
  .dbstat{display:none}
  .user-chip{padding:4px 8px;font-size:12px}
  .user-chip i{display:none}
  .user-chip .btn.xs{font-size:11px;padding:1px 6px}
  .widget{padding:13px 13px}
  .widget h2{font-size:14px}
  .dtitle{font-size:16px}
  table.tbl th,table.tbl td{padding:5px 6px;font-size:12px}
  table.sheet-tbl th{padding:7px 6px;font-size:12.5px}
  table.sheet-tbl td.cell input,table.sheet-tbl td.cell select,table.sheet-tbl td.cell textarea{padding:6px 6px;font-size:12.5px}
  .sheet-toolbar input.search{min-width:110px}
  .version-milestone-head{padding-left:10px;padding-right:10px}
  .version-milestone-track{min-width:calc(var(--milestone-count) * 146px)}
  .version-milestone-item{flex-basis:146px;min-width:146px}
  .pager{flex-direction:column;align-items:stretch;gap:8px}
  .pager .pg-info{order:2;text-align:center}
  .pager .pg-btns{order:1;justify-content:center}
  .modal{width:calc(100vw - 40px)}
  .del-confirm{width:calc(100vw - 40px);max-width:360px}
  .tree-popover{max-width:calc(100vw - 24px);min-width:0}
  .login-mask{padding:28px 20px}
  .login-stage{width:min(100%,380px)}
  .login-brand{margin-bottom:16px}
  .login-brand-title{font-size:23px}
  .login-brand-logo{height:31px;max-width:min(100%,174px)}
  .login-box{width:100%;padding:22px 20px}
  .login-copyright{margin-top:16px;font-size:11.5px}
  .stat-card{min-width:calc(50% - 8px)}
  .stat-row{gap:10px}
  .detail-actions{flex-wrap:wrap;justify-content:center;width:100%}
  .detail-actions .btn{min-width:0;padding:9px 12px;flex:1 1 auto}
  .dl-act-status{width:100%;justify-content:center;flex-wrap:wrap}
  .detail-actions-widget{width:calc(100% - 16px);padding:7px 10px}
  .feed .ft{font-size:11px}
  .pd-logo{width:46px;height:46px}
  .hv-tag{font-size:12px}
  .hv-fields{gap:4px 10px}
  .ov-big{font-size:28px}
  .ov-grid{gap:12px}
  .asset-card{padding:11px}
  .bside-val{font-size:13px}
  .req-section-title{font-size:13.5px}
  .am-tbl th,.am-tbl td{padding:3px 6px;font-size:12px}
}
/* 超窄屏：顶栏换行（logo 与导航分两行）、详情表单单列 */
@media(max-width:400px){
  .topbar-in{flex-wrap:wrap;height:auto;padding:6px 10px;row-gap:4px}
  nav.tabs{flex:1 1 100%;order:3;padding-bottom:2px}
  .logo{order:1}
  .user-chip{order:2}
  .dform{grid-template-columns:1fr}
  .timeline{padding-left:14px}
  .mnode.m-d1{padding-left:18px}
  .mnode.m-d2{padding-left:34px}
}
/* 需求详情验收标准查看态：无背景框，每行一个圆点（参考管理页「本期迭代设置」时间线圆点样式） */
.acpt-line{position:relative;padding:4px 0 4px 20px;font-size:13.5px;line-height:1.7;color:var(--ink);word-break:break-word}
.acpt-line::before{content:"";position:absolute;left:3px;top:11px;width:9px;height:9px;border-radius:50%;background:var(--brand);border:2px solid #fff;box-shadow:0 0 0 1px var(--line)}
.acpt-empty{color:var(--muted);font-size:13px;padding:4px 0}
/* 验收标准查看态媒体行：图片/视频居中显示、最大宽 360px，与富文本媒体一致，点击可大屏查看/播放 */
.acpt-media{margin:8px 0;text-align:center}
.acpt-media img{max-width:360px;max-height:480px;border:1px solid var(--line);border-radius:6px;cursor:zoom-in;display:inline-block}
.acpt-media video{max-width:360px;border-radius:6px;background:#000;display:inline-block}
.acpt-media .rte-video-wrap{margin:0 auto}
/* ===== 测试用例详情左侧：按步骤执行表格 ===== */
.tc-steps-block{display:flex;flex-direction:column;gap:8px}
.tc-steps-block>label{display:block;font-size:13px;color:var(--muted);margin-bottom:2px;font-weight:500}
.tc-steps-block .tc-step-count{color:var(--muted);font-weight:400;font-size:12.5px}
.tc-steps-tbl{width:100%;border-collapse:separate;border-spacing:0;background:#fff;border:1px solid var(--line);border-radius:10px;overflow:hidden;font-size:13px}
.tc-steps-tbl thead th{background:#f4f6fa;color:var(--muted);font-weight:500;font-size:12.5px;text-align:left;padding:9px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
.tc-steps-tbl thead th.th-no{width:46px;text-align:center}
.tc-steps-tbl thead th.th-op{width:62px;text-align:center}
.tc-steps-tbl tbody td{padding:7px 10px;border-bottom:1px solid var(--line);vertical-align:middle}
.tc-steps-tbl tbody tr:last-child td{border-bottom:0}
.tc-steps-tbl .tc-step-no{display:inline-flex;align-items:center;justify-content:center;min-width:22px;height:22px;padding:0 6px;border-radius:11px;background:var(--chip);color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums;font-weight:500}
.tc-steps-tbl textarea{width:100%;border:1px solid var(--line);border-radius:6px;padding:5px 7px;font-family:inherit;font-size:13px;line-height:1.55;background:#fff;color:var(--ink);resize:vertical;min-height:34px}
.tc-steps-tbl textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 2px rgba(47,111,237,.12)}
.tc-steps-tbl .tc-step-op{text-align:center;white-space:nowrap}
.tc-steps-tbl .tc-step-op button{background:transparent;border:1px solid transparent;color:var(--muted);font-size:13px;width:24px;height:24px;border-radius:6px;cursor:pointer;line-height:1;padding:0}
.tc-steps-tbl .tc-step-op button:hover{background:var(--chip);color:var(--ink)}
.tc-steps-tbl .tc-step-op .tc-step-del:hover{background:#fff0f0;color:var(--danger);border-color:#ffd1d1}
.tc-add-step{display:inline-flex;align-items:center;justify-content:center;width:100%;padding:10px;border:1px dashed #cfd6e2;border-radius:10px;background:transparent;color:var(--brand);font-size:13px;cursor:pointer;font-family:inherit;font-weight:500}
.tc-add-step:hover{background:#f7fbff;border-color:var(--brand)}
.tc-add-step .plus{margin-right:6px;font-size:14px;font-weight:600;line-height:1}
.tc-steps-tbl thead th.th-act{width:120px}
.tc-steps-tbl thead th.th-step-result{width:130px}
.tc-act-cell textarea{min-height:30px}
.tc-outcome-cell{text-align:center;white-space:nowrap}
.tc-outcome-sel{border:1px solid var(--line);border-radius:6px;padding:4px 8px;font-size:12.5px;background:#fff;color:var(--muted);cursor:pointer;font-family:inherit;min-width:88px}
.tc-outcome-sel:focus{outline:none;border-color:var(--brand)}
.tc-outcome-sel.o-pass{background:#e6f7eb;color:#1f7a35;border-color:#a5dab1}
.tc-outcome-sel.o-fail{background:#fde8e8;color:#a01818;border-color:#ffb6b6}
.tc-outcome-sel.o-block{background:#fff1e0;color:#a04a0a;border-color:#ffd0a3}
.tc-outcome-sel.o-skip{background:#eef2f7;color:#6b7785;border-color:#d6dde6}
.tc-step-empty{padding:14px;text-align:center;color:var(--muted);font-size:13px;background:#fafbfd;border:1px dashed var(--line);border-radius:10px}
/* 展示态：实际结果 textarea 与步骤执行结果 select 均可编辑（与编辑态一致），切换/输入即时写回 + 上色 */
/* 展示态「实际结果」块：失败/阻塞时显示在预期结果下方，标红 */
.tc-actual-below{margin-top:6px;color:var(--danger);font-size:12.5px;line-height:1.6;word-break:break-word}
.tc-actual-label{font-weight:600}
.tc-actual-empty{opacity:.85}
/* 左栏独立区域分隔感：卡片间已有 16px 间距，标题与内容再加一点呼吸空间 */
.tc-steps-block{margin:0}

/* 聚焦行在首列左侧显示 2px 内侧标记，不改变列宽或覆盖状态底色。 */
table.sheet-tbl > tbody > tr:focus-within > td:first-child{box-shadow:inset 2px 0 0 var(--brand)}

/* 编辑框仅聚焦时使用菜单主色；内描边不改变表格尺寸。 */
:is(input:not([type]),input[type=text],input[type=search],input[type=password],input[type=email],input[type=url],input[type=tel],input[type=number],input[type=date],input[type=datetime-local],input[type=time],textarea):not(:disabled):not([readonly]):focus,
[contenteditable="true"]:not([aria-disabled="true"]):focus,
table.sheet-tbl td.cell :is(input,textarea,[contenteditable="true"]):not(:disabled):not([readonly]):not([type=checkbox]):not([type=radio]):not([aria-disabled="true"]):focus{
  border-color:var(--brand);outline:2px solid var(--brand);outline-offset:-2px;box-shadow:none;
}

/* 顶栏产品上下文、全局搜索与账号菜单 */
.logo[role="button"]{padding:0;border:0;background:none;cursor:pointer}
.logo[role="button"]:focus-visible{outline:2px solid var(--brand);outline-offset:4px;border-radius:4px}
.nav-product{position:relative;flex:0 1 260px;min-width:180px;padding-left:12px}
.nav-product[hidden]{display:none}
.nav-product::before{content:"";position:absolute;left:0;top:50%;height:20px;border-left:1px solid #cad4e2;transform:translateY(-50%)}
.nav-product-context{display:flex;align-items:center;gap:3px;min-width:0}
.nav-product-label{flex:0 0 auto;color:var(--muted);font-size:12px}
.nav-product-trigger{display:flex;align-items:center;gap:15px;min-width:0;height:40px;padding:0 10px 0 5px;border:0;border-radius:4px;background:transparent;color:var(--ink);font-size:12px;text-align:left}
.nav-product-trigger:hover,.nav-product-trigger[aria-expanded="true"]{background:#eaf0f8}
.nav-product-trigger strong{min-width:0;max-width:13em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}
.nav-product-chevron,.account-chevron{flex:0 0 7px;width:7px;height:7px;border-right:1.5px solid var(--brand);border-bottom:1.5px solid var(--brand);transform:translateY(-2px) rotate(45deg)}
.nav-product-trigger[aria-expanded="true"] .nav-product-chevron,.account-trigger[aria-expanded="true"] .account-chevron{transform:translateY(2px) rotate(225deg)}
.nav-product-options{position:absolute;z-index:60;top:calc(100% + 5px);right:0;width:min(360px,calc(100vw - 24px));max-height:min(400px,60vh);overflow-y:auto;padding:5px;border:1px solid var(--line);border-radius:7px;background:#fff;box-shadow:0 10px 24px #1c355029}
.nav-product-options[hidden],.global-search-panel[hidden],.account-dropdown[hidden]{display:none}
.nav-product-option{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;min-height:38px;padding:7px 10px;border:0;border-radius:5px;background:#fff;color:var(--ink);text-align:left;font-size:12px}
.nav-product-option:hover,.nav-product-option.active{background:var(--brand-soft);color:var(--brand)}
.topbar-tools{position:relative;display:flex;align-items:center;gap:8px;flex:0 0 auto}
.global-search-trigger{display:grid;place-items:center;width:36px;height:36px;padding:0;border:0;border-radius:5px;background:transparent;color:var(--muted)}
.global-search-trigger:hover,.global-search-trigger[aria-expanded="true"]{background:#eaf0f8;color:var(--brand)}
.global-search-panel{position:absolute;z-index:65;top:calc(100% + 10px);right:0;width:min(410px,calc(100vw - 54px));padding:12px;border:1px solid var(--line);border-radius:8px;background:#fff;box-shadow:0 16px 36px #1c35502e}
.global-search-field{display:flex;align-items:center;gap:8px;height:38px;padding:0 10px;border:1px solid #cad4e2;border-radius:5px;color:var(--muted)}
.global-search-field:focus-within{border-color:#9aaac0}
.global-search-field input{min-width:0;width:100%;height:100%;padding:0;border:0;outline:0;background:transparent;color:var(--ink);font-size:13px}
#globalSearchInput:focus{border:0;outline:0;box-shadow:none}
.global-search-tabs{display:flex;gap:4px;margin-top:12px;padding:3px;border-radius:5px;background:#f2f5f9}
.global-search-tabs button{flex:1;min-height:30px;border:0;border-radius:4px;background:transparent;color:var(--muted);font-size:12px}
.global-search-tabs button[aria-selected="true"]{background:#fff;color:var(--brand);font-weight:600;box-shadow:0 1px 4px #2339541a}
.global-search-results{max-height:min(350px,50vh);margin-top:7px;overflow-y:auto}
.global-search-result{display:block;width:100%;padding:9px 10px;border:0;border-radius:5px;background:transparent;text-align:left;color:var(--ink)}
.global-search-result:hover,.global-search-result:focus-visible{background:var(--brand-soft)}
.global-search-result strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}
.global-search-result small{display:block;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:11px}
.global-search-empty{padding:22px 8px;text-align:center;color:var(--muted);font-size:12px}
.user-chip{position:relative;display:block;padding:0;border:0;border-radius:0;background:transparent}
.account-trigger{display:flex;align-items:center;gap:7px;min-height:36px;padding:5px 7px;border:0;border-radius:5px;background:transparent;color:var(--ink);white-space:nowrap;font-family:inherit}
.account-trigger:hover,.account-trigger[aria-expanded="true"]{background:#eaf0f8}
.account-user-icon{flex:0 0 16px;color:var(--muted)}
.account-name{font-size:13px;font-weight:600}
.account-chevron{margin:0 2px 3px 3px;border-color:var(--muted)}
.account-dropdown{position:absolute;z-index:65;top:100%;right:0;width:160px;padding:5px;border:1px solid var(--line);border-radius:6px;background:#fff;box-shadow:0 10px 24px #1c355029}
.account-dropdown button{display:block;width:100%;min-height:36px;padding:7px 10px;border:0;border-radius:4px;background:transparent;color:var(--ink);text-align:left;font-size:12px}
.account-dropdown button:hover,.account-dropdown button:focus-visible{background:var(--brand-soft);color:var(--brand)}
.account-dropdown button+button{margin-top:2px;border-top:1px solid var(--line);border-radius:0 0 4px 4px}
.change-password-modal{width:min(420px,calc(100vw - 28px));max-height:calc(100dvh - 32px);overflow-y:auto}
.change-password-fields{display:grid;gap:6px;padding:14px 0}
.change-password-fields label{margin-top:5px;font-size:12px;font-weight:600}
.change-password-fields input{width:100%;height:38px;padding:0 10px;border:1px solid #cad4e2;border-radius:5px;background:#fff;color:var(--ink)}
.change-password-error{margin:7px 0 0;color:var(--danger);font-size:12px}
@media(max-width:980px){
  .topbar{min-height:116px}
  .topbar-in{height:68px}
  .nav-product{position:absolute;top:68px;left:0;right:0;display:flex;align-items:center;width:100%;height:48px;min-width:0;padding:0 24px;border-top:1px solid var(--line);background:rgba(247,250,255,.95)}
  .nav-product::before{display:none}
  .nav-product-context{width:100%}
  .nav-product-options{left:24px;right:auto}
}
@media(max-width:640px){.topbar-tools{gap:2px}.account-trigger{gap:5px;padding-inline:4px}.nav-product{padding-inline:12px}.nav-product-options{left:12px}}
@media(max-width:400px){
  .topbar{min-height:0}
  .topbar-in{height:auto}
  .topbar-tools{order:2;margin-left:auto}
  .nav-product{position:relative;top:auto;left:auto;right:auto;order:4;width:100%;height:42px;padding:0 2px;border-top:1px solid var(--line)}
  .nav-product-options{left:0}
}
@media(max-width:640px){
  .topbar{min-height:150px}
  .dbstat{position:absolute;top:118px;left:12px;display:flex;max-width:calc(100% - 24px);min-width:0}
  .dbstat .t{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
}
@media(max-width:400px){
  .topbar{min-height:0}
  .dbstat{position:relative;top:auto;left:auto;order:5;flex:0 1 auto;max-width:100%;margin:0 0 6px}
}

/* Version overview has its own view within the version channel. */
.channel-head-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.version-plan-navigation{display:flex;align-items:center;margin-bottom:12px}
.version-plan{border:1px solid var(--line);border-radius:6px;overflow:hidden;background:#fff}
.version-plan-head{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:54px;padding:10px 16px;background:#2858c7;color:#fff}
.version-plan-head>div:first-child{display:flex;align-items:center;gap:10px;min-width:0}
.version-plan-head h2{margin:0;font-size:17px;line-height:1.3}
.version-plan-local{font-size:11px;color:#dce9ff;white-space:nowrap}
.version-plan-actions{display:flex;gap:7px;flex-wrap:wrap}
.version-plan-actions .btn{border-color:#bcd0ff;background:#fff;color:#2858c7;white-space:nowrap}
.version-plan-actions .btn:hover{background:#edf3ff}
.version-plan-meta{display:grid;grid-template-columns:minmax(200px,1fr) minmax(150px,220px) auto;align-items:end;gap:12px;padding:12px 16px;background:#f5f8fd;border-bottom:1px solid #dbe4f1}
.version-plan-meta label,.version-plan-intro-label{display:grid;gap:5px;min-width:0;font-size:12px;color:#54657c}
.version-plan-meta select,.version-plan-meta input,.version-plan-intro-label textarea{width:100%;min-width:0;border:1px solid #cbd6e5;border-radius:5px;background:#fff;color:var(--ink);font:inherit}
.version-plan-meta select,.version-plan-meta input{height:36px;padding:0 9px}
.version-plan-readonly{display:block;min-height:36px;padding:8px 9px;border:1px solid #dbe4f1;border-radius:5px;background:#fff;color:var(--ink);white-space:pre-wrap;overflow-wrap:anywhere}
.version-plan-status{padding-bottom:8px;color:#52627a;font-size:12px;white-space:nowrap}
.version-plan-intro-label{padding:11px 16px 13px;border-bottom:1px solid var(--line);background:#f5f8fd}
.version-plan-intro-label textarea{min-height:58px;padding:8px 9px;resize:vertical;line-height:1.5}
.version-plan-meta :is(input,select):focus,.version-plan-intro-label textarea:focus,.version-plan-table :is(input,select):focus{outline:2px solid #95b7ff;outline-offset:-2px;border-color:#6794ee}
.version-plan-table-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:9px 16px}
.version-plan-table-head strong{font-size:13px}
.version-plan-table-head strong span{margin-left:8px;color:var(--muted);font-size:12px;font-weight:400}
.version-plan-scroll{max-width:100%;overflow-x:auto;overscroll-behavior-x:contain}
.version-plan-table{width:100%;min-width:1080px;border-collapse:collapse;table-layout:fixed;font-size:12px}
.version-plan-table.is-manager{min-width:1180px}
.version-plan-table th{height:36px;padding:6px 8px;border:1px solid #cfdbec;background:#e9effb;color:#3b4f6c;text-align:left;font-weight:600}
.version-plan-col-module{width:150px}
.version-plan-col-submodule{width:170px}
.version-plan-col-feature{width:240px}
.version-plan-col-issue{width:150px}
.version-plan-col-priority{width:90px}
.version-plan-col-done{width:85px}
.version-plan-col-effort{width:90px}
.version-plan-col-note{width:220px}
.version-plan-table td{height:42px;padding:3px 5px;border:1px solid #e2e7ef;background:#fff;vertical-align:middle}
.version-plan-table tbody tr:nth-child(even) td{background:#fafcff}
.version-plan-table td :is(input,select){display:block;width:100%;height:30px;min-width:0;padding:4px 5px;border:1px solid transparent;border-radius:3px;background:transparent;color:var(--ink);font:inherit}
.version-plan-table td :is(input,select):hover{border-color:#cbd6e5;background:#fff}
.version-plan-table td.version-plan-done input{width:16px;height:16px;margin:auto;accent-color:#2f9e44}
.version-plan-value{display:block;padding:6px 5px;color:var(--ink);overflow-wrap:anywhere}
.version-plan-issue{display:block;width:100%;padding:5px;color:var(--brand);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.version-plan-issue:hover{text-decoration:underline}
.version-plan-note.has-remove{position:relative}
.version-plan-note.has-remove input{padding-right:34px}
.version-plan-note.has-remove button{position:absolute;right:5px;top:50%;transform:translateY(-50%);width:28px;height:28px;border:0;border-radius:4px;background:transparent;color:#8b97a9;font-size:20px;line-height:1;cursor:pointer}
.version-plan-note.has-remove button:hover{background:#fff0f0;color:#d64545}
.version-plan-empty{padding:18px 16px!important;color:var(--muted);font-size:12px;text-align:center}
@media(max-width:760px){
  .version-plan-head{align-items:flex-start;flex-direction:column}
  .version-plan-meta{grid-template-columns:minmax(0,1fr) minmax(120px,180px)}
  .version-plan-status{grid-column:1/-1;padding:0}
}
@media(max-width:420px){
  .channel-head-actions{justify-content:flex-start}
  .version-plan-meta{grid-template-columns:minmax(0,1fr)}
  .version-plan-actions{width:100%}
  .version-plan-actions .btn{flex:1}
  .version-plan-status{grid-column:auto}
}
