/* 门厅域样式 —— layout-studio 工具条换主应用主题的皮（2026-10-28，P1）。
   主题：跟随主应用 body.theme-dark / theme-light；变量在 :root 与 .theme-dark 两处对齐主应用配色。
   布局：body.hall-mode #canvas 变纵向 flex（工具条在上、画布在下），厨柜视图不受影响。 */

#hallWorkspace, #hallListHost { display: none; }

body.hall-mode #canvas { display: flex; flex-direction: column; }
body.hall-mode #hallWorkspace { display: flex; flex: 1 1 auto; min-height: 0; position: relative; }
body.hall-mode #hallListHost { display: block; order: 60; }
/* 画方案视图藏柜体平面/图纸工作区；三维视图(cadWorkspace 是渲染宿主)必须放行——
   曾因无条件 display:none 导致门厅三维空白（2026-10-28 验收修复）。 */
body.hall-mode:not(.hall-3d-mode) #planWorkspace,
body.hall-mode:not(.hall-3d-mode) #cadWorkspace { display: none !important; }
body.hall-mode #canvas.plan-mode #planResult { display: none; }

/* 三维视图期间收起编辑面（编辑只在画方案，方案决策 7）；层/参数弹窗在 setToolbarVisible 里关闭 */
body.hall-mode.hall-3d-mode #hallListHost { display: none; }
body.hall-mode.hall-3d-mode #hallWorkspace { display: none; }

/* 门厅视图行（2026-10-29 批量改版②）：分缝图/开料图/效果图/施工图；画方案、立体图、透视图隐藏
   （分缝图顶替画方案作主编辑视图；施工图＝白底线稿三维，orbit3dClearViewBtn 对门厅放行） */
body.hall-mode #planViewBtn,
body.hall-mode #orbit3dWireframeViewBtn,
body.hall-mode #orbit3dViewBtn,
body.hall-mode #breakdownViewBtn,
body.hall-mode #bottomAiSketchBtn,
body.hall-mode #aiEffectBtn { display: none !important; }

/* 移动壳 / 平板壳隐藏门厅入口（V1 仅电脑端，方案决策 15） */
body.mobile-cad-app #hallEntryBtn,
body.android-tablet-app #hallEntryBtn,
body.mobile-cad-app .new-project-type-tabs [data-new-project-type="hall"],
body.android-tablet-app .new-project-type-tabs [data-new-project-type="hall"] { display: none !important; }

#hallWorkspace { padding: 8px 10px 10px; }
#cv { flex: 1 1 auto; display: flex; align-items: center; justify-content: center;
  overflow: hidden; position: relative; min-height: 240px; }
#cv svg { display: block; will-change: transform; flex-shrink: 0; }
.hall-blank { color: #b5b5b0; font-size: 13px; padding: 70px 0; }

/* ---------------- 工具条（两行平铺 · 居中自适应，2026-10-28 验收改版） ---------------- */
/* 变量挂 body.hall-mode：弹窗与清单等门厅 DOM 都在 body 下，统一继承这套配色 */
body.hall-mode {
  --hall-line: #d6ddd8;
  --hall-card: #ffffff;
  --hall-card2: #fafaf7;
  --hall-ink: #1f2a25;
  --hall-dim: #68766e;
  --hall-blue: #1f66d0;
  --hall-num: #1a1ac8;
}
/* 分缝图/开料图按钮只在门厅模式的视图切换行出现（画方案右边） */
body:not(.hall-mode) .hall-only { display: none !important; }
body.hall-mode.theme-dark {
  --hall-line: #4e5852;
  --hall-card: #252a27;
  --hall-card2: #2d332e;
  --hall-ink: #f4f7f4;
  --hall-dim: #bec9c1;
  --hall-blue: #6fa4e8;
  --hall-num: #9db4f0;
}
/* <i> 标签按原意只当小标签用，统一正体（浏览器默认斜体） */
#hallParamsModal i, #hallParamsModal em,
#hallListHost i, #hallListHost em { font-style: normal; }
/* 门厅参数弹窗（点底部参数条弹出，同厨柜参数窗效果）：骨架复用 .text-edit-modal/.text-edit-card */
#hallParamsModal .hall-params-card { width: min(760px, calc(100vw - 32px)); }
#hallParamsModal h3 { margin: 0; font-size: 15px; }
#hallParamsModal .hall-params-body { display: flex; flex-wrap: wrap; justify-content: center;
  align-items: stretch; row-gap: 8px; font-size: 12px; color: var(--hall-ink); }
#hallParamsModal .hall-params-foot { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
#hallParamsModal .hall-params-spacer { flex: 1 1 auto; }
#hallParamsModal .hall-params-danger { border-color: #e4b9b9 !important; color: #a04040 !important; }
#hallParamsModal .hall-params-primary { background: #1f66d0; border-color: #1f66d0; color: #fff; font-weight: 700; }
body.theme-dark #hallParamsModal .hall-params-danger { background: #303631; }
/* 底部参数条上的展开尾巴（跟随 .param-status-* 主题类，套门厅蓝） */
#paramStatusSummary .hall-summary-more { flex: 0 0 auto; margin-left: -22px; padding-left: 10px;
  color: var(--hall-blue, #1f66d0); font-size: 12px; font-weight: 800; white-space: nowrap; }
#hallParamsModal button { font: inherit; font-size: 11.5px; padding: 3px 8px; border-radius: 6px;
  border: 1px solid var(--hall-line); background: var(--hall-card); color: var(--hall-ink);
  cursor: pointer; transition: .12s; white-space: nowrap; box-sizing: border-box; }
#hallParamsModal button:hover { border-color: #8f9f96; }
#hallParamsModal button:active { transform: translateY(1px); }
#hallParamsModal button.pri.blu { background: #1f66d0; border-color: #1f66d0; color: #fff; }
#hallParamsModal button.pri.grn { background: #2f8f3f; border-color: #2f8f3f; color: #fff; }
#hallParamsModal button.ghost { color: var(--hall-dim); }
#hallParamsModal input[type="text"], #hallParamsModal input[type="number"] {
  font: inherit; font-size: 12px; padding: 2px 5px; height: 24px; border: 1px solid var(--hall-line); border-radius: 5px;
  background: var(--hall-card2); color: var(--hall-ink); width: 100%; min-width: 0; box-sizing: border-box; }
#hallParamsModal input:focus { outline: none; border-color: #7d9fd8; background: var(--hall-card); }
#hallParamsModal input[type="checkbox"] { accent-color: #5a5ad0; }

/* 区域两行（原版 region/trow 结构）：区域竖线分隔，行内底对齐；
   放不下时整个区域换行（组不拆散），区域自身不换行不出滚动条 */
.hall-region { display: flex; flex-direction: column; gap: 4px; padding: 1px 8px;
  border-right: 2px solid var(--hall-line); white-space: nowrap; }
.hall-region.grow { flex: 1 1 auto; min-width: 250px; border-right: none; white-space: normal; }
.hall-region.grow .trow { flex-wrap: wrap; }
.trow { display: flex; gap: 4px; align-items: flex-end; flex-wrap: nowrap; }
.gname { font-size: 11px; font-weight: 600; color: var(--hall-dim); height: 24px;
  display: flex; align-items: center; white-space: nowrap; flex-shrink: 0; padding-right: 1px; }
.gname b { color: var(--hall-num); margin-left: 2px; font-weight: 600; }
.gname.rd { color: #c06050; }
#hallParamsModal .f { width: 50px; display: flex; flex-direction: column; gap: 0; flex-shrink: 0; }
#hallParamsModal .f.s50 { width: 44px; }
#hallParamsModal .f label { font-size: 10px; line-height: 1.25; color: var(--hall-dim); white-space: nowrap; }
#hallParamsModal .f label.rd { color: #c06050; font-weight: 700; }
#hallParamsModal .f.grow2 { flex: 4 4 155px; min-width: 145px; flex-shrink: 1; }
#hallParamsModal .f.grow1 { flex: 2 2 110px; min-width: 100px; flex-shrink: 1; }
#hallParamsModal .btnf { display: flex; align-items: flex-end; flex-shrink: 0; }
#hallParamsModal .btnf button { height: 24px; padding: 2px 8px; }
#hallParamsModal .chips { display: flex; gap: 3px; align-items: flex-end; flex-shrink: 0; }
#hallParamsModal .chips button { font-size: 10.5px; padding: 2px 5px; height: 24px; border-radius: 11px; }
#hallParamsModal .chips button.on { background: var(--hall-ink); color: var(--hall-card); border-color: var(--hall-ink); }
#hallParamsModal .togmini { display: flex; align-items: center; gap: 3px; font-size: 11px;
  color: var(--hall-dim); height: 24px; margin: 0; cursor: pointer; white-space: nowrap; flex-shrink: 0; }
#hallParamsModal .togmini input[type="checkbox"] { width: 12px; height: 12px; margin: 0; flex-shrink: 0; }
#hallParamsModal input[type="checkbox"] { accent-color: #5a5ad0; }
#hallParamsModal .tabs { display: flex; gap: 3px; align-items: center; }
#hallParamsModal .tab { font-size: 11.5px; padding: 3px 9px; border: 1px solid transparent; border-radius: 7px;
  background: none; color: var(--hall-dim); }
#hallParamsModal .tab.on { background: var(--hall-ink); color: var(--hall-card); font-weight: 600; }
#hallParamsModal #cx, #hallParamsModal #cy { font-weight: 600; }
#hallParamsModal #cx.over, #hallParamsModal #cy.over { color: #c03030 !important;
  border-color: #d08080; background: #fdf3f3; }
#hallParamsModal .note { font-size: 12px; padding: 5px 9px; border-radius: 7px; margin-top: 1px;
  display: none; align-self: center; max-width: 90%; }
#hallParamsModal .note.show { display: block; }
#hallParamsModal .note.warn { background: #fdf6e8; color: #8a5a00; }
#hallParamsModal .note.bad { background: #fdecec; color: #a02020; }
#hallParamsModal .note.ok { background: #edf6ed; color: #2a6e2a; }

/* ---------------- 层/柱/墩带参数弹窗（2026-10-29 起；10-30 摘出改版：柱/墩带弹窗共用同一骨架） ----------------
   卡片骨架复用主应用 .text-edit-modal / .text-edit-card（深浅主题自动跟随），这里只补门厅内部布局。 */
#hallTierModal .hall-tier-edit-card { width: min(520px, calc(100vw - 32px)); }
/* 中和旧台阶栏行样式在弹窗里的残留：.tierRow 在弹窗内只作 input/click 委托钩子，
   老样式（25px 高 flex 行+边框+选中底色）会把内部网格挤变形——2026-10-29 用户截图反馈 */
#hallTierModal .tierRow, #hallPillarModal .tierRow, #hallPlinthModal .tierRow { display: block; height: auto; min-height: 0; padding: 0; margin: 0;
  background: none; border: none; border-radius: 0; }
#hallTierModal h3, #hallPillarModal h3, #hallPlinthModal h3 { margin: 0; font-size: 15px; }
#hallTierModal .hall-tier-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 10px 10px; align-items: end; }
#hallTierModal .hall-tier-grid label { display: grid; gap: 4px; min-width: 0;
  font-size: 11.5px; font-weight: 800; color: var(--hall-dim, #68766e); }
#hallTierModal .hall-tier-grid label.w2 { grid-column: span 2; }
#hallTierModal .hall-tier-grid label .tauto { margin-left: 4px; min-width: 0; }
#hallTierModal .hall-tier-grid input { font: inherit; font-size: 13px; padding: 5px 8px; height: 32px;
  border: 1px solid var(--hall-line, #d6ddd8); border-radius: 7px; background: var(--hall-card, #fff);
  color: var(--hall-ink, #1f2a25); width: 100%; min-width: 0; box-sizing: border-box; }
#hallTierModal .hall-tier-grid input:focus { outline: none; border-color: #7d9fd8; }
#hallTierModal .hall-tier-grid input.autofill { color: var(--hall-dim, #68766e); }
#hallTierModal .hall-tier-btns { grid-column: 1 / -1; display: flex; flex-wrap: wrap; gap: 6px; padding-top: 2px; }
#hallTierModal .hall-tier-btns .tside { font: inherit; font-size: 12px; padding: 5px 10px; height: 30px;
  border-radius: 7px; border: 1px solid var(--hall-line, #d6ddd8); background: var(--hall-card2, #fafaf7);
  color: var(--hall-ink, #1f2a25); cursor: pointer; white-space: nowrap; box-sizing: border-box; }
#hallTierModal .hall-tier-btns .tside:hover { border-color: #8f9f96; }
#hallTierModal .hall-tier-foot, #hallPillarModal .hall-tier-foot, #hallPlinthModal .hall-tier-foot { display: flex; align-items: center; gap: 8px; }
#hallTierModal .hall-tier-hint, #hallPillarModal .hall-tier-hint, #hallPlinthModal .hall-tier-hint { flex: 1 1 auto; font-size: 11.5px; color: var(--hall-dim, #68766e); }
#hallTierModal .hall-tier-danger, #hallTierModal .hall-tier-primary,
#hallPillarModal .hall-tier-danger, #hallPillarModal .hall-tier-primary,
#hallPlinthModal .hall-tier-danger, #hallPlinthModal .hall-tier-primary { font: inherit; font-size: 12.5px;
  padding: 6px 14px; height: 32px; border-radius: 8px; cursor: pointer; box-sizing: border-box; }
#hallTierModal .hall-tier-danger, #hallPillarModal .hall-tier-danger, #hallPlinthModal .hall-tier-danger { border: 1px solid #e4b9b9; background: #fff; color: #a04040; }
#hallTierModal .hall-tier-danger:hover, #hallPillarModal .hall-tier-danger:hover, #hallPlinthModal .hall-tier-danger:hover { background: #fdf3f3; }
#hallTierModal .hall-tier-primary, #hallPillarModal .hall-tier-primary, #hallPlinthModal .hall-tier-primary { border: 1px solid #1f66d0; background: #1f66d0; color: #fff; font-weight: 700; }
body.theme-dark #hallTierModal .hall-tier-danger,
body.theme-dark #hallPillarModal .hall-tier-danger,
body.theme-dark #hallPlinthModal .hall-tier-danger { background: #303631; }
#hallTierModal i, #hallTierModal em,
#hallPillarModal i, #hallPillarModal em,
#hallPlinthModal i, #hallPlinthModal em { font-style: normal; }
/* 柱子/墩带弹窗（10-30 摘出改版）：三个字段一行的三列网格，同斜坡弹窗口径 */
#hallPillarModal .hall-tier-edit-card, #hallPlinthModal .hall-tier-edit-card { width: min(440px, calc(100vw - 32px)); }
#hallPillarModal .hall-tier-grid, #hallPlinthModal .hall-tier-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px; align-items: end; }
#hallPillarModal .hall-tier-grid label, #hallPlinthModal .hall-tier-grid label { display: grid; gap: 4px; min-width: 0;
  font-size: 11.5px; font-weight: 800; color: var(--hall-dim, #68766e); }
#hallPillarModal .hall-tier-grid input, #hallPlinthModal .hall-tier-grid input { font: inherit; font-size: 13px; padding: 5px 8px; height: 32px;
  border: 1px solid var(--hall-line, #d6ddd8); border-radius: 7px; background: var(--hall-card, #fff);
  color: var(--hall-ink, #1f2a25); width: 100%; min-width: 0; box-sizing: border-box; }
#hallPillarModal .hall-tier-grid input:focus, #hallPlinthModal .hall-tier-grid input:focus { outline: none; border-color: #7d9fd8; }
/* 斜坡弹窗（双击斜坡打开）：骨架/中和规则同层弹窗；删除斜坡按钮用弹窗系 danger 样式 */
#hallRampModal .hall-tier-edit-card { width: min(460px, calc(100vw - 32px)); }
#hallRampModal .tierRow { display: block; height: auto; min-height: 0; padding: 0; margin: 0;
  background: none; border: none; border-radius: 0; }
#hallRampModal .hall-tier-foot { display: flex; align-items: center; gap: 8px; }
#hallRampModal .hall-tier-hint { flex: 1 1 auto; font-size: 11.5px; color: var(--hall-dim, #68766e); }
#hallRampModal .hall-tier-danger, #hallRampModal .hall-tier-primary { font: inherit; font-size: 12.5px;
  padding: 6px 14px; height: 32px; border-radius: 8px; cursor: pointer; box-sizing: border-box; }
#hallRampModal .hall-tier-danger { border: 1px solid #e4b9b9; background: #fff; color: #a04040; }
#hallRampModal .hall-tier-danger:hover { background: #fdf3f3; }
#hallRampModal .hall-tier-primary { border: 1px solid #1f66d0; background: #1f66d0; color: #fff; font-weight: 700; }
body.theme-dark #hallRampModal .hall-tier-danger { background: #303631; }
#hallRampModal .hall-tier-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px; align-items: end; }
#hallRampModal .hall-tier-grid label { display: grid; gap: 4px; min-width: 0;
  font-size: 11.5px; font-weight: 800; color: var(--hall-dim, #68766e); }
#hallRampModal .hall-tier-grid label.w2 { grid-column: span 2; }
#hallRampModal .hall-tier-grid input[type="number"], #hallRampModal .hall-tier-grid input[type="text"] {
  font: inherit; font-size: 13px; padding: 5px 8px; height: 32px;
  border: 1px solid var(--hall-line, #d6ddd8); border-radius: 7px; background: var(--hall-card, #fff);
  color: var(--hall-ink, #1f2a25); width: 100%; min-width: 0; box-sizing: border-box; }
#hallRampModal input[type="checkbox"] { width: 15px; height: 15px; accent-color: #5a5ad0; justify-self: start; }
#hallRampModal .hall-ramp-side { display: flex; gap: 6px; }
#hallRampModal .rside { font: inherit; font-size: 12.5px; padding: 5px 12px; height: 32px; border-radius: 7px;
  border: 1px solid var(--hall-line, #d6ddd8); background: var(--hall-card2, #fafaf7);
  color: var(--hall-ink, #1f2a25); cursor: pointer; box-sizing: border-box; }
#hallRampModal .rside.on { background: #1f66d0; border-color: #1f66d0; color: #fff; }
/* 风格对齐（2026-10-30 用户反馈：斜坡弹窗出现斜体+蓝紫强调色，不是本应用风格）——
   em/i 一律正体；自动值(.tauto/坡面数据)用正文墨色，弃用原版 --hall-num 蓝紫 */
#hallRampModal i, #hallRampModal em { font-style: normal; }
#hallRampModal .hall-ramp-stats em { font-size: 12px; color: var(--hall-ink, #1f2a25); font-weight: 700; }
/* 参数弹窗的「台阶」操作区（置顶整行：斜坡行＋加台阶/柱子/墩带；行样式沿用 .tierRow） */
.hall-region-acts-top { flex: 1 1 100%; border-right: none; border-bottom: 2px solid var(--hall-line);
  padding-bottom: 6px; margin-bottom: 2px; white-space: normal; }
.hall-region-acts .actsrow { align-items: center; flex-wrap: wrap; }
.hall-region-acts .gname { height: auto; align-self: center; }
.tier-acts-host { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.tier-acts-host .tierRow, .tier-acts-host .tierActs { padding: 1px 4px; }
.tierActs { justify-content: center; }
.tierRow { display: flex; align-items: center; gap: 6px; height: 25px; padding: 1px 6px;
  border: 1px solid var(--hall-line); border-radius: 6px; background: var(--hall-card2); cursor: pointer; }
.tierRow.on { border-color: var(--hall-blue); background: rgba(31,102,208,.09); }
.tierRow .tname { font-size: 11px; font-weight: 700; color: var(--hall-blue); white-space: nowrap; min-width: 40px; }
.tierRow .tf { display: flex; align-items: center; gap: 2px; font-size: 10.5px; color: var(--hall-dim); white-space: nowrap; }
.tierRow .tf input { width: 48px; padding: 1px 3px; font-size: 11.5px; height: 21px; text-align: center; }
.tierRow .tf.tfl input { width: 118px; text-align: left; }
.tierRow .tauto { font-size: 12px; font-weight: 700; color: var(--hall-ink, #1f2a25); min-width: 46px; font-style: normal; }
.tierRow input.autofill { color: var(--hall-dim); }
.tierRow .tside { font-size: 11px; padding: 1px 7px; height: 22px; background: var(--hall-card2);
  border-color: var(--hall-line); color: var(--hall-dim); border-radius: 5px; }
.tierRow .tside.on, .tierRow .rside.on { background: var(--hall-blue); border-color: var(--hall-blue); color: #fff; }
.tierRow.rampRow { margin-top: 3px; background: rgba(180,160,80,.06); }
.tierRow .tdel { border: none; background: none; color: #c06060; font-size: 15px; line-height: 1;
  cursor: pointer; padding: 2px 5px; }
.tierRow .tdel:hover { color: #a02020; }
.tierActs { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.tierActs .tf { display: flex; align-items: center; gap: 3px; font-size: 11.5px; color: var(--hall-dim); white-space: nowrap; }
.tierActs .tf input { width: 52px; padding: 2px 4px; font-size: 12px; height: 24px; text-align: center; }
.pcount { font-size: 12px; color: var(--hall-dim); margin: 0 2px; }

/* ---------------- 清单面板（右缘常驻，可收起） ---------------- */
#hallListHost { position: absolute; top: 10px; right: 10px; bottom: 10px; width: 300px;
  z-index: 8; pointer-events: none; }
.hall-list-card { pointer-events: auto; background: var(--hall-card, #fff); border: 1px solid var(--hall-line, #d6ddd8);
  border-radius: 12px; display: flex; flex-direction: column; max-height: 100%; position: relative;
  box-shadow: 0 8px 28px rgba(13,30,21,.14); color: var(--hall-ink, #1f2a25); }
body.theme-dark .hall-list-card { background: #252a27; border-color: #4e5852; color: #f4f7f4; }
.hall-list-card h3 { font-size: 12px; font-weight: 600; color: var(--hall-dim, #68766e); margin: 10px 12px 6px; }
.hall-list-card .ltoggle { position: absolute; top: 7px; right: 8px; z-index: 3; padding: 2px 9px;
  font-size: 11.5px; color: var(--hall-dim, #68766e); border: none; background: none; cursor: pointer; }
.hall-list-card .tblwrap { overflow: auto; max-height: 60vh; padding: 0 4px; }
.hall-list-card table { border-collapse: collapse; width: 100%; font-size: 12px; }
.hall-list-card th, .hall-list-card td { padding: 4px 7px; border-bottom: 1px solid rgba(128,140,132,.2);
  text-align: left; white-space: nowrap; }
.hall-list-card th { color: var(--hall-dim, #68766e); font-weight: 600; font-size: 11px;
  position: sticky; top: 0; background: var(--hall-card, #fafaf7); }
body.theme-dark .hall-list-card th { background: #2d332e; }
.hall-list-card td.num { text-align: right; font-variant-numeric: tabular-nums; }
.hall-list-card .sum { display: flex; gap: 12px; flex-wrap: wrap; padding: 8px 12px; font-size: 12px;
  color: var(--hall-dim, #68766e); border-top: 1px solid rgba(128,140,132,.2); }
.hall-list-card .sum b { font-weight: 600; color: var(--hall-ink, #1f2a25); }
body.theme-dark .hall-list-card .sum b { color: #f4f7f4; }

/* ---------------- 弹窗（推荐排版 / 智能推荐） ---------------- */
.modal { position: fixed; inset: 0; background: rgba(24,32,28,.38); display: flex;
  align-items: center; justify-content: center; z-index: 260; padding: 14px; }
.mbox { background: var(--hall-card, #fff); border-radius: 14px; box-shadow: 0 12px 40px rgba(0,0,0,.22);
  max-width: 560px; width: 100%; max-height: 82vh; overflow: auto; padding: 15px 17px 17px;
  color: var(--hall-ink, #1f2a25); }
body.theme-dark .mbox { background: #252a27; color: #f4f7f4; }
.mhead { display: flex; justify-content: space-between; align-items: center; margin-bottom: 4px;
  cursor: move; user-select: none; }
.mhead b { font-size: 15px; }
.mhead button { border: none; background: rgba(128,140,132,.15); border-radius: 8px; width: 30px;
  height: 30px; font-size: 14px; cursor: pointer; color: inherit; }
.hint { font-size: 12px; color: var(--hall-dim, #68766e); line-height: 1.6; }
.cand { display: flex; flex-direction: column; gap: 5px; margin-top: 9px; }
/* 全局 button 带 height:32px，候选卡片是两行内容，必须放开高度 */
.cand button { display: block; width: 100%; height: auto; text-align: left; padding: 7px 9px; border-radius: 8px;
  line-height: 1.45; background: transparent; color: inherit; border: 1px solid var(--hall-line, #d6ddd8); }
.cand button:hover { border-color: #7d9fd8; }
.cand .r1 { display: flex; justify-content: space-between; gap: 8px; align-items: baseline; }
.cand .mode { font-size: 11px; color: var(--hall-blue, #1f66d0); background: rgba(31,102,208,.1);
  border-radius: 4px; padding: 1px 5px; }
.cand .meta { font-size: 11.5px; color: var(--hall-dim, #68766e); margin-top: 2px; }

/* ---------------- 打印：只出画布与清单 ---------------- */
@media print {
  body.hall-mode .app-header, body.hall-mode .sidebar, body.hall-mode .status-strip,
  body.hall-mode .log { display: none !important; }
}

/* ---------------- 上线总开关（服务端注入 html.hall-feature-off，见 docs/门厅上线开关-20261028.md） ----------------
   关＝门厅入口全部不可见：左侧「厅」按钮、新建弹窗第四页签、打开方案「门厅」筛选。 */
html.hall-feature-off #hallEntryBtn,
html.hall-feature-off [data-new-project-type="hall"],
html.hall-feature-off [data-project-open-type="hall"] { display: none !important; }

/* ---------------- 门厅模式隐藏厨柜绘制功能（2026-10-28 用户改拍板，替代原「工具箱置灰提示」方案） ----------------
   左侧工具箱整列收起（网格列同步归零，避开手机/平板壳的响应式网格）；
   「画图工具」标签与顶栏厨柜专属按钮（均分/拆单/吊柜/台面）一并隐藏；
   撤销/重做/删除保留（2026-10-29 批量改版⑥：门厅接快照式撤销），顶栏序＝打开 新建 保存 撤销 重做 删除 清单。
   退出门厅模式（打开厨柜方案/新建）后自动恢复。 */
#hallListBtn.on { background: var(--hall-blue, #1f66d0); border-color: var(--hall-blue, #1f66d0); color: #fff; }
body.hall-mode:not(.mobile-cad-app):not(.android-tablet-app) .app { grid-template-columns: 0 minmax(760px, 1fr); }
body.hall-mode .sidebar { display: none !important; }
body.hall-mode #cadToolbarToggleBtn,
body.hall-mode #quickSplitToggleBtn,
body.hall-mode #hardwareLabelBtn,
body.hall-mode #toolbarWallCabinetMenuBtn,
body.hall-mode #generateCountertopWorkspaceBtn,
body.hall-mode #generateSalesDocumentBtn { display: none !important; }


/* ---------------- 深色主题：分缝图/开料图 SVG 换皮（批量改版③） ----------------
   hall-core 的 SVG 颜色是硬编码属性值；CSS 属性选择器可覆盖表现属性，
   不动同事的 hall-core，按「纸面/石材灰阶/线墨/标注蓝」分组映射到深色。 */
body.theme-dark #cv svg [fill="#ffffff"] { fill: #212121; }   /* 纸面＝应用深色画布底 (.canvas-panel) */
body.theme-dark #cv svg [fill="#fbfbf8"] { fill: #232323; }
body.theme-dark #cv svg [fill="#e9e9e3"] { fill: #2c2c2c; }   /* 石材阶灰（中性灰阶，层间保持可辨） */
body.theme-dark #cv svg [fill="#e7e7e0"] { fill: #2d2d2d; }
body.theme-dark #cv svg [fill="#e2e2da"] { fill: #2f2f2f; }
body.theme-dark #cv svg [fill="#e0e0d9"] { fill: #303030; }
body.theme-dark #cv svg [fill="#deded7"] { fill: #313131; }
body.theme-dark #cv svg [fill="#dcdcd3"] { fill: #323232; }
body.theme-dark #cv svg [fill="#d9d9d1"] { fill: #333333; }
body.theme-dark #cv svg [fill="#d8d8d0"] { fill: #343434; }
body.theme-dark #cv svg [fill="#d4d4cc"] { fill: #353535; }
body.theme-dark #cv svg [fill="#c9c9c1"] { fill: #373737; }
body.theme-dark #cv svg [fill="#c8c8bf"] { fill: #383838; }
body.theme-dark #cv svg [fill="#b3b3ae"] { fill: #3a3a3a; }
body.theme-dark #cv svg [stroke="#333"] { stroke: #d8d8d0; }  /* 线墨（对齐 --plan-line-strong-color） */
body.theme-dark #cv svg [stroke="#444"] { stroke: #c4c4bc; }
body.theme-dark #cv svg [stroke="#555"] { stroke: #b0b0a8; }
body.theme-dark #cv svg [stroke="#555550"] { stroke: #a8a8a0; }
body.theme-dark #cv svg [stroke="#5c5c55"] { stroke: #9c9c94; }
body.theme-dark #cv svg [stroke="#6a6a64"] { stroke: #8e8e86; }
body.theme-dark #cv svg [stroke="#8a8a82"] { stroke: #808078; }
body.theme-dark #cv svg [stroke="#9a9a94"] { stroke: #74746c; }
body.theme-dark #cv svg [stroke="#1a1ac8"], body.theme-dark #cv svg [stroke="#1a50d8"] { stroke: #8fa8f0; } /* 标注 */
body.theme-dark #cv svg [stroke="#b26a00"] { stroke: #e0a84e; }
body.theme-dark #cv svg [stroke="#b02a1f"] { stroke: #e07060; }
body.theme-dark #cv svg [stroke="#1f66d0"] { stroke: #6fa4e8; } /* 选中层高亮 */
body.theme-dark #cv svg [fill="#1f1f1d"], body.theme-dark #cv svg [fill="#2a2a26"],
body.theme-dark #cv svg [fill="#1a1a1a"] { fill: #f4f4f0; }   /* 深色文字反白（＝--text） */
body.theme-dark #cv svg [fill="#1a1ac8"], body.theme-dark #cv svg [fill="#1a50d8"] { fill: #8fa8f0; }
body.theme-dark #cv svg [fill="#b26a00"] { fill: #e0a84e; }
body.theme-dark #cv svg [fill="#b02a1f"] { fill: #e07060; }

/* ---------------- 新建弹窗 · 门厅基础数据面板（批量改版①，同厨柜页签表单形态） ---------------- */
/* 共用表单的柜体同步逻辑会重新显示字段，门厅仅保留方案名与自身参数。 */
#paramsModal.new-project-hall-mode #newProjectTypeTabs,
#paramsModal.new-project-hall-mode #paramsTab .form-grid > label:not(#projectNameField),
#paramsModal.new-project-hall-mode #paramsTab .form-grid > .current-param-section-heading:not(:first-of-type) {
  display: none !important;
}
#newProjectHallPanel { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 8px; grid-column: 1 / -1; padding: 2px 0 4px;
  border-top: 1px dashed var(--line, #d2d2d2); }
#newProjectHallPanel.hidden { display: none; }
#newProjectHallPanel label { display: grid; gap: 4px; margin: 0; padding: 7px;
  border: 1px solid var(--line, #d2d2d2); border-radius: var(--radius, 8px);
  background: linear-gradient(180deg, #f9fbf8, var(--surface-2, #f2f4f0));
  color: var(--muted, #68766e); font-size: 11px; font-weight: 750; }
#newProjectHallPanel label.wide { grid-column: span 2; }
#newProjectHallPanel input { font: inherit; font-size: 13px; padding: 6px 8px; height: 32px;
  border: 1px solid var(--line, #cfd6d2); border-radius: 7px; background: #fff;
  color: var(--text, #1f2a25); width: 100%; min-width: 0; box-sizing: border-box; }
#newProjectHallPanel input:focus { outline: none; border-color: #7d9fd8; }
body.theme-dark #newProjectHallPanel label { background: #303631; color: #bec9c1; }
body.theme-dark #newProjectHallPanel input { background: #252a27; border-color: #59645e; color: #f4f7f4; }

/* 打印：门厅弹窗不进纸 */
@media print {
  #hallTierModal, #hallParamsModal { display: none !important; }
}

/* ---------------- 左侧门厅工具列（2026-10-29 摘出改版；10-30 标注/导出/清空入列＋紧凑化） ----------------
   锚定在顶部工具行与底部状态条之间（top/bottom 双锚＋垂直居中）：任何屏高都压不到方案名；
   内容超高只在列内滚动（2026-10-30 用户反馈列压住方案名）。 */
.hall-toolbox {
  position: fixed; left: 8px; top: 50%; transform: translateY(-50%);
  max-height: calc(100vh - 170px);   /* 钳在顶部工具行与底部状态条之间，压不到方案名 */
  z-index: 40; display: flex; flex-direction: column; gap: 6px;
  min-width: 64px; padding: 8px 6px; border-radius: 11px;
  background: var(--hall-card, #fff); border: 1px solid var(--hall-line, #d6ddd8);
  box-shadow: 0 8px 24px rgba(20, 30, 25, .14);
  overflow-y: auto;
}
.hall-toolbox.hidden { display: none; }
.hall-toolbox .tb-item {
  font: inherit; font-size: 12.5px; padding: 6px 4px; border-radius: 8px; cursor: pointer;
  border: 1px solid var(--hall-line, #d6ddd8); background: transparent; color: inherit;
  height: auto; min-height: 30px; line-height: 1.3; box-sizing: border-box; text-align: center;
}
.hall-toolbox .tb-item:hover { border-color: #7d9fd8; }
.hall-toolbox .tb-item.on { border-color: var(--hall-blue, #1f66d0);
  background: rgba(31, 102, 208, .1); color: var(--hall-blue, #1f66d0); }
body.theme-dark .hall-toolbox { background: var(--hall-card, #252a27); border-color: var(--hall-line, #4a544e); }
body.theme-dark .hall-toolbox .tb-item { border-color: var(--hall-line, #4a544e); }
body.theme-dark .hall-toolbox .tb-item.on { background: rgba(90, 150, 240, .16); color: #9cc0f8; }

/* 层弹窗快速排版行（收编自参数弹窗横竖排版区） */
#hallTierModal .hall-qd { display: flex; flex-direction: column; gap: 6px; margin-top: 8px;
  padding: 8px; border: 1px dashed var(--hall-line, #d6ddd8); border-radius: 8px; }
#hallTierModal .qd-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
#hallTierModal .qd-name { font-size: 12px; color: var(--hall-dim, #68766e); min-width: 30px; }
#hallTierModal .qd-f { display: flex; align-items: center; gap: 4px; font-size: 12px; color: var(--hall-dim, #68766e); }
#hallTierModal .qd-f input { width: 64px; }
#hallTierModal .qd-chips { display: inline-flex; gap: 4px; }
#hallTierModal .qd-chips button { font-size: 11.5px; padding: 3px 8px; border-radius: 6px;
  border: 1px solid var(--hall-line, #d6ddd8); background: transparent; color: inherit;
  cursor: pointer; height: auto; min-height: 24px; }
#hallTierModal .qd-chips button.on { border-color: var(--hall-blue, #1f66d0);
  background: rgba(31, 102, 208, .1); color: var(--hall-blue, #1f66d0); }
#hallTierModal .qd-apply { font: inherit; font-size: 12px; padding: 5px 10px; border-radius: 7px;
  border: 1px solid var(--hall-blue, #1f66d0); color: var(--hall-blue, #1f66d0);
  background: rgba(31, 102, 208, .08); cursor: pointer; height: auto; min-height: 28px; }
body.theme-dark #hallTierModal .qd-chips button.on { background: rgba(90, 150, 240, .16); color: #9cc0f8; }
body.theme-dark #hallTierModal .qd-apply { color: #9cc0f8; border-color: #9cc0f8;
  background: rgba(90, 150, 240, .12); }

/* 参数弹窗标注行的提示尾巴 */
#hallParamsModal .hint-inline { font-size: 11.5px; color: var(--hall-dim, #68766e); }

/* 打印：门厅弹窗不进纸（含柱/墩带/斜坡弹窗） */
@media print {
  #hallTierModal, #hallParamsModal, #hallRampModal, #hallPillarModal, #hallPlinthModal { display: none !important; }
  .hall-toolbox { display: none !important; }
}

/* 左列分组标题与清空（10-30 标注/导出入列；标题行已按用户反馈删除，首组不带虚线） */
.hall-toolbox .tb-sec { font-size: 10.5px; color: var(--hall-dim, #68766e); text-align: center;
  margin-top: 5px; padding-top: 6px; border-top: 1px dashed var(--hall-line, #d6ddd8);
  letter-spacing: 2px; }
.hall-toolbox .tb-sec:first-child { margin-top: 0; padding-top: 0; border-top: none; }
.hall-toolbox .tb-item[data-clear] { border-color: #e4b9b9; color: #a04040; }
.hall-toolbox .tb-item[data-clear]:hover { background: #fdf3f3; border-color: #d8a0a0; }
body.theme-dark .hall-toolbox .tb-item[data-clear] { border-color: #7a4a4a; color: #d8a0a0; }
#hallParamsModal .hall-params-foot-note { font-size: 11.5px; color: var(--hall-dim, #68766e); }

/* 底部反馈条（10-30）：QMSG 在参数弹窗关闭时的可见通道，观感对齐 CADToast */
#hallToast { position: fixed; left: 50%; bottom: 96px; transform: translateX(-50%) translateY(6px);
  z-index: 60; max-width: min(460px, calc(100vw - 32px)); padding: 8px 14px; border-radius: 8px;
  background: #2a2a2a; border: 1px solid rgba(255,255,255,.18); color: #f5f5f5;
  font-size: 12.5px; line-height: 1.5; box-shadow: 0 10px 30px rgba(0,0,0,.32);
  opacity: 0; pointer-events: none; transition: opacity .18s ease, transform .18s ease; }
#hallToast.show { opacity: 1; transform: translateX(-50%) translateY(0); }
