/* 由 tools/sync-kimpoai-ui.mjs 生成，勿手改。来源：Kimpo c05b7fc55 apps/web-next/src/features/kimpoai/panel
 *   blueprint/BlueprintPage.vue  sha256:d4a7e7f7d6cc
 *   blueprint/process/ProcessPage.vue  sha256:e93fb097269b
 *   blueprint/process/ProcessChart.vue  sha256:18d418a9307e
 *   blueprint/claims/ClaimsReceipt.vue  sha256:3c7e7197280a
 *   blueprint/map/BlueprintStepPage.vue  sha256:59dc4338938f
 *   blueprint/map/BlueprintFlowMap.vue  sha256:346e786fe726
 *   blueprint/map/BlueprintFlowTab.vue  sha256:b683753b9533
 *   blueprint/map/BlueprintAccessMatrix.vue  sha256:7cdd6430d122
 *   blueprint/map/BlueprintApprovalsTab.vue  sha256:4271a8105de3
 *   blueprint/map/BlueprintFormDrawer.vue  sha256:e4450dfd5f4d
 */
/* ==== blueprint/BlueprintPage.vue ==== */

/* V5-W-06：自绘全屏页贴齐视口四边；正常正文留白由内容区自身控制，不能由遮罩缩进整页。 */
.bp-overlay {
  position: fixed;
  inset: 0;
  z-index: 1000;
  box-sizing: border-box;
  display: flex;
  padding: 0;
  background: rgba(15, 17, 23, 0.45);
  /* 中文字体栈，与 WorkbenchRoot.vue 全屏挂载面 .wb-root 一致；不写则浮层挂载面回落到宿主的 Roboto。 */
  font-family: 'Noto Sans SC', 'PingFang SC', 'Microsoft YaHei', sans-serif;
}
/* 页面网格：三行 [页头 48 | 主体 | 底部栏 52]、三列 [页签 168 | 内容 | 对话 360]；对话纵贯主体与底部栏（见头注【布局】）。 */
.bp-page {
  /* V5-F-16：右栏始终与左内容并列；窄屏收列宽，不改变会话位置。 */
  --bp-chat-width: clamp(144px, 32vw, 360px);
  position: relative;
  flex: 1;
  min-width: 0;
  min-height: 0;
  display: grid;
  grid-template-columns: 168px minmax(0, 1fr) var(--bp-chat-width);
  grid-template-rows: 48px minmax(0, 1fr) 52px;
  grid-template-areas:
    'head head head'
    'tabs content chat'
    'bottom bottom chat';
  overflow: hidden;
  border-radius: 0;
  background: #ffffff;
  box-shadow: 1px 4px 8px rgba(26, 37, 49, 0.25);
  color: #1f1f1f;
  font-size: 14px;
  line-height: 1.5;
}
/* 没有内容（加载 / 空态 / 出错）：不显示页签与底部栏，内容区占满左侧。 */
.bp-page--nonav {
  grid-template-areas:
    'head head head'
    'content content chat'
    'content content chat';
}
/* 页根只是程序化接收焦点（tabindex="-1"），不是交互控件，不画聚焦环。 */
.bp-page:focus,
.bp-page:focus-visible {
  outline: none;
}
.bp-page__tabs { grid-area: tabs; }
.bp-page__bottom { grid-area: bottom; }
.bp-page__chat { grid-area: chat; }
/* 单据抽屉：贴在内容区右侧（对话栏左边），上下让出页头与底部栏，压在内容之上。 */
.bp-page__drawer {
  position: absolute;
  top: 48px;
  bottom: 52px;
  right: var(--bp-chat-width);
  z-index: 5;
}

/* 页头：标题 · 状态胶囊 · （弹性空白）· 最大化 · 关闭。 */
.bp-head {
  grid-area: head;
  position: relative;
  display: flex;
  align-items: center;
  gap: 12px;
  min-width: 0;
  padding: 0 12px 0 20px;
  border-bottom: 1px solid #e4e7ed;
  background: #ffffff;
}
.bp-head__title { min-width: 0; flex: 0 1 auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 16px; font-weight: 700; }
.bp-head__status {
  flex: none;
  padding: 0 8px;
  border: 1px solid #e4e7ed;
  border-radius: 2px;
  background: #f5f7fa;
  font-size: 12px;
  line-height: 20px;
  color: #666666;
  white-space: nowrap;
}
/* 1d（§9.1，画布 Main 板）：流程图页页头的「第 n 稿」胶囊（12px、底 #F0F2F5、圆角 9）与「刚改了 n 处」（12px 灰）。 */
.bp-head__chip { flex: none; padding: 0 8px; border-radius: 9px; background: #f0f2f5; color: #1f2329; font-size: 12px; line-height: 18px; white-space: nowrap; }
.bp-head__hint { min-width: 0; flex: 0 1 auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; color: #6b7280; }
.bp-head__spacer { flex: 1 1 0; min-width: 0; }
/* 台账 I-1165 K10：「比试用版改了 k 处」胶囊——橙色语义（还没更新到试用版），颜色取宿主主题变量。 */
.bp-head__stale { flex: none; padding: 0 8px; border-radius: 9px; background: var(--kai-warn-soft, #fcf3e7); color: var(--kai-warn-ink, #9a5b00); font-size: 12px; line-height: 18px; white-space: nowrap; }
.bp-head__icon {
  flex: none;
  width: 32px;
  height: 32px;
  padding: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 0;
  border-radius: 4px;
  background: transparent;
  color: #999999;
  font: inherit;
  cursor: pointer;
}
.bp-head__icon:disabled { cursor: not-allowed; opacity: 0.6; }
.bp-head__icon:not(:disabled):hover { color: #1f1f1f; background: #f5f7fa; }
.bp-head__close { font-size: 20px; line-height: 1; }

/* 内容区：页签标题 + 只读提示一行，下面是页签内容。 */
.bp-content {
  grid-area: content;
  position: relative;
  min-width: 0;
  min-height: 0;
  overflow: auto;
  padding: 16px 20px;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
/* 流程图页 / 第二步蓝图页：内容区不留内边距、自身不滚动（ProcessPage / BlueprintStepPage 自带滚动区与底栏，纵贯内容与底栏两行，见头注）。 */
.bp-content--process { padding: 0; gap: 0; overflow: hidden; }
.bp-content--process > .bp-banner { margin: 12px 16px 0; }
.bp-content__head { flex: none; display: flex; align-items: baseline; gap: 12px; min-width: 0; }
.bp-content__title { margin: 0; flex: none; font-size: 14px; font-weight: 700; color: #1f1f1f; }
.bp-content__hint { min-width: 0; margin-left: auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; color: #999999; }

/* 细进度条（重载中）与错误条。 */
.bp-progress { position: absolute; left: 0; right: 0; bottom: -1px; height: 2px; background: linear-gradient(90deg, transparent, #0877f4, transparent); background-size: 40% 100%; background-repeat: no-repeat; animation: bp-progress 1s linear infinite; }
@keyframes bp-progress {
  from { background-position: -40% 0; }
  to { background-position: 140% 0; }
}
.bp-banner { flex: none; display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 6px 12px; border: 1px solid #efb8b8; border-radius: 4px; background: #fdebeb; color: #e84f4f; font-size: 12.5px; }
.bp-banner__btn { flex: none; padding: 0 4px; border: none; background: transparent; font: inherit; font-weight: 600; color: inherit; cursor: pointer; }
.bp-banner__btn:hover { text-decoration: underline; }
.bp-state { margin: auto; display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 40px; text-align: center; color: #999999; font-size: 13px; }
.bp-state--error { color: #e84f4f; }
.bp-state__detail { max-width: 36em; font-size: 12px; color: #999999; overflow-wrap: anywhere; }

/* 旧三页签在窄屏横排，但聊天仍纵贯左侧内容与底栏，抽屉不越过聊天列。 */
@media (max-width: 799px) {
  .bp-page {
    grid-template-columns: minmax(0, 1fr) var(--bp-chat-width);
    grid-template-rows: 48px auto minmax(0, 1fr) 52px;
    grid-template-areas: 'head head' 'tabs chat' 'content chat' 'bottom chat';
  }
  .bp-page--nonav {
    grid-template-rows: 48px minmax(0, 1fr);
    grid-template-areas: 'head head' 'content chat';
  }
  .bp-content__hint,
  .bp-head__hint { display: none; }
  .bp-state { min-width: 0; padding: 12px; overflow-wrap: anywhere; }
}
/* 极窄视口保留图页的操作宽度，只在左内容区内滚动，不挤出右侧同会话聊天。 */
@media (max-width: 599px) {
  .bp-content--process { overflow: auto; }
  .bp-content--process > .pc-page,
  .bp-content--process > .bs-page { min-width: 480px; min-height: 420px; height: 100%; flex-shrink: 0; }
}

/* ==== blueprint/process/ProcessPage.vue ==== */

/* 页：横幅 / 顶部一行 / 中部视口 / 提示 / 底栏自上而下；只有中部视口滚动（见头注【滚动】）。外壳把内容区与底栏两行都交给本页
 * （见 BlueprintPage 头注【布局】）。 */
.pc-page {
  flex: 1 1 auto;
  min-width: 0;
  min-height: 0;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  color: #1f2329;
  font-size: 14px;
  line-height: 20px;
}

/* 横幅：已确认（浅绿）/ 确认已失效（浅橙）。 */
.pc-banner {
  flex: none;
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0 8px;
  box-sizing: border-box;
  margin: 12px 20px 0;
  padding: 8px 12px;
  border: 1px solid;
  border-radius: 4px;
  font-size: 13px;
  line-height: 1.5;
}
.pc-banner--ok { border-color: #b7e4c7; background: #e7f6ec; color: #15803d; }
.pc-banner--warn { border-color: #f5d6a3; background: #fff4e5; color: #b45309; }
.pc-banner__text { font-weight: 500; overflow-wrap: anywhere; }
.pc-banner__time { font-size: 12px; color: #6b7280; }
.pc-banner__sep { color: #6b7280; }

/* 顶部一行（画布 Main 板）：15px 加粗一句 + 一行小标（灰「先不做」、橙「等你定」）。一句话最多两行（全文在悬停提示里），不把视口挤没。 */
.pc-top {
  flex: none;
  box-sizing: border-box;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  padding: 14px 20px 10px;
}
.pc-top__main { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 8px; }
.pc-top__form {
  margin: 0;
  font-size: 15px;
  line-height: 22px;
  font-weight: 500;
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  overflow-wrap: anywhere;
}
.pc-top__tags { margin: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font-size: 12px; line-height: 18px; }
.pc-tag { min-width: 0; padding: 0 8px; border-radius: 9px; overflow-wrap: anywhere; }
.pc-tag--muted { color: #4b5563; background: #f0f2f5; }
.pc-tag--warn { color: #9a3412; background: #fff4e5; }

/* 中部：不设 overflow 的外层（规格 §9.2），里面的视口占满剩下的全部高度；工具条相对它浮在右上角。 */
.pc-body {
  position: relative;
  flex: 1 1 auto;
  min-width: 0;
  min-height: 0;
  display: flex;
  flex-direction: column;
}
/* 视口：唯一的滚动容器（规格 §9.2）；里面 flex 排主线条与图（向右上下、向下左右）。 */
.pc-scroll {
  flex: 1 1 auto;
  min-width: 0;
  min-height: 0;
  overflow: auto;
  box-sizing: border-box;
  margin: 0 20px 8px;
  border: 1px solid #e5e7eb;
  border-radius: 6px;
  background: #ffffff;
  display: flex;
  flex-direction: column;
}
.pc-scroll--down {
  flex-direction: row;
}
/* 图那段：填满主线条之外的视口（不收缩，图比视口大时溢出由视口滚动）。 */
.pc-stage-wrap {
  flex: 1 0 auto;
  box-sizing: border-box;
}
/* 常显滚动条：10px 轨道 #F3F5F8、8px 滑块 #B9C0CA（滑块四周留 1px 轨道色，看上去 8px 粗）；横竖都有时右下角同轨道色留空。 */
.pc-scroll::-webkit-scrollbar { width: 10px; height: 10px; background: #f3f5f8; }
.pc-scroll::-webkit-scrollbar-track { background: #f3f5f8; }
.pc-scroll::-webkit-scrollbar-thumb { background: #b9c0ca; border: 1px solid #f3f5f8; border-radius: 5px; }
.pc-scroll::-webkit-scrollbar-thumb:hover { background: #a3abb6; }
.pc-scroll::-webkit-scrollbar-corner { background: #f3f5f8; }
/* 不认 WebKit 伪元素的浏览器（Firefox）兜底；认的浏览器不能同时设 scrollbar-width / scrollbar-color（会让伪元素失效），所以放在 @supports 里。 */
@supports not selector(::-webkit-scrollbar) {
  .pc-scroll { scrollbar-width: thin; scrollbar-color: #b9c0ca #f3f5f8; }
}
.pc-empty { margin: 24px 20px; color: #999999; font-size: 13px; text-align: center; }

/* 主线条（§9.7 ④，原型 pr2-apparel-*.svg：底 #F8FAFC、边 #E4E7ED、11px 灰标题、序号圆徽 + 11.5px 墨字）：sticky，随图沿 t 滚、跨 l 固定。 */
.pc-ruler {
  position: sticky;
  z-index: 3;
  flex: none;
  box-sizing: border-box;
  background: #f8fafc;
}
.pc-ruler--right {
  top: 0;
  height: 40px;
  width: 100%;
  border-bottom: 1px solid #e4e7ed;
}
.pc-ruler--down {
  left: 0;
  width: 150px;
  height: 100%;
  border-right: 1px solid #e4e7ed;
}
.pc-ruler__title {
  position: absolute;
  left: 16px;
  top: 0;
  font-size: 11px;
  line-height: 40px;
  color: #6b7280;
  white-space: nowrap;
}
.pc-ruler--down .pc-ruler__title {
  line-height: 16px;
}
.pc-ruler__item {
  position: absolute;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  height: 22px;
  padding: 0 6px;
  border: 0;
  border-radius: 11px;
  background: transparent;
  font: inherit;
  cursor: pointer;
  white-space: nowrap;
}
.pc-ruler--right .pc-ruler__item {
  top: 9px;
  transform: translateX(-50%);
}
.pc-ruler--down .pc-ruler__item {
  left: 10px;
  transform: translateY(-50%);
}
.pc-ruler__item:hover { background: #eef2f7; }
.pc-ruler__item:focus-visible { outline: 2px solid #83bbf9; outline-offset: 1px; }
.pc-ruler__num {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: #1f2937;
  color: #ffffff;
  font-size: 10.5px;
  font-weight: 700;
  line-height: 18px;
}
.pc-ruler__name {
  font-size: 11.5px;
  line-height: 16px;
  color: #1f2937;
}

/* 工具条（§9.7 ⑥，原型的开关胶囊：184×26、1px #C5CCD6、圆角 13、11px 灰标题、选中项主色底白字）：在顶部一行右端，不随图滚、不盖主线条。 */
.pc-toolbar {
  flex: none;
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: -2px;
}
.pc-seg {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  height: 26px;
  box-sizing: border-box;
  padding: 0 3px 0 10px;
  border: 1px solid #c5ccd6;
  border-radius: 13px;
  background: #ffffff;
  box-shadow: 0 1px 3px rgba(31, 35, 41, 0.08);
  font-size: 11px;
  line-height: 20px;
  color: #6b7280;
}
.pc-seg--tight { padding-left: 3px; }
.pc-seg__label { margin-right: 4px; white-space: nowrap; }
.pc-seg__btn {
  height: 20px;
  padding: 0 9px;
  border: 0;
  border-radius: 10px;
  background: transparent;
  color: #4b5563;
  font: inherit;
  font-size: 11px;
  line-height: 20px;
  white-space: nowrap;
  cursor: pointer;
}
.pc-seg__btn[aria-pressed='true'] { background: #0877f4; color: #ffffff; }
.pc-seg__btn:hover:not([aria-pressed='true']) { background: #f0f2f5; }
.pc-seg__btn:focus-visible { outline: 2px solid #83bbf9; outline-offset: 1px; }

/* 确认没成功的一行提示（浅橙，贴在底栏上方）。 */
.pc-notice {
  flex: none;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 6px 20px;
  border-top: 1px solid #f5d6a3;
  background: #fff4e5;
  color: #b45309;
  font-size: 12.5px;
}
.pc-notice__text { min-width: 0; overflow-wrap: anywhere; }
.pc-notice__close { flex: none; padding: 0 4px; border: none; background: transparent; color: inherit; font: inherit; font-weight: 600; cursor: pointer; }

/* 底栏（画布 Main 板：52 高、上边线、左图例 12px 灰字、右原因 + 按钮）；放不下时图例换行、底栏随之加高。 */
.pc-foot {
  flex: none;
  min-height: 52px;
  box-sizing: border-box;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 16px;
  padding: 8px 20px;
  border-top: 1px solid #e4e7ed;
  background: #ffffff;
  font-size: 12px;
  line-height: 18px;
  color: #6b7280;
}
.pc-legend { flex: 1 1 auto; min-width: 0; display: flex; flex-wrap: wrap; gap: 6px 16px; margin: 0; padding: 0; list-style: none; }
.pc-legend__item { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
.pc-legend__sw { display: inline-block; flex: none; box-sizing: border-box; width: 22px; height: 14px; border: 1px solid #7fb3f2; border-radius: 3px; background: #e8f1fe; }
.pc-legend__sw--decision { width: 18px; border: 0; border-radius: 0; background: #fbe3b4; clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%); }
.pc-legend__sw--pending { border: 1.5px dashed #9aa3ad; background: #fafbfc; }
/* K2b：图例三项取宿主主题变量（展示属性上的色值只是兜底）。 */
.pc-legend__sw--external { border-color: var(--kai-line-2); background: var(--kai-info-soft); }
.pc-legend__arrow--parallel path { stroke: var(--kai-primary); }
.pc-legend__arrow--parallel path + path { stroke: none; fill: var(--kai-primary); }
.pc-legend__arrow--loop path { stroke: var(--kai-warn); }
.pc-legend__arrow--loop path + path { stroke: none; fill: var(--kai-warn); }

/* K2b 主线页签：「你提过的」之下、视口之上一行胶囊；选中的主色底；放不下时横向滚动。 */
.pc-lines {
  flex: none;
  display: flex;
  gap: 6px;
  margin: 0 20px 8px;
  overflow-x: auto;
  scrollbar-width: thin;
}
.pc-lines__tab {
  flex: none;
  max-width: 220px;
  height: 26px;
  padding: 0 12px;
  border: 1px solid var(--kai-line-2);
  border-radius: 13px;
  background: var(--kai-surface);
  color: var(--kai-ink-2);
  font: inherit;
  font-size: 12px;
  line-height: 24px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  cursor: pointer;
}
.pc-lines__tab[aria-selected='true'] { border-color: var(--kai-primary); background: var(--kai-primary); color: var(--kai-surface); }
.pc-lines__tab:hover:not([aria-selected='true']) { background: var(--kai-surface-2); }
.pc-lines__tab:focus-visible { outline: 2px solid var(--kai-primary-soft); outline-offset: 1px; }
.pc-legend__arrow { display: block; flex: none; }
.pc-legend__pill { flex: none; box-sizing: border-box; padding: 0 6px; border: 1.5px solid #7ccb98; border-radius: 8px; background: #ffffff; color: #1f2937; font-size: 11px; line-height: 14px; }
.pc-foot__reason { flex: none; color: #6b7280; white-space: nowrap; }
.pc-foot__confirm {
  flex: none;
  height: 32px;
  padding: 0 16px;
  border: 0;
  border-radius: 4px;
  background: #f0f2f5;
  color: #9aa3ad;
  font: inherit;
  font-size: 14px;
  line-height: 32px;
  white-space: nowrap;
  cursor: not-allowed;
}
.pc-foot__confirm--primary {
  background: #0877f4;
  color: #ffffff;
  cursor: pointer;
}
.pc-foot__confirm--primary:hover { background: #0755d1; }
.pc-foot__confirm:focus-visible { outline: 2px solid #83bbf9; outline-offset: 1px; }

/* 窄屏放不下原因文字：只留按钮（按钮的 title 与 aria-describedby 仍带着原因）。 */
@media (max-width: 799px) {
  .pc-foot__reason { display: none; }
}

/* ==== blueprint/process/ProcessChart.vue ==== */

/* 画布根：按缩放后的布局尺寸给宽高，同时至少铺满外层视口（规格 §9.2：图容器 min-width / min-height 100%）；舞台与主体栏层都在它里面。 */
.pc-canvas {
  --pc-scale: 1;
  position: relative;
  flex: none;
  box-sizing: border-box;
  min-width: 100%;
  min-height: 100%;
}
/* 舞台（§9.7 适应宽度）：按原尺寸画、transform: scale(--pc-scale)（原点左上）；min 尺寸按 1/scale 放大，缩放后仍铺满画布根（泳道底色铺到视口边）。 */
.pc-stage {
  position: absolute;
  left: 0;
  top: 0;
  box-sizing: border-box;
  min-width: calc(100% / var(--pc-scale));
  min-height: calc(100% / var(--pc-scale));
  transform: scale(var(--pc-scale));
  transform-origin: 0 0;
}
.pc-chart {
  position: absolute;
  inset: 0;
  display: block;
  width: 100%;
  height: 100%;
  overflow: visible;
}
.pc-node {
  cursor: default;
}
/* K2b：跨线胶囊可点（切到那条主线）。 */
.pc-cross {
  cursor: pointer;
}
.pc-cross:focus-visible {
  outline: 2px solid #83bbf9;
  outline-offset: 1px;
}

/* 主体栏层（§9.7）：外层 sticky 并按缩放后的厚度占位（向右：左侧一列贴左；向下：顶部一行贴顶），内层按原尺寸画再缩放。z-index 盖住舞台。 */
.pc-heads {
  position: sticky;
  z-index: 2;
  box-sizing: border-box;
  pointer-events: none;
}
.pc-heads--right {
  left: 0;
  height: 100%;
}
.pc-heads--down {
  top: 0;
  width: 100%;
}
.pc-heads__inner {
  position: relative;
  transform: scale(var(--pc-scale));
  transform-origin: 0 0;
}
.pc-heads--right .pc-heads__inner {
  height: calc(100% / var(--pc-scale));
}
.pc-heads--down .pc-heads__inner {
  width: calc(100% / var(--pc-scale));
}
.pc-heads__svg {
  position: absolute;
  inset: 0;
  display: block;
  width: 100%;
  height: 100%;
  overflow: visible;
}

/* 1c（规格 §8.3）：改图回合进行中被指着的形状外圈光晕呼吸；压暗本身是换灰色（见脚本 COLOR.dim*），这里不再改不透明度。 */
.pc-pulse-halo {
  animation: pc-pulse 1.4s ease-in-out infinite;
}
@keyframes pc-pulse {
  0%,
  100% {
    opacity: 0.18;
  }
  50% {
    opacity: 0.55;
  }
}
@media (prefers-reduced-motion: reduce) {
  .pc-pulse-halo {
    animation: none;
    opacity: 0.4;
  }
}

/* 交互层：空白处不挡鼠标（起终点的悬停提示照常），热区才接鼠标；改图进行中整层不接鼠标（不可点）。 */
.pc-overlay {
  position: absolute;
  inset: 0;
  pointer-events: none;
}
.pc-hit {
  position: absolute;
  box-sizing: border-box;
  pointer-events: auto;
  cursor: default;
}
.pc-overlay--disabled .pc-hit {
  pointer-events: none;
}
.pc-overlay--disabled .pc-tools {
  display: none;
}
/* 「调整」按钮（画布 Shapes 板：56×26、1px #D9DEE5、圆角 6、白底、12px #0755D1、阴影 0 2px 6px）：形状的贴在右上角上方（离上沿 6，
 * 下方留 6 的透明垫让鼠标从形状移到按钮时不丢悬停），主体栏的放在栏内右上角；默认藏起，悬停 / 键盘聚焦到按钮时显出。 */
.pc-tools {
  position: absolute;
  bottom: 100%;
  right: 0;
  z-index: 1;
  display: inline-flex;
  padding-bottom: 6px;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.12s;
}
.pc-tools--lane {
  bottom: auto;
  top: 6px;
  right: 6px;
  padding-bottom: 0;
}
.pc-hit:hover > .pc-tools,
.pc-hit:focus-within > .pc-tools {
  opacity: 1;
  pointer-events: auto;
}
.pc-tool {
  box-sizing: border-box;
  width: 56px;
  height: 26px;
  padding: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid #d9dee5;
  border-radius: 6px;
  background: #ffffff;
  color: #0755d1;
  box-shadow: 0 2px 6px rgba(31, 35, 41, 0.12);
  font: inherit;
  font-size: 12px;
  line-height: 24px;
  white-space: nowrap;
  cursor: pointer;
}
.pc-tool:hover { background: #f0f6ff; }
.pc-tool:focus-visible { outline: 2px solid #83bbf9; outline-offset: 1px; }

/* ==== blueprint/claims/ClaimsReceipt.vue ==== */

/* 外层页是 flex 列：本组件不伸缩；左右与顶部一行同为 20px 边距。 */
.kc {
  flex: none;
  box-sizing: border-box;
  margin: 0 20px 8px;
  border: 1px solid var(--kai-line);
  border-radius: var(--kai-radius-control);
  background: var(--kai-surface);
  color: var(--kai-ink);
  font-size: 12px;
  line-height: 18px;
}
.kc__head {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 4px 8px;
  width: 100%;
  box-sizing: border-box;
  padding: 6px 10px;
  border: 0;
  background: transparent;
  color: inherit;
  font: inherit;
  text-align: left;
  cursor: pointer;
}
.kc__head:focus-visible { outline: 2px solid var(--kai-primary); outline-offset: -2px; border-radius: var(--kai-radius-control); }
.kc__title { font-weight: 600; color: var(--kai-ink); }
.kc__chip { padding: 0 8px; border-radius: var(--kai-radius-pill); white-space: nowrap; }
.kc__chip--included { background: var(--kai-ok-soft); color: var(--kai-ok); }
.kc__chip--pending { background: var(--kai-warn-soft); color: var(--kai-warn-ink); }
.kc__chip--excluded { background: var(--kai-surface-2); color: var(--kai-muted); }
.kc__chip--material { background: var(--kai-primary-soft); color: var(--kai-primary-ink); }
.kc__more { margin-left: auto; color: var(--kai-primary); white-space: nowrap; }
/* 展开区：最高 240px，自己滚动。 */
.kc__panel {
  max-height: 240px;
  overflow: auto;
  padding: 2px 10px 8px;
  border-top: 1px solid var(--kai-line);
}
.kc__group + .kc__group { margin-top: 6px; }
.kc__group-title { margin: 6px 0 2px; font-size: 12px; font-weight: 600; color: var(--kai-ink-2); }
.kc__list { margin: 0; padding: 0; list-style: none; }
.kc__row { display: flex; align-items: flex-start; gap: 6px; padding: 2px 0; }
.kc__mark { flex: none; width: 14px; text-align: center; font-weight: 600; }
.kc__mark--included { color: var(--kai-ok); }
.kc__mark--pending { color: var(--kai-warn); }
.kc__mark--excluded { color: var(--kai-muted-2); }
.kc__mark--material { color: var(--kai-primary); }
.kc__body { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 8px; min-width: 0; }
.kc__text { color: var(--kai-ink); word-break: break-word; }
.kc__row[data-status='excluded'] .kc__text { color: var(--kai-muted); text-decoration: line-through; }
.kc__kind { flex: none; padding: 0 6px; border: 1px solid var(--kai-line-2); border-radius: var(--kai-radius-pill); color: var(--kai-muted); font-size: 11px; line-height: 16px; }
.kc__detail { color: var(--kai-muted); }
.kc__detail--pending { color: var(--kai-warn-ink); }

/* ==== blueprint/map/BlueprintStepPage.vue ==== */

/* 页：横幅 / 顶部一行 / 页签 / 中部视口 / 提示 / 底栏自上而下；只有中部视口滚动（同第一步 ProcessPage）。 */
.bs-page {
  flex: 1 1 auto;
  min-width: 0;
  min-height: 0;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  color: #1f2329;
  font-size: 14px;
  line-height: 20px;
}

/* 横幅（沿第一步）：已确认浅绿、确认已失效浅橙。 */
.bs-banner {
  flex: none;
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0 8px;
  box-sizing: border-box;
  margin: 12px 20px 0;
  padding: 8px 12px;
  border: 1px solid;
  border-radius: 4px;
  font-size: 13px;
  line-height: 1.5;
}
.bs-banner--ok { border-color: #b7e4c7; background: #e7f6ec; color: #15803d; }
.bs-banner--warn { border-color: #f5d6a3; background: #fff4e5; color: #b45309; }
/* 第三步在建（任务卡 3g）：浅蓝，与品牌蓝「进行中」同一语义。 */
.bs-banner--info { border-color: #b9d8fc; background: #eaf3fe; color: #0755d1; }
.bs-banner__text { font-weight: 500; overflow-wrap: anywhere; }
.bs-banner__text--ask { font-weight: 400; color: #b45309; }
.bs-banner__time { font-size: 12px; color: #6b7280; }
.bs-banner__sep { color: #6b7280; }
.bs-banner__detail { min-width: 0; font-size: 12.5px; color: #1f2329; overflow-wrap: anywhere; }
/* 横幅里的文字按钮（打开试用版 / 放弃重建 / 确定放弃 / 再想想）已是 NButton（text 型，I-1141 第 2d 批）。
   Naive 对 text 型把 height / padding 置 initial、字号取按钮档位（14），故在此钉回改前量测 ai-2d-blueprint-page：
   高 19.5（= 13 × 1.5，横幅行高）、字号 13、无内边距、保留下划线与字重；颜色跟随宿主主题（主色 / 默认 / 危险色）。 */
.bs-banner__btn { height: 19.5px; padding: 0; font-size: 13px; font-weight: 500; text-decoration: underline; text-underline-offset: 2px; }
.bs-banner__btn:focus-visible { outline: 2px solid #83bbf9; outline-offset: 1px; border-radius: 2px; }
.bs-banner__btn--muted { font-weight: 400; }
/* 「打开试用版」保持原来的 color: inherit（随横幅绿 / 蓝 / 橙文字色，不写死颜色）；悬停 / 聚焦 / 按下 / 禁用都继承，禁用只靠 Naive 的透明度变灰。 */
.bs-banner__btn--inherit,
.bs-banner__btn--inherit:hover,
.bs-banner__btn--inherit:focus,
.bs-banner__btn--inherit:active,
.bs-banner__btn--inherit.n-button--disabled { color: inherit; }

/* 顶部一行：「你的生意」灰字 + 一句话（放不下省略，全文在悬停提示里）+ 两种小标。 */
.bs-top { flex: none; display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; min-width: 0; padding: 12px 20px 8px; font-size: 12px; line-height: 18px; }
.bs-top__label { flex: none; color: #6b7280; }
.bs-top__form { flex: 1 1 240px; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 14px; line-height: 20px; font-weight: 500; color: #1f2329; }
.bs-tag { flex: none; max-width: 100%; padding: 0 8px; border-radius: 9px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bs-tag--muted { color: #4b5563; background: #f0f2f5; }
.bs-tag--warn { color: #9a3412; background: #fff4e5; }

/* 页签行：左页签条（下划线式，选中主色），右端「泳道方向」开关；整行一条底线。 */
.bs-tabrow { flex: none; display: flex; align-items: flex-end; gap: 12px; min-width: 0; margin: 0 20px; border-bottom: 1px solid #e5e7eb; }
/* V5-F-16：左侧可用宽度缩小时页签独立横滚，不能裁掉末位表样入口。 */
.bs-tabs { flex: 1 1 auto; display: flex; gap: 4px; min-width: 0; overflow-x: auto; scrollbar-width: thin; }
/* 泳道方向开关（I-1135）：26 高胶囊，1px #C5CCD6 边、白底；两个选项 20 高小胶囊，选中主色底白字。 */
.bs-direction { flex: none; display: inline-flex; align-items: center; gap: 2px; box-sizing: border-box; height: 26px; margin-bottom: 5px; padding: 0 3px 0 10px; border: 1px solid #c5ccd6; border-radius: 13px; background: #ffffff; font-size: 11px; line-height: 20px; color: #6b7280; }
.bs-direction__label { margin-right: 6px; white-space: nowrap; }
.bs-direction__btn { box-sizing: border-box; height: 20px; padding: 0 9px; border: 0; border-radius: 10px; background: transparent; color: #4b5563; font: inherit; font-size: 11px; line-height: 20px; white-space: nowrap; cursor: pointer; }
.bs-direction__btn:hover { background: #f0f2f5; }
.bs-direction__btn--on,
.bs-direction__btn--on:hover { background: #0877f4; color: #ffffff; }
.bs-direction__btn:focus-visible { outline: 2px solid #83bbf9; outline-offset: 1px; }
.bs-tab {
  flex: none;
  height: 36px;
  padding: 0 12px;
  border: 0;
  border-bottom: 2px solid transparent;
  background: transparent;
  color: #4b5563;
  font: inherit;
  font-size: 13px;
  white-space: nowrap;
  cursor: pointer;
}
.bs-tab:hover { color: #1f2329; }
.bs-tab--active { border-bottom-color: #0877f4; color: #0877f4; font-weight: 500; }
.bs-tab:focus-visible { outline: 2px solid #83bbf9; outline-offset: -2px; }
/* 页签名后的小字（I-1158 表样页签：「默认」/「〈配色〉 · 已选 n 种」）：11px 灰，选中时跟主色但不加粗。 */
.bs-tab__sub { margin-left: 5px; font-style: normal; font-size: 11px; font-weight: 400; color: #9aa3ad; }
.bs-tab--active .bs-tab__sub { color: #0877f4; }

/* 中部：不设 overflow 的外层，里面的视口占满剩下的全部高度；抽屉贴在外层右边。 */
/* K2c 主线页签（同第一步 .pc-lines）：页签行下方一行胶囊，窄时横滚；颜色取宿主主题变量。 */
.bs-lines { flex: none; display: flex; gap: 6px; min-width: 0; margin: 8px 20px 0; overflow-x: auto; scrollbar-width: thin; }
.bs-lines__tab {
  flex: none;
  max-width: 220px;
  height: 26px;
  padding: 0 12px;
  border: 1px solid var(--kai-line-2);
  border-radius: 13px;
  background: var(--kai-surface);
  color: var(--kai-ink-2);
  font: inherit;
  font-size: 12px;
  line-height: 24px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  cursor: pointer;
}
.bs-lines__tab[aria-selected='true'] { border-color: var(--kai-primary); background: var(--kai-primary); color: var(--kai-surface); }
.bs-lines__tab:hover:not([aria-selected='true']) { background: var(--kai-surface-2); }
.bs-lines__tab:focus-visible { outline: 2px solid var(--kai-primary-soft); outline-offset: 1px; }
.bs-body { position: relative; flex: 1 1 auto; min-width: 0; min-height: 0; display: flex; flex-direction: column; }
/* 视口：唯一的滚动容器（同第一步 .pc-scroll）。 */
.bs-scroll {
  flex: 1 1 auto;
  min-width: 0;
  min-height: 0;
  overflow: auto;
  box-sizing: border-box;
  margin: 8px 20px 8px;
  border: 1px solid #e5e7eb;
  border-radius: 6px;
  background: #ffffff;
}
.bs-scroll::-webkit-scrollbar { width: 10px; height: 10px; background: #f3f5f8; }
.bs-scroll::-webkit-scrollbar-track { background: #f3f5f8; }
.bs-scroll::-webkit-scrollbar-thumb { background: #b9c0ca; border: 1px solid #f3f5f8; border-radius: 5px; }
.bs-scroll::-webkit-scrollbar-thumb:hover { background: #a3abb6; }
.bs-scroll::-webkit-scrollbar-corner { background: #f3f5f8; }
@supports not selector(::-webkit-scrollbar) {
  .bs-scroll { scrollbar-width: thin; scrollbar-color: #b9c0ca #f3f5f8; }
}
/* 表样页签（I-1158）：视口兼作尺寸容器，右栏贴顶预览的高度按它取（100cqh）；别的页签不开，免得影响流转图的滚动。 */
.bs-scroll--style { container-type: size; }
/* 详情抽屉：贴在视口右边（右栏对话在外壳里另占一列，抽屉不遮它）。 */
.bs-drawer { position: absolute; top: 8px; right: 20px; bottom: 8px; z-index: 4; }

/* 确认没成功的一行提示（浅橙，贴在底栏上方）。 */
.bs-notice {
  flex: none;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 6px 20px;
  border-top: 1px solid #f5d6a3;
  background: #fff4e5;
  color: #b45309;
  font-size: 12.5px;
}
.bs-notice__text { min-width: 0; overflow-wrap: anywhere; }
.bs-notice__close { flex: none; padding: 0 4px; border: none; background: transparent; color: inherit; font: inherit; font-weight: 600; cursor: pointer; }

/* 底栏（52 高、上边线、左图例 12px 灰字、右原因 + 按钮；同第一步）。 */
.bs-foot {
  flex: none;
  min-height: 52px;
  box-sizing: border-box;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 16px;
  padding: 8px 20px;
  border-top: 1px solid #e4e7ed;
  background: #ffffff;
  font-size: 12px;
  line-height: 18px;
  color: #6b7280;
}
.bs-legend-wrap { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.bs-legend { flex: none; min-width: 0; display: flex; flex-wrap: wrap; gap: 4px 14px; margin: 0; padding: 0; list-style: none; }
.bs-legend__focus { margin: 0; color: #9aa3ad; }
.bs-legend__item { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
.bs-legend__line { display: block; flex: none; }
/* K2c 图例三项：颜色取主题变量（缺失时退回与图上同一兜底色）。冲减＝提醒色虚线；异常单据＝虚线边小块；跨线＝主色边小胶囊（同图上 .bm-cross）。 */
.bs-legend__line--warn path { stroke: var(--kai-warn, #e6a23c); fill: none; }
.bs-legend__line--warn path + path { stroke: none; fill: var(--kai-warn, #e6a23c); }
.bs-legend__sw { display: inline-block; flex: none; box-sizing: border-box; width: 22px; height: 14px; border-radius: 3px; }
.bs-legend__sw--exception { border: 1px dashed var(--kai-warn, #e6a23c); background: var(--kai-warn-soft, #fcf3e7); }
.bs-legend__pill {
  flex: none;
  box-sizing: border-box;
  padding: 0 6px;
  border: 1.5px solid var(--kai-primary, #0877f4);
  border-radius: 8px;
  background: var(--kai-surface, #ffffff);
  color: var(--kai-primary-ink, #0755d1);
  font-size: 10.5px;
  line-height: 13px;
}
.bs-badge { padding: 0 5px; border-radius: 3px; font-size: 10px; line-height: 15px; }
.bs-badge--document { background: #e8f1fe; color: #0877f4; }
.bs-badge--master { background: #e7f6ec; color: #15803d; }
.bs-badge--query { background: #fff4e5; color: #b45309; }
.bs-foot__hint { flex: 1 1 auto; min-width: 0; margin: 0; }
.bs-foot__spacer { flex: 1 1 auto; }
.bs-foot__reason { flex: none; color: #6b7280; white-space: nowrap; }
/* 表样页签的底栏左侧（I-1158）：摘要（12.5px 灰，名字加粗）+ 状态字（有改动橙 / 已保存绿）+ 三个按钮。 */
.bs-stylefoot { flex: 1 1 auto; min-width: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; }
.bs-stylefoot__sum { flex: 1 1 240px; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12.5px; color: #6b7280; }
.bs-stylefoot__sum b { font-weight: 600; color: #1f2329; }
.bs-stylefoot__ok { color: #15803d; }
.bs-stylefoot__state { flex: none; font-size: 12px; white-space: nowrap; }
.bs-stylefoot__state--dirty { color: #b45309; }
.bs-stylefoot__state--saved { color: #15803d; }
.bs-stylefoot__btns { flex: none; display: inline-flex; align-items: center; gap: 8px; }
/* 底栏按钮（恢复默认 / 放弃改动 / 保存表样）已是 NButton（尺寸见 FOOT_BUTTON_TIERS，颜色 / 禁用态跟随宿主主题）；
   .bs-foot__btn--text / --primary 类仅作定位钩子，这里只留 flex 项属性。 */
.bs-foot__btn { flex: none; }
/* 别的页签上「表样有改动没保存」：橙色文字按钮（跟在左侧说明后面），点它回表样页签。 */
/* 「表样有改动没保存」提示已是 NButton（text 型 warning，保持橙色语义，I-1141 第 2d 批）：text 型 height / padding 为 initial，
   故钉回原 CSS：高 18（继承底栏行高 18）、字号 12、无内边距、保留下划线。 */
.bs-foot__unsaved { margin-left: 12px; height: 18px; padding: 0; font-size: 12px; text-decoration: underline; text-underline-offset: 2px; }
.bs-foot__spacer .bs-foot__unsaved { margin-left: 0; }
.bs-foot__unsaved:focus-visible { outline: 2px solid #83bbf9; outline-offset: 1px; border-radius: 2px; }
/* 确认钮已是 NButton（尺寸见 CONFIRM_BUTTON_TIERS）；.bs-foot__confirm--primary 类仅作定位钩子。 */
.bs-foot__confirm { flex: none; }

/* 窄屏：放不下原因文字时只留按钮（title 与 aria-describedby 仍带着原因）；页签条可横向挤；开关只留两个按钮。 */
@media (max-width: 799px) {
  .bs-foot__reason { display: none; }
  .bs-stylefoot__sum { flex-basis: 100%; }
  .bs-tabs { overflow-x: auto; scrollbar-width: none; }
  .bs-direction__label { display: none; }
  .bs-direction { padding-left: 3px; }
}
/* 极窄左右分栏中，单个带配色摘要的页签也必须能完整滚入左视口；全文仍保留在按钮语义中。 */
@media (max-width: 599px) {
  .bs-tab { max-width: calc(100vw - var(--bp-chat-width, 144px) - 16px); overflow: hidden; text-overflow: ellipsis; }
}

/* ==== blueprint/map/BlueprintFlowMap.vue ==== */

/* 画布：按布局原尺寸给宽高，同时至少铺满外层视口；SVG 贴满画布（泳道底按 100% 铺到视口边），步骤条 / 主体栏 / 卡按坐标绝对定位。只做明亮模式。 */
.bm-canvas {
  position: relative;
  flex: none;
  box-sizing: border-box;
  min-width: 100%;
  min-height: 100%;
  background: #ffffff;
  font-size: 12px;
  line-height: 16px;
  color: #1f2329;
}
.bm-lines { position: absolute; inset: 0; display: block; width: 100%; height: 100%; overflow: hidden; pointer-events: none; }
.bm-edge { transition: opacity 0.12s; }
.bm-edge--faded { opacity: 0.18; }
.bm-edge__hit { pointer-events: stroke; }

/* 步骤条角：「生意先后 →」11px 灰字居中。 */
.bm-corner { position: absolute; display: flex; align-items: center; justify-content: center; box-sizing: border-box; font-size: 11px; color: #6b7280; white-space: nowrap; }

/* 步骤条项：right 一行 12px 加粗居中、下沿 3px 主体中色线；down 两行右对齐（第 n 步 / 环节名）、右沿 3px 线。尾列「平时要看的」中性灰。 */
.bm-ruler {
  position: absolute;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 0 4px 6px;
  border-bottom: 3px solid;
  font-size: 12px;
  font-weight: 600;
  text-align: center;
}
.bm-ruler__text,
.bm-ruler__name,
.bm-ruler__short { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bm-canvas--down .bm-ruler { align-items: flex-end; padding: 0 16px 0 8px; border-bottom: 0; border-right: 3px solid; text-align: right; }
.bm-canvas--down .bm-ruler__name { font-size: 11.5px; font-weight: 400; }
.bm-ruler--trailing { font-weight: 500; }

/* 主体栏：right 左侧竖排（4px 左边线＝主体中色）；down 顶部横排（4px 上边线）。 */
.bm-lane-head {
  position: absolute;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 14px 10px 0 14px;
  border-left: 4px solid;
  border-right: 1px solid #e4e7ed;
  border-bottom: 1px solid #e4e7ed;
  overflow: hidden;
}
.bm-canvas--down .bm-lane-head { padding: 10px 12px 0; border-left: 0; border-top: 4px solid; border-right: 1px solid #e4e7ed; }
.bm-lane-head__name { font-size: 15px; font-weight: 700; line-height: 20px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bm-lane-head__roles { font-size: 11.5px; line-height: 16px; color: #4b5563; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bm-lane-head__duty { font-size: 10.5px; line-height: 14px; color: #6b7280; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bm-lane-head__count { font-size: 11px; line-height: 16px; color: #6b7280; }
/* 没排好：泳道身里居中一句灰字。 */
.bm-lane-pending { position: absolute; display: flex; align-items: center; justify-content: center; box-sizing: border-box; padding: 0 16px; color: #6b7280; font-size: 12px; pointer-events: none; }

/* 卡（184×108、圆角 8、1.5px 边、内边距 8 10；档案卡 184×70）。 */
.bm-card { position: absolute; box-sizing: border-box; transition: opacity 0.12s; }
.bm-card--faded { opacity: 0.28; }
.bm-card__body {
  position: absolute;
  inset: 0;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 1px;
  padding: 8px 10px 26px;
  border: 1.5px solid #c5ccd6;
  border-radius: 8px;
  background: #ffffff;
  box-shadow: 0 1px 2px rgba(31, 35, 41, 0.06);
  color: inherit;
  font: inherit;
  text-align: left;
  cursor: pointer;
  overflow: hidden;
}
.bm-card__body:focus-visible { outline: 2px solid #83bbf9; outline-offset: 1px; }
.bm-card--query .bm-card__body { border-style: dashed; }
.bm-card--master .bm-card__body { padding-bottom: 8px; gap: 2px; }
.bm-card__head { display: flex; align-items: center; gap: 6px; min-width: 0; height: 18px; margin-bottom: 3px; font-size: 13.5px; font-weight: 700; line-height: 18px; }
.bm-card__name { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bm-card__rules { flex: none; font-size: 10.5px; font-weight: 400; color: #6b7280; white-space: nowrap; }
/* 第一句要点（11.5px）、状态流转 / 用到 / 来自（10.5px 灰）：各一行，放不下省略（全文在悬停提示与抽屉里）。 */
.bm-card__point { display: block; min-width: 0; height: 16px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 11.5px; line-height: 16px; color: #374151; }
.bm-card__line { display: block; min-width: 0; height: 16px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 10.5px; line-height: 16px; color: #6b7280; }
.bm-card__line--from { color: #a4520a; }
.bm-card__line--maintain { font-size: 11px; color: #4b5563; }
/* 底行：左谁填胶囊（主体淡色底 + 中色边 + 深色字）/ 查询「谁 看」；右「审」小标 + 「第 n 步」。 */
.bm-card__foot { position: absolute; left: 10px; right: 10px; bottom: 6px; display: flex; align-items: center; gap: 4px; min-width: 0; }
.bm-pill { flex: 0 1 auto; min-width: 0; box-sizing: border-box; padding: 0 8px; border: 1px solid transparent; border-radius: 8px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 10.5px; line-height: 14px; }
.bm-pill--viewers { padding: 0; border: 0; color: #4b5563; font-size: 11px; }
.bm-tag { flex: none; padding: 0 5px; border-radius: 4px; background: #f0f2f5; color: #667085; font-size: 10px; line-height: 15px; white-space: nowrap; }
.bm-tag--approval { border: 1px solid #efa1b4; background: #fdebf0; color: #a8264b; }
/* 来自你的表样：取宿主主题变量（明暗随宿主），变量缺失时退回浅蓝底。 */
.bm-tag--material { border: 1px solid var(--kai-primary, #0877f4); background: var(--kai-primary-soft, #e8f1fe); color: var(--kai-primary-ink, #0755d1); }
.bm-card__step { flex: none; margin-left: auto; font-size: 10px; color: #9aa3af; white-space: nowrap; }
/* K2c 异常单据：卡虚线边框（颜色仍是主体中色）+ 底行小字「异常路径补」（提醒色，取宿主主题变量，变量缺失时退回浅橙）。 */
.bm-card--exception .bm-card__body { border-style: dashed; }
.bm-tag--exception { border: 1px dashed var(--kai-warn, #e6a23c); background: var(--kai-warn-soft, #fcf3e7); color: var(--kai-warn-ink, #9a5b00); }
/* K2c 跨线胶囊：白底主色边、主色深一阶字（取宿主主题变量），悬停底色换主色淡色；改图进行中不可点。 */
.bm-cross {
  position: absolute;
  z-index: 1;
  box-sizing: border-box;
  margin: 0;
  padding: 0 8px;
  border: 1.5px solid var(--kai-primary, #0877f4);
  border-radius: 9px;
  background: var(--kai-surface, #ffffff);
  color: var(--kai-primary-ink, #0755d1);
  font: inherit;
  font-size: 10.5px;
  line-height: 15px;
  white-space: nowrap;
  cursor: pointer;
}
.bm-cross:hover { background: var(--kai-primary-soft, #e6f6ff); }
.bm-cross:focus-visible { outline: 2px solid var(--kai-primary-soft, #83bbf9); outline-offset: 1px; }
.bm-canvas--working .bm-cross { pointer-events: none; opacity: 0.4; }
/* 类别徽标：单据＝主体深色底白字（行内 background）；查询橙；档案灰。 */
.bm-badge { flex: none; padding: 0 6px; border-radius: 4px; background: #4b5563; color: #ffffff; font-size: 10px; font-weight: 400; line-height: 16px; }
.bm-badge--query { background: #a4520a; }
.bm-badge--master { background: #4b5563; }
/* 「等你定」橙点：卡右上角。 */
.bm-card__dot { position: absolute; top: -4px; right: -4px; width: 12px; height: 12px; border: 1.5px solid #ffffff; border-radius: 50%; background: #f2b36b; pointer-events: none; }

/* 悬停 / 正在说 / 要找的 / 抽屉正在看：主色边 + 3px 主色 16% 光晕；刚更新：2px 主色边 + 右上角标（沿第一步）。 */
.bm-card--ring .bm-card__body { border-color: #0877f4 !important; box-shadow: 0 0 0 3px rgba(8, 119, 244, 0.16); }
.bm-card--highlighted .bm-card__body { border: 2px solid #0877f4 !important; }
.bm-card__badge {
  position: absolute;
  top: -8px;
  right: 8px;
  padding: 0 8px;
  border-radius: 8px;
  background: #0877f4;
  color: #ffffff;
  font-size: 10px;
  line-height: 16px;
  pointer-events: none;
}
.bm-card__badge--dim { background: #c9ced6; }
/* 待更新（台账 I-1165 K10）：蓝图相对试用版新加 / 改过、还没更新到试用版——左上角橙色角标 + 虚线边，与右上角主色的「刚更新」区别开；颜色取宿主主题变量。 */
.bm-card--stale .bm-card__body { border-style: dashed; border-color: var(--kai-warn, #e6a23c); }
.bm-card__stale {
  position: absolute;
  top: -8px;
  left: 8px;
  padding: 0 8px;
  border-radius: 8px;
  background: var(--kai-warn-soft, #fcf3e7);
  border: 1px solid var(--kai-warn-border, #f0c98a);
  color: var(--kai-warn-ink, #9a5b00);
  font-size: 10px;
  line-height: 14px;
  pointer-events: none;
}

/* 基础资料带的头：标题 13px 加粗灰 + 一句说明 11px。 */
.bm-masters-head { position: absolute; box-sizing: border-box; display: flex; flex-direction: column; gap: 2px; overflow: hidden; }
.bm-masters-head__title { font-size: 13px; font-weight: 700; line-height: 18px; color: #4b5563; }
.bm-masters-head__hint { font-size: 11px; line-height: 16px; color: #6b7280; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* 改图进行中：压暗成灰、整图不可点；被指着的卡呼吸高亮（沿第一步 §8.3）。 */
.bm-card--dim .bm-card__body { border-color: #e1e5eb; background: #f7f8fa; color: #9aa3ad; box-shadow: none; }
.bm-card--dim .bm-card__point,
.bm-card--dim .bm-card__line,
.bm-card--dim .bm-card__rules,
.bm-card--dim .bm-card__step,
.bm-card--dim .bm-pill,
.bm-card--dim .bm-tag { color: #9aa3ad; background: #f0f2f5; border-color: transparent; }
.bm-card--dim .bm-badge { background: #c9ced6; }
.bm-card--pulse .bm-card__body { border: 2px solid #0877f4 !important; animation: bm-pulse 1.4s ease-in-out infinite; }
@keyframes bm-pulse {
  0%,
  100% { box-shadow: 0 0 0 2px rgba(8, 119, 244, 0.12); }
  50% { box-shadow: 0 0 0 6px rgba(8, 119, 244, 0.3); }
}
@media (prefers-reduced-motion: reduce) {
  .bm-card--pulse .bm-card__body { animation: none; box-shadow: 0 0 0 4px rgba(8, 119, 244, 0.24); }
  .bm-card,
  .bm-edge { transition: none; }
}
.bm-canvas--working .bm-card { pointer-events: none; }
.bm-canvas--working .bm-card__tools { display: none; }

/* 「调整」：卡右上角上方（离上沿 6，下方留 6 的透明垫让鼠标从卡移到按钮时不丢悬停）；默认藏起，悬停 / 键盘聚焦时显出（沿第一步 .pc-tools）。 */
.bm-card__tools {
  position: absolute;
  bottom: 100%;
  right: 0;
  z-index: 2;
  display: inline-flex;
  padding-bottom: 6px;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.12s;
}
.bm-card:hover > .bm-card__tools,
.bm-card:focus-within > .bm-card__tools { opacity: 1; pointer-events: auto; }

/* ==== blueprint/map/BlueprintFlowTab.vue ==== */

/* 画布：与 ProcessChart 同尺寸（min-width / min-height 100% 铺满视口），小标层贴满画布、空白处不挡鼠标。 */
.bf-canvas { position: relative; flex: none; box-sizing: border-box; min-width: 100%; min-height: 100%; }
.bf-labels { position: absolute; inset: 0; pointer-events: none; }
/* 小标（设计稿 D2 .olay .lab：11px、高 18、圆角 9、白底 1px #E3E6EB 边、灰字）；能点的悬停变主色。 */
.bf-label {
  position: absolute;
  transform: translateX(-50%);
  box-sizing: border-box;
  max-width: 180px;
  height: 18px;
  padding: 0 7px;
  border: 1px solid #e3e6eb;
  border-radius: 9px;
  background: #ffffff;
  color: #4b5563;
  font: inherit;
  font-size: 11px;
  line-height: 16px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  pointer-events: auto;
  cursor: pointer;
}
.bf-label:hover { border-color: #83bbf9; color: #0755d1; }
.bf-label:focus-visible { outline: 2px solid #83bbf9; outline-offset: 1px; }
.bf-label--none { color: #9aa3ad; cursor: default; }
.bf-label--none:hover { border-color: #e3e6eb; color: #9aa3ad; }
.bf-state { margin: 24px 20px; color: #9aa3ad; font-size: 13px; text-align: center; }
/* K2b 主线页签（同第一步 .pc-lines）：画布上方一行胶囊，贴视口左侧（sticky），颜色取宿主主题变量。 */
.bf-lines { position: sticky; left: 0; z-index: 3; display: flex; gap: 6px; box-sizing: border-box; max-width: 100%; padding: 8px 12px; overflow-x: auto; scrollbar-width: thin; }
.bf-lines__tab {
  flex: none;
  max-width: 220px;
  height: 26px;
  padding: 0 12px;
  border: 1px solid var(--kai-line-2);
  border-radius: 13px;
  background: var(--kai-surface);
  color: var(--kai-ink-2);
  font: inherit;
  font-size: 12px;
  line-height: 24px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  cursor: pointer;
}
.bf-lines__tab[aria-selected='true'] { border-color: var(--kai-primary); background: var(--kai-primary); color: var(--kai-surface); }
.bf-lines__tab:hover:not([aria-selected='true']) { background: var(--kai-surface-2); }
.bf-lines__tab:focus-visible { outline: 2px solid var(--kai-primary-soft); outline-offset: 1px; }

/* ==== blueprint/map/BlueprintAccessMatrix.vue ==== */

.ba { box-sizing: border-box; display: flex; flex-direction: column; gap: 8px; width: max-content; min-width: 100%; padding: 16px 20px; color: #1f2329; font-size: 13px; line-height: 20px; }
.ba__title { margin: 0; font-size: 14px; font-weight: 700; }
.ba__desc { margin: 0 0 4px; font-size: 12px; color: #667085; }
.ba__empty { margin: 16px 0; color: #9aa3ad; }

/* 矩阵（设计稿 D2 .matrix：白底、1px #E3E6EB 行线、表头灰底 12px、格子居中；三态胶囊 .lv）。 */
.ba-matrix { border-collapse: separate; border-spacing: 0; border: 1px solid #e3e6eb; border-radius: 8px; background: #ffffff; }
.ba-matrix th,
.ba-matrix td { box-sizing: border-box; padding: 8px 10px; border-bottom: 1px solid #e3e6eb; text-align: center; white-space: nowrap; }
.ba-matrix tbody tr:last-child th,
.ba-matrix tbody tr:last-child td { border-bottom: 0; }
.ba-matrix thead th { background: #f0f2f5; color: #667085; font-size: 12px; font-weight: 500; }
.ba-matrix__group { border-left: 1px solid #e3e6eb; }
.ba-matrix__col { min-width: 84px; max-width: 140px; overflow: hidden; text-overflow: ellipsis; }
/* 岗位列 sticky 固定在左侧（视口横向滚动时不跟着走）。 */
.ba-matrix__corner,
.ba-matrix__role { position: sticky; left: 0; z-index: 2; text-align: left !important; }
.ba-matrix__corner { background: #f0f2f5; }
.ba-matrix__role { position: sticky; background: #ffffff; font-weight: 500; }
.ba-matrix__role-name { display: inline-block; max-width: 120px; overflow: hidden; text-overflow: ellipsis; vertical-align: middle; }
.ba-matrix__cell { position: relative; min-width: 84px; }
.ba-lv { display: inline-block; min-width: 28px; height: 22px; padding: 0 6px; border-radius: 4px; background: #f0f2f5; color: #9aa3ad; font-size: 12px; line-height: 22px; }
.ba-lv--fill { background: #e8f1fe; color: #0877f4; }
.ba-lv--view { background: #e7f6ec; color: #15803d; }
.ba-lv--edit { background: #fff4e5; color: #b45309; }
/* 悬停 / 正在说：格子主色内描边。 */
.ba-matrix__cell--ring,
.ba-matrix__role--ring { box-shadow: inset 0 0 0 1px #0877f4; }
/* 「调整」：格子 / 岗位格右上角浮出（悬停或键盘聚焦时显出），压在格子上方一半。 */
.ba-tools { position: absolute; top: -10px; right: 2px; z-index: 3; opacity: 0; pointer-events: none; transition: opacity 0.12s; }
.ba-matrix__role .ba-tools { top: 50%; transform: translateY(-50%); }
.ba-matrix__cell:hover > .ba-tools,
.ba-matrix__cell:focus-within > .ba-tools,
.ba-matrix__role:hover > .ba-tools,
.ba-matrix__role:focus-within > .ba-tools { opacity: 1; pointer-events: auto; }

.ba__legend { display: flex; flex-wrap: wrap; gap: 4px 16px; margin: 8px 0 0; font-size: 12px; color: #667085; }
.ba__origin { margin-top: 8px; padding: 12px 14px; border: 1px solid #e3e6eb; border-radius: 8px; background: #f6f7f9; max-width: 640px; }
.ba__origin-title { display: block; margin-bottom: 4px; }
.ba__origin-item,
.ba__origin-hint { margin: 0; }
.ba__origin-hint { margin-top: 4px; color: #667085; font-size: 12px; }

/* ==== blueprint/map/BlueprintApprovalsTab.vue ==== */

.bap { box-sizing: border-box; display: flex; flex-direction: column; gap: 12px; padding: 16px 20px; color: #1f2329; font-size: 13px; line-height: 20px; }
/* 空态：虚线框（沿 V4 审批页签）。 */
.bap__empty { display: flex; flex-direction: column; gap: 4px; max-width: 560px; padding: 20px 24px; border: 1px dashed #c5ccd6; border-radius: 8px; background: #fafbfc; }
.bap__empty-title { font-size: 14px; }
.bap__empty-hint { color: #667085; }
/* 审批卡（设计稿 .card：1px 边、圆角 8、白底）。 */
.bap-card { position: relative; max-width: 720px; padding: 12px 14px; border: 1px solid #e3e6eb; border-radius: 8px; background: #ffffff; }
.bap-card--ring { border-color: #0877f4; box-shadow: 0 0 0 3px rgba(8, 119, 244, 0.16); }
.bap-card--highlighted { border: 2px solid #0877f4; }
/* 待更新（台账 I-1165 K10）：虚线橙边 + 名字旁橙色小标签，颜色取宿主主题变量。 */
.bap-card--stale { border-style: dashed; border-color: var(--kai-warn, #e6a23c); }
.bap-card__stale { flex: none; padding: 0 8px; border-radius: 8px; background: var(--kai-warn-soft, #fcf3e7); color: var(--kai-warn-ink, #9a5b00); font-size: 11px; line-height: 16px; }
.bap-card__head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.bap-card__name { font-size: 14px; }
/* 一条链：哪张单 → 谁发起 → 条件 → 第 n 步谁审（不通过去哪）。 */
.bap-chain { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 4px; margin: 0; padding: 0; list-style: none; }
.bap-chain__item { display: inline-flex; align-items: center; gap: 6px; padding: 2px 10px; border-radius: 12px; background: #f0f2f5; white-space: nowrap; }
.bap-chain__arrow { color: #9aa3ad; }
.bap-chain__label { color: #667085; font-size: 12px; }
.bap-chain__reject { color: #b45309; font-size: 12px; }
.bap-card__tools { position: absolute; top: 8px; right: 10px; opacity: 0; pointer-events: none; transition: opacity 0.12s; }
.bap-card:hover > .bap-card__tools,
.bap-card:focus-within > .bap-card__tools { opacity: 1; pointer-events: auto; }
.bap__more { margin: 0; color: #667085; font-size: 12px; }

/* ==== blueprint/map/BlueprintFormDrawer.vue ==== */

/* 抽屉（设计稿 D3 .drawer：白底、1px 边、圆角左侧、13px）：宽 380，高随内容区；左侧投影与内容区分开。 */
.bd-drawer {
  box-sizing: border-box;
  width: 380px;
  max-width: 100%;
  height: 100%;
  display: flex;
  flex-direction: column;
  border-left: 1px solid #e3e6eb;
  background: #ffffff;
  box-shadow: -6px 0 16px rgba(31, 35, 41, 0.08);
  color: #1f2329;
  font-size: 13px;
  line-height: 20px;
}
.bd-drawer:focus,
.bd-drawer:focus-visible { outline: none; }
.bd-drawer__head { flex: none; padding: 12px 16px 8px; border-bottom: 1px solid #e3e6eb; }
.bd-drawer__title-row { display: flex; align-items: center; gap: 8px; min-width: 0; }
.bd-drawer__title { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 15px; }
.bd-drawer__spacer { flex: 1 1 0; }
.bd-drawer__close { flex: none; width: 28px; height: 28px; padding: 0; border: 0; background: transparent; color: #9aa3ad; font: inherit; font-size: 18px; cursor: pointer; }
.bd-drawer__close:hover { color: #1f2329; }
.bd-drawer__who { margin: 4px 0 0; font-size: 12px; color: #667085; }
.bd-badge { flex: none; padding: 0 5px; border-radius: 3px; font-size: 10px; line-height: 15px; }
.bd-badge--document { background: #e8f1fe; color: #0877f4; }
.bd-badge--master { background: #e7f6ec; color: #15803d; }
.bd-badge--query { background: #fff4e5; color: #b45309; }
/* 来自你的表样小标（I-1221）：与地图卡同款，取宿主主题变量。 */
.bd-tag-material { flex: none; padding: 0 5px; border: 1px solid var(--kai-primary, #0877f4); border-radius: 3px; background: var(--kai-primary-soft, #e8f1fe); color: var(--kai-primary-ink, #0755d1); font-size: 10px; line-height: 15px; white-space: nowrap; }

/* 正文：超出时只在这里滚（细滚动条），对话框本身不滚。 */
.bd-drawer__body { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: 4px 16px 16px; scrollbar-width: thin; scrollbar-color: #b9c0ca transparent; }
.bd-drawer__pending { margin: 16px 0; color: #667085; }
.bd-sec__title { margin: 12px 0 4px; font-size: 12px; font-weight: 500; letter-spacing: 0.04em; color: #667085; }
/* 一行（设计稿 .drawer .row：上下 3、下虚线分隔，右侧灰字类别）。 */
.bd-row { position: relative; margin: 0; padding: 3px 0; border-bottom: 1px dashed #e3e6eb; overflow-wrap: anywhere; }
.bd-row:last-child { border-bottom: 0; }
.bd-row--item { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
.bd-row__text { min-width: 0; }
.bd-row__sub { display: block; font-size: 12px; line-height: 18px; color: #667085; }
.bd-row__sub--undecided { color: #b45309; }
.bd-row__meta { flex: none; font-size: 12px; color: #667085; }
.bd-row--muted { color: #9aa3ad; }
/* K2c 状态回退：比状态行低一阶的灰字（取宿主主题变量，明暗随宿主）。 */
.bd-row--back { color: var(--kai-muted, #666666); }
/* 行悬停浮出「调整」（贴在行右侧，盖住类别小字）。 */
.bd-row__tools { position: absolute; top: 50%; right: 0; transform: translateY(-50%); opacity: 0; pointer-events: none; transition: opacity 0.12s; }
.bd-row--item:hover > .bd-row__tools,
.bd-row--item:focus-within > .bd-row__tools { opacity: 1; pointer-events: auto; }
.bd-users { display: flex; flex-wrap: wrap; gap: 6px; }
/* 「你表上的栏目」标题旁小字与「明细：」前缀（I-1232 二期 2i）：灰字，不加粗、不加字距。 */
.bd-sec__note { margin-left: 6px; font-weight: 400; letter-spacing: 0; color: #9aa3ad; }
.bd-users__label { font-size: 12px; line-height: 20px; color: #667085; white-space: nowrap; }
.bd-user { padding: 0 6px; border-radius: 4px; background: #f0f2f5; color: #4b5563; font-size: 12px; line-height: 20px; white-space: nowrap; }
.bd-user[data-level='fill'] { background: #e8f1fe; color: #0877f4; }
.bd-user[data-level='edit'] { background: #fff4e5; color: #b45309; }
.bd-user[data-level='view'] { background: #e7f6ec; color: #15803d; }

