:root {
  font-synthesis: none;
}

@font-face {
  font-family: "Workbench CJK";
  src: url("/static/fonts/SourceHanSansSC-Regular.otf") format("opentype");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Workbench CJK";
  src: url("/static/fonts/SourceHanSansSC-Bold.otf") format("opentype");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

:root {
  /* 工具层中性配色：近白暖中性底 + 砖红点缀（品牌色只做强调，不大面积铺）。
     2026-05-26 起从墨绿系改为砖红系，与品牌一致；绿仅保留为「成功/达标」语义色。*/
  /* 2026-06-12 配色体系v2（主理人原话：黑不溜秋看着困/不要红色换成绿色懵逼/该选的和已做的一个颜色看不懂）：
     底色回暖米白（不是冷灰白也不是旧豆绿，是"原暖调降一点点"）；主彩=陶土暖橙（黄土高原土地感）；
     已选态一律主彩，墨黑墨灰退役；红只留「缺/错」，琥珀留「待确认」。 */
  --bg: #faf7f1;            /* 暖米白：冷灰白 #fafbfc 退场 */
  --panel: #ffffff;
  --ink: #28251f;
  --sub: #5f5a51;
  --quiet: #928d83;
  --line: #e8e3da;          /* 分隔线随底色转暖中性 */
  --line-strong: #d6cfc3;
  /* 主彩陶土暖橙：--jade 名称保留（19处引用），值从砖红调到陶土橙，一次让全站强调变暖 */
  --jade: #c2602e;
  --jade-dark: #9c4a20;
  --accent: #c2602e;        /* 主彩别名（新代码用） */
  --accent-soft: #f5dcc8;   /* 已选普通档：主彩浅底深字 */
  --accent-faint: #f3efe9;  /* 待选档：暖浅灰底 */
  --blue: #2f5f8c;
  --amber: #b77818;
  --clay: #914f3a;
  --ok: #3d7a55;
  --mint: #f3ece6;
  --gold-soft: #fbf3e3;
  --red-soft: #fbeee8;
  --shadow: 0 10px 30px rgba(40, 37, 31, 0.07);
  --radius: 8px;
  --control-h: 38px;
}

* {
  box-sizing: border-box;
}

body {
  margin: 0;
  background: var(--bg); /* B1-21：去掉暖色渐变，整页清爽近白 */
  color: var(--ink);
  font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", sans-serif;
  font-size: 15px;
  line-height: 1.65;
  letter-spacing: 0.01em;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

button,
input,
select,
textarea {
  font: inherit;
}

button {
  min-height: var(--control-h);
  border: 1px solid var(--line-strong);
  background: #fff;
  color: var(--ink);
  border-radius: 8px;
  padding: 8px 12px;
  cursor: pointer;
  transition: 140ms ease;
}

button:hover {
  border-color: var(--jade);
  transform: translateY(-1px);
}

button:disabled {
  cursor: not-allowed;
  opacity: .55;
  transform: none;
}

.btn-primary {
  background: var(--jade);
  color: #fff;
  border-color: var(--jade-dark);
}

.btn-primary:hover {
  background: var(--jade-dark);
}

.btn-blue {
  background: var(--blue);
  color: #fff;
  border-color: #234d72;
}

.btn-amber {
  background: var(--amber);
  color: #fff;
  border-color: #996111;
}

.btn-danger {
  background: #fff7f4;
  color: #9d3d29;
  border-color: #e9b5a9;
}

input,
select,
textarea {
  width: 100%;
  min-height: var(--control-h);
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fff;
  color: var(--ink);
  padding: 8px 10px;
  outline: none;
}

textarea {
  min-height: 88px;
  resize: vertical;
}

input:focus,
select:focus,
textarea:focus {
  border-color: var(--jade);
  box-shadow: 0 0 0 3px rgba(183, 71, 42, .12);
}

.boot {
  padding: 48px;
  color: var(--sub);
}

.app-shell {
  min-height: 100vh;
  display: flex;
  align-items: stretch;
}

.sidebar {
  width: 212px;
  flex: 0 0 212px;
  background: var(--panel);
  border-right: 1px solid var(--line);
  display: flex;
  flex-direction: column;
  position: sticky;
  top: 0;
  height: 100vh;
}

.sidebar-brand {
  display: flex;
  gap: 10px;
  align-items: center;
  padding: 16px 16px 14px;
  border-bottom: 1px solid var(--line);
  cursor: pointer;
  min-width: 0;
}

.sidebar-brand-text {
  display: flex;
  flex-direction: column;
  line-height: 1.25;
  min-width: 0;
}

.sidebar-brand-text b {
  font-size: 15px;
}

.sidebar-brand-text span {
  font-size: 11px;
  color: var(--quiet);
}

.sidebar-nav {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 10px 8px;
  flex: 1 1 auto;
  overflow-y: auto;
}

.nav-item {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  text-align: left;
  border: none;
  background: transparent;
  color: var(--ink);
  padding: 10px 12px;
  border-radius: 8px;
  font-size: 14px;
  cursor: pointer;
}

.nav-item:hover {
  background: var(--soft);
}

.nav-item.on {
  background: var(--red-soft);
  color: var(--clay);
  font-weight: 650;
}

.nav-ico {
  font-size: 16px;
  width: 20px;
  text-align: center;
  flex: 0 0 auto;
}

.sidebar-foot {
  padding: 12px;
  border-top: 1px solid var(--line);
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.nav-new {
  width: 100%;
}

.nav-sub {
  width: 100%;
  background: transparent;
  border: 1px solid var(--line);
  color: var(--sub);
}

.sidebar-user {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-top: 4px;
  padding-top: 10px;
  border-top: 1px solid var(--line);
}

.sidebar-user-info {
  display: flex;
  flex-direction: column;
  line-height: 1.2;
  min-width: 0;
  flex: 1;
}

.sidebar-user-acts {
  display: flex;
  flex-direction: column;
  gap: 2px;
  align-items: flex-end;
  flex-shrink: 0;
}

.sidebar-user-info b {
  font-size: 13px;
}

.sidebar-user-info span {
  font-size: 11px;
  color: var(--quiet);
}

.login-wrap {
  min-height: 100vh;
  display: grid;
  place-items: center;
  padding: 24px;
}

.login-card {
  width: 100%;
  max-width: 360px;
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: 16px;
  box-shadow: var(--shadow);
  padding: 28px 26px;
  display: flex;
  flex-direction: column;
}

.login-brand {
  display: flex;
  gap: 12px;
  align-items: center;
  margin-bottom: 20px;
}

.login-brand-text {
  display: flex;
  flex-direction: column;
  line-height: 1.3;
}

.login-brand-text b {
  font-size: 16px;
}

.login-brand-text span {
  font-size: 12px;
  color: var(--quiet);
}

.login-label {
  font-size: 13px;
  font-weight: 650;
  color: var(--sub);
  margin: 10px 0 6px;
}

.login-input {
  width: 100%;
  padding: 10px 12px;
  border: 1px solid var(--line);
  border-radius: 8px;
  font-size: 14px;
  background: #fff;
}

.login-btn {
  width: 100%;
  margin-top: 18px;
  padding: 11px;
}

.login-err {
  color: var(--clay);
  font-size: 13px;
  margin: 10px 0 0;
}

.login-hint {
  font-size: 12px;
  color: var(--quiet);
  margin: 14px 0 0;
  line-height: 1.5;
}

.app-main {
  flex: 1 1 auto;
  min-width: 0;
}

.link-btn {
  border: none;
  background: transparent;
  color: var(--clay);
  cursor: pointer;
  font-size: 13px;
  padding: 0;
}

.stat-grid {
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  gap: 12px;
  margin-bottom: 18px;
}

.stat-card {
  display: flex;
  flex-direction: column;
  gap: 2px;
  align-items: flex-start;
  text-align: left;
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: 12px;
  padding: 14px;
  cursor: pointer;
  transition: border-color .15s ease, box-shadow .15s ease;
}

.stat-card:hover {
  border-color: var(--jade);
  box-shadow: 0 2px 10px rgba(0, 0, 0, .05);
}

.stat-value {
  font-size: 26px;
  font-weight: 750;
  line-height: 1;
}

.stat-label {
  font-size: 13px;
  font-weight: 650;
  margin-top: 4px;
}

.stat-sub {
  font-size: 12px;
  color: var(--quiet);
}

.dash-cols {
  display: grid;
  grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr);
  gap: 16px;
  align-items: start;
}

.module-cards {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
}

.module-card {
  display: flex;
  flex-direction: column;
  gap: 3px;
  align-items: flex-start;
  text-align: left;
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 14px;
  background: #fff;
  cursor: pointer;
  transition: border-color .15s ease, background .15s ease;
}

.module-card:hover {
  border-color: var(--jade);
  background: var(--soft);
}

.module-ico {
  font-size: 20px;
}

.module-title {
  font-weight: 650;
}

.module-desc {
  font-size: 12px;
  color: var(--quiet);
}

.todo-list {
  display: grid;
  gap: 8px;
}

.todo-item {
  display: flex;
  align-items: center;
  gap: 12px;
  width: 100%;
  text-align: left;
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 12px 14px;
  background: #fff;
  cursor: pointer;
  transition: border-color .15s, background .15s;
}

.todo-item:hover {
  border-color: var(--jade);
  background: var(--soft, #f9f7f3);
}

.todo-n {
  flex: 0 0 auto;
  min-width: 34px;
  height: 34px;
  display: grid;
  place-items: center;
  border-radius: 9px;
  background: var(--red-soft, #fdf1ec);
  color: var(--clay);
  font-weight: 800;
  font-size: 16px;
}

.todo-label {
  flex: 1;
  font-size: 14px;
}

.todo-go {
  flex: 0 0 auto;
  font-size: 12px;
  color: var(--clay);
}

.todo-item.todo-done {
  opacity: .6;
}

.todo-item.todo-done .todo-n {
  background: var(--mint, #ecf2f3);
  color: var(--ok, #3d7a55);
}

.todo-item.todo-done .todo-go {
  color: var(--quiet);
}

/* 编辑器：分 tab，告别一堵折叠墙 */
.editor-shell {
  display: block;
}

.editor-tabs {
  position: sticky;
  top: 0;
  z-index: 20;
  display: flex;
  gap: 8px;
  padding: 12px 0;
  margin: 8px 0 16px;
  background: var(--bg);
  border-bottom: 1px solid var(--line);
  flex-wrap: wrap;
}

.etab {
  flex: 0 0 auto;
  border: 1px solid var(--line);
  background: #fff;
  padding: 10px 20px;
  border-radius: 10px;
  font-size: 14px;
  font-weight: 650;
  color: var(--sub);
  cursor: pointer;
  transition: background .15s, color .15s, border-color .15s;
}

.etab:hover {
  border-color: var(--jade);
}

.etab.on {
  background: var(--clay);
  color: #fff;
  border-color: var(--clay);
}

.editor-panel {
  display: none;
}

.editor-panel.on {
  display: block;
}

.editor-ops-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: 16px;
  align-items: start;
}

@media (max-width: 1000px) {
  .editor-ops-grid {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 1080px) {
  .stat-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
  .dash-cols {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 820px) {
  .app-shell {
    flex-direction: column;
  }
  .sidebar {
    width: 100%;
    flex: none;
    height: auto;
    position: static;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
  }
  .sidebar-nav {
    flex-direction: row;
    flex-wrap: wrap;
    flex: 1 1 100%;
    order: 3;
  }
  .sidebar-foot {
    border-top: none;
    flex-direction: row;
  }
  .stat-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .module-cards {
    grid-template-columns: 1fr;
  }
}

.topbar {
  position: sticky;
  top: 0;
  z-index: 10;
  background: rgba(246, 248, 245, .92);
  backdrop-filter: blur(14px);
  border-bottom: 1px solid var(--line);
}

.topbar-inner {
  max-width: 1440px;
  margin: 0 auto;
  padding: 14px 20px;
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 16px;
  align-items: center;
}

.brand {
  display: flex;
  gap: 12px;
  align-items: center;
  min-width: 0;
}

.brand-mark {
  width: 38px;
  height: 38px;
  border-radius: 8px;
  background:
    linear-gradient(135deg, #b7472a, #8a341e 70%, #c0883c);
  color: #fff;
  display: grid;
  place-items: center;
  font-weight: 800;
  flex: 0 0 auto;
}

.brand h1 {
  font-size: 18px;
  margin: 0;
  letter-spacing: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.brand p {
  color: var(--sub);
  margin: 2px 0 0;
  font-size: 13px;
}

.top-actions,
.button-row {
  display: flex;
  gap: 8px;
  align-items: center;
  flex-wrap: wrap;
}

.workspace {
  max-width: 1240px;
  margin: 0 auto;
  padding: 22px 24px 48px;
}

.dashboard-grid {
  display: grid;
  grid-template-columns: minmax(320px, 420px) minmax(0, 1fr);
  gap: 16px;
  align-items: start;
}

.home-topbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  padding: 16px 20px;
  margin-bottom: 16px;
}

.home-topbar-main .kicker {
  margin-bottom: 4px;
}

.home-topbar-main h2 {
  margin: 0;
  font-size: 22px;
  line-height: 1.2;
}

.home-topbar-actions {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
}

.home-stat {
  color: var(--quiet);
  font-size: 13px;
}

.home-topbar-actions .btn-primary {
  white-space: nowrap;
}

.create-panel {
  padding: 0;
  overflow: hidden;
}

.create-panel > summary {
  min-height: 54px;
  padding: 14px 18px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  cursor: pointer;
  list-style: none;
  background: #fbfcfa;
}

.create-panel > summary::-webkit-details-marker {
  display: none;
}

.create-panel > summary strong {
  color: var(--clay);
}

.create-panel > summary span {
  color: var(--quiet);
  font-size: 14px;
}

.create-panel[open] > summary {
  border-bottom: 1px solid var(--line);
}

.chip-row {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.chip {
  border: 1px solid var(--line);
  background: #fff;
  color: var(--sub);
  border-radius: 999px;
  padding: 6px 14px;
  font-size: 13px;
  cursor: pointer;
}

.chip:hover {
  border-color: var(--jade);
}

.chip.on {
  background: var(--jade);
  border-color: var(--jade);
  color: #fff;
}

.res-table {
  display: grid;
  gap: 0;
  border: 1px solid var(--line);
  border-radius: 8px;
  overflow: hidden;
}

.res-row {
  display: grid;
  grid-template-columns: 54px minmax(0, 1.5fr) 64px 56px 70px 96px minmax(0, 1fr) 64px 132px;
  gap: 10px;
  padding: 10px 12px;
  border-bottom: 1px solid var(--line);
  font-size: 13px;
  align-items: center;
}

.res-row.res-off {
  opacity: .55;
}

.res-actions {
  display: flex;
  gap: 8px;
  white-space: nowrap;
  overflow: visible;
}

.status-pill {
  display: inline-block;
  padding: 2px 9px;
  border-radius: 999px;
  font-size: 12px;
}

.status-pill.on {
  background: var(--mint, #ecf2f3);
  color: var(--ok, #3d7a55);
}

.status-pill.off {
  background: #f1eeea;
  color: var(--quiet);
}

/* 资源录入统一底座·板块①脊柱：复核态徽标 + 待核复核卡片 */
.review-pill {
  display: inline-block;
  padding: 1px 7px;
  border-radius: 999px;
  font-size: 11px;
  vertical-align: middle;
}
.review-pill.pending {
  background: #fdf3dd;
  color: #b7791f;
}
.review-pill.rejected {
  background: #f1eeea;
  color: var(--quiet);
}
/* 资源模型 v2·上架态徽标 */
.shelf-pill {
  display: inline-block;
  padding: 1px 7px;
  border-radius: 999px;
  font-size: 11px;
  vertical-align: middle;
}
.shelf-pill.on {
  background: #e3f3e8;
  color: #2f7d4f;
}
.shelf-pill.pending {
  background: #fdf3dd;
  color: #b7791f;
}
.shelf-pill.off {
  background: #f1eeea;
  color: var(--quiet);
}
.ro-val {
  padding: 7px 0 0;
  font-size: 13px;
  color: var(--ink, #2b2b2b);
}
.review-card {
  border: 1px solid var(--line, #e7e1d8);
  border-radius: 10px;
  padding: 12px 14px;
  margin-bottom: 12px;
  background: #fffdf8;
}
.review-card-head {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 8px;
}
.review-card-acts {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-top: 10px;
}

.link-btn.danger {
  color: #b23b2e;
}

.modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(20, 18, 15, .42);
  display: grid;
  place-items: center;
  z-index: 100;
  padding: 24px;
}

.modal-card {
  width: 100%;
  max-width: 560px;
  max-height: 88vh;
  overflow: auto;
  background: var(--panel, #fff);
  border-radius: 14px;
  box-shadow: 0 20px 60px rgba(0, 0, 0, .25);
}
/* 资源详情·酒店 v3 弹药库页用加宽弹窗（信息量大，560 太挤）。 */
.modal-card.modal-wide { max-width: 920px; }

.modal-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 20px;
  border-bottom: 1px solid var(--line);
  position: sticky;
  top: 0;
  background: var(--panel, #fff);
}

.modal-head h3 {
  margin: 0;
  font-size: 16px;
}

.modal-x {
  border: none;
  background: transparent;
  font-size: 22px;
  line-height: 1;
  cursor: pointer;
  color: var(--quiet);
}

.modal-body {
  padding: 18px 20px;
}

.modal-foot {
  display: flex;
  justify-content: flex-end;
  gap: 10px;
  padding: 14px 20px;
  border-top: 1px solid var(--line);
  position: sticky;
  bottom: 0;
  background: var(--panel, #fff);
}

.status-pill.warn {
  background: var(--gold-soft, #f6efe0);
  color: #9a6a16;
}

/* 订单列表 */
.order-list {
  display: grid;
  gap: 10px;
}

.order-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 14px 16px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: #fff;
  cursor: pointer;
  transition: border-color .15s ease, box-shadow .15s ease;
}

.order-row:hover {
  border-color: var(--jade);
  box-shadow: 0 2px 10px rgba(0, 0, 0, .05);
}

.order-title {
  font-weight: 700;
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}

.order-amt {
  text-align: right;
  white-space: nowrap;
}

.order-amt b {
  font-size: 16px;
}

.order-amt span {
  display: block;
  font-size: 12px;
  color: var(--quiet);
}

/* 看板 */
.kanban {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 14px;
  align-items: start;
}

.kanban-col {
  background: var(--soft, #f7f5f1);
  border: 1px solid var(--line);
  border-top: 3px solid var(--stage-color, var(--line));
  border-radius: 0 0 12px 12px;
  padding: 12px;
}

.kanban-col-head {
  display: flex;
  align-items: center;
  gap: 8px;
  font-weight: 700;
  margin-bottom: 12px;
  padding-bottom: 8px;
  border-bottom: 1px solid var(--line);
}

.kanban-dot {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: var(--stage-color, var(--quiet));
  flex: 0 0 auto;
}

.kanban-col-title {
  color: var(--ink);
}

.kanban-count {
  margin-left: auto;
  min-width: 22px;
  text-align: center;
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 999px;
  padding: 1px 8px;
  font-size: 12px;
  color: var(--sub);
  font-weight: 600;
}

.kanban-card,
.lead-kanban-card {
  border-left: 3px solid var(--stage-color, transparent);
}

.kanban-cards {
  display: grid;
  gap: 10px;
}

.kanban-card {
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 12px;
  cursor: pointer;
}

.kanban-card:hover {
  border-color: var(--jade);
}

.kanban-card-title {
  font-weight: 650;
  display: flex;
  gap: 8px;
  align-items: center;
  flex-wrap: wrap;
  margin-bottom: 4px;
}

.kanban-progress {
  margin-top: 8px;
  font-size: 12px;
  color: var(--clay);
  background: var(--red-soft, #fdf1ec);
  border-radius: 6px;
  padding: 4px 8px;
  display: inline-block;
}

.kanban-empty {
  color: var(--quiet);
  font-size: 12px;
  padding: 18px 10px;
  text-align: center;
  border: 1px dashed var(--line);
  border-radius: 8px;
  background: rgba(255, 255, 255, .35);
}

/* 派发看板 */
.dispatch-day {
  margin-bottom: 16px;
}

.dispatch-day-head {
  font-weight: 700;
  margin-bottom: 8px;
}

.dispatch-table {
  border: 1px solid var(--line);
  border-radius: 8px;
  overflow: hidden;
}

.dispatch-row {
  display: grid;
  grid-template-columns: 56px minmax(0, 1.4fr) minmax(0, 1fr) 72px 70px 100px 50px;
  gap: 10px;
  padding: 9px 12px;
  border-bottom: 1px solid var(--line);
  font-size: 13px;
  align-items: center;
}

.dispatch-row:last-child {
  border-bottom: none;
}

/* 订单派发 Stage1：派单规格（房型×N间×M晚 / 景点×N人次），从报价明细带出，琉璃陶土色小角标 */
.dispatch-spec {
  display: block;
  font-style: normal;
  font-size: 11.5px;
  color: var(--jade-dark, #9c4a20);
  background: var(--accent-faint, #f3efe9);
  border-radius: 5px;
  padding: 1px 6px;
  margin-top: 3px;
  line-height: 1.5;
  width: fit-content;
  max-width: 100%;
}

.dispatch-note {
  display: block;
  font-style: normal;
  font-size: 11px;
  color: var(--quiet, #7a7167);
  margin-top: 2px;
  line-height: 1.5;
}

.dispatch-row.d-head {
  background: #fbfcfa;
  color: var(--quiet);
  font-weight: 650;
}

.dispatch-status {
  padding: 4px 6px;
  border-radius: 6px;
  border: 1px solid var(--line);
  font-size: 12px;
}

.dispatch-status.d-ok {
  background: var(--mint, #ecf2f3);
  color: var(--ok, #3d7a55);
}

.dispatch-status.d-mid {
  background: var(--gold-soft, #f6efe0);
  color: #9a6a16;
}

.dispatch-status.d-todo {
  background: #f4f1ec;
  color: var(--quiet);
}

.track-log {
  display: grid;
  gap: 8px;
}

.track-log-item {
  display: flex;
  gap: 12px;
  padding: 8px 12px;
  border-left: 3px solid var(--clay);
  background: var(--soft, #f8f6f2);
  border-radius: 0 8px 8px 0;
}

.track-log-item b {
  color: var(--clay);
  white-space: nowrap;
}

@media (max-width: 900px) {
  .kanban {
    grid-template-columns: 1fr;
  }
}

.topbar-search {
  padding: 8px 12px;
  border: 1px solid var(--line);
  border-radius: 8px;
  font-size: 14px;
  min-width: 200px;
}

/* 线索看板：6 列、横向滚动 */
.kanban-wide {
  display: flex;
  gap: 12px;
  overflow-x: auto;
  padding-bottom: 10px;
  align-items: flex-start;
}

/* ============================================================
   线索仪表盘（2026-06-18 重做）：450 条/月规模 → 仪表盘+今日队列+可筛选+配色换淡
   ============================================================ */

/* ① 顶部仪表盘 */
.lead-dash { margin: 6px 0 16px; }
.lead-dash:empty { display: none; }
.lead-dash-loading { color: var(--quiet); font-size: 12.5px; padding: 8px 2px; }
.lead-dash-head { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; margin-bottom: 12px; }
.lead-dash-kicker { font-size: 16px; font-weight: 700; color: var(--ink); }
.lead-dash-sub { font-size: 12.5px; color: var(--quiet); }
.lead-stat-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 12px; margin-bottom: 14px; }
.lead-stat {
  display: flex; flex-direction: column; gap: 2px; text-align: left;
  background: #fff; border: 1px solid var(--line); border-radius: 12px;
  padding: 14px 16px; cursor: pointer; font: inherit;
  transition: border-color .15s, box-shadow .15s, transform .1s;
  box-shadow: 0 1px 2px rgba(40,37,31,0.04);
}
.lead-stat:hover { box-shadow: 0 4px 12px rgba(40,37,31,0.08); transform: translateY(-1px); }
.lead-stat-n { font-size: 30px; font-weight: 700; line-height: 1.05; color: var(--ink); letter-spacing: -0.5px; }
.lead-stat-label { font-size: 13px; font-weight: 600; color: var(--sub); margin-top: 4px; }
.lead-stat-sub { font-size: 11px; color: var(--quiet); }
/* 统计卡左侧柔色条 = 语义提示，低饱和、不压迫 */
.lead-stat.is-primary { border-left: 4px solid #c2704f; }
.lead-stat.is-primary .lead-stat-n { color: #b15b38; }
.lead-stat.is-new { border-left: 4px solid #6fa183; }
.lead-stat.is-new .lead-stat-n { color: #4f8466; }
.lead-stat.is-blocker { border-left: 4px solid #d8a78a; }
.lead-stat.is-stale { border-left: 4px solid #ccb06a; }
.lead-stat.is-s { border-left: 4px solid #c79a5a; }
/* 分布卡 */
.lead-distrib-wrap { display: grid; grid-template-columns: 1.1fr 1fr; gap: 12px; }
.lead-distrib-card { background: #fff; border: 1px solid var(--line); border-radius: 12px; padding: 13px 16px; }
.lead-distrib-title { font-size: 12px; font-weight: 600; color: var(--quiet); margin-bottom: 9px; }
.lead-distrib-row { display: flex; align-items: center; gap: 9px; margin: 6px 0; }
.lead-distrib-key { display: inline-flex; align-items: center; justify-content: center; min-width: 22px; height: 20px; border-radius: 6px; font-size: 11.5px; font-weight: 700; flex: none; }
.lead-distrib-track { flex: 1; height: 8px; background: #f1ede7; border-radius: 999px; overflow: hidden; }
.lead-distrib-fill { display: block; height: 100%; border-radius: 999px; opacity: 0.82; transition: width .3s; }
.lead-distrib-val { font-size: 12px; color: var(--sub); min-width: 22px; text-align: right; font-variant-numeric: tabular-nums; }
.lead-front-dots { display: flex; flex-direction: column; gap: 7px; }
.lead-front-dot { display: flex; align-items: center; gap: 7px; font-size: 12.5px; color: var(--sub); }
.lead-front-dot .dot { width: 9px; height: 9px; border-radius: 999px; flex: none; opacity: 0.85; }
.lead-front-dot b { margin-left: auto; color: var(--ink); font-variant-numeric: tabular-nums; }

/* ④ 筛选条 */
.lead-filters { margin: 0 0 16px; }
.lead-filters:empty { display: none; }
.lead-filters-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 9px; }
.lead-filters-title { font-size: 14px; font-weight: 700; color: var(--ink); }
.lead-filters-hint { font-size: 12px; color: var(--quiet); }
.lead-filters-result { font-size: 12.5px; color: var(--sub); }
.lead-filters-result b { color: #b15b38; }
.lead-filters-clear { font-size: 12px; color: var(--quiet); background: none; border: none; cursor: pointer; padding: 2px 6px; text-decoration: underline; }
.lead-filters-clear:hover { color: var(--accent); }
.lead-filter-groups { display: flex; flex-direction: column; gap: 8px; background: #fff; border: 1px solid var(--line); border-radius: 12px; padding: 12px 14px; }
.lead-filter-group { display: flex; align-items: flex-start; gap: 10px; flex-wrap: wrap; }
.lead-filter-label { font-size: 12px; font-weight: 600; color: var(--quiet); min-width: 60px; padding-top: 5px; flex: none; }
.lead-filter-chips { display: flex; flex-wrap: wrap; gap: 6px; flex: 1; }
.lead-chip {
  font-size: 12px; color: var(--sub); background: var(--accent-faint);
  border: 1px solid transparent; border-radius: 999px; padding: 3px 10px; cursor: pointer;
  transition: background .12s, border-color .12s, color .12s;
}
.lead-chip:hover { border-color: var(--line-strong); }
.lead-chip b { margin-left: 5px; color: var(--quiet); font-weight: 600; }
.lead-chip.on { background: var(--accent-soft); color: #9c4a20; border-color: #e7b78f; }
.lead-chip.on b { color: #9c4a20; }

/* ② 今天先打谁 工作队列 */
.lead-queue { margin: 4px 0 18px; scroll-margin-top: 14px; }
.lead-queue-loading { color: var(--quiet); font-size: 12.5px; padding: 6px 2px; }
.lead-queue-head { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; margin-bottom: 10px; }
.lead-queue-kicker { font-size: 17px; font-weight: 700; color: var(--ink); }
.lead-queue-sub { font-size: 12.5px; color: var(--quiet); }
.lead-queue-empty { font-size: 12.5px; color: var(--quiet); background: var(--accent-faint); border-radius: 10px; padding: 12px 14px; }
.lead-queue-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.lead-queue-item {
  display: flex; align-items: stretch; gap: 12px;
  background: #fff; border: 1px solid var(--line); border-left: 4px solid #d8a78a;
  border-radius: 12px; padding: 11px 14px; cursor: pointer;
  transition: border-color .15s, box-shadow .15s, transform .08s;
  box-shadow: 0 1px 2px rgba(40,37,31,0.04);
}
.lead-queue-item:hover { box-shadow: 0 4px 12px rgba(40,37,31,0.09); transform: translateY(-1px); }
.lead-queue-item:nth-child(-n+3) { border-left-color: #c2704f; }
.q-idx {
  display: flex; align-items: center; justify-content: center; flex: none;
  width: 28px; height: 28px; border-radius: 999px; align-self: center;
  background: var(--accent-faint); color: var(--sub); font-size: 13px; font-weight: 700; font-variant-numeric: tabular-nums;
}
.lead-queue-item:nth-child(-n+3) .q-idx { background: #f6e3d8; color: #9c4a2a; }
.q-main { flex: 1; min-width: 0; }
.q-top { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.q-top strong { font-size: 14.5px; color: var(--ink); }
.q-reasons { display: inline-flex; gap: 5px; flex-wrap: wrap; }
.q-reason { font-size: 10.5px; border-radius: 999px; padding: 1px 8px; line-height: 16px; font-weight: 600; }
.q-reason.hot { color: #9c4a2a; background: #f6e3d8; }
.q-reason.blk { color: #9c5a3a; background: #fbf0e8; }
.q-reason.s { color: #8a6520; background: #f6ead2; }
.q-reason.stale { color: #8a6634; background: #f7eedd; }
.q-meta { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 4px; font-size: 12px; color: var(--quiet); }
.q-intent { color: var(--sub); }
.q-blocker { font-size: 12px; color: #9c5a3a; background: #fbf0e8; border-radius: 5px; padding: 2px 8px; margin-top: 6px; display: inline-block; }
.q-next { font-size: 12px; color: #8a6634; background: var(--gold-soft); border-radius: 5px; padding: 2px 8px; margin-top: 6px; display: inline-block; }
.q-side { display: flex; flex-direction: column; align-items: flex-end; justify-content: center; gap: 4px; flex: none; text-align: right; }
.q-owner { font-size: 12px; color: var(--quiet); }
.q-go { font-size: 12px; color: var(--accent); font-weight: 600; white-space: nowrap; }

/* ③ 新进线索区 */
.lead-new { margin: 0 0 18px; }
.lead-new:empty { display: none; }
.lead-new-head { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; margin-bottom: 10px; }
.lead-new-kicker { font-size: 15px; font-weight: 700; color: var(--ink); }
.lead-new-sub { font-size: 12.5px; color: var(--quiet); }
.lead-new-row { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 10px; }
.lead-new-card {
  background: #fff; border: 1px solid var(--line); border-top: 3px solid #6fa183;
  border-radius: 11px; padding: 11px 13px; cursor: pointer;
  transition: border-color .15s, box-shadow .15s, transform .08s;
  box-shadow: 0 1px 2px rgba(40,37,31,0.04);
}
.lead-new-card:hover { box-shadow: 0 4px 10px rgba(40,37,31,0.08); transform: translateY(-1px); }
.lead-new-card-top { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.lead-new-card-top strong { font-size: 14px; color: var(--ink); }
.lead-new-age { font-size: 11px; color: #4f8466; background: #ecf4ee; border-radius: 999px; padding: 1px 8px; white-space: nowrap; }
.lead-new-card-meta { display: flex; align-items: center; gap: 7px; margin-top: 7px; }
.lead-new-intent { font-size: 12px; color: var(--sub); }
.lead-new-city { font-size: 12px; color: var(--quiet); margin-top: 6px; }
.lead-new-foot { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 8px; font-size: 12px; color: var(--quiet); }
.lead-new-foot span:last-child { color: var(--accent); font-weight: 600; }
.lead-new-more { font-size: 12px; color: var(--quiet); margin-top: 8px; padding: 2px; }

/* ===== L01 线索库大盘（飞书全量看板 · 沉底折叠） ===== */
.fs-board-panel { margin-bottom: 12px; }
.fs-board-summary { display: flex; align-items: center; gap: 12px; cursor: pointer; list-style: none; padding: 4px 2px 8px; }
.fs-board-summary::-webkit-details-marker { display: none; }
.fs-board-summary::before { content: "▸"; color: var(--quiet); font-size: 12px; transition: transform .15s; }
.fs-board-panel[open] .fs-board-summary::before { transform: rotate(90deg); }
.fs-board-summary .board-sec-title { margin: 0; }
.fs-board-summary-hint { font-size: 12px; color: var(--quiet); }
.fs-board-head { display: flex; align-items: center; gap: 12px; margin: 6px 0 12px; flex-wrap: wrap; }
.fs-board-head .muted { color: var(--quiet); font-size: 12.5px; }
.fs-board-head .link-btn { margin-left: auto; }
.board-sec-title { margin: 22px 0 10px; font-size: 15px; color: var(--ink); }
.fs-card { cursor: pointer; }
.fs-card:hover { border-color: var(--accent-soft); box-shadow: 0 2px 8px rgba(40,37,31,0.06); }
.fs-card-sub { font-size: 12px; color: var(--sub); margin-top: 2px; }
.fs-card-note { font-size: 12px; color: #8a6634; background: var(--gold-soft); border-radius: 6px; padding: 3px 8px; margin-top: 6px; line-height: 1.5; }
.fs-card-meta { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 8px; font-size: 12px; color: var(--quiet); }
.fs-badge { font-size: 11px; border: 1px solid var(--line-strong); color: var(--sub); border-radius: 999px; padding: 0 8px; }
.fs-badge.linked { border-color: #cfe6d7; color: var(--ok); background: #eef6f0; }
.lead-lvl { display: inline-flex; align-items: center; justify-content: center; min-width: 20px; height: 20px; border-radius: 6px; font-size: 11.5px; font-weight: 700; color: #fff; background: var(--lvl-color, #9aa0a6); margin-left: 6px; }
/* 等级柔标（浅底深字，替代旧实心填充）+ 柔和卡点条（替代旧大红块）——配色换淡核心 */
.q-lvl { display: inline-flex; align-items: center; justify-content: center; min-width: 20px; height: 20px; border-radius: 6px; font-size: 11.5px; font-weight: 700; }
.lead-blocker-soft { font-size: 12px; color: #9c5a3a; background: #fbf0e8; border-left: 3px solid #d8a78a; border-radius: 4px; padding: 3px 9px; margin-top: 6px; line-height: 1.5; }

/* ---- 列内排序提示 + 久未跟 chip（呈现优化 2026-06-17）---- */
.fs-board-sorthint { font-size: 11.5px; color: var(--quiet); border: 1px dashed var(--line-strong); border-radius: 999px; padding: 1px 9px; }
.fs-card-flags { display: inline-flex; align-items: center; gap: 6px; }
.fs-stale-chip { font-size: 10.5px; color: #8a6634; background: #f7eedd; border: 1px solid #ecd9ad; border-radius: 999px; padding: 0 7px; line-height: 17px; white-space: nowrap; }
.lead-blocker-bar { font-size: 12px; color: #9c5a3a; background: #fbf0e8; border-left: 3px solid #d8a78a; border-radius: 4px; padding: 3px 9px; margin-top: 6px; line-height: 1.5; }

/* ---- 顶部"今天先打谁"焦点区 ---- */
.lead-focus { margin: 4px 0 18px; }
.lead-focus:empty { display: none; }
.lead-focus-loading { color: var(--quiet); font-size: 12.5px; padding: 6px 2px; }
.lead-focus-head { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; margin-bottom: 10px; }
.lead-focus-kicker { font-size: 16px; font-weight: 700; color: var(--ink); }
.lead-focus-sub { font-size: 12.5px; color: var(--quiet); }
.lead-focus-empty { font-size: 12.5px; color: var(--quiet); background: var(--accent-faint); border-radius: 8px; padding: 10px 12px; }
.lead-focus-row { display: grid; grid-template-columns: repeat(auto-fill, minmax(248px, 1fr)); gap: 12px; }
.focus-card {
  background: #fff;
  border: 1px solid var(--line-strong);
  border-left: 4px solid var(--accent);
  border-radius: 12px;
  padding: 13px 14px;
  cursor: pointer;
  box-shadow: 0 1px 3px rgba(40, 37, 31, 0.05);
  transition: border-color .15s, box-shadow .15s, transform .1s;
}
.focus-card:hover { border-color: var(--accent); box-shadow: 0 3px 10px rgba(176, 58, 34, 0.12); transform: translateY(-1px); }
.focus-card-top { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.focus-card-top strong { font-size: 15px; color: var(--ink); }
.focus-card-tags { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 7px; }
.focus-tag { font-size: 11px; border-radius: 999px; padding: 1px 8px; line-height: 17px; font-weight: 600; }
.focus-tag.hot { color: #fff; background: #b03a22; }
.focus-tag.s { color: #fff; background: #c2602e; }
.focus-tag.block { color: #fff; background: #8a3d18; }
.focus-tag.stale { color: #8a5a14; background: #f7eddc; border: 1px solid #e6cf9e; }
.focus-card-intent { font-size: 12.5px; color: var(--sub); margin-top: 8px; }
.focus-card-next { font-size: 12px; color: #8a3d18; background: var(--accent-faint); border-radius: 6px; padding: 4px 9px; margin-top: 7px; line-height: 1.5; }
.focus-card-foot { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 9px; font-size: 12px; color: var(--quiet); }
.focus-card-foot span:last-child { color: var(--accent); font-weight: 600; }

/* ---- 工作台流转折叠（降认知负担，焦点先给飞书温度看板）---- */
.flow-board-panel { margin-top: 18px; padding: 0; border: none; background: transparent; }
.flow-board-summary { display: flex; align-items: center; gap: 12px; cursor: pointer; list-style: none; padding: 10px 2px; }
.flow-board-summary::-webkit-details-marker { display: none; }
.flow-board-summary::before { content: "▸"; color: var(--quiet); font-size: 12px; transition: transform .15s; }
.flow-board-panel[open] .flow-board-summary::before { transform: rotate(90deg); }
.flow-board-summary .board-sec-title { margin: 0; }
.flow-board-hint { font-size: 12px; color: var(--quiet); }

.kanban-wide .kanban-col {
  flex: 1 0 232px;
  min-width: 232px;
}

.lead-kanban-card {
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 12px;
  margin-bottom: 0;
}

.lead-kanban-card:hover {
  border-color: var(--jade);
}

.lead-kanban-top {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 8px;
  margin-bottom: 4px;
}

.lead-kanban-top strong {
  font-size: 15px;
}

.lead-kanban-sum {
  font-size: 12px;
  color: var(--sub);
  margin: 8px 0;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.lead-kanban-foot {
  display: flex;
  gap: 8px;
  align-items: center;
  margin-top: 8px;
}

.lead-kanban-foot select {
  flex: 1;
  padding: 5px 6px;
  border: 1px solid var(--line);
  border-radius: 6px;
  font-size: 12px;
}

.lead-kanban-foot button {
  white-space: nowrap;
}

/* 报价台 */
.quote-totals {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 12px;
}

.qt-card {
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 12px 14px;
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.qt-card span {
  font-size: 12px;
  color: var(--quiet);
}

.qt-card b {
  font-size: 22px;
}

.qt-card.qt-profit {
  background: var(--red-soft, #fdf1ec);
  border-color: var(--clay);
}

.qt-card.qt-profit b {
  color: var(--clay);
}

.quote-table {
  border: 1px solid var(--line);
  border-radius: 8px;
  overflow: hidden;
}

.quote-row {
  display: grid;
  grid-template-columns: 88px minmax(0, 1.4fr) 54px 56px 76px 76px 68px minmax(0, 0.9fr) 36px;
  gap: 8px;
  padding: 8px 12px;
  border-bottom: 1px solid var(--line);
  align-items: center;
  font-size: 13px;
}

.quote-row:last-child {
  border-bottom: none;
}

.quote-row.q-head {
  background: #fbfcfa;
  color: var(--quiet);
  font-weight: 650;
}

.quote-row input,
.quote-row select {
  width: 100%;
  padding: 5px 6px;
  border: 1px solid var(--line);
  border-radius: 6px;
  font-size: 13px;
}

.q-profit {
  font-weight: 650;
  color: var(--ok, #3d7a55);
}
/* P1-2 成本未填 → 该行利润是虚的：利润格转橙 + 「成本0」小标 */
.q-profit.phantom { color: var(--clay); display: flex; flex-direction: column; align-items: flex-start; gap: 1px; line-height: 1.2; }
.q-profit-flag { font-style: normal; font-size: 10px; font-weight: 700; color: #fff; background: var(--clay); border-radius: 4px; padding: 0 5px; white-space: nowrap; }
/* P1-2 成本输入框未填高亮（橙描边） */
.quote-row input.cost-empty { border-color: var(--clay); background: #fdf3ec; }
.quote-row input.cost-empty::placeholder { color: var(--clay); opacity: 0.8; }
/* P1-2 利润率虚高时给利润率卡片描个边 */
.qt-card.qt-margin-warn { border-color: var(--clay); background: #fdf3ec; }
.qt-card.qt-margin-warn b { color: var(--clay); }
/* P1-2 成本未填总提醒条（点名虚高来源） */
.quote-cost-warn { margin: 8px 0 0; padding: 8px 12px; background: #fbe9d8; border: 1px solid #e6c3a0; border-left: 3px solid var(--clay); border-radius: 6px; font-size: 12.5px; color: #8a3d18; line-height: 1.55; }
.quote-cost-warn b { color: var(--clay); }
/* ③报价 tab：真报价台按钮放大 + 老粗算默认折叠收短（Lucia 2026-07-11：图1太长）*/
.quote-open-primary { font-size: 15px; padding: 11px 20px; font-weight: 700; }
.quote-rough-fold { margin-top: 10px; border: 1px solid var(--line, #e5ddd0); border-radius: 8px; background: #faf7f1; }
.quote-rough-fold > summary { cursor: pointer; padding: 9px 13px; font-size: 13px; color: #7a7060; font-weight: 600; list-style: revert; user-select: none; }
.quote-rough-fold > summary:hover { color: var(--ink, #2c2519); }
.quote-rough-fold[open] > summary { border-bottom: 1px solid var(--line, #e5ddd0); }
/* 线索卡直达动作：排行程/报价/报单（线索=客户的家·Lucia 2026-07-12）*/
.lead-card-acts { display: flex; flex-direction: column; gap: 6px; align-items: stretch; min-width: 136px; }
.lead-card-acts button { white-space: nowrap; font-size: 12.5px; padding: 7px 12px; }
@media (max-width: 760px) { .lead-card-acts { flex-direction: row; flex-wrap: wrap; min-width: 0; } }
/* 所需房型+间数：需求页⑤酒店偏好下填，报价台选房时提醒（Lucia 2026-07-11）*/
.room-note-field { margin-top: 10px; }
.room-note-lbl { display: block; font-size: 12.5px; font-weight: 600; color: var(--ink, #2c2519); margin-bottom: 4px; }
.room-note-field > input { width: 100%; box-sizing: border-box; padding: 8px 10px; border: 1px solid var(--line, #e5ddd0); border-radius: 8px; font: inherit; }
.room-note-field > input:focus { outline: none; border-color: var(--clay, #b5551d); }
.room-note-tip { display: block; margin-top: 4px; font-size: 11.5px; color: #9a9080; line-height: 1.5; }
.qseg-roomwant { margin: 8px 0 10px; padding: 8px 12px; background: #fbf3e2; border: 1px solid #e6d29a; border-left: 3px solid var(--gold, #b8863b); border-radius: 8px; font-size: 13px; color: #7a6420; line-height: 1.55; }
.qseg-roomwant b { color: #6b4e0e; }
.qseg-roomwant span { color: #9a8a5a; font-size: 12px; }
/* 需求页人数一行排 + 各档门票口径说明（Lucia 2026-07-11）*/
.pax-grid { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 12px; margin-bottom: 4px; }
.pax-grid .field { min-width: 0; }
@media (max-width: 900px) { .pax-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
.pax-defs { margin: 0 0 10px; padding: 9px 13px; background: #faf6ee; border: 1px solid #ece3d2; border-left: 3px solid var(--clay, #b5551d); border-radius: 8px; font-size: 12.5px; line-height: 1.65; color: #6a5f4e; }
.pax-defs > b { color: var(--clay, #b5551d); }
.pax-defs span { display: inline-block; margin: 2px 12px 0 0; }
.pax-defs span b { color: var(--ink, #2c2519); }
.pax-defs em { display: block; margin-top: 5px; font-style: normal; color: #8a7f6e; }
.pax-help { margin-top: 6px; }
.pax-help > summary { cursor: pointer; color: var(--clay, #b5551d); font-weight: 600; font-size: 12px; list-style: revert; width: fit-content; }
.pax-help > summary:hover { text-decoration: underline; }
.pax-help p { margin: 6px 0 0; color: #7a7060; line-height: 1.65; }
.pax-help p b { color: var(--ink, #2c2519); }
/* 极简日程导出（Lucia 2026-07-10）*/
.qitin-copy { background: var(--gold, #b8863b); color: #fff; border: none; border-radius: 7px; padding: 5px 11px; font-size: 12.5px; font-weight: 600; cursor: pointer; margin-right: 8px; }
.qitin-copy:hover { filter: brightness(1.06); }
.mini-itin-modal { max-width: 640px; width: 92vw; }
.mini-itin-ta { width: 100%; box-sizing: border-box; min-height: 260px; padding: 12px 14px; border: 1px solid var(--line, #e5ddd0); border-radius: 8px; font: 13.5px/1.85 ui-monospace, "SF Mono", Menlo, monospace; color: #2c2519; background: #fbf8f2; resize: vertical; white-space: pre; overflow-wrap: normal; overflow-x: auto; }
/* 逐条对账·照妖镜（Lucia 2026-07-09 揪隐形/重复/不在行程的幽灵收费）*/
.qaudit-modal { max-width: 720px; width: 92vw; }
.qaudit-banner { padding: 9px 12px; border-radius: 8px; font-size: 13px; line-height: 1.55; margin-bottom: 10px; }
.qaudit-banner.bad { background: #fdecec; border: 1px solid #f2b8b8; color: #a12626; }
.qaudit-banner.bad b { color: #c0272d; }
.qaudit-banner.ok { background: #e9f6ec; border: 1px solid #b7dfc0; color: #1f7a3d; }
.qaudit-banner.warn { background: #fbf3e2; border: 1px solid #e6d29a; color: #8a6a1c; }
.qaudit-list { border: 1px solid var(--line, #e5ddd0); border-radius: 8px; overflow: hidden; }
.qaudit-row { display: grid; grid-template-columns: 64px minmax(0,1fr) 74px 92px 44px; gap: 8px; align-items: center; padding: 8px 12px; border-top: 1px solid #f0eae0; font-size: 13px; }
.qaudit-row:first-child { border-top: none; }
.qaudit-head { background: #f7f2e9; font-weight: 600; color: #6b6154; font-size: 12px; }
.qaudit-ghost { background: #fdf0f0; }
.qaudit-cat { color: #8a7f6e; font-size: 12px; }
.qaudit-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.qaudit-qty { color: #8a7f6e; font-size: 12px; text-align: right; font-variant-numeric: tabular-nums; }
.qaudit-amt { text-align: right; font-variant-numeric: tabular-nums; font-weight: 600; }
.qaudit-del { text-align: right; }
.qaudit-flag { display: inline-block; margin-left: 6px; padding: 1px 6px; border-radius: 999px; font-size: 11px; font-weight: 600; vertical-align: middle; }
.qaudit-flag-off { background: #fbe0e0; color: #c0272d; }
.qaudit-flag-dup { background: #fde6cf; color: #b15a10; }
.qaudit-flag-seg { background: #e5e0f5; color: #5a3fb0; }
.qaudit-empty { padding: 16px; text-align: center; color: #9a9080; font-size: 13px; }
.qaudit-sum { margin-top: 10px; text-align: right; font-size: 14px; color: #4a4235; }
.qaudit-sum b { font-size: 18px; color: var(--ink, #2c2519); margin-left: 4px; }
.qaudit-sum-hint { display: block; font-size: 11.5px; color: #9a9080; font-weight: 400; margin-top: 2px; }
/* P1-2 客户版预览前「先核对成本」提示 */
.cust-costwarn { font-size: 13.5px; color: var(--ink); line-height: 1.6; }
.cust-costwarn ul { margin: 8px 0; padding-left: 18px; }
.cust-costwarn li { margin: 3px 0; }
.cust-costwarn .ccw-amt { color: var(--clay); font-weight: 600; margin-left: 6px; font-size: 12.5px; }
.ccw-tip { color: var(--sub); font-size: 12.5px; margin-top: 8px; }

.note-cell {
  display: flex;
  gap: 4px;
  align-items: center;
}

.note-cell input {
  min-width: 0;
}

.tier-btn {
  flex: 0 0 auto;
  font-size: 15px;
}

.quote-row.tiered {
  background: #fbf8f4;
}

.tier-summary {
  grid-column: span 2;
}

.tier-summary button {
  text-align: left;
  white-space: normal;
}

.tier-count {
  text-align: center;
}

.tier-edit {
  border: 1px solid var(--line);
  border-radius: 8px;
  overflow: hidden;
  margin-top: 10px;
}

.tier-edit-row {
  display: grid;
  grid-template-columns: 70px 1fr 1fr 80px;
  gap: 8px;
  padding: 8px 12px;
  border-bottom: 1px solid var(--line);
  align-items: center;
  font-size: 13px;
}

.tier-edit-row:last-child {
  border-bottom: none;
}

.tier-edit-row.tier-head {
  background: #fbfcfa;
  color: var(--quiet);
  font-weight: 650;
}
/* 人群优待规则小标签（全价/免费/半价），紧跟人群名 */
.tier-rule { display: block; font-size: 10.5px; font-weight: 400; color: var(--accent); margin-top: 1px; }

.tier-edit-row.tier-foot {
  font-weight: 700;
  background: var(--red-soft, #fdf1ec);
}

.tier-edit-row input {
  width: 100%;
  padding: 5px 6px;
  border: 1px solid var(--line);
  border-radius: 6px;
}

.tier-sub {
  text-align: right;
}

/* ── 报价台门票「分价行」方案 A（成本/报价分列·紧凑 chip + 就地改人数）──────────── */
/* 紧凑两列：成本/单、报价/单 各显「这单有人的档」chip 链，跟普通行同列位对齐。 */
.tier-breakdown {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 2px 1px;
  min-width: 0;
  font-size: 11.5px;
  line-height: 1.35;
}
.tier-chip {
  display: inline-block;
  padding: 1px 5px;
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 5px;
  white-space: nowrap;
  color: var(--ink);
}
.tier-chip-free {
  border-color: #cdb98f;
  background: #fbf3e3;
  color: #8a6d2f;
}
.tier-chip-sep {
  color: var(--quiet);
  padding: 0 1px;
}
.tier-chip-empty {
  color: var(--quiet);
  font-size: 12px;
}
.tier-redact {
  color: var(--quiet);
}
/* 「改人数 / 收起」就地展开开关（备注列旁，跟「删」同款 link-btn） */
.tier-edit-toggle {
  flex: 0 0 auto;
  font-size: 12px;
  white-space: nowrap;
}
.quote-row.tiered.tier-open {
  background: #f7f1e8;
}

/* 展开态：6 档就地编辑器，占满整行宽 */
.tier-inline {
  grid-column: 1 / -1;
  margin-top: 8px;
  border: 1px solid var(--line);
  border-radius: 8px;
  overflow: hidden;
  background: #fff;
}
.tier-inline-hint {
  padding: 7px 12px;
  font-size: 11.5px;
  color: var(--sub);
  line-height: 1.5;
  background: #fbfcfa;
  border-bottom: 1px solid var(--line);
}
.tier-inline-hint b { color: var(--ink); }
.tier-inline-row {
  display: grid;
  grid-template-columns: minmax(120px, 1.4fr) 132px 1fr 80px;
  gap: 8px;
  padding: 6px 12px;
  border-bottom: 1px solid var(--line);
  align-items: center;
  font-size: 12.5px;
}
.tier-inline-row:last-child { border-bottom: none; }
.tier-inline-row.tier-inline-head {
  background: #fbfcfa;
  color: var(--quiet);
  font-weight: 650;
  font-size: 12px;
}
.tier-inline-row.tier-inline-foot {
  font-weight: 700;
  background: var(--red-soft, #fdf1ec);
}
.til-name { display: flex; flex-direction: column; gap: 1px; }
.til-def { font-size: 10px; font-weight: 400; color: var(--accent); }
/* 人数 −/+ 步进器 */
.til-stepper {
  display: flex;
  align-items: center;
  gap: 4px;
}
.til-step {
  flex: 0 0 auto;
  width: 24px;
  height: 26px;
  border: 1px solid var(--line);
  border-radius: 6px;
  background: #fff;
  font-size: 15px;
  line-height: 1;
  cursor: pointer;
  color: var(--ink);
  padding: 0;
}
.til-step:hover { background: #f3efe8; }
.til-count {
  width: 100%;
  min-width: 0;
  text-align: center;
  padding: 5px 4px;
  border: 1px solid var(--line);
  border-radius: 6px;
  font-size: 12.5px;
}
.til-price { display: flex; align-items: center; gap: 6px; min-width: 0; }
.til-price input {
  width: 100%;
  min-width: 0;
  padding: 5px 6px;
  border: 1px solid var(--line);
  border-radius: 6px;
  font-size: 12.5px;
}
.til-free {
  flex: 0 0 auto;
  font-style: normal;
  font-size: 10px;
  font-weight: 700;
  color: #8a6d2f;
  background: #fbf3e3;
  border: 1px solid #cdb98f;
  border-radius: 4px;
  padding: 0 5px;
  white-space: nowrap;
}
.til-sub { text-align: right; }
.til-redact { color: var(--quiet); }
.til-totcount { font-weight: 600; }
.til-tot { text-align: right; }

/* 客户版报价 */
.cust-quote {
  display: grid;
  gap: 12px;
}

.cust-cat {
  border: 1px solid var(--line);
  border-radius: 10px;
  overflow: hidden;
}

.cust-cat-head {
  display: flex;
  justify-content: space-between;
  padding: 10px 14px;
  background: var(--soft, #f8f6f2);
  font-weight: 700;
}

.cust-item {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  padding: 8px 14px;
  border-top: 1px solid var(--line);
  font-size: 13px;
}

.cust-item em {
  font-style: normal;
  color: var(--quiet);
  font-size: 12px;
}

.cust-grand {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 12px 16px;
  border-radius: 10px;
  background: var(--red-soft, #fdf1ec);
  border: 1px solid var(--clay);
}

.cust-grand b {
  font-size: 22px;
  color: var(--clay);
}

.cust-grand.big {
  padding: 22px;
}

.cust-grand.big b {
  font-size: 30px;
}

.qr-pick-list {
  margin-top: 12px;
  max-height: 360px;
  overflow: auto;
  display: grid;
  gap: 6px;
}

.qr-pick {
  display: flex;
  justify-content: space-between;
  gap: 10px;
  padding: 9px 12px;
  border: 1px solid var(--line);
  border-radius: 8px;
  cursor: pointer;
  font-size: 13px;
}

.qr-pick:hover {
  border-color: var(--jade);
  background: var(--soft, #f8f6f2);
}

@media (max-width: 760px) {
  .quote-totals {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* 报价列表：KPI + 资源中心 */
.quote-overview {
  display: grid;
  grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr);
  gap: 16px;
  margin-bottom: 16px;
  align-items: start;
}

.kpi-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 12px;
}

.kpi-grid-5 {
  grid-template-columns: repeat(5, minmax(0, 1fr));
  margin-bottom: 16px;
}

@media (max-width: 1080px) {
  .kpi-grid-5 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

@media (max-width: 700px) {
  .kpi-grid-5 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

.kpi-card {
  background: var(--panel, #fff);
  border: 1px solid var(--line);
  border-radius: 12px;
  padding: 14px;
  box-shadow: var(--shadow);
}

.kpi-card > span {
  font-size: 12px;
  color: var(--quiet);
}

.kpi-card b {
  display: block;
  font-size: 26px;
  margin: 4px 0 8px;
}

.kpi-card b em {
  font-size: 13px;
  font-style: normal;
  color: var(--quiet);
}

.kpi-card.kpi-profit {
  background: var(--red-soft, #fdf1ec);
  border-color: var(--clay);
}

.kpi-card.kpi-profit b {
  color: var(--clay);
}

.kpi-sub {
  display: flex;
  gap: 12px;
  font-size: 12px;
  color: var(--sub);
  border-top: 1px solid var(--line);
  padding-top: 8px;
}

.res-center .panel-body {
  padding: 12px 14px;
}

.res-center-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
}

.res-center-card {
  display: flex;
  flex-direction: column;
  gap: 2px;
  align-items: flex-start;
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 10px 12px;
  background: #fff;
  cursor: pointer;
}

.res-center-card:hover {
  border-color: var(--jade);
  background: var(--soft, #f8f6f2);
}

.res-center-card span {
  font-size: 12px;
  color: var(--sub);
}

.res-center-card b {
  font-size: 18px;
}

.quote-list-table {
  border: 1px solid var(--line);
  border-radius: 8px;
  overflow: hidden;
}

.quote-list-row {
  display: grid;
  grid-template-columns: minmax(0, 1.6fr) 100px 84px 80px 88px 88px minmax(0, 1fr);
  gap: 10px;
  padding: 11px 14px;
  border-bottom: 1px solid var(--line);
  align-items: center;
  font-size: 13px;
  cursor: pointer;
}

.quote-list-row:last-child {
  border-bottom: none;
}

.quote-list-row:not(.q-head):hover {
  background: var(--soft, #f8f6f2);
}

.quote-list-row.q-head {
  background: #fbfcfa;
  color: var(--quiet);
  font-weight: 650;
  cursor: default;
}

@media (max-width: 1080px) {
  .quote-overview {
    grid-template-columns: 1fr;
  }
}

.res-row:last-child {
  border-bottom: none;
}

.res-row span {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.res-head {
  background: #fbfcfa;
  color: var(--quiet);
  font-weight: 650;
}

.planner-grid {
  display: grid;
  grid-template-columns: minmax(320px, 420px) minmax(0, 1fr);
  gap: 16px;
  align-items: start;
  margin-bottom: 16px;
}

.route-library-grid {
  display: grid;
  grid-template-columns: repeat(7, minmax(210px, 1fr));
  gap: 12px;
  overflow-x: auto;
  padding-bottom: 4px;
}

.route-lib-card {
  min-width: 210px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fff;
  overflow: hidden;
  display: grid;
  grid-template-rows: 116px minmax(0, 1fr);
}

.route-lib-card img,
.sample-days img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  background: #eef2ee;
}

.route-lib-card > div {
  padding: 12px;
}

.route-lib-head {
  display: flex;
  justify-content: space-between;
  gap: 8px;
  align-items: center;
  color: var(--sub);
  font-size: 13px;
}

.route-code {
  color: #fff;
  background: var(--clay);
  border-radius: 999px;
  padding: 3px 8px;
  font-weight: 850;
}

.route-lib-card h3,
.sample-route h3,
.route-match-grid h3 {
  margin: 8px 0 6px;
  line-height: 1.25;
}

.route-lib-card p,
.sample-route p,
.route-match-grid p {
  color: var(--sub);
  font-size: 14px;
  margin: 0 0 10px;
}

.mini-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin: 9px 0;
}

.mini-tags span {
  background: #f4f7f4;
  border: 1px solid var(--line);
  border-radius: 999px;
  color: var(--sub);
  font-size: 13px;
  padding: 2px 7px;
}

.sample-days {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px;
}

.sample-days article {
  border: 1px solid var(--line);
  border-radius: 8px;
  overflow: hidden;
  background: #fff;
}

.sample-days img {
  height: 120px;
}

.sample-days span,
.sample-days strong,
.sample-days p {
  display: block;
  padding: 0 12px;
}

.sample-days span {
  color: var(--clay);
  font-weight: 850;
  margin-top: 10px;
}

.sample-days strong {
  margin-top: 2px;
}

.sample-days p {
  padding-bottom: 12px;
}

.experience-region-grid,
.service-slice-grid,
.route-match-grid {
  display: grid;
  gap: 10px;
}

.experience-region-grid {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

.experience-region-grid article,
.service-slice-grid article,
.route-match-grid article {
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fff;
  padding: 13px;
}

.experience-region-grid strong,
.experience-region-grid span {
  display: block;
}

.experience-region-grid span {
  color: var(--quiet);
  font-size: 13px;
}

.experience-region-grid p,
.service-slice-grid p {
  margin: 6px 0 0;
  color: var(--sub);
  font-size: 14px;
}

.service-slice-grid {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

.route-match-grid {
  grid-template-columns: repeat(4, minmax(0, 1fr));
}

.route-match-grid article.active {
  border-color: var(--jade);
  background: #f2faf6;
}

.panel {
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
}

.panel-head {
  padding: 16px 18px;
  border-bottom: 1px solid var(--line);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}

.panel-head h2,
.section-title h2 {
  font-size: 16px;
  margin: 0;
}

.panel-body {
  padding: 18px;
}

.hint {
  color: var(--sub);
  margin: 0;
  font-size: 14px;
}

.form-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 12px;
}

.form-grid.three {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

/* B1-5 交通区一排四框紧凑排版 */
.form-grid.four {
  grid-template-columns: repeat(4, minmax(0, 1fr));
}

.field {
  display: grid;
  gap: 6px;
  align-content: start;
}

.field label {
  color: var(--sub);
  font-size: 13px;
  font-weight: 650;
}

.field.full {
  grid-column: 1 / -1;
}

.search-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 180px auto;
  gap: 10px;
  align-items: end;
}

.history-list {
  display: grid;
  gap: 10px;
}

.history-item {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 12px;
  padding: 14px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fff;
}

.history-item {
  transition: border-color .15s ease, box-shadow .15s ease;
}

.history-item:hover {
  border-color: var(--jade);
  box-shadow: 0 2px 10px rgba(0, 0, 0, .05);
}

.history-item .hint {
  margin-top: 6px;
  display: -webkit-box;
  -webkit-line-clamp: 1;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* 产品母版卡片：视觉与普通客户单区分（暗金描边 + 📦产品徽章 + 显著建单按钮） */
.history-item.is-product {
  border-color: #d9a441;
  background: linear-gradient(180deg, #fffaf0 0%, #fff 60%);
}
.history-item.is-product:hover {
  border-color: #c48f2c;
  box-shadow: 0 2px 12px rgba(197, 143, 44, .18);
}
.product-badge {
  display: inline-block;
  margin-right: 8px;
  padding: 1px 8px;
  border-radius: 999px;
  background: #d9a441;
  color: #3b2a06;
  font-size: 12px;
  font-weight: 700;
  vertical-align: 1px;
}
.btn-product-clone {
  background: #d9a441;
  border: 1px solid #c48f2c;
  color: #3b2a06;
  font-weight: 700;
}
.btn-product-clone:hover {
  background: #c48f2c;
  color: #fff;
}

/* 从产品建单弹窗表单 */
.clone-form { display: flex; flex-direction: column; gap: 12px; }
.clone-hint { font-size: 13px; color: var(--muted, #6b7280); line-height: 1.55; margin: 0; }
.clone-hint.dim { font-size: 12px; opacity: .85; }
.clone-field { display: flex; flex-direction: column; gap: 5px; font-size: 13px; }
.clone-field > span { font-weight: 600; color: #333; }
.clone-field .req { color: #c0392b; }
.clone-field input {
  padding: 8px 10px;
  border: 1px solid var(--line, #ddd);
  border-radius: 6px;
  font-size: 14px;
}
.clone-field input:focus { outline: none; border-color: #d9a441; }
.clone-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }

.feishu-search-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto auto;
  gap: 10px;
  align-items: end;
}

.feishu-lead-list {
  display: grid;
  gap: 10px;
  max-height: 520px;
  overflow: auto;
  padding-right: 2px;
}

.feishu-lead-card {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 12px;
  align-items: start;
  padding: 13px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fff;
}

.feishu-lead-card:hover {
  border-color: var(--jade);
}

.lead-card-head {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: baseline;
  margin-bottom: 5px;
}

.lead-card-head strong {
  font-size: 16px;
}

.history-title {
  margin: 0 0 5px;
  font-weight: 750;
}

.meta {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  color: var(--sub);
  font-size: 13px;
}

.badge,
.pill {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  min-height: 24px;
  border-radius: 999px;
  padding: 3px 9px;
  font-size: 13px;
  background: var(--mint);
  color: var(--jade-dark);
  border: 1px solid #cfe0d8;
  white-space: nowrap;
}

.badge.amber {
  background: var(--gold-soft);
  color: #895810;
  border-color: #efd39a;
}

.badge.red {
  background: var(--red-soft);
  color: #9d3d29;
  border-color: #edc1b8;
}

.editor-layout {
  display: grid;
  gap: 16px;
  align-items: start;
}

.editor-top-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 360px;
  gap: 16px;
  align-items: start;
}

.editor-full-width {
  min-width: 0;
}

.sticky-side {
  position: sticky;
  top: 84px;
  display: grid;
  gap: 14px;
}

.version-list {
  display: grid;
  gap: 10px;
  max-height: 420px;
  overflow: auto;
}

.version-card {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 10px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fff;
  padding: 12px;
}

.version-card.active {
  border-color: var(--jade);
  background: #fdf1ec;
}

.version-card.checked {
  border-color: var(--clay);
  background: #fbeee8;
}

.version-bulkbar {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  margin-bottom: 10px;
  padding-bottom: 10px;
  border-bottom: 1px solid var(--line);
}

.version-bulkbar .sel-count {
  font-weight: 700;
  color: var(--clay);
}

.version-bulkbar .hint {
  color: var(--quiet);
  font-size: 13px;
}

.version-bulkbar button {
  min-height: 32px;
  padding: 5px 12px;
  font-size: 13px;
}

.version-main {
  display: flex;
  align-items: flex-start;
  gap: 10px;
}

.version-pick {
  display: flex;
  align-items: center;
  padding-top: 2px;
  cursor: pointer;
}

.version-pick input {
  width: 18px;
  height: 18px;
  min-height: 0;
  cursor: pointer;
  accent-color: var(--clay);
}

.version-lock {
  font-size: 15px;
  padding-top: 1px;
  opacity: .6;
}

.version-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 5px;
}

.version-card p {
  margin: 0 0 4px;
  color: var(--ink);
  line-height: 1.45;
}

.version-card span {
  color: var(--quiet);
  font-size: 13px;
}

.version-actions {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 6px;
}

.version-actions button {
  min-height: 32px;
  padding: 5px 7px;
  font-size: 13px;
}

.lead-strip {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 14px;
  align-items: start;
  padding: 16px 18px;
  background: var(--panel);
  color: var(--ink);
  border: 1px solid var(--line);
  border-left: 3px solid var(--line-strong); /* XQ-07：装饰性红条降级为中性，红只留缺/错 */
  border-radius: 8px;
}

/* v2：顶部条不再放需求摘要；销售备注（若有）收成一行小注 */
.lead-strip p.lead-strip-note {
  margin-top: 6px;
  font-size: 12.5px;
  color: var(--quiet);
  line-height: 1.6;
}

.lead-strip p.lead-strip-note strong {
  color: var(--sub);
  font-size: 11.5px;
  margin-right: 6px;
}

/* v3：销售备注 → ⏰ 下一步动作（浅琥珀提醒底）
   XQ-07 红色降噪：时间高亮从大红 800 降为琥珀 650——红色只留给「缺失/错误」，deadline 是「待办」语义 */
.lead-strip p.lead-strip-note.next-action {
  margin-top: 8px;
  background: var(--gold-soft);
  border: 1px solid #ead9b5;
  border-radius: 8px;
  padding: 6px 10px;
  color: var(--sub);
}

.lead-strip p.lead-strip-note.next-action strong.na-label {
  color: #8a5a14;
  font-weight: 600;
}

.lead-strip p.lead-strip-note.next-action strong.na-time {
  color: #8a5a14;
  font-weight: 650;
  font-size: inherit;
  margin: 0 1px;
}

.lead-strip p.lead-strip-note.next-action .na-empty {
  color: var(--quiet);
}

.lead-strip h2 {
  margin: 0 0 6px;
  font-size: 18px;
  color: var(--ink); /* XQ-07：客户名从砖红回默认墨色，红只留缺/错 */
}

.lead-strip p {
  margin: 0;
  color: var(--sub);
}

.lead-strip .meta {
  color: var(--quiet);
}

.lead-actions {
  display: grid;
  gap: 8px;
}

.sales-brief {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 10px;
  margin-top: 14px;
}

.brief-card {
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 13px;
  min-height: 118px;
}

.brief-card.primary {
  background: #f4f9f6;
  border-color: #bfd7ca;
}

.brief-card.warn {
  background: #fff8eb;
  border-color: #efd39a;
}

.brief-card span {
  display: block;
  color: var(--quiet);
  font-size: 13px;
  margin-bottom: 5px;
}

.brief-card strong {
  display: block;
  font-size: 16px;
  line-height: 1.35;
}

.brief-card p {
  margin: 8px 0 0;
  color: var(--sub);
  font-size: 14px;
}

.workflow-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 10px;
}

.workflow-card {
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fff;
  padding: 12px;
}

.workflow-card.warn {
  background: #fff8eb;
  border-color: #efd39a;
}

.workflow-card.ok {
  background: #f4faf6;
  border-color: #c9ded2;
}

.workflow-card span {
  display: block;
  color: var(--quiet);
  font-size: 13px;
  margin-bottom: 5px;
}

.workflow-card strong {
  display: block;
  line-height: 1.35;
}

.workflow-card p {
  margin: 8px 0 0;
  color: var(--sub);
  font-size: 14px;
}

.section-hint {
  margin-bottom: 12px;
}

.section {
  margin-top: 14px;
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: var(--radius);
}

.section-title {
  padding: 14px 16px;
  border-bottom: 1px solid var(--line);
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
}

.section-collapsible > summary {
  cursor: pointer;
  list-style: none;
}

.section-collapsible > summary::-webkit-details-marker {
  display: none;
}

.section-collapsible > summary::after {
  content: "展开";
  color: var(--quiet);
  font-size: 13px;
  margin-left: auto;
}

.section-collapsible[open] > summary::after {
  content: "收起";
}

.section-body {
  padding: 16px;
}

.chip-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.chip {
  border: 1px solid var(--line);
  background: #fff;
  min-height: 30px;
  border-radius: 999px;
  padding: 5px 10px;
  color: var(--sub);
  cursor: pointer;
  user-select: none;
}

.chip.active {
  background: var(--mint);
  border-color: var(--jade);
  color: var(--jade-dark);
  font-weight: 700;
}

.grouped-choice {
  display: grid;
  gap: 8px;
}

.choice-group {
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fbfcfb;
  padding: 0;
}

.choice-group summary {
  min-height: 38px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 8px 10px;
  cursor: pointer;
  list-style: none;
  font-weight: 750;
}

.choice-group summary::-webkit-details-marker {
  display: none;
}

.choice-group summary span {
  color: var(--quiet);
  font-size: 13px;
  font-weight: 500;
}

.choice-group .chip-grid {
  padding: 0 10px 10px;
}

.custom-add {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 8px;
  margin-top: 8px;
}

.compact-add {
  align-items: stretch;
  margin: 8px 0;
}

.compact-add input {
  min-height: 36px;
}

.compact-add button {
  min-height: 36px;
  white-space: nowrap;
}

.customer-edit {
  display: grid;
  gap: 14px;
}

.customer-edit-workspace {
  display: grid;
  grid-template-columns: minmax(0, 1.08fr) minmax(420px, .92fr);
  gap: 16px;
  align-items: start;
}

.customer-edit-panel {
  display: grid;
  gap: 12px;
  min-width: 0;
}

.editor-block {
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fff;
  padding: 12px;
}

.customer-preview-panel {
  min-width: 0;
}

.preview-sticky {
  position: sticky;
  top: 76px;
  display: grid;
  gap: 10px;
}

.preview-head {
  min-height: 44px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 10px;
  border: 1px solid #d8e4de;
  border-radius: 8px;
  background: #fbfcfa;
  padding: 10px 12px;
}

.preview-head strong {
  font-size: 15px;
}

.preview-head span {
  color: var(--quiet);
  font-size: 13px;
}

.live-customer-page {
  max-height: calc(100vh - 140px);
  overflow: auto;
  border: 1px solid #d8e4de;
  border-radius: 8px;
  background: #f7f7f4;
  padding: 12px;
  color: #20252c;
  box-shadow: 0 14px 34px rgba(28, 45, 39, .08);
}

.live-hero {
  border-radius: 8px;
  background: linear-gradient(135deg, #a8432f, #8a341e);
  color: #fff;
  padding: 26px 24px;
}

.live-hero span {
  display: inline-flex;
  border: 1px solid rgba(255,255,255,.34);
  border-radius: 999px;
  padding: 5px 10px;
  color: #f3ead9;
  font-size: 13px;
}

.live-hero h2 {
  margin: 18px 0 8px;
  font-size: clamp(28px, 4.4vw, 46px);
  line-height: 1.08;
  letter-spacing: 0;
}

.live-hero p {
  margin: 0;
  color: rgba(255,255,255,.82);
  font-weight: 650;
}

.live-panel {
  margin-top: 12px;
  border: 1px solid #deded8;
  border-radius: 8px;
  background: #fff;
  padding: 14px;
}

.live-panel.warm {
  background: #fffaf2;
  border-color: #ead9bd;
}

.live-panel h3 {
  margin: 0 0 10px;
  font-size: 17px;
}

.live-panel p,
.live-panel li {
  color: #5f6878;
  line-height: 1.7;
}

.live-panel ol {
  margin: 0;
  padding-left: 22px;
}

.live-route {
  margin: 0 0 10px;
  font-weight: 850;
  color: #443d38;
}

.live-route-table {
  display: grid;
  border: 1px solid #e4e5df;
  border-radius: 8px;
  overflow: hidden;
}

.live-route-table div {
  display: grid;
  grid-template-columns: 40px minmax(0, 1fr);
  gap: 3px 10px;
  align-items: baseline;
  padding: 10px 12px;
  border-top: 1px solid #eceee8;
  background: #fbfcfa;
}

.live-route-table div:first-child {
  border-top: 0;
}

.live-route-table b {
  grid-column: 1;
  grid-row: 1 / 4;
  color: #8d4d38;
  font-size: 15px;
}

.live-route-table span {
  grid-column: 2;
  font-weight: 750;
}

.live-route-table em {
  grid-column: 2;
  font-style: normal;
  color: #5f6878;
  font-size: 13px;
}

.live-route-table strong {
  grid-column: 2;
  color: #1b6d61;
  font-size: 12px;
}

.live-days {
  display: grid;
  gap: 12px;
  margin-top: 12px;
}

.live-day-card {
  display: grid;
  grid-template-columns: minmax(140px, .42fr) minmax(0, .58fr);
  overflow: hidden;
  border: 1px solid #deded8;
  border-radius: 8px;
  background: #fff;
}

.live-day-image {
  min-height: 300px;
  background: #e8ebe4 center/cover;
  position: relative;
}

.live-day-image span {
  position: absolute;
  top: 16px;
  left: 16px;
  width: 52px;
  height: 52px;
  border-radius: 50%;
  background: rgba(255,255,255,.92);
  display: grid;
  place-items: center;
  font-weight: 900;
  font-size: 18px;
}

.live-day-content {
  padding: 18px;
  display: grid;
  gap: 12px;
}

.live-day-content h3 {
  margin: 0;
  font-size: 28px;
  line-height: 1.15;
}

.live-route-line {
  margin: 0;
  border: 1px solid #e5e2dc;
  border-radius: 8px;
  padding: 10px 12px;
  font-weight: 800;
  color: #443d38;
}

.live-route-line b,
.live-highlight b {
  color: #8d4d38;
}

.live-schedule-row {
  display: grid;
  grid-template-columns: 76px minmax(82px, .45fr) minmax(0, 1fr);
  gap: 10px;
  border: 1px solid #e0e3dc;
  border-radius: 8px;
  padding: 10px;
  align-items: start;
}

.live-schedule-row b {
  font-size: 15px;
}

.live-schedule-row div,
.live-exp,
.live-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

.live-schedule-row span,
.live-exp span,
.live-meta span {
  border: 1px solid #d8e4de;
  background: #f6faf7;
  border-radius: 999px;
  padding: 3px 8px;
  color: #53606d;
  font-size: 13px;
}

.live-schedule-row p {
  margin: 0;
  color: #5f6878;
  line-height: 1.65;
}

.live-highlight {
  margin: 0;
  border: 1px solid #cfe2dc;
  background: #f4faf6;
  border-radius: 8px;
  padding: 12px;
  line-height: 1.7;
  color: #52615c;
}

.live-meta span {
  color: #20252c;
  background: #f7f8f4;
}

.live-exp {
  border-top: 1px solid #f0f1ed;
  padding-top: 10px;
}

.live-exp span {
  border-color: #eed4ca;
  background: #fff8f5;
  color: #7f4c3d;
  font-weight: 700;
}

.inline-customer-editor {
  display: grid;
  gap: 14px;
  border: 1px solid #d9e3dd;
  border-radius: 8px;
  background: #f7f7f4;
  padding: 16px;
}

.inline-customer-editor input,
.inline-customer-editor textarea {
  width: 100%;
  border: 1px solid #d9ddd6;
  border-radius: 8px;
  background: rgba(255,255,255,.9);
  color: #20252c;
  font: inherit;
  letter-spacing: 0;
}

.inline-customer-editor textarea {
  min-height: 88px;
  line-height: 1.7;
  resize: vertical;
}

.inline-customer-editor input:focus,
.inline-customer-editor textarea:focus {
  outline: 2px solid rgba(28, 109, 96, .18);
  border-color: var(--jade);
}

.inline-edit-hero {
  border-radius: 8px;
  background: linear-gradient(135deg, #a8432f, #8a341e);
  color: #fff;
  padding: 30px 28px;
}

.inline-edit-hero span {
  display: inline-flex;
  border: 1px solid rgba(255,255,255,.34);
  border-radius: 999px;
  padding: 5px 10px;
  color: #f3ead9;
  font-size: 13px;
  margin-bottom: 14px;
}

.inline-title-input {
  display: block;
  border-color: rgba(255,255,255,.25) !important;
  background: rgba(255,255,255,.08) !important;
  color: #fff !important;
  font-size: clamp(34px, 5vw, 68px) !important;
  line-height: 1.08;
  font-weight: 900;
  padding: 12px 14px;
}

.inline-subtitle-input {
  margin-top: 10px;
  border-color: rgba(255,255,255,.18) !important;
  background: rgba(255,255,255,.06) !important;
  color: rgba(255,255,255,.88) !important;
  font-weight: 700;
  padding: 10px 12px;
}

.inline-edit-panel {
  border: 1px solid #deded8;
  border-radius: 8px;
  background: #fff;
  padding: 16px;
}

.inline-panel-head {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  align-items: baseline;
  margin-bottom: 10px;
}

.inline-panel-head h3 {
  margin: 0;
  font-size: 18px;
}

.inline-panel-head small {
  color: var(--quiet);
}

.inline-intro-textarea {
  min-height: 110px;
}

.inline-route-input {
  padding: 12px;
  font-weight: 850;
  color: #443d38;
}

.inline-drive {
  margin: 12px 0;
}

.inline-route-table {
  display: grid;
  border: 1px solid #e4e5df;
  border-radius: 8px;
  overflow: hidden;
  margin-top: 12px;
}

.inline-route-table div {
  display: grid;
  grid-template-columns: 44px minmax(120px, .55fr) minmax(0, 1fr) minmax(132px, .45fr);
  gap: 10px;
  align-items: start;
  padding: 10px 12px;
  border-top: 1px solid #eceee8;
  background: #fbfcfa;
}

.inline-route-table div:first-child {
  border-top: 0;
}

.inline-route-table b {
  color: #8d4d38;
}

.inline-route-table span {
  font-weight: 800;
}

.inline-route-table em {
  color: #5f6878;
  font-style: normal;
}

.inline-route-table strong {
  color: var(--jade-dark);
  font-size: 13px;
}

.inline-days {
  display: grid;
  gap: 16px;
}

.inline-edit-day {
  min-height: 560px;
}

.inline-edit-image {
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  padding: 16px;
}

.inline-edit-image input {
  position: relative;
  z-index: 1;
  background: rgba(255,255,255,.92);
  font-size: 13px;
  padding: 8px 10px;
}

.inline-day-fields {
  gap: 14px;
}

.inline-day-top {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 10px;
  align-items: center;
}

.inline-day-top button {
  white-space: nowrap;
  border-color: #bdd4ca;
  background: #f3faf6;
  color: var(--jade-dark);
}

.inline-day-title {
  font-size: 28px !important;
  font-weight: 900;
  padding: 10px 12px;
}

.inline-day-theme {
  width: 100%;
  margin-top: 6px;
  padding: 7px 12px;
  font-size: 14px;
  color: var(--clay);
  font-weight: 700;
  border: 1px dashed var(--line-strong);
  border-radius: 8px;
  background: #ffffff;
}

/* 图片选择器（上传 / 素材库） */
.pick-image-btn {
  position: absolute;
  top: 8px;
  right: 8px;
  z-index: 3;
  background: rgba(255, 255, 255, 0.92);
  border: 1px solid var(--line-strong);
  border-radius: 8px;
  padding: 4px 10px;
  font-size: 13px;
  cursor: pointer;
  color: var(--ink);
}

.pick-image-btn:hover {
  border-color: var(--jade);
  color: var(--jade-dark);
}

.img-picker-overlay {
  position: fixed;
  inset: 0;
  background: rgba(20, 16, 12, 0.5);
  display: none;
  align-items: center;
  justify-content: center;
  z-index: 999;
  padding: 20px;
}

.img-picker-overlay.open {
  display: flex;
}

.img-picker {
  background: #fff;
  width: min(720px, 96vw);
  max-height: 86vh;
  border-radius: 14px;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
}

.img-picker-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 14px 18px;
  border-bottom: 1px solid var(--line);
}

.img-picker-close {
  border: 0;
  background: transparent;
  font-size: 18px;
  cursor: pointer;
  color: var(--quiet);
}

.img-picker-tabs {
  display: flex;
  gap: 8px;
  padding: 12px 18px 0;
}

.ip-tab {
  border: 0;
  background: transparent;
  padding: 8px 14px;
  font-weight: 700;
  color: var(--quiet);
  cursor: pointer;
  border-bottom: 2px solid transparent;
}

.ip-tab.active {
  color: var(--jade-dark);
  border-bottom-color: var(--jade);
}

.img-picker-body {
  padding: 16px 18px;
  overflow: auto;
}

.ip-upload {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 140px;
  border: 2px dashed var(--line-strong);
  border-radius: 12px;
  color: var(--sub);
  cursor: pointer;
  text-align: center;
  padding: 0 16px;
}

.ip-upload:hover {
  border-color: var(--jade);
  color: var(--jade-dark);
}

.ip-upload-status {
  margin-top: 10px;
  color: var(--sub);
  font-size: 14px;
}

.ip-empty {
  color: var(--quiet);
  line-height: 1.9;
}

.ip-empty code {
  background: var(--bg);
  padding: 1px 6px;
  border-radius: 4px;
}

.ip-cat-name {
  font-weight: 800;
  color: var(--jade-dark);
  margin: 6px 0 8px;
}

.ip-sub-name {
  color: var(--sub);
  font-weight: 600;
  margin: 10px 0 6px;
}

.ip-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(96px, 1fr));
  gap: 8px;
}

.ip-cell {
  padding: 0;
  border: 1px solid var(--line);
  border-radius: 8px;
  overflow: hidden;
  cursor: pointer;
  background: #f4f4f2;
  aspect-ratio: 1;
}

.ip-cell img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.ip-cell:hover {
  border-color: var(--jade);
}

/* ◎调位置 焦点选择器：给完整原图(contain全貌)让定制师点想留住的点 */
.focus-picker {
  width: min(560px, 96vw);
}
.focus-picker-hint {
  padding: 12px 18px 4px;
  font-size: 13px;
  line-height: 1.6;
  color: var(--quiet, #6b6255);
}
.focus-picker-hint strong { color: var(--jade-dark, #2f6b56); }
.focus-picker-stage {
  position: relative;
  margin: 10px 18px;
  background: #14120d;
  border-radius: 10px;
  min-height: 200px;
  max-height: 56vh;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}
.focus-picker-stage img {
  max-width: 100%;
  max-height: 56vh;
  object-fit: contain;
  display: block;
  cursor: crosshair;
}
.focus-picker-dot {
  position: absolute;
  width: 22px;
  height: 22px;
  margin: -11px 0 0 -11px;
  border-radius: 50%;
  border: 2px solid #E9C46A;
  box-shadow: 0 0 0 2px rgba(20,18,13,.7), 0 0 10px rgba(233,196,106,.8);
  background: rgba(233,196,106,.28);
  pointer-events: none;
}
.focus-picker-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 8px 18px 16px;
  flex-wrap: wrap;
}
.focus-picker-pos {
  font-size: 13px;
  color: var(--quiet, #6b6255);
}
.focus-picker-actions {
  display: flex;
  gap: 8px;
}
.focus-picker .btn-ghost {
  border: 1px solid var(--line-strong, #d9d0c2);
  background: #fff;
  color: var(--quiet, #6b6255);
  padding: 8px 14px;
  border-radius: 8px;
  font-weight: 600;
  cursor: pointer;
}
.focus-picker .btn-ghost:hover { border-color: var(--jade, #3a8a6f); color: var(--jade-dark, #2f6b56); }

.inline-day-lodging {
  display: grid;
  grid-template-columns: 84px minmax(0, 1fr);
  gap: 8px;
  align-items: center;
  color: var(--sub);
  font-weight: 800;
}

.inline-route-line-edit {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  gap: 8px;
  align-items: center;
}

.inline-route-line-edit input {
  border: 0;
  background: transparent;
  padding: 4px 0;
  font-weight: 850;
}

.inline-mini-row {
  max-height: 76px;
  padding: 7px;
}

.inline-schedule-edit {
  display: grid;
  grid-template-columns: 82px minmax(120px, .42fr) minmax(0, 1fr);
  gap: 10px;
  border: 1px solid #e0e3dc;
  border-radius: 8px;
  padding: 10px;
  align-items: start;
}

.inline-schedule-edit b {
  padding-top: 7px;
  font-size: 15px;
}

.inline-schedule-edit textarea {
  min-height: 76px;
}

.inline-schedule-edit .mini-pick-row {
  grid-column: 2 / -1;
}

/* —— 时段行编辑器（schedule_rows） —— */
.inline-schedule {
  display: grid;
  gap: 14px;
}

.sched-period {
  border: 1px solid #e0e3dc;
  border-radius: 10px;
  padding: 10px 12px;
  background: #fcfdfb;
}

.sched-period-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 8px;
}

.sched-period-label {
  font-weight: 700;
  font-size: 15px;
  color: var(--clay);
}

.sched-period-actions {
  display: inline-flex;
  gap: 8px;
  align-items: center;
}

.sched-add-row {
  border: 1px dashed var(--line-strong);
  background: transparent;
  color: var(--sub);
  border-radius: 999px;
  padding: 3px 12px;
  font-size: 14px;
  cursor: pointer;
}

.sched-add-row:hover {
  color: var(--jade-dark);
  border-color: var(--jade);
}

.sched-del-period {
  border: 0;
  background: transparent;
  color: var(--quiet);
  font-size: 13px;
  cursor: pointer;
  padding: 3px 6px;
}

.sched-del-period:hover {
  color: var(--clay);
}

.sched-add-period {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.sched-add-period:empty {
  display: none;
}

.sched-add-period button {
  border: 1px dashed var(--line-strong);
  background: transparent;
  color: var(--sub);
  border-radius: 999px;
  padding: 4px 14px;
  font-size: 14px;
  cursor: pointer;
}

.sched-add-period button:hover {
  color: var(--jade-dark);
  border-color: var(--jade);
}

.sched-period-rows {
  display: grid;
  gap: 8px;
}

.sched-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 8px;
  align-items: start;
  background: #fff;
  border: 1px solid #e6e9e2;
  border-radius: 8px;
  padding: 8px;
}

.sched-row-body {
  display: grid;
  grid-template-columns: minmax(120px, .4fr) minmax(0, 1fr);
  grid-template-areas: "title desc" "tags tags";
  gap: 8px;
}

.sched-row-title {
  grid-area: title;
  font-weight: 600;
}

.sched-row-desc {
  grid-area: desc;
  min-height: 58px;
  resize: vertical;
}

.sched-row-tags {
  grid-area: tags;
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  align-items: center;
}

.sched-tag {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  background: var(--mint);
  color: var(--jade-dark);
  border-radius: 999px;
  padding: 2px 6px 2px 10px;
  font-size: 13px;
}

.sched-tag button {
  border: 0;
  background: transparent;
  color: var(--jade-dark);
  cursor: pointer;
  font-size: 14px;
  line-height: 1;
  padding: 0 2px;
}

.sched-tag-add {
  border: 1px dashed var(--line-strong);
  background: transparent;
  border-radius: 999px;
  min-height: 26px;
  width: 96px;
  padding: 2px 8px;
  font-size: 13px;
}

.sched-row-actions {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 6px;
}

.sched-row-ai {
  border: 1px solid var(--jade);
  background: #fff;
  color: var(--jade-dark);
  cursor: pointer;
  font-size: 13px;
  padding: 3px 8px;
  border-radius: 6px;
  white-space: nowrap;
}

.sched-row-ai:hover {
  background: var(--mint);
}

.sched-row-ai:disabled {
  opacity: .6;
  cursor: default;
}

.sched-row-del {
  border: 0;
  background: transparent;
  color: var(--quiet);
  cursor: pointer;
  font-size: 13px;
  padding: 4px 6px;
  white-space: nowrap;
}

.sched-row-del:hover {
  color: var(--clay);
}

.sched-moment-row {
  margin-top: 8px;
}

.ai-fallback-note {
  color: var(--clay);
  font-weight: 600;
}

.save-bar {
  flex-wrap: wrap;
  align-items: center;
}

.save-bar-divider {
  flex: 0 0 1px;
  align-self: stretch;
  min-height: 24px;
  background: var(--line);
  margin: 0 4px;
}

.save-bar-note {
  margin-top: 8px;
  color: var(--quiet);
  font-size: 13px;
  line-height: 1.6;
}

.template-bar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 12px;
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px dashed var(--line);
}

.template-bar-label {
  font-size: 14px;
  font-weight: 700;
  color: var(--sub);
}

.template-pills {
  display: inline-flex;
  flex-wrap: wrap;
  gap: 8px;
}

.template-pill {
  display: inline-flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 2px;
  border: 1px solid var(--line-strong);
  border-radius: 12px;
  padding: 7px 14px;
  background: #fff;
  cursor: pointer;
  transition: all 0.15s ease;
  line-height: 1.2;
}

.template-pill strong {
  font-size: 14px;
  font-weight: 700;
  color: var(--ink, #2b2622);
}

.template-pill span {
  font-size: 11px;
  color: var(--quiet);
}

.template-pill:hover {
  border-color: #a8432f;
  background: #faf3ef;
}

.template-pill.is-active {
  border-color: #a8432f;
  background: #a8432f;
  box-shadow: 0 4px 12px rgba(168, 67, 47, 0.22);
}

.template-pill.is-active strong {
  color: #fff;
}

.template-pill.is-active span {
  color: rgba(255, 255, 255, 0.82);
}

.stage-bar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 14px;
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px dashed var(--line);
}

.stage-bar label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 14px;
  color: var(--sub);
  font-weight: 600;
}

.stage-bar select,
.stage-bar input {
  border: 1px solid var(--line-strong);
  border-radius: 8px;
  padding: 5px 10px;
  font-size: 14px;
  background: #fff;
}

.stage-bar input {
  width: 150px;
}

.stage-hint {
  color: var(--quiet);
  font-size: 13px;
}

/* 编辑台工具条 · 信息层级整理：主操作 / 次操作 / 设置 / 一句提示 */
.edit-toolbar { display: flex; flex-direction: column; gap: 10px; }
.edit-toolbar .toolbar-row { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; }
.edit-toolbar .toolbar-actions { justify-content: space-between; }
.edit-toolbar .toolbar-actions .toolbar-primary { margin-left: auto; } /* 主理人6-13：主按钮永远贴最右（换行时也靠右），顺手 */
.edit-toolbar .toolbar-primary { font-size: 15px; font-weight: 800; padding: 10px 22px; border-radius: 12px; box-shadow: 0 6px 16px rgba(168,67,47,.18); }
.edit-toolbar .toolbar-secondary { display: inline-flex; flex-wrap: wrap; gap: 6px; }
.edit-toolbar .toolbar-secondary button { background: transparent; border: 1px solid var(--line-strong); color: var(--sub); border-radius: 999px; padding: 5px 13px; font-size: 13px; cursor: pointer; transition: all .15s ease; }
.edit-toolbar .toolbar-secondary button:hover { border-color: #a8432f; color: #a8432f; background: #faf3ef; }
.edit-toolbar .toolbar-settings { gap: 18px; padding-top: 10px; border-top: 1px dashed var(--line); }
.edit-toolbar .toolbar-seg { display: inline-flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.edit-toolbar .toolbar-stage { margin-left: auto; gap: 14px; }
.edit-toolbar .toolbar-stage label { display: inline-flex; align-items: center; gap: 6px; font-size: 13.5px; color: var(--sub); font-weight: 600; }
.edit-toolbar .toolbar-stage select, .edit-toolbar .toolbar-stage input { border: 1px solid var(--line-strong); border-radius: 8px; padding: 5px 10px; font-size: 13.5px; background: #fff; }
.edit-toolbar .toolbar-stage input { width: 128px; }
.edit-toolbar .toolbar-mini-label { font-size: 12px; font-weight: 700; color: var(--quiet); letter-spacing: .04em; white-space: nowrap; }
.edit-toolbar .toolbar-tip { margin: 0; color: var(--quiet); font-size: 12.5px; line-height: 1.55; }
/* 工具条里的模板 pill 更紧凑：只留名字，副标题省略 */
.edit-toolbar .toolbar-templates .template-pill { flex-direction: row; align-items: center; justify-content: center; padding: 7px 16px; }
.edit-toolbar .toolbar-templates .template-pill span { display: none; }

.inline-highlight-edit {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  gap: 8px;
  border: 1px solid #cfe2dc;
  background: #f4faf6;
  border-radius: 8px;
  padding: 12px;
  align-items: start;
}

.inline-highlight-edit b {
  color: var(--jade-dark);
  padding-top: 8px;
}

.inline-highlight-edit textarea {
  min-height: 84px;
}

.inline-meta-edit span {
  display: grid;
  grid-template-columns: auto minmax(120px, 1fr);
  align-items: center;
  gap: 6px;
  padding: 6px 8px;
}

.inline-meta-edit input {
  border: 0;
  background: transparent;
  min-height: 28px;
  padding: 0;
}

.inline-experience-edit {
  border-top: 1px solid #f0f1ed;
  padding-top: 10px;
  display: grid;
  gap: 8px;
}

.inline-experience-edit b {
  color: #7f4c3d;
}

.inline-extra-edit {
  border: 1px dashed #d9ddd6;
  border-radius: 8px;
  padding: 10px;
}

.inline-extra-edit summary {
  cursor: pointer;
  color: var(--sub);
  font-weight: 800;
}

.inline-extra-edit textarea {
  margin-top: 8px;
}

.inline-tail-panel {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 14px;
}

.quote-workbench {
  display: grid;
  gap: 14px;
}

.library-drawer {
  padding: 0;
  overflow: hidden;
}

.library-drawer > summary {
  min-height: 54px;
  padding: 14px 18px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  cursor: pointer;
  list-style: none;
  background: #fbfcfa;
}

.library-drawer > summary::-webkit-details-marker {
  display: none;
}

.library-drawer > summary span {
  color: var(--quiet);
  font-size: 14px;
}

.library-drawer-stack {
  display: grid;
  gap: 14px;
  padding: 14px;
  border-top: 1px solid var(--line);
}

.quote-note {
  border: 1px solid #cfe2d8;
  background: #f4faf6;
  border-radius: 8px;
  padding: 12px;
}

.quote-note strong {
  display: block;
  color: var(--jade-dark);
  margin-bottom: 4px;
}

.quote-note p {
  margin: 0;
  color: var(--sub);
}

.quote-actions {
  padding-top: 2px;
}

.quote-result {
  display: grid;
  gap: 12px;
}

.quote-resource-preview {
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fff;
  overflow: hidden;
}

.quote-resource-preview summary {
  min-height: 40px;
  padding: 10px 12px;
  display: flex;
  justify-content: space-between;
  gap: 10px;
  cursor: pointer;
  list-style: none;
  font-weight: 750;
  background: #fbfcfa;
  border-bottom: 1px solid var(--line);
}

.quote-resource-preview summary::-webkit-details-marker {
  display: none;
}

.quote-resource-preview summary span {
  color: var(--quiet);
  font-size: 13px;
  font-weight: 500;
}

.quote-resource-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
  padding: 12px;
}

.quote-resource-grid article {
  border: 1px solid #eef1ec;
  border-radius: 8px;
  padding: 10px;
}

.quote-resource-grid h3 {
  margin: 0 0 8px;
  font-size: 14px;
}

.resource-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 8px;
  padding: 5px 0;
  border-top: 1px solid #f0f2ef;
}

.resource-row:first-of-type {
  border-top: 0;
}

.resource-row span {
  color: var(--sub);
  font-size: 13px;
  white-space: nowrap;
}

.quote-total-card {
  display: grid;
  grid-template-columns: 1.2fr 1fr 1fr;
  gap: 10px;
}

.quote-total-card > div {
  border: 1px solid #d9c390;
  background: #fff9e9;
  border-radius: 8px;
  padding: 12px;
}

.quote-total-card span {
  display: block;
  color: #8a681f;
  font-size: 13px;
  margin-bottom: 4px;
}

.quote-total-card strong {
  display: block;
  font-size: 20px;
  line-height: 1.25;
}

.quote-line-groups {
  display: grid;
  gap: 10px;
}

.quote-line-group {
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fff;
  overflow: hidden;
}

.quote-line-group h3 {
  margin: 0;
  padding: 10px 12px;
  font-size: 14px;
  background: #f7f9f6;
  border-bottom: 1px solid var(--line);
}

.quote-line {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 12px;
  padding: 11px 12px;
  border-top: 1px solid #eef1ec;
}

.quote-line:first-of-type {
  border-top: 0;
}

.quote-line strong,
.quote-line span,
.quote-line p {
  display: block;
}

.quote-line span,
.quote-line p {
  color: var(--sub);
  font-size: 13px;
  margin: 3px 0 0;
}

.quote-line b {
  align-self: start;
  color: var(--jade-dark);
  white-space: nowrap;
}

.quote-warnings {
  border: 1px solid #efd39a;
  background: #fffaf0;
  border-radius: 8px;
  padding: 12px;
}

.quote-warnings strong {
  color: #895810;
}

.edit-toolbar {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 12px;
  border: 1px solid #cfe2d8;
  background: #f4faf6;
  border-radius: 8px;
  padding: 12px;
}

.edit-days {
  display: grid;
  gap: 12px;
}

.edit-day-card {
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fff;
  overflow: hidden;
}

.edit-day-card > summary {
  min-height: 46px;
  padding: 12px 14px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  cursor: pointer;
  list-style: none;
  background: #fbfcfa;
  border-bottom: 1px solid var(--line);
}

.edit-day-card > summary::-webkit-details-marker {
  display: none;
}

.edit-day-card summary span {
  color: var(--quiet);
  font-size: 13px;
}

.edit-day-body {
  padding: 14px;
}

.mini-pick-row {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  max-height: 96px;
  overflow: auto;
  padding: 8px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fbfcfa;
}

.mini-pick-row button {
  min-height: 28px;
  border-radius: 999px;
  padding: 4px 8px;
  font-size: 13px;
  color: var(--sub);
}

.day-summary-actions {
  display: inline-flex;
  align-items: center;
  gap: 10px;
}

.day-summary-actions button {
  min-height: 30px;
  border-radius: 999px;
  border-color: #bdd4ca;
  background: #f3faf6;
  color: var(--jade-dark);
  font-size: 13px;
  padding: 4px 10px;
}

.day-summary-actions em {
  font-style: normal;
  color: var(--quiet);
}

.copy-refresh-note {
  margin: 8px 0 0;
  color: var(--quiet);
  font-size: 13px;
  line-height: 1.5;
}

.editor-drive-strip {
  grid-column: 1 / -1;
  border: 1px solid #cfe0d7;
  background: #f6fbf8;
  border-radius: 8px;
  padding: 12px;
}

.editor-drive-strip strong {
  display: block;
  margin-bottom: 8px;
  color: var(--jade-dark);
}

.editor-drive-strip div {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.editor-drive-strip span {
  border: 1px solid #d8e5df;
  background: #fff;
  border-radius: 999px;
  padding: 5px 9px;
  color: var(--sub);
  font-size: 13px;
}

.output-stack {
  display: grid;
  gap: 12px;
}

.publish-panel {
  border-color: #cddfd6;
  background:
    linear-gradient(180deg, #ffffff 0%, #fbfdfb 100%);
}

.publish-panel .panel-head {
  background: #f4faf6;
}

.share-link-box {
  display: grid;
  gap: 4px;
  border: 1px solid #cfe2d8;
  background: #f3faf5;
  border-radius: 8px;
  padding: 12px;
  margin: 12px 0;
}

.share-link-box span {
  color: var(--sub);
  font-size: 13px;
}

.share-link-box strong {
  color: var(--jade-dark);
  word-break: break-all;
  font-size: 14px;
}

.publish-empty {
  border: 1px dashed #d8c08d;
  background: #fffaf0;
  border-radius: 8px;
  padding: 12px;
  margin: 12px 0;
}

.publish-empty strong {
  display: block;
  margin-bottom: 4px;
}

.publish-empty p {
  margin: 0;
  color: var(--sub);
  font-size: 14px;
}

.result-card {
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 14px;
  background: #fff;
}

.result-card h3 {
  margin: 0 0 8px;
  font-size: 15px;
}

.kv-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
}

.kv {
  background: #f5f8f5;
  border: 1px solid #e0e7e1;
  border-radius: 8px;
  padding: 9px;
}

.kv span {
  display: block;
  color: var(--quiet);
  font-size: 13px;
}

.kv strong {
  display: block;
  margin-top: 2px;
}

.list-clean {
  margin: 8px 0 0;
  padding-left: 18px;
}

.list-clean li {
  margin: 5px 0;
}

.drive-risk-box {
  margin-top: 12px;
  border: 1px solid #efd39a;
  background: #fffaf0;
  border-radius: 8px;
  padding: 12px;
}

.drive-risk-box strong {
  color: #895810;
}

.preview-frame {
  width: 100%;
  height: 520px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fff;
}

.status-line {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
  color: var(--sub);
  font-size: 13px;
}

.toast {
  position: fixed;
  right: 18px;
  bottom: 18px;
  max-width: min(420px, calc(100vw - 36px));
  background: #20363a;
  color: #fff;
  border-radius: 8px;
  padding: 12px 14px;
  box-shadow: 0 18px 44px rgba(0,0,0,.18);
  z-index: 99;
}

.empty {
  padding: 18px;
  border: 1px dashed var(--line-strong);
  border-radius: 8px;
  color: var(--sub);
  background: #fff;
}

.empty.slim {
  padding: 12px;
  font-size: 14px;
}

.divider {
  height: 1px;
  background: var(--line);
  margin: 14px 0;
}

.mono {
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
}

.small {
  font-size: 13px;
  color: var(--sub);
}

.note {
  margin: 0;
  padding: 12px;
  border: 1px solid #ead7bf;
  border-radius: 8px;
  background: #fffaf2;
  color: #604015;
}

.intake-shell {
  min-height: 100vh;
  background: #fafbfc; /* B1-21：需求页淡豆绿渐变底去掉，同步清爽近白 */
}

.intake-wrap {
  max-width: 1120px;
  margin: 0 auto;
  padding: 18px 14px 48px;
}

.intake-hero {
  min-height: 260px;
  border-radius: 8px;
  padding: 26px 20px;
  color: #fff;
  background:
    linear-gradient(135deg, rgba(23, 57, 52, .96), rgba(43, 74, 91, .9)),
    repeating-linear-gradient(90deg, rgba(255,255,255,.09) 0 1px, transparent 1px 20px);
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  align-items: flex-start;
  box-shadow: var(--shadow);
}

.intake-hero h1 {
  max-width: 760px;
  font-size: clamp(30px, 5.6vw, 48px);
  line-height: 1.12;
  margin: 0 0 12px;
}

.intake-hero p {
  max-width: 760px;
  color: #dbe8e3;
  margin: 0 0 16px;
  font-size: 16px;
}

.guide-section,
.question-strip,
.duration-guide {
  margin-top: 14px;
}

.section-headline {
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  gap: 18px;
  margin-bottom: 12px;
}

.section-headline.compact {
  margin-top: 18px;
}

.section-headline h2 {
  margin: 4px 0 0;
  font-size: clamp(22px, 3vw, 32px);
  line-height: 1.2;
}

.section-headline p {
  max-width: 460px;
  margin: 0;
  color: var(--sub);
}

.kicker {
  color: var(--clay);
  font-size: 13px;
  font-weight: 850;
  letter-spacing: .12em;
}

.region-overview {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 10px;
}

.region-card {
  min-height: 178px;
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 14px;
  background: #fff;
  box-shadow: var(--shadow);
}

.region-card.green { border-top: 5px solid #7b9b71; }
.region-card.gold { border-top: 5px solid #d8a848; }
.region-card.clay { border-top: 5px solid #c46c4f; }
.region-card.blue { border-top: 5px solid #6b9aa9; }
.region-card.teal { border-top: 5px solid #5b9c95; }

.region-code {
  color: var(--quiet);
  font-size: 13px;
  font-weight: 800;
}

.region-card h3 {
  margin: 7px 0 6px;
  font-size: 18px;
  line-height: 1.25;
}

.region-card p,
.region-card small {
  display: block;
  color: var(--sub);
  font-size: 13px;
  line-height: 1.55;
}

.region-card button {
  margin-top: 10px;
  min-height: 30px;
  border: 1px solid var(--line);
  border-radius: 999px;
  background: #fbfaf5;
  color: var(--jade-dark);
  padding: 4px 10px;
  font-weight: 750;
}

.question-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 10px;
}

.question-card {
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 14px;
  box-shadow: var(--shadow);
}

.question-card strong {
  display: block;
  color: var(--clay);
  margin-bottom: 6px;
}

.question-card p {
  margin: 0;
  color: var(--sub);
  font-size: 14px;
  line-height: 1.65;
}

.duration-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px;
}

.duration-card {
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 14px;
  background: linear-gradient(180deg, #fff, #fbfaf5);
  box-shadow: var(--shadow);
}

.duration-card span {
  color: var(--jade-dark);
  font-size: 13px;
  font-weight: 850;
}

.duration-card h3 {
  margin: 4px 0 6px;
  font-size: 22px;
}

.duration-card p {
  margin: 0;
  color: var(--sub);
  font-size: 14px;
  line-height: 1.65;
}

.intake-layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(340px, 440px);
  gap: 14px;
  margin-top: 14px;
  align-items: start;
}

.intake-card {
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 8px;
  box-shadow: var(--shadow);
  overflow: hidden;
}

.intake-card-head {
  padding: 15px 16px;
  border-bottom: 1px solid var(--line);
  display: flex;
  justify-content: space-between;
  gap: 10px;
  align-items: center;
}

.intake-card-body {
  padding: 16px;
}

.quick-form {
  display: grid;
  gap: 16px;
}

.choice-block {
  display: grid;
  gap: 7px;
}

.field-help {
  margin: 5px 0 0;
  color: var(--sub);
  font-size: 13px;
  line-height: 1.45;
}

.advanced-fields {
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fbfcfa;
  overflow: hidden;
}

.advanced-fields summary {
  cursor: pointer;
  padding: 13px 14px;
  color: var(--jade-dark);
  font-weight: 750;
}

.advanced-fields .form-grid {
  padding: 0 14px 14px;
}

.choice-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.choice {
  border: 1px solid var(--line);
  background: #fff;
  color: var(--sub);
  border-radius: 999px;
  min-height: 34px;
  padding: 6px 11px;
}

.choice.active {
  border-color: var(--jade);
  background: var(--mint);
  color: var(--jade-dark);
  font-weight: 700;
}

.poi-picker {
  margin-top: 14px;
}

.region-group {
  border-top: 1px solid var(--line);
  padding-top: 12px;
  margin-top: 12px;
}

.region-title {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  margin-bottom: 8px;
  color: var(--ink);
  font-weight: 760;
}

.region-title span {
  color: var(--quiet);
  font-size: 13px;
  font-weight: 500;
}

.region-group.featured {
  border: 1px solid #efd39a;
  border-radius: 8px;
  padding: 12px;
  background: #fffaf0;
}

.spot-insights {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
  margin-top: 12px;
}

.spot-insight {
  border: 1px solid #ecd8bf;
  border-radius: 8px;
  padding: 12px;
  background: #fffaf2;
}

.spot-insight span {
  display: inline-flex;
  color: #9d5b20;
  font-size: 13px;
  font-weight: 850;
}

.spot-insight h4 {
  margin: 4px 0;
  font-size: 16px;
}

.spot-insight p,
.spot-insight small {
  display: block;
  margin: 0;
  color: var(--sub);
  font-size: 13px;
  line-height: 1.55;
}

.map-card {
  position: sticky;
  top: 82px;
}

.shanxi-map {
  width: 100%;
  aspect-ratio: 3 / 4.82;
  border-radius: 8px;
  background: #f6f7f3;
  border: 1px solid var(--line);
}

.map-region {
  fill: #edf3ed;
  stroke: #b9c7bd;
  stroke-width: 2;
}

.map-band {
  stroke: none;
  opacity: .72;
}

.map-band.north {
  fill: #e8f2ed;
}

.map-band.middle {
  fill: #f4ecd9;
}

.map-band.south {
  fill: #f6e6dc;
}

.map-region-label {
  font-size: 14px;
  font-weight: 800;
  fill: rgba(20, 87, 78, .32);
  letter-spacing: 0;
}

.route-line {
  stroke: #2f5f8c;
  stroke-width: 3;
  stroke-linecap: round;
  fill: none;
  opacity: .78;
}

.route-line.soft {
  stroke: #d0a044;
  stroke-dasharray: 6 6;
}

.poi-dot {
  cursor: pointer;
}

.poi-dot circle {
  fill: #fff;
  stroke: #8aa29a;
  stroke-width: 2.2;
}

.poi-dot.dim circle {
  fill: #fbfcfa;
  stroke: #bdc9c1;
  stroke-width: 1.4;
}

.poi-dot.selected circle {
  fill: #b7472a;
  stroke: #8a341e;
}

.poi-dot.entry circle {
  fill: #2f5f8c;
  stroke: #173f62;
}

.poi-dot.exit circle {
  fill: #b77818;
  stroke: #87560f;
}

.poi-dot text,
.map-point-label {
  font-size: 13px;
  fill: #263238;
  paint-order: stroke;
  stroke: #fff;
  stroke-width: 4.5px;
  stroke-linejoin: round;
}

.drive-label {
  font-size: 12px;
  fill: #2f5f8c;
  paint-order: stroke;
  stroke: #fff;
  stroke-width: 4px;
  stroke-linejoin: round;
}

.result-hero {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 10px;
}

.conclusion {
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 12px;
  background: #f7faf7;
}

.conclusion span {
  color: var(--quiet);
  font-size: 13px;
}

.conclusion strong {
  display: block;
  margin-top: 4px;
  font-size: 17px;
}

.tension-high {
  background: #fff0ec;
  border-color: #edc1b8;
  color: #9d3d29;
}

.tension-medium {
  background: #fff5df;
  border-color: #efd39a;
  color: #895810;
}

.tension-low {
  background: #eaf4ef;
  border-color: #cfe0d8;
  color: #14574e;
}

.comparison-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px;
}

.plan-card {
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 14px;
  background: #fff;
}

.plan-card.recommended {
  border-color: var(--jade);
  background: #f4faf7;
}

.timeline {
  display: grid;
  gap: 10px;
}

.mini-day {
  border: 1px solid var(--line);
  border-left: 4px solid var(--jade);
  border-radius: 8px;
  padding: 12px;
  background: #fff;
}

.sales-card {
  display: grid;
  gap: 8px;
}

.sales-row {
  display: grid;
  grid-template-columns: 110px minmax(0, 1fr);
  gap: 8px;
  border-bottom: 1px solid #edf0ed;
  padding-bottom: 7px;
}

.sales-row span {
  color: var(--quiet);
}

@media (max-width: 1180px) {
  .dashboard-grid,
  .editor-layout,
  .editor-top-grid,
  .customer-edit-workspace,
  .planner-grid,
  .ops-hero,
  .sales-brief {
    grid-template-columns: 1fr;
  }

  .sticky-side,
  .preview-sticky {
    position: static;
  }

  .live-customer-page {
    max-height: none;
  }

  .route-match-grid,
  .experience-region-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 760px) {
  .topbar-inner,
  .lead-strip {
    grid-template-columns: 1fr;
  }

  .workspace {
    padding: 12px;
  }

  .form-grid,
  .form-grid.three,
  .form-grid.four,
  .search-row,
  .feishu-search-row,
  .kv-grid,
  .quote-total-card,
  .quote-line,
  .quote-resource-grid,
  .live-day-card,
  .live-route-table div,
  .live-schedule-row,
  .inline-route-table div,
  .inline-schedule-edit,
  .inline-tail-panel,
  .inline-day-top,
  .inline-day-lodging,
  .inline-route-line-edit,
  .inline-highlight-edit,
  .sched-row,
  .resource-row {
    grid-template-columns: 1fr;
  }

  .sched-row-body {
    grid-template-columns: 1fr;
    grid-template-areas: "title" "desc" "tags";
  }

  .live-day-image {
    min-height: 220px;
  }

  .history-item,
  .feishu-lead-card {
    grid-template-columns: 1fr;
  }

  .intake-wrap {
    padding: 10px;
  }

  .intake-layout,
  .result-hero,
  .comparison-grid,
  .region-overview,
  .question-grid,
  .duration-grid,
  .route-match-grid,
  .experience-region-grid,
  .service-slice-grid,
  .sample-days,
  .ops-flow,
  .spot-insights {
    grid-template-columns: 1fr;
  }

  .section-headline {
    display: block;
  }

  .map-card {
    position: static;
  }

  .intake-hero {
    min-height: 250px;
    padding: 22px 16px;
  }

  .intake-hero h1 {
    font-size: 34px;
  }

  .inline-title-input {
    font-size: 32px !important;
  }

  .inline-schedule-edit .mini-pick-row {
    grid-column: 1;
  }
}

/* ===== 客户画像卡（替代销售简报/阶段检查两堵只读墙）===== */
.profile-card { display: grid; grid-template-columns: 1fr 240px; gap: 16px; background: var(--panel); border: 1px solid var(--line); border-radius: 12px; padding: 18px 20px; box-shadow: var(--shadow); margin-bottom: 14px; }
.profile-row { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; }
.profile-name { font-size: 20px; font-weight: 800; color: var(--ink); }
.profile-tags { font-size: 13px; color: var(--sub); background: var(--mint); border-radius: 999px; padding: 2px 12px; }
.profile-summary { color: var(--sub); line-height: 1.7; margin: 10px 0 14px; }
.profile-facts { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; }
.profile-facts > div { background: #f7f8fa; border: 1px solid var(--line); border-radius: 8px; padding: 8px 10px; }
.profile-facts label { display: block; font-size: 11px; color: var(--quiet); margin-bottom: 3px; }
.profile-facts b { font-size: 13px; color: var(--ink); font-weight: 600; }
.profile-side { border-radius: 10px; padding: 12px 14px; background: var(--gold-soft); border: 1px solid #ecdcc3; }
.profile-side.ok { background: #eef6f0; border-color: #cfe6d7; }
.profile-side-label { display: block; font-size: 12px; font-weight: 700; color: var(--clay); margin-bottom: 8px; }
.profile-side.ok .profile-side-label { color: var(--ok); }
.profile-side ul { margin: 0; padding-left: 16px; }
.profile-side li { font-size: 12px; color: var(--sub); line-height: 1.7; }
.profile-side p { margin: 0; font-size: 13px; color: var(--ok); }

/* ===== 本程五维骨架仪表盘（命门：景点是手段、五维是目的）===== */
.five-dim-board { background: var(--panel); border: 1px solid var(--line); border-radius: 12px; padding: 16px 18px; box-shadow: var(--shadow); margin-bottom: 14px; }
.fd-board-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 12px; }
.fd-board-head h3 { margin: 0; font-size: 16px; color: var(--ink); }
.fd-board-sub { font-size: 12px; color: var(--quiet); }
.fd-cells { display: grid; grid-template-columns: repeat(6, 1fr); gap: 10px; }
.fd-cell { background: #f7f8fa; border: 1px solid var(--line); border-radius: 10px; padding: 10px; text-align: center; }
.fd-cell.empty { background: var(--red-soft); border-color: #efd9cd; }
.fd-cell-top { display: flex; flex-direction: column; align-items: center; gap: 2px; margin-bottom: 8px; }
.fd-cell-icon { font-size: 20px; }
.fd-cell-name { font-size: 12px; color: var(--ink); font-weight: 600; }
.fd-dots { display: flex; justify-content: center; gap: 3px; margin-bottom: 6px; }
.fd-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--line-strong); }
.fd-dot.on { background: var(--jade); }
.fd-cell-n { font-size: 11px; color: var(--quiet); }
.fd-cell.empty .fd-cell-n { color: var(--jade-dark); font-weight: 600; }
.fd-board-tip { margin: 12px 0 0; font-size: 13px; color: var(--sub); line-height: 1.6; }

/* ===== 排行程空状态 ===== */
.empty-plan { text-align: center; padding: 40px 20px; }
.empty-plan-icon { font-size: 40px; margin-bottom: 10px; }
.empty-plan h3 { margin: 0 0 8px; font-size: 18px; color: var(--ink); }
.empty-plan p { max-width: 460px; margin: 0 auto 18px; color: var(--sub); line-height: 1.7; }

@media (max-width: 720px) {
  .profile-card { grid-template-columns: 1fr; }
  .profile-facts { grid-template-columns: repeat(2, 1fr); }
  .fd-cells { grid-template-columns: repeat(3, 1fr); }
}

/* ===== 排行程：左编辑 / 右手机预览（旅通式所见即所得）===== */
.plan-split { display: grid; grid-template-columns: minmax(0, 1fr) 412px; gap: 18px; align-items: start; }
.plan-edit-col { min-width: 0; }
.preview-sticky { position: sticky; top: 14px; }
.preview-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
.preview-head > span { font-weight: 700; color: var(--ink); }
.preview-acts { display: flex; gap: 6px; }
.preview-acts button { height: 30px; padding: 0 10px; border: 1px solid var(--line-strong); background: var(--panel); border-radius: 8px; cursor: pointer; font-size: 13px; color: var(--sub); }
.preview-acts button:hover { background: var(--mint); color: var(--ink); }
.phone-frame { width: 392px; height: 740px; border: 12px solid #1f1c19; border-radius: 36px; overflow: hidden; background: #fff; box-shadow: var(--shadow); }
.phone-scroll { width: 100%; height: 100%; overflow-y: auto; overflow-x: hidden; background: #fff; }
.preview-iframe { width: 100%; height: 100%; border: 0; display: block; background: #fff; }
/* ===== 排行程：所见即所得编辑器（编辑界面 = 客户页成品） =====
   整条编辑器收敛到客户页阅读宽度居中；每日卡直接套客户页 dayCard 外观，
   输入框无缝化（看着是成品文字，点进去才是输入），时段编辑器套成客户页竖向时间轴。 */
.plan-edit-col .inline-customer-editor { max-width: 768px; margin: 0 auto; }

/* 顶部标题/路线：套客户页砖红渐变 hero */
.inline-customer-editor.wys-mode .inline-edit-hero {
  background: linear-gradient(150deg, rgba(168,67,47,.97), rgba(110,66,50,.94));
  border: 0; border-radius: 18px; padding: 22px 22px 20px; color: #fff;
  box-shadow: 0 16px 42px rgba(108,52,38,.18); margin-bottom: 14px;
}
.inline-customer-editor.wys-mode .inline-edit-hero > span { color: #f8e5b7; font-weight: 700; }
.inline-customer-editor.wys-mode .inline-title-input,
.inline-customer-editor.wys-mode .inline-subtitle-input {
  width: 100%; background: rgba(255,255,255,.14); border: 1px solid rgba(255,255,255,.30);
  color: #fff; border-radius: 10px;
}
.inline-customer-editor.wys-mode .inline-title-input { font-size: 26px; font-weight: 900; margin: 10px 0 8px; padding: 8px 12px; }
.inline-customer-editor.wys-mode .inline-subtitle-input { font-size: 15px; padding: 7px 12px; }
.inline-customer-editor.wys-mode .inline-title-input::placeholder,
.inline-customer-editor.wys-mode .inline-subtitle-input::placeholder { color: rgba(255,255,255,.65); }

/* 每日卡：客户页 dayCard 外观 */
.wys-day { background: #fff; border: 1px solid var(--line); border-radius: 22px; overflow: hidden; box-shadow: 0 10px 28px rgba(37,31,27,.06); margin: 18px 0; }
.wys-banner { position: relative; height: 190px; background: #eef2f2 center/cover no-repeat; display: flex; flex-direction: column; justify-content: flex-end; padding: 14px; }
.wys-banner::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(0,0,0,.02), rgba(0,0,0,.42)); }
.wys-badge { position: absolute; left: 16px; top: 16px; z-index: 2; background: rgba(255,255,255,.94); border-radius: 999px; padding: 6px 14px; font-weight: 900; color: var(--ink); }
.wys-banner-tools { position: relative; z-index: 2; display: flex; gap: 8px; align-items: center; }
.wys-banner .pick-image-btn { position: static; flex: 0 0 auto; }
.wys-day .wys-img-url { flex: 1; min-width: 0; background: rgba(255,255,255,.92); border: 1px solid rgba(255,255,255,.6); border-radius: 8px; font-size: 12.5px; padding: 6px 10px; }
.wys-body { padding: 18px 20px 20px; }

/* 字段无缝化（仅 input/textarea；按钮不受影响） */
.wys-day input, .wys-day textarea { width: 100%; border: 1px solid transparent; background: transparent; border-radius: 8px; font-family: inherit; color: inherit; font-size: 14px; padding: 4px 8px; transition: background .15s, border-color .15s; }
.wys-day textarea { resize: vertical; line-height: 1.7; }
.wys-day input:hover, .wys-day textarea:hover { background: #faf6ee; border-color: #ece4d6; }
.wys-day input:focus, .wys-day textarea:focus { background: #fff; border-color: #cdbfa6; outline: none; box-shadow: 0 0 0 2px rgba(168,67,47,.10); }
.wys-day .sched-tag-add { width: 96px; border: 1px dashed var(--line-strong); border-radius: 999px; background: transparent; font-size: 13px; padding: 2px 8px; }

/* 主题头 */
.wys-head { border-bottom: 1px solid var(--line); padding-bottom: 14px; margin-bottom: 14px; }
.wys-head-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 8px; }
.wys-mood { font-size: 12px; font-weight: 800; color: #fff; background: var(--clay); border-radius: 999px; padding: 3px 12px; letter-spacing: .5px; }
.wys-ai-day { border: 1px solid #bdd4ca; background: #f3faf6; color: var(--jade-dark); border-radius: 8px; padding: 4px 10px; font-size: 12.5px; cursor: pointer; white-space: nowrap; }
.wys-ai-day:hover { background: var(--mint); }
.wys-day .wys-title { font-size: 24px; font-weight: 900; line-height: 1.3; }
.wys-day .wys-theme { font-size: 14px; color: var(--clay); font-weight: 700; }
.wys-day .wys-route { font-size: 14px; color: var(--clay); font-weight: 700; }
.wys-route-tools { margin-top: 8px; display: grid; gap: 8px; }

.wys-section-label { font-weight: 800; color: var(--clay); font-size: 13.5px; margin: 14px 0 8px; }

/* 时段编辑器 → 客户页竖向时间轴 */
.wys-day .inline-schedule { gap: 0; margin: 4px 0 8px; padding-left: 16px; border-left: 2px solid #ece4d6; }
.wys-day .sched-period { border: 0; background: transparent; padding: 8px 0 10px; position: relative; }
.wys-day .sched-period::before { content: ""; position: absolute; left: -21px; top: 14px; width: 9px; height: 9px; border-radius: 50%; background: var(--jade); box-shadow: 0 0 0 3px #fff; }
.wys-day .sched-period-head { margin-bottom: 6px; }
.wys-day .sched-period-label { font-size: 15px; font-weight: 900; color: var(--jade-dark); }
.wys-day .sched-row { border: 0; background: transparent; padding: 4px 0; grid-template-columns: minmax(0, 1fr) auto; }
.wys-day .sched-row-body { grid-template-columns: 1fr; grid-template-areas: "title" "desc" "tags"; gap: 3px; }
.wys-day .sched-row-title { font-size: 16px; font-weight: 800; }
.wys-day .sched-row-desc { font-size: 13.5px; color: var(--sub); min-height: 32px; }

/* 今日高光 → 客户页 dayHighlight */
.wys-highlight { display: flex; gap: 12px; align-items: flex-start; background: linear-gradient(180deg, #fff6e9, #f8ecd7); border: 1px solid #ecd9b6; border-radius: 14px; padding: 12px 14px; margin: 14px 0; }
.wys-hl-label { flex: 0 0 auto; font-weight: 900; color: #fff; background: var(--amber); border-radius: 999px; padding: 5px 12px; font-size: 13px; margin-top: 2px; }
.wys-highlight textarea { color: #6b563a; min-height: 40px; }

/* 元信息 chips：住宿 / 车程 / 体力 */
.wys-meta { display: flex; flex-wrap: wrap; gap: 8px; margin: 12px 0; }
.wys-chip { display: inline-flex; align-items: center; gap: 4px; background: #f8f1e6; border: 1px solid #ece4d6; border-radius: 999px; padding: 3px 6px 3px 12px; font-size: 13px; color: #6b5b48; }
.wys-chip > span { white-space: nowrap; font-weight: 700; }
.wys-day .wys-chip input { width: auto; min-width: 78px; max-width: 170px; padding: 2px 6px; font-size: 13px; }

.wys-exp { margin: 12px 0; }
.wys-extra { margin-top: 12px; border-top: 1px dashed var(--line); padding-top: 10px; }
.wys-extra summary { cursor: pointer; color: var(--sub); font-size: 13px; }
.wys-extra textarea { margin-top: 8px; min-height: 44px; }

@media (max-width: 720px) { .wys-banner { height: 150px; } }

/* ============ 编辑器按所选模板换肤（仅呈现层，data-*-field 采集链不变） ============ */
/* —— 文艺版 v6：衬线 / 米白 / 大留白 / 画册 —— */
.inline-customer-editor.tpl-v6 {
  --v6-cream: #f7f1e6; --v6-ink: #2e2a25; --v6-mute: #8a7f6f; --v6-brand: #a8432f; --v6-line: #e3d9c6;
  background: var(--v6-cream);
  font-family: 'Noto Serif SC', 'Songti SC', serif; color: var(--v6-ink);
  padding: 8px 10px 22px; border-radius: 8px;
}
.inline-customer-editor.tpl-v6.wys-mode .inline-edit-hero {
  background: transparent; box-shadow: none; border: 0; border-bottom: 1px solid var(--v6-line);
  border-radius: 0; padding: 30px 8px 24px; color: var(--v6-ink); text-align: left;
}
.inline-customer-editor.tpl-v6.wys-mode .inline-edit-hero > span {
  color: var(--v6-brand); font-weight: 400; letter-spacing: .35em; font-size: 12px; text-transform: uppercase;
}
.inline-customer-editor.tpl-v6.wys-mode .inline-title-input,
.inline-customer-editor.tpl-v6.wys-mode .inline-subtitle-input {
  background: transparent; border: 1px dashed transparent; color: var(--v6-ink);
  font-family: 'Cormorant Garamond', 'Noto Serif SC', 'Songti SC', serif;
}
.inline-customer-editor.tpl-v6.wys-mode .inline-title-input { font-size: 38px; font-weight: 700; letter-spacing: .04em; margin: 14px 0 6px; padding: 4px 8px; line-height: 1.25; }
.inline-customer-editor.tpl-v6.wys-mode .inline-subtitle-input { font-size: 17px; font-style: italic; color: var(--v6-mute); padding: 4px 8px; }
.inline-customer-editor.tpl-v6.wys-mode .inline-title-input::placeholder,
.inline-customer-editor.tpl-v6.wys-mode .inline-subtitle-input::placeholder { color: rgba(46,42,37,.4); }
.inline-customer-editor.tpl-v6.wys-mode .inline-title-input:hover,
.inline-customer-editor.tpl-v6.wys-mode .inline-subtitle-input:hover { border-color: var(--v6-line); background: rgba(255,255,255,.4); }

.inline-customer-editor.tpl-v6 .inline-edit-panel {
  background: transparent; border: 0; border-radius: 0; box-shadow: none;
  padding: 22px 8px; border-bottom: 1px solid var(--v6-line);
}
.inline-customer-editor.tpl-v6 .inline-panel-head h3 { font-family: 'Noto Serif SC','Songti SC',serif; color: var(--v6-ink); font-weight: 700; letter-spacing: .02em; }
.inline-customer-editor.tpl-v6 .inline-panel-head small { color: var(--v6-mute); }

.inline-customer-editor.tpl-v6 .wys-day {
  background: transparent; border: 0; border-radius: 0; box-shadow: none;
  border-top: 1px solid var(--v6-line); margin: 0; padding: 10px 0 30px;
}
.inline-customer-editor.tpl-v6 .wys-banner { height: 260px; border-radius: 4px; overflow: hidden; background: linear-gradient(135deg, #c9a86a, #8a6a3a) center/cover no-repeat; }
.inline-customer-editor.tpl-v6 .wys-banner::after { background: linear-gradient(180deg, rgba(0,0,0,.05), rgba(0,0,0,.5)); }
.inline-customer-editor.tpl-v6 .wys-badge { background: transparent; color: #fff; font-family: 'Cormorant Garamond', serif; font-size: 20px; font-weight: 700; letter-spacing: .2em; left: 20px; top: 18px; padding: 0; }
.inline-customer-editor.tpl-v6 .wys-body { padding: 22px 6px 6px; }
.inline-customer-editor.tpl-v6 .wys-mood { background: transparent; color: var(--v6-brand); font-weight: 400; letter-spacing: .3em; padding: 0; }
.inline-customer-editor.tpl-v6 .wys-day .wys-title { font-family: 'Cormorant Garamond','Noto Serif SC','Songti SC',serif; font-size: 32px; font-weight: 700; letter-spacing: .03em; color: var(--v6-ink); }
.inline-customer-editor.tpl-v6 .wys-day .wys-theme,
.inline-customer-editor.tpl-v6 .wys-day .wys-route { color: var(--v6-mute); font-weight: 400; font-family: 'Noto Serif SC','Songti SC',serif; }
.inline-customer-editor.tpl-v6 .wys-head { border-bottom-color: var(--v6-line); }
.inline-customer-editor.tpl-v6 .wys-section-label { color: var(--v6-brand); font-family: 'Noto Serif SC','Songti SC',serif; font-weight: 700; letter-spacing: .15em; }
.inline-customer-editor.tpl-v6 .wys-day .inline-schedule { border-left-color: var(--v6-line); }
.inline-customer-editor.tpl-v6 .wys-day .sched-period::before { background: var(--v6-brand); box-shadow: 0 0 0 3px var(--v6-cream); }
.inline-customer-editor.tpl-v6 .wys-day .sched-period-label { color: var(--v6-ink); font-family: 'Noto Serif SC','Songti SC',serif; }
.inline-customer-editor.tpl-v6 .wys-day .sched-row-title { font-family: 'Noto Serif SC','Songti SC',serif; }
.inline-customer-editor.tpl-v6 .wys-highlight { background: #fdfaf2; border: 1px solid var(--v6-line); border-radius: 6px; }
.inline-customer-editor.tpl-v6 .wys-hl-label { background: var(--v6-brand); }
.inline-customer-editor.tpl-v6 .wys-highlight textarea { color: var(--v6-ink); font-family: 'Noto Serif SC','Songti SC',serif; }
.inline-customer-editor.tpl-v6 .wys-chip { background: #fdfaf2; border-color: var(--v6-line); color: var(--v6-mute); }
.inline-customer-editor.tpl-v6 .wys-day input:hover, .inline-customer-editor.tpl-v6 .wys-day textarea:hover { background: rgba(255,255,255,.55); border-color: var(--v6-line); }
.inline-customer-editor.tpl-v6 .wys-day input:focus, .inline-customer-editor.tpl-v6 .wys-day textarea:focus { background: #fff; border-color: var(--v6-brand); box-shadow: 0 0 0 2px rgba(168,67,47,.10); }

/* —— 沟通版 v9：手机杂志 / 主理人信（青绿调，区别于标准砖红、v6 米白） —— */
.inline-customer-editor.tpl-v9 { --v9-jade: #2f6b54; --v9-jade-d: #1f4a3a; background: #fbf6ef; padding: 6px 8px 18px; border-radius: 8px; }
.inline-customer-editor.tpl-v9.wys-mode .inline-edit-hero { background: linear-gradient(160deg, var(--v9-jade), var(--v9-jade-d)); box-shadow: 0 14px 36px rgba(31,74,58,.22); }
.inline-customer-editor.tpl-v9.wys-mode .inline-edit-hero > span { color: #cfead9; }
.inline-customer-editor.tpl-v9 .wys-day { border-radius: 16px; box-shadow: 0 8px 22px rgba(31,74,58,.08); border-color: #e3ddd2; }
.inline-customer-editor.tpl-v9 .wys-banner { height: 170px; }
.inline-customer-editor.tpl-v9 .wys-mood { background: var(--v9-jade); }
.inline-customer-editor.tpl-v9 .wys-day .wys-title { font-size: 22px; }
.inline-customer-editor.tpl-v9 .wys-section-label { color: var(--v9-jade-d); }
.inline-customer-editor.tpl-v9 .wys-day .sched-period::before { background: var(--v9-jade); }
.inline-customer-editor.tpl-v9 .wys-day .sched-period-label { color: var(--v9-jade-d); }
.inline-customer-editor.tpl-v9 .wys-highlight { background: linear-gradient(180deg,#eaf5ef,#d9ece0); border-color:#bfe0cd; }
.inline-customer-editor.tpl-v9 .wys-hl-label { background: var(--v9-jade); }
.inline-customer-editor.tpl-v9 .wys-day input:focus, .inline-customer-editor.tpl-v9 .wys-day textarea:focus { border-color: var(--v9-jade); box-shadow: 0 0 0 2px rgba(47,107,84,.12); }

.phone-scroll .live-customer-page { padding: 12px; }
.phone-empty { min-height: 280px; display: flex; align-items: center; justify-content: center; text-align: center; padding: 24px; color: var(--quiet); line-height: 1.7; }
.preview-hint { font-size: 12px; color: var(--quiet); margin: 10px 0 0; text-align: center; }

@media (max-width: 1180px) {
  .plan-split { grid-template-columns: 1fr; }
  .preview-sticky { position: static; }
  .phone-frame, .phone-empty { width: 100%; max-width: 392px; margin: 0 auto; }
}

/* （原「AI 配方选点建议」面板样式已删，面板随旧规则打分器一并下线） */

/* ===== ① 客户需求工位 v1（.needs-compact 命名空间，只作用于 etab-needs，不污染其他 tab） ===== */
/* 紧凑化：字号/间距/控件高度整体收一档 */
.needs-compact { --control-h: 32px; font-size: 14px; }
.needs-compact .section { margin-top: 10px; }
.needs-compact .section-title { padding: 9px 14px; }
.needs-compact .section-title h2 { font-size: 14.5px; }
.needs-compact .section-body { padding: 12px 14px; }
.needs-compact .form-grid { gap: 16px 18px; }
.needs-compact .field { gap: 4px; }
.needs-compact .field label { font-size: 12px; }
.needs-compact textarea { min-height: 60px; }
.needs-compact .hint { font-size: 12.5px; }
.needs-compact .badge { font-size: 11.5px; }
.needs-compact .chip { min-height: 26px; padding: 3px 9px; font-size: 12.5px; }
.needs-compact .choice-group summary { min-height: 32px; padding: 6px 10px; font-size: 13px; }
.needs-compact .custom-add input { min-height: 30px; }
.needs-compact .essence-muted { color: var(--quiet); }

/* 客户提炼卡（只读）+ 起落点推荐卡（同款卡面） */
.needs-compact .essence-card { background: var(--panel); border: 1px solid var(--line); border-radius: 12px; padding: 14px 18px; box-shadow: var(--shadow); margin: 0 0 12px; }
.needs-compact .essence-card.transport-suggest { margin: 12px 0 0; }
.needs-compact .essence-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.needs-compact .essence-name { font-size: 19px; font-weight: 700; color: var(--ink); }
.needs-compact .essence-card-title { font-size: 15px; font-weight: 700; color: var(--ink); }
.needs-compact .essence-auds { display: inline-flex; gap: 6px; flex-wrap: wrap; }
/* XQ-07 颜色语义：系统推断标签=灰（弱信息），不再用品牌红/蓝抢戏 */
.needs-compact .aud-chip { font-size: 12px; color: var(--sub); background: #f1f3f5; border: 1px solid var(--line); border-radius: 999px; padding: 1px 10px; }
.needs-compact .aud-chip.first { color: var(--sub); background: #f1f3f5; border-color: var(--line); }
.needs-compact .essence-progress { margin-left: auto; font-size: 12px; font-weight: 700; border-radius: 999px; padding: 2px 10px; }
.needs-compact .essence-progress.ok { color: var(--ok); background: #eef6f0; border: 1px solid #cfe6d7; }
.needs-compact .essence-progress.warn { color: #9d3d29; background: var(--red-soft); border: 1px solid #efd9cd; }
.needs-compact .essence-summary { margin: 8px 0 10px; color: var(--sub); line-height: 1.65; font-size: 14px; }

/* 八要素完成度 chips（v3 升级为按钮：状态＋值＋入口）
   已填=绿✓ / 缺=暖红 / 建议中(进出城市未查)=琥珀 / 未探(预算)=灰 */
.needs-compact .essence-factors { display: flex; flex-wrap: wrap; gap: 6px; }
.needs-compact .factor-chip { position: relative; appearance: none; -webkit-appearance: none; min-height: 0; font-size: 12px; line-height: 1.6; border-radius: 999px; padding: 2px 10px; border: 1px solid transparent; background: none; cursor: pointer; }
.needs-compact .factor-chip:hover { transform: none; }
.needs-compact .factor-chip.ok { color: var(--ok); background: #eef6f0; border-color: #cfe6d7; }
.needs-compact .factor-chip.ok:hover { border-color: #a9cdb6; }
.needs-compact .factor-chip.miss { color: #9d3d29; background: var(--red-soft); border-color: #efd9cd; font-weight: 600; }
.needs-compact .factor-chip.miss:hover { border-color: #ddb09c; }
.needs-compact .factor-chip.pend { color: #8a5a14; background: var(--gold-soft); border-color: #ead9b5; font-weight: 600; }
.needs-compact .factor-chip.pend:hover { border-color: #d9bf85; }
.needs-compact .factor-chip.soft { color: var(--quiet); background: #f1f3f5; border-color: var(--line); }
.needs-compact .factor-chip.soft:hover { border-color: var(--line-strong); }

/* 汇总徽章新增两态：待确认(琥珀) / 未探(灰) */
.needs-compact .essence-progress.pend { color: #8a5a14; background: var(--gold-soft); border: 1px solid #ead9b5; }
.needs-compact .essence-progress.soft { color: var(--quiet); background: #f1f3f5; border: 1px solid var(--line); }

/* 客群推断 chips 旁的来源小标（推断/已选客群）：REQ-N10 加虚线小壳，免得和后面一句话需求糊成一段 */
.needs-compact .aud-chip-note { font-size: 11px; color: var(--quiet); align-self: center; border: 1px dashed var(--line-strong); border-radius: 999px; padding: 0 8px; }
/* REQ-N10：一句话需求与前面标签区用竖线拉开 */
.needs-compact .essence-sumline { border-left: 1px solid var(--line-strong); padding-left: 12px; color: var(--sub); font-size: 13.5px; }

/* chip 悬停气泡（自绘小卡，不引库）：宽屏 hover/聚焦出，窄屏(<900px)点击展开（.pop-open） */
.needs-compact .factor-pop { display: none; position: absolute; top: calc(100% + 7px); left: 0; z-index: 40; min-width: 190px; max-width: 270px; width: max-content; text-align: left; background: #ffffff; border: 1px solid var(--line-strong); border-radius: 10px; padding: 8px 11px; box-shadow: 0 12px 28px rgba(40, 37, 31, 0.14); font-weight: 400; cursor: default; }
.needs-compact .factor-pop::before { content: ""; position: absolute; top: -5px; left: 16px; width: 8px; height: 8px; background: #ffffff; border-left: 1px solid var(--line-strong); border-top: 1px solid var(--line-strong); transform: rotate(45deg); }
.needs-compact .factor-pop b { display: block; font-size: 11px; color: var(--quiet); font-weight: 600; margin-bottom: 2px; }
.needs-compact .factor-pop i { display: block; font-style: normal; font-size: 12.5px; color: var(--ink); line-height: 1.55; white-space: normal; }
.needs-compact .factor-pop em { display: block; font-style: normal; font-size: 11px; color: var(--quiet); margin-top: 4px; border-top: 1px dashed var(--line); padding-top: 3px; }
@media (min-width: 900px) {
  .needs-compact .factor-chip:hover .factor-pop,
  .needs-compact .factor-chip:focus-visible .factor-pop { display: block; }
}
.needs-compact .factor-chip.pop-open .factor-pop { display: block; }
/* 行尾两枚 chip 的气泡右对齐，别戳出屏幕 */
.needs-compact .essence-factors .factor-chip:nth-last-child(-n+2) .factor-pop { left: auto; right: 0; }
.needs-compact .essence-factors .factor-chip:nth-last-child(-n+2) .factor-pop::before { left: auto; right: 16px; }

/* chip 点击回溯：目标控件 1.5s 高亮描边（XQ-07：红闪改琥珀闪——这是「去补/去确认」提示，不是错误） */
@keyframes essenceTargetHit {
  0% { outline-color: rgba(183, 120, 24, 0.95); box-shadow: 0 0 0 5px rgba(183, 120, 24, 0.18); }
  100% { outline-color: rgba(183, 120, 24, 0); box-shadow: 0 0 0 12px rgba(183, 120, 24, 0); }
}
.essence-target-hit { outline: 3px solid rgba(183, 120, 24, 0); outline-offset: 2px; border-radius: 10px; animation: essenceTargetHit 1.5s ease-out 1; }

/* 客户原话/销售备注：默认收起 */
.needs-compact .essence-raw { margin-top: 10px; border-top: 1px dashed var(--line); padding-top: 8px; }
.needs-compact .essence-raw > summary { cursor: pointer; list-style: none; font-size: 12.5px; color: var(--quiet); user-select: none; }
.needs-compact .essence-raw > summary::-webkit-details-marker { display: none; }
.needs-compact .essence-raw > summary::before { content: "▸ "; }
.needs-compact .essence-raw[open] > summary::before { content: "▾ "; }
.needs-compact .essence-raw-body { margin-top: 8px; display: grid; gap: 8px; }
.needs-compact .essence-raw-body p { margin: 0; font-size: 12.5px; color: var(--sub); line-height: 1.7; white-space: pre-wrap; background: #f7f8fa; border: 1px solid var(--line); border-radius: 8px; padding: 8px 10px; }
.needs-compact .essence-raw-body p b { display: block; color: var(--quiet); font-size: 11px; font-weight: 600; margin-bottom: 2px; }

/* 原始沟通记录分层（渲染层清洗）：小红书首询 / 微信补充 两层 + 要点列表 + 原文折叠 */
.needs-compact .rawchat-clean { font-size: 12.5px; color: var(--sub); line-height: 1.7; background: #f7f8fa; border: 1px solid var(--line); border-radius: 8px; padding: 8px 10px; }
.needs-compact .rawchat-clean > b { display: block; color: var(--quiet); font-size: 11px; font-weight: 600; margin-bottom: 4px; }
.needs-compact .rawchat-stage { margin: 4px 0 6px; }
.needs-compact .rawchat-stage-tag { display: inline-block; font-size: 11px; font-weight: 600; color: var(--sub); background: #f1f3f5; border: 1px solid var(--line); border-radius: 999px; padding: 0 9px; margin-bottom: 3px; }
.needs-compact .rawchat-points { margin: 2px 0 0; padding-left: 4px; list-style: none; }
.needs-compact .rawchat-points li { margin: 2px 0; padding-left: 14px; position: relative; }
.needs-compact .rawchat-points li::before { content: "•"; position: absolute; left: 2px; color: var(--quiet); }
.needs-compact .rawchat-full { margin-top: 6px; border-top: 1px dashed var(--line); padding-top: 5px; }
.needs-compact .rawchat-full summary { cursor: pointer; list-style: none; font-size: 11.5px; color: var(--quiet); user-select: none; }
.needs-compact .rawchat-full summary::-webkit-details-marker { display: none; }
.needs-compact .rawchat-full summary::before { content: "▸ "; }
.needs-compact .rawchat-full[open] summary::before { content: "▾ "; }
.needs-compact .rawchat-full p { margin: 6px 0 0; white-space: pre-wrap; color: var(--quiet); font-size: 12px; line-height: 1.7; }

/* 起落点推荐卡正文 */
.needs-compact .transport-route { font-size: 13px; font-weight: 500; color: var(--ink); background: #f7f8fa; border: 1px solid var(--line); border-radius: 999px; padding: 2px 12px; }
.needs-compact .transport-suggest-note { margin: 8px 0 0; font-size: 12.5px; color: var(--quiet); line-height: 1.65; }

/* B2-1 起落点推荐（真数据版）：一落点一行——绿点=可直达、灰点=无直达；右侧「填入第一站」小按钮 */
.needs-compact .reach-matched { margin: 8px 0 0; font-size: 11.5px; color: var(--quiet); }
.needs-compact .reach-list { margin-top: 8px; display: flex; flex-direction: column; }
/* 行内只留 [主信息 1fr ｜ 填入按钮 auto]；落地车程/置信/前人填过 各自独占整行，窄宽容器下也绝不被压成竖排 */
.needs-compact .reach-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 4px 10px; align-items: center; padding: 7px 2px; border-top: 1px dashed var(--line); }
.needs-compact .reach-row:first-child { border-top: 0; }
.needs-compact .reach-main { display: inline-flex; align-items: center; gap: 7px; min-width: 0; flex-wrap: wrap; }
.needs-compact .reach-dot { flex: 0 0 auto; width: 8px; height: 8px; border-radius: 999px; background: var(--muted-soft); }
.needs-compact .reach-dot.go { background: var(--ok); }
.needs-compact .reach-dot.pend { background: #c79a3a; } /* REQ-N33：直达待核=琥珀，不再装成"无直达" */
.needs-compact .reach-main b { font-size: 13px; font-weight: 600; color: var(--ink); white-space: nowrap; }
.needs-compact .reach-row:not(.go) .reach-main b { color: var(--sub); }
.needs-compact .reach-mode { font-size: 12px; color: var(--sub); white-space: nowrap; }
.needs-compact .reach-row.go .reach-mode { color: var(--ok); font-weight: 500; }
.needs-compact .reach-meta { font-size: 12px; color: var(--quiet); white-space: nowrap; }
.needs-compact .reach-drives { grid-column: 1 / -1; font-size: 11.5px; color: var(--quiet); line-height: 1.5; min-width: 0; }
.needs-compact .reach-conf { grid-column: 1 / -1; font-size: 10.5px; color: var(--muted-soft); }
.needs-compact .reach-fill { flex: 0 0 auto; min-height: 0; border: 1px solid var(--line-strong); background: var(--panel); color: var(--ink); border-radius: 7px; padding: 3px 10px; font-size: 11.5px; cursor: pointer; white-space: nowrap; }
.needs-compact .reach-fill:hover { background: #f4f6f8; border-color: var(--ink); transform: none; }
/* REQ-N33b 历史沉淀班次：整行单独占一行（不挤 4 列主栅格），琥珀色提示"前人填过" */
.needs-compact .reach-crowd { grid-column: 1 / -1; font-size: 11.5px; color: #8a6d2f; line-height: 1.5; min-width: 0; }
/* P2 多趟可选：前人填过的班次渲染成可点选 chip 列表（单选高亮），点一条回填该程表单 */
.needs-compact .reach-crowd-lead { display: inline-block; margin: 0 6px 4px 0; color: #8a6d2f; }
.needs-compact .reach-crowd-list { display: inline-flex; flex-wrap: wrap; gap: 6px; vertical-align: middle; }
.needs-compact .reach-crowd-pick {
  min-height: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid #e0c98a;
  background: #fcf7ec;
  color: #7a5c1f;
  border-radius: 999px;
  padding: 3px 12px;
  font-size: 11.5px;
  font-weight: 600;
  line-height: 1.4;
  cursor: pointer;
  white-space: nowrap;
  transition: background .12s, border-color .12s;
}
.needs-compact .reach-crowd-pick:hover { background: #f6ebd2; border-color: #c79a3a; transform: none; }
.needs-compact .reach-crowd-pick.picked { background: var(--accent); border-color: var(--accent); color: #fff; box-shadow: 0 1px 4px rgba(194, 96, 46, 0.25); }
.needs-compact .reach-crowd-pick.picked::before { content: "✓ "; }
/* 航线备注 phase2：路线级备注常显一行（手机也看得到）+ 带备注 chip 的 📌 角标 */
.needs-compact .reach-crowd-note { display: block; margin-top: 5px; color: #8a6d2f; font-size: 11.5px; line-height: 1.5; }
.needs-compact .reach-pick-flag { font-size: 10px; opacity: .85; margin-left: 2px; }
/* 每条沉淀班次后的「×」：贴在 chip 右侧，hover 变红示意删除（reachDeleteService） */
.needs-compact .reach-crowd-item { display: inline-flex; align-items: stretch; }
.needs-compact .reach-crowd-item .reach-crowd-pick { border-top-right-radius: 0; border-bottom-right-radius: 0; }
.needs-compact .reach-crowd-del {
  min-height: 0; display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid #e0c98a; border-left: none;
  background: #fcf7ec; color: #a8895a;
  border-radius: 0 999px 999px 0; padding: 0 9px; font-size: 13px; line-height: 1; font-weight: 600;
  cursor: pointer; transition: background .12s, color .12s, border-color .12s;
}
.needs-compact .reach-crowd-del:hover { background: #f5ddd4; color: #b3402a; border-color: #d9a08e; }
/* 去携程/12306 查的跳转入口：开新标签查 → 截图 → 回来上传识别，一站式 */
.needs-compact .reach-jump-btn { display: inline-flex; align-items: center; text-decoration: none; border: 1px solid #cdb79a; background: #fbf7ef; color: #7a5c1f; border-radius: 8px; padding: 6px 12px; font-size: 13px; font-weight: 600; cursor: pointer; transition: background .12s, border-color .12s; }
.needs-compact .reach-jump-btn:hover { background: #f3ead7; border-color: #b8923f; }
/* OCR 识别日期：年份按当前年默认时标红提醒核对（跨年场景） */
.needs-compact .reach-ocr-date.year-guess { color: #b3402a; font-weight: 600; }

/* P2 日期需再确认高亮：点选某趟班次回填后，把该程「日期」框高亮提醒——contrib 里的日期是别人那次的，本单要改 */
.needs-compact .field.date-needs-confirm > input[type="date"] {
  border: 1.5px solid var(--accent);
  background: #fff6f0;
  box-shadow: 0 0 0 3px rgba(194, 96, 46, 0.14);
  animation: dateConfirmPulse 1.1s ease-in-out 2;
}
.needs-compact .field.date-needs-confirm > label::after {
  content: "← 改成本单的日期";
  margin-left: 6px;
  font-size: 11px;
  font-weight: 700;
  color: var(--accent);
}
@keyframes dateConfirmPulse {
  0%, 100% { box-shadow: 0 0 0 3px rgba(194, 96, 46, 0.14); }
  50% { box-shadow: 0 0 0 5px rgba(194, 96, 46, 0.28); }
}
/* ⑥ 返程城市自动带出后高亮：左边填了出发城市→默认返程目的相同，琥珀高亮提醒定制师确认（来回通常同城、偶有不同）。
   定制师一聚焦/改它就消除高亮（视为已确认）。 */
.needs-compact .field.autofill-confirm > input {
  border: 1.5px solid var(--amber, #c79a3a);
  background: #fffdf3;
  box-shadow: 0 0 0 3px rgba(199, 154, 58, 0.16);
  animation: dateConfirmPulse 1.1s ease-in-out 2;
}
.needs-compact .field.autofill-confirm > label::after {
  content: "← 已默认与出发城市相同，确认或改它";
  margin-left: 6px;
  font-size: 11px;
  font-weight: 700;
  color: #8a6d2f;
}
@media (max-width: 980px) {
  .needs-compact .reach-row { grid-template-columns: 1fr auto; }
  .needs-compact .reach-drives { grid-column: 1 / -1; }
  .needs-compact .reach-conf { display: none; }
}

/* XQ-15-3 班次区紧凑排（日期选择器 / 班次号 / 具体时间双控件占双倍宽）
   B3 修复：第二排与第一排同为四列轨（日期↔出发、班次号↔抵达），「具体时间」跨最后两列，
   两排选框左缘上下对齐（此前 row1 四列 / row2 三列，宽度不同导致第二框 576↔592 错位）。
   row1 gap 是 16px 18px（.needs-compact .form-grid），row2 跟齐用同样的列 gap 18px。 */
.needs-compact .transport-service-row { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px 18px; margin-top: 8px; }
.needs-compact .transport-service-row > .field.dualtime { grid-column: span 2; }
/* P1：两列布局下每列只有半幅宽，班次行从 4 列收成 2 列——日期/班次号一排，具体时间(双控件)跨整行另起 */
.needs-compact .transport-col .transport-service-row { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.needs-compact .transport-col .transport-service-row > .field.dualtime { grid-column: 1 / -1; }
@media (max-width: 720px) {
  .needs-compact .transport-service-row { grid-template-columns: minmax(0, 1fr); }
  .needs-compact .transport-service-row > .field.dualtime { grid-column: auto; }
  .needs-compact .transport-col .transport-service-row { grid-template-columns: minmax(0, 1fr); }
  .needs-compact .transport-col .transport-service-row > .field.dualtime { grid-column: auto; }
}

/* XQ-15-10 记班次按钮：从班次区里面提到板块标题行右上角，改实心主彩可点按钮 */
.needs-compact .transport-leg-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 0 0 8px; flex-wrap: wrap; }
.needs-compact .transport-leg-head .transport-leg-title { margin: 0; }
.needs-compact .reach-contrib-group { display: inline-flex; align-items: center; gap: 8px; }
.needs-compact .reach-contrib-btn { min-height: 0; border: 1px solid var(--accent); background: var(--accent); color: #fff; border-radius: 8px; padding: 7px 14px; font-size: 12.5px; font-weight: 600; cursor: pointer; white-space: nowrap; box-shadow: 0 2px 6px rgba(194, 96, 46, 0.22); }
.needs-compact .reach-contrib-btn:hover { background: var(--jade-dark); border-color: var(--jade-dark); transform: none; }
.needs-compact .reach-contrib-btn:active { transform: translateY(1px); }
/* U317-5 撤回按钮：记下成功后才出现（hidden 由 JS 切），描边轻按钮，区别于实心主按钮 */
.needs-compact .reach-undo-btn { min-height: 0; border: 1px solid var(--line-strong); background: #fff; color: var(--sub); border-radius: 8px; padding: 7px 12px; font-size: 12.5px; font-weight: 600; cursor: pointer; white-space: nowrap; }
.needs-compact .reach-undo-btn:hover { border-color: #9d3d29; color: #9d3d29; transform: none; }
.needs-compact .reach-undo-btn[hidden] { display: none; }

/* P4 上传截图识别按钮：描边主彩，区别于实心「记下」与轻描边「撤回」 */
.needs-compact .reach-ocr-btn { min-height: 0; border: 1px solid var(--accent); background: #fff; color: var(--accent); border-radius: 8px; padding: 7px 12px; font-size: 12.5px; font-weight: 600; cursor: pointer; white-space: nowrap; }
.needs-compact .reach-ocr-btn:hover { background: var(--accent-faint); border-color: var(--jade-dark); color: var(--jade-dark); transform: none; }
.needs-compact .reach-ocr-btn:active { transform: translateY(1px); }
/* P4-3 粘贴提示：轻量灰字，提示可直接 Ctrl/⌘V 粘贴截图识别 */
/* 「去携程查」+ 粘贴小字：小字改成悬停气泡（脱离文档流），按钮才能贴右与右列选框对齐、不被小字顶歪 */
.needs-compact .reach-jump-wrap { position: relative; display: inline-flex; align-items: center; }
.needs-compact .reach-ocr-paste-hint {
  position: absolute;
  top: calc(100% + 6px);
  right: 0;
  z-index: 5;
  font-size: 11px;
  color: var(--sub);
  white-space: nowrap;
  background: #fffdf7;
  border: 1px solid #e6dcc6;
  border-radius: 7px;
  padding: 4px 9px;
  box-shadow: 0 4px 12px rgba(80, 60, 20, 0.14);
  opacity: 0;
  pointer-events: none;
  transition: opacity .12s;
}
.needs-compact .reach-jump-wrap:hover .reach-ocr-paste-hint,
.needs-compact .reach-jump-btn:focus-visible + .reach-ocr-paste-hint { opacity: 1; }
/* 标题独占一行、三颗按钮另起一行 space-between 均匀铺满整行（中间留间距）：
   记下贴左、去携程查贴右(与右列选框右边对齐)、上传截图居中，整行不留大空档 */
.needs-compact .transport-leg-head { align-items: flex-start; }
.needs-compact .transport-leg-head .transport-leg-title { flex: 1 1 100%; }
.needs-compact .transport-leg-head .reach-contrib-group { flex: 1 1 100%; flex-wrap: wrap; justify-content: space-between; gap: 8px 12px; }
/* P4 识别复核面板：嵌在按钮组下方，列出每趟班次 + 用这趟/入库/全部入库 */
.needs-compact .reach-ocr-panel { margin: 10px 0 0; border: 1px solid var(--accent); border-radius: 10px; background: var(--gold-soft); padding: 10px 12px; }
.needs-compact .reach-ocr-panel[hidden] { display: none; }
.needs-compact .reach-ocr-loading,
.needs-compact .reach-ocr-empty { margin: 0; font-size: 12.5px; color: var(--amber); line-height: 1.6; }
.needs-compact .reach-ocr-err { margin: 0; font-size: 12.5px; color: #b3402a; line-height: 1.6; }
.needs-compact .reach-ocr-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; margin-bottom: 8px; }
.needs-compact .reach-ocr-title { font-size: 12.5px; font-weight: 600; color: var(--jade-dark); flex: 1 1 auto; min-width: 0; }
/* P4-4 「全部入库/关闭」统一钉到最右（去程/返程一致，不随标题长短漂移） */
.needs-compact .reach-ocr-headacts { display: inline-flex; gap: 6px; margin-left: auto; flex: 0 0 auto; }
.needs-compact .reach-ocr-saveall { min-height: 0; border: 1px solid var(--accent); background: var(--accent); color: #fff; border-radius: 7px; padding: 5px 12px; font-size: 12px; font-weight: 600; cursor: pointer; white-space: nowrap; }
.needs-compact .reach-ocr-saveall:hover { background: var(--jade-dark); transform: none; }
.needs-compact .reach-ocr-saveall:disabled { opacity: .5; cursor: default; }
.needs-compact .reach-ocr-close { min-height: 0; border: 1px solid var(--line-strong); background: #fff; color: var(--sub); border-radius: 7px; padding: 5px 10px; font-size: 12px; cursor: pointer; }
.needs-compact .reach-ocr-close:hover { border-color: #9d3d29; color: #9d3d29; transform: none; }
.needs-compact .reach-ocr-list { display: flex; flex-direction: column; gap: 6px; }
.needs-compact .reach-ocr-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; background: #fff; border: 1px solid var(--line); border-radius: 8px; padding: 6px 10px; flex-wrap: wrap; }
.needs-compact .reach-ocr-main { display: inline-flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 12.5px; color: var(--ink); min-width: 0; }
.needs-compact .reach-ocr-no { font-weight: 700; color: var(--jade-dark); }
/* P4-2 机场/车站名完整显示（含航站楼），不 ellipsis 截断成"大同云冈国…"；可换行、不被 flex 压缩 */
.needs-compact .reach-ocr-station { color: var(--blue); font-weight: 600; white-space: normal; overflow: visible; text-overflow: clip; flex-shrink: 0; word-break: break-word; }
.needs-compact .reach-ocr-time { color: var(--ink); }
.needs-compact .reach-ocr-xday { color: #b3402a; font-size: 10.5px; vertical-align: super; }
.needs-compact .reach-ocr-date { color: var(--amber); }
.needs-compact .reach-ocr-price { color: #b3402a; font-weight: 600; }
.needs-compact .reach-ocr-meta { color: var(--quiet); font-size: 11.5px; }
.needs-compact .reach-ocr-acts { display: inline-flex; gap: 6px; flex-shrink: 0; }
.needs-compact .reach-ocr-use { min-height: 0; border: 1px solid var(--accent); background: #fff; color: var(--accent); border-radius: 7px; padding: 4px 10px; font-size: 12px; font-weight: 600; cursor: pointer; white-space: nowrap; }
.needs-compact .reach-ocr-use:hover { background: var(--accent-faint); transform: none; }
.needs-compact .reach-ocr-save { min-height: 0; border: 1px solid var(--accent); background: var(--accent); color: #fff; border-radius: 7px; padding: 4px 10px; font-size: 12px; font-weight: 600; cursor: pointer; white-space: nowrap; }
.needs-compact .reach-ocr-save:hover { background: var(--jade-dark); transform: none; }
.needs-compact .reach-ocr-save:disabled { opacity: .5; cursor: default; }
.needs-compact .reach-ocr-foot { margin: 8px 0 0; font-size: 11.5px; color: var(--sub); line-height: 1.6; }

/* U317-1 框对齐：去/返程一排四框 + 班次三件，统一各 .field 内 label 占两行高度并底对齐控件，
   避免短/长标签把输入框顶到不同高度（主理人「看着好难受」就是这个错位） */
.needs-compact .transport-leg .form-grid.four > .field,
.needs-compact .transport-leg .form-grid.two > .field,
.needs-compact .transport-leg .transport-service-row > .field,
.needs-compact .transport-overall-grid > .field {
  align-content: start;
}
.needs-compact .transport-leg .form-grid.four > .field > label,
.needs-compact .transport-leg .form-grid.two > .field > label,
.needs-compact .transport-leg .transport-service-row > .field > label,
.needs-compact .transport-overall-grid > .field > label {
  min-height: 32px;             /* 预留两行标签高度，单行标签也占同高 → 控件顶边对齐 */
  display: flex;
  align-items: flex-end;
  line-height: 1.25;
}
/* B4 修复：同一排各控件高度彻底统一（此前 35/37/41 高矮不一——文本框 41、下拉 37、日期/时间 35）。
   用固定 height + box-sizing:border-box 抹平原生 date/time/text/select 的不同盒模型，含双时间内框。 */
.needs-compact .transport-leg .form-grid.four > .field > input,
.needs-compact .transport-leg .form-grid.four > .field > select,
.needs-compact .transport-leg .form-grid.two > .field > input,
.needs-compact .transport-leg .form-grid.two > .field > select,
.needs-compact .transport-leg .transport-service-row > .field input,
.needs-compact .transport-leg .transport-service-row > .field select {
  height: 40px;
  min-height: 40px;
  box-sizing: border-box;
}
/* 双时间行整体也对齐到 40px（其内两个 time 框已是 40px） */
.needs-compact .transport-leg .transport-service-row > .field .dualtime-row { align-items: stretch; }
@media (max-width: 720px) {
  /* 窄屏单列时不强行撑高标签 */
  .needs-compact .transport-leg .form-grid.four > .field > label,
  .needs-compact .transport-leg .form-grid.two > .field > label,
  .needs-compact .transport-leg .transport-service-row > .field > label,
  .needs-compact .transport-leg .city-pair-row > .field > label,
  .needs-compact .transport-overall-grid > .field > label { min-height: 0; }
}

/* 城市↔城市一排：出发城市 →箭头→ 山西第一站 / 返回城市 ←箭头← 山西最后一站。
   三栏网格（框 | 箭头 | 框），箭头竖直居中对齐到输入框（不是标签）；字段对齐沿用 leg 内 .field 规则。 */
.needs-compact .transport-leg .city-pair-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
  gap: 8px 12px;
  align-items: start;
  margin: 0 0 8px;
}
.needs-compact .transport-leg .city-pair-row > .field { align-content: start; margin: 0; }
.needs-compact .transport-leg .city-pair-row > .field > label {
  min-height: 32px; display: flex; align-items: flex-end; line-height: 1.25;
}
.needs-compact .transport-leg .city-pair-row > .field > input,
.needs-compact .transport-leg .city-pair-row > .field > select {
  height: 40px; min-height: 40px; box-sizing: border-box;
}
.needs-compact .transport-leg .city-flow-arrow {
  align-self: end;
  height: 40px;
  display: flex;
  align-items: center;
  font-size: 17px;
  font-weight: 700;
  line-height: 1;
  user-select: none;
}
.needs-compact .transport-leg.leg-out .city-flow-arrow { color: var(--ok); }
.needs-compact .transport-leg.leg-ret .city-flow-arrow { color: var(--accent); }
@media (max-width: 720px) {
  /* 窄屏单列：城市排也堆成一列，箭头转 90° 居中 */
  .needs-compact .transport-leg .city-pair-row { grid-template-columns: minmax(0, 1fr); }
  .needs-compact .transport-leg .city-flow-arrow { align-self: center; height: auto; justify-content: center; transform: rotate(90deg); }
}

/* XQ-15-4 强视觉分区：整体安排/去程/返程 三块各自卡面 + 区标题图标
   U317-3：去掉左侧深色色条（::before），改用更柔和的整块底色 + 标题色区分，不再有刺眼竖条 */
.needs-compact .transport-leg { position: relative; padding: 12px 14px; margin: 0 0 12px; border: 1px solid var(--line); border-radius: 12px; background: var(--panel); }
.needs-compact .transport-leg.leg-overall { background: #f7f8fa; }
.needs-compact .transport-leg.leg-out { background: #f4f8f5; }
.needs-compact .transport-leg.leg-ret { background: #fbf6f1; }
.needs-compact .transport-leg-title { display: inline-flex; align-items: center; gap: 6px; font-size: 13.5px; font-weight: 700; color: var(--ink); margin: 0 0 8px; }
.needs-compact .transport-leg.leg-out .transport-leg-title { color: var(--ok); }
.needs-compact .transport-leg.leg-ret .transport-leg-title { color: var(--accent); }
.needs-compact .transport-leg-title .leg-ico { font-style: normal; font-size: 15px; line-height: 1; }
/* U317-1 整体安排：取消重复的意向交通工具后只剩一项，单列即可 */
.needs-compact .transport-overall-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr); gap: 12px; }
.needs-compact .transport-overall-grid.one { grid-template-columns: minmax(0, 360px); }
.needs-compact .transport-drive-note { display: none; margin: 6px 0 0; font-size: 11.5px; color: var(--accent); }

/* P1 交通区两列：左列=去程表单+去程可达库，右列=返程表单+返程可达库；窄屏(≤900px)堆成单列。
   每列内部「表单在上、对应可达库在下」自然纵向堆叠。 */
.needs-compact .transport-two-col { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 16px; align-items: start; }
.needs-compact .transport-col { min-width: 0; display: flex; flex-direction: column; }
/* 列内表单卡与可达库卡间留固定间距，覆盖各自默认 margin，保证两列竖向节奏一致 */
.needs-compact .transport-col .transport-leg { margin: 0 0 12px; }
.needs-compact .transport-col .essence-card.transport-suggest { margin: 0; }
@media (max-width: 900px) {
  /* 窄屏：去程整组(表单+可达库)在上、返程整组在下 */
  .needs-compact .transport-two-col { grid-template-columns: minmax(0, 1fr); gap: 12px; }
  .needs-compact .transport-overall-grid { grid-template-columns: minmax(0, 1fr); }
}

/* XQ-15-1（保留兼容）去程/返程两查询卡左右并排——结构已改两列，旧 .transport-suggest-pair 不再渲染，
   规则保留以防其它分支引用，不影响新结构 */
.needs-compact .transport-suggest-pair { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 12px; margin-top: 12px; }
.needs-compact .transport-suggest-pair .essence-card.transport-suggest { margin: 0; }

/* XQ-15-2/6 推荐卡来源行：明确写「从【出发城市】可达…」 */
.needs-compact .reach-source { margin: 6px 0 0; font-size: 12px; font-weight: 600; color: var(--sub); }
.needs-compact .suggest-out .essence-card-title { color: var(--ok); }
.needs-compact .suggest-ret .essence-card-title { color: var(--accent); }

/* XQ-15-7 日期选择器：原 select 高度对齐；旧非 ISO 文本提示 */
.needs-compact input[type="date"] { min-height: var(--control-h); padding: 4px 8px; }
.needs-compact .date-legacy-note { margin: 2px 0 0; font-size: 11px; color: var(--accent); }

/* XQ-15-8 具体时间双控件：出发 → 抵达 两个 time 并排 */
.needs-compact .dualtime-row { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; gap: 6px; }
.needs-compact .dualtime-row input[type="time"] { min-height: var(--control-h); padding: 4px 6px; min-width: 0; }
.needs-compact .dualtime-sep { color: var(--quiet); font-size: 13px; }

/* XQ-15-9 模糊时段轻 chip：与具体时刻二选一 */
.needs-compact .slotchips { margin-top: 8px; }
.needs-compact .slot-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.needs-compact .slot-chip { min-height: 0; border: 1px solid var(--line-strong); background: var(--panel); color: var(--sub); border-radius: 999px; padding: 3px 12px; font-size: 12px; cursor: pointer; }
.needs-compact .slot-chip:hover { border-color: var(--accent); color: var(--accent); transform: none; }
.needs-compact .slot-chip.active { background: var(--accent-soft); border-color: var(--accent); color: var(--jade-dark); font-weight: 600; }

/* XQ-15-11 意向交通工具多选 chip */
.needs-compact .intent-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.needs-compact .intent-chip { min-height: 0; border: 1px solid var(--line-strong); background: var(--panel); color: var(--sub); border-radius: 999px; padding: 4px 14px; font-size: 12.5px; cursor: pointer; }
.needs-compact .intent-chip:hover { border-color: var(--accent); color: var(--accent); transform: none; }
.needs-compact .intent-chip.active { background: var(--accent-soft); border-color: var(--accent); color: var(--jade-dark); font-weight: 600; }

/* ⑤ 城市不确定 + 交通工具确定：给「该工具能直达」的所有落点上实心玉色边框（成批高亮，回答"高铁选了→哪些落点高铁能到"）。
   放在「已选/推荐」规则之前：同时命中「推荐」的那条落点由下方 reach-recommend 覆盖成虚线框，不双框打架。 */
.needs-compact .reach-row.reach-tool-match {
  position: relative;
  background: #f3f8f4;
  border: 1.5px solid var(--ok, #4f9d69);
  border-radius: 9px;
  padding: 7px 10px;
  margin: 2px 0;
}
.needs-compact .reach-row.reach-tool-match .reach-mode { color: var(--ok, #4f9d69); font-weight: 600; }

/* U317-4 联动高亮改清楚：去掉左侧色条 + 糊底色，改成「实心主彩边框 + 浅底深字 + 右上角标」高对比 */
.needs-compact .reach-row.reach-chosen {
  position: relative;
  background: #fff;
  border: 1.5px solid var(--accent);
  border-radius: 9px;
  padding: 7px 10px;
  margin: 2px 0;
}
.needs-compact .reach-row.reach-chosen .reach-main b { color: var(--jade-dark); }
.needs-compact .reach-row.reach-chosen .reach-mode { color: var(--jade-dark); font-weight: 600; }
/* 右上角「选中」角标，让命中行一眼可辨，不靠底色 */
.needs-compact .reach-row.reach-chosen::after {
  content: "已选";
  position: absolute;
  top: -9px;
  right: 10px;
  font-size: 10.5px;
  font-weight: 700;
  color: #fff;
  background: var(--accent);
  border-radius: 999px;
  padding: 1px 8px;
  line-height: 1.5;
  letter-spacing: .5px;
}

/* ①红框第二态「推荐」：没选城市时给最该走的那个落点引导眼睛——虚线琥珀框 + 「推荐」角标，
   与「已选」(实心主彩)区分：推荐=系统建议、已选=定制师真选 */
.needs-compact .reach-row.reach-recommend {
  position: relative;
  background: #fffdf7;
  border: 1.5px dashed var(--amber, #c79a3a);
  border-radius: 9px;
  padding: 7px 10px;
  margin: 2px 0;
}
.needs-compact .reach-row.reach-recommend::after {
  content: "推荐";
  position: absolute;
  top: -9px;
  right: 10px;
  font-size: 10.5px;
  font-weight: 700;
  color: #8a6d2f;
  background: #f3e2bb;
  border: 1px solid #d9bd79;
  border-radius: 999px;
  padding: 1px 8px;
  line-height: 1.5;
  letter-spacing: .5px;
}

/* ②密度自适应：>3 趟进紧凑模式——chip 更小更密，一框塞 6 个 */
.needs-compact .reach-crowd.compact .reach-crowd-list { gap: 5px; }
.needs-compact .reach-crowd.compact .reach-crowd-pick { font-size: 11px; padding: 2px 7px; }
.needs-compact .reach-crowd.compact .reach-crowd-del { width: 20px; height: 20px; padding: 0; line-height: 1; font-size: 11px; }
/* 「展开看全部」前隐藏多出来的趟，点开（.show-all）才显 */
.needs-compact .reach-crowd .reach-crowd-extra { display: none; }
.needs-compact .reach-crowd.show-all .reach-crowd-extra { display: contents; }
.needs-compact .reach-crowd-more {
  display: inline-block; margin-top: 5px; padding: 2px 9px;
  font-size: 11.5px; color: #8a6d2f; background: #f9f1dd;
  border: 1px dashed #d9bd79; border-radius: 999px; cursor: pointer;
}
.needs-compact .reach-crowd-more:hover { background: #f3e6c6; }
.needs-compact .reach-crowd.show-all .reach-crowd-more { font-size: 0; }
.needs-compact .reach-crowd.show-all .reach-crowd-more::after { content: "收起 ▴"; font-size: 11.5px; color: #8a6d2f; }

/* ⑤ 城市对无班次 / 班期不匹配 提醒 banner：琥珀警示，醒目但不报错红 */
.needs-compact .reach-coverage-warn {
  margin: 6px 0 8px; padding: 7px 11px;
  font-size: 12px; line-height: 1.5; color: #8a5a1a;
  background: #fdf3df; border: 1px solid #e8c97e;
  border-left: 3px solid #d99a2b; border-radius: 7px;
}

/* ③ 去/返程日期 hover 提醒图标（鼠标悬停才出 title，引导改成本单日期） */
.needs-compact .date-hint {
  display: inline-block; margin-left: 4px; font-size: 11px;
  color: var(--quiet, #9b8e7a); cursor: help; font-weight: 400;
}

/* XQ-15-11 自驾（Lucia 2026-07-07 修）：只弱化「航班号/车次」(自驾没有航线班次)；
   去程/返程日期 + 具体时间【照常可填、不弱化】——自驾也有出发日期/时间，且去程日期驱动整个出发日/行程/客户页。 */
.needs-compact .transport-leg.leg-drive .transport-service-row .field:has([data-field$="service_no"]) { opacity: 0.5; }
.needs-compact .transport-leg.leg-drive .transport-drive-note { display: block; }

/* 折叠组：核心需求（默认展开）/ 交通与服务（默认收起），内层 section 原样收纳 */
.needs-compact .needs-group { margin-top: 12px; }
.needs-compact .needs-group-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; min-height: 36px; padding: 7px 14px; background: #eef0f3; border: 1px solid var(--line-strong); border-radius: 10px; cursor: pointer; list-style: none; user-select: none; }
.needs-compact .needs-group-head::-webkit-details-marker { display: none; }
.needs-compact .needs-group-head::after { content: "展开"; margin-left: auto; font-size: 12px; color: var(--quiet); }
.needs-compact .needs-group[open] > .needs-group-head::after { content: "收起"; }
.needs-compact .needs-group-title { font-size: 14px; font-weight: 700; color: var(--ink); }
.needs-compact .needs-group-sub { font-size: 12px; color: var(--quiet); }
.needs-compact .needs-group-body { padding: 0 2px 2px; }

@media (max-width: 720px) {
  .needs-compact .essence-progress { margin-left: 0; }
  .needs-compact .essence-name { font-size: 17px; }
}

/* ============================================================
   排行程工位 v1（plan-two-pane 命名空间，只作用于 ② 排行程 tab）
   左=客户方案编辑台（再紧凑一档） / 右=手机实时预览（sticky 跟随）
   ============================================================ */
.plan-two-pane { display: grid; grid-template-columns: minmax(0, 1fr) 462px; gap: 18px; align-items: start; } /* 右栏放宽装真实iPhone宽度 */
.plan-two-pane .plan-edit-col { min-width: 0; }
.plan-two-pane .plan-preview-col { min-width: 0; align-self: stretch; }
.plan-two-pane .plan-preview-sticky { position: sticky; top: 70px; }
.plan-two-pane .plan-preview-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin: 0 auto 8px; max-width: 430px; }
.plan-two-pane .plan-preview-head > span { font-size: 12.5px; font-weight: 700; color: var(--quiet); letter-spacing: .3px; }
.plan-two-pane .plan-preview-open-full { border: 1px solid var(--line-strong); background: var(--panel); border-radius: 8px; padding: 3px 10px; font-size: 12px; color: var(--sub); cursor: pointer; }
.plan-two-pane .plan-preview-open-full:hover { background: var(--mint); color: var(--ink); }
/* C2 修复：右侧预览框做成标准 iPhone 比例（390×844，比例≈0.462），边框做细更精致更像真手机壳。
   宽度随列收窄但不超 390；高度按 iPhone 真实比例由宽度推算（aspect-ratio），不再用拍脑袋的 820px。 */
.plan-two-pane .phone-frame {
  /* 高度先吃满可视区(最多 824px≈iPhone逻辑高)，宽度再由 iPhone 比例反推，保证永远是真机长条形而非被压扁。
     宽再封顶 390(iPhone 逻辑宽)，避免大屏上撑太宽。 */
  height: min(82vh, 824px);
  aspect-ratio: 390 / 844;   /* 标准 iPhone 比例 */
  width: auto;
  max-width: 390px;
  margin: 0 auto;
  border: 6px solid #15110e;             /* 细边精致壳 */
  border-radius: 44px;
  box-shadow: 0 10px 30px rgba(37,31,27,.22), inset 0 0 0 1.5px #3a332e;
}
.plan-two-pane .phone-frame .phone-empty { height: 100%; }
.plan-two-pane .plan-preview-fab { display: none; }

/* 需求页第④步左右分栏(2026-07-02 Lucia定版):左=想看什么玩什么,右=可点选地图,同屏联动 */
.needs-wish-split { display: grid; grid-template-columns: minmax(0, 1fr) minmax(340px, 440px); gap: 16px; align-items: start; }
.needs-wish-map { position: sticky; top: 66px; }
.needs-wish-map-cap { font-size: 12px; font-weight: 700; color: var(--quiet); margin-bottom: 6px; }
.needs-wish-map .plan-map-iframe {
  width: 100%; height: min(76vh, 860px); border: 1px solid var(--line-strong); border-radius: 14px;
  background: #faf7f1; box-shadow: var(--shadow); display: block;
}
@media (max-width: 1100px) {
  .needs-wish-split { grid-template-columns: 1fr; }
  .needs-wish-map { position: static; }
  .needs-wish-map .plan-map-iframe { height: 64vh; }
}

/* —— 左栏编辑器整体再压一档：英雄图/字号/留白 —— */
.plan-two-pane .inline-customer-editor { max-width: 720px; }
.plan-two-pane .inline-customer-editor.wys-mode .inline-edit-hero { padding: 16px 18px 14px; border-radius: 14px; margin-bottom: 12px; }
.plan-two-pane .inline-customer-editor.wys-mode .inline-title-input { font-size: 20px; margin: 8px 0 6px; padding: 6px 10px; }
.plan-two-pane .inline-customer-editor.wys-mode .inline-subtitle-input { font-size: 13.5px; padding: 5px 10px; }
.plan-two-pane .wys-day { border-radius: 16px; margin: 14px 0; }
.plan-two-pane .wys-banner { height: 132px; padding: 10px 12px; }
.plan-two-pane .inline-customer-editor.tpl-v6 .wys-banner { height: 180px; }
.plan-two-pane .wys-body { padding: 14px 16px 16px; }
.plan-two-pane .wys-head { padding-bottom: 10px; margin-bottom: 10px; }
.plan-two-pane .wys-day .wys-title { font-size: 19px; }
.plan-two-pane .inline-customer-editor.tpl-v9 .wys-day .wys-title { font-size: 18px; }
.plan-two-pane .wys-day .wys-theme, .plan-two-pane .wys-day .wys-route { font-size: 13px; }
.plan-two-pane .wys-section-label { margin: 10px 0 6px; font-size: 13px; }
.plan-two-pane .wys-day .sched-row-title { font-size: 14.5px; }
.plan-two-pane .wys-day .sched-row-desc { font-size: 13px; min-height: 28px; }
.plan-two-pane .wys-day .sched-period { padding: 6px 0 8px; }
.plan-two-pane .wys-highlight { padding: 10px 12px; margin: 10px 0; }
.plan-two-pane .wys-meta { margin: 10px 0; }
.plan-two-pane .wys-exp { margin: 10px 0; }
.plan-two-pane .inline-edit-panel { padding: 14px 16px; }
.plan-two-pane .mini-pick-row.inline-mini-row button { font-size: 12px; padding: 3px 9px; }

/* —— 拖拽把手 + 拖拽态 + 插入指示线 —— */
.plan-two-pane .wys-head-row { justify-content: flex-start; gap: 8px; }
.plan-two-pane .wys-head-row .wys-ai-day { margin-left: auto; }
.plan-two-pane .wys-drag-handle { cursor: grab; user-select: none; color: var(--quiet); font-size: 17px; line-height: 1; padding: 4px 7px; border-radius: 7px; border: 1px dashed transparent; }
.plan-two-pane .wys-drag-handle:hover { background: #f3ece0; border-color: var(--line-strong); color: var(--ink); }
.plan-two-pane .wys-drag-handle:active { cursor: grabbing; }
.plan-two-pane .inline-edit-day.is-dragging { opacity: .4; }
.plan-two-pane .day-drop-line { height: 0; border-top: 3px solid var(--jade); border-radius: 3px; margin: 8px 4px; box-shadow: 0 0 0 2px rgba(63,125,98,.18); }

/* —— 窄屏（<1200px）：右栏隐藏，悬浮「预览」按钮开关浮层 —— */
@media (max-width: 1199px) {
  .plan-two-pane { grid-template-columns: 1fr; }
  .plan-two-pane .plan-preview-col { display: none; }
  .plan-two-pane .plan-preview-fab { display: block; position: fixed; right: 18px; bottom: 18px; z-index: 60; border: 0; background: var(--clay); color: #fff; font-weight: 800; font-size: 14px; border-radius: 999px; padding: 12px 18px; box-shadow: 0 10px 26px rgba(108,52,38,.35); cursor: pointer; }
  .plan-two-pane.preview-open .plan-preview-col { display: block; position: fixed; right: 14px; bottom: 72px; z-index: 59; width: min(412px, calc(100vw - 28px)); background: var(--panel); border: 1px solid var(--line); border-radius: 18px; padding: 12px; box-shadow: 0 18px 48px rgba(37,31,27,.28); }
  .plan-two-pane.preview-open .plan-preview-sticky { position: static; }
  .plan-two-pane.preview-open .phone-frame { height: min(60vh, 600px); }
}

/* ===== ① 客户需求工位 v2：选点搜索式组件 + 可读性层级（.needs-compact 命名空间） ===== */

/* —— #5 可读性：分组标题 > 区块标题 > 字段标签 > 说明文字，说明用更浅的 muted —— */
.needs-compact { --muted-soft: #aaa49a; }
.needs-compact .needs-group-title { font-size: 15.5px; }
.needs-compact .section-title h2 { font-size: 14px; }
.needs-compact .needs-group-sub,
.needs-compact .hint,
.needs-compact .section-hint,
.needs-compact .transport-suggest-note { color: var(--muted-soft); }
.needs-compact .section-hint { font-size: 12px; margin-bottom: 10px; }
.needs-compact .essence-summary-tag { display: inline-block; margin-right: 8px; font-size: 11px; font-weight: 600; color: var(--sub); background: #f1f3f5; border: 1px solid var(--line); border-radius: 999px; padding: 1px 8px; vertical-align: 2px; }

/* ===== XQ-07 视觉降噪（机械修缮第一刀）：红只留缺/错，加粗收权 =====
   700+ 字重只允许：组标题 / 八要素汇总徽章 / 金额数字；chips、标签、badge 一律 ≤600 */
.needs-compact .field label { font-weight: 500; }
.needs-compact .badge { background: #f1f3f5; color: var(--sub); border-color: var(--line); }
.needs-compact .badge.red { background: var(--red-soft); color: #9d3d29; border-color: #edc1b8; } /* 真错误仍允许红 */

/* 起落点推荐卡并入「交通与起落点（高级）」组内，做组里第一块 */
.needs-compact .needs-group-body .essence-card.transport-suggest { margin: 10px 0 0; }

/* —— 选点组件骨架 —— */
.needs-compact .picker { gap: 6px; }
.needs-compact .picker > label { font-size: 12.5px; font-weight: 600; color: var(--ink); }

/* 已选区（常驻顶部） */
.needs-compact .picker-selected { background: #f7f8fa; border: 1px solid var(--line); border-radius: 10px; padding: 8px 10px; }
.needs-compact .picker-selected-head { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-bottom: 6px; }
.needs-compact .picker-selected-title { font-size: 12px; font-weight: 600; color: var(--sub); }
.needs-compact .picker-cycle-hint { margin: 0 0 0 auto; font-size: 11.5px; color: var(--muted-soft); } /* REQ-N36：提示并进头行右侧，省一行高度 */
/* REQ-N36：已选清单全宽横条（两列布局退役，高度差空白消失） */
.needs-compact .picker > .picker-selected { margin: 2px 0 10px; }
/* REQ-N38：客群特征「推断提示亮」——虚线橙边浅亮，点一下转实选 */
.needs-compact .theme-chip.hinted { border: 1px dashed var(--accent); background: #fdf3ea; color: #8a3d18; }
.needs-compact .picker-count { margin-left: auto; font-size: 12px; font-weight: 600; color: var(--sub); background: #f1f3f5; border: 1px solid var(--line); border-radius: 999px; padding: 1px 10px; }
.needs-compact .picker-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.needs-compact .picker-empty { font-size: 12.5px; color: var(--muted-soft); }

/* REQ-N09：已选区不再用深色实底色块（主理人「色块堆起来丑」）——极淡底小chip：
   必去=主彩淡底橙字+★、想去/已选=暖浅底描边深字、避开=灰；
   红只留 缺/错，绿只留状态语义（八要素✓/三态可行） */
.needs-compact .pchip { display: inline-flex; align-items: center; gap: 5px; min-height: 24px; border-radius: 999px; padding: 2px 10px; font-size: 12px; cursor: pointer; user-select: none; line-height: 1.5; }
.needs-compact .pchip.is-must { background: var(--accent-soft); border: 1px solid #e8c4a4; color: #8a3d18; font-weight: 600; }
.needs-compact .pchip.is-must:hover { background: #f1d2b8; transform: none; border-color: var(--accent); }
.needs-compact .pchip.is-want { background: var(--accent-faint); border: 1px solid var(--line-strong); color: var(--ink); font-weight: 400; }
.needs-compact .pchip.is-want:hover { background: #ede8df; transform: none; border-color: var(--accent); }
.needs-compact .pchip.is-on { background: var(--accent-faint); border: 1px solid var(--line-strong); color: var(--ink); font-weight: 400; }
.needs-compact .pchip.is-on:hover { background: #ede8df; transform: none; border-color: var(--accent); }
.needs-compact .pchip .pchip-star { font-style: normal; font-size: 10.5px; line-height: 1; margin-right: 1px; color: var(--accent); }
.needs-compact .pchip.is-avoid { background: #eceef0; border: 1px solid var(--line-strong); color: var(--sub); font-weight: 500; }
.needs-compact .pchip.is-avoid:hover { transform: none; border-color: var(--line-strong); }

/* B1-9：✕ 独立小目标（在 chip 外侧），误删不再发生 */
.needs-compact .pchip-wrap { display: inline-flex; align-items: center; gap: 3px; }
.needs-compact .pchip-x { width: 18px; height: 18px; min-height: 0; flex: 0 0 auto; padding: 0; display: inline-flex; align-items: center; justify-content: center; border: 1px solid var(--line-strong); background: var(--panel); color: var(--sub); border-radius: 999px; font-size: 10px; line-height: 1; cursor: pointer; }
.needs-compact .pchip-x:hover { background: var(--red-soft); border-color: #ddb09c; color: #9d3d29; transform: none; }

/* XQ-03 防误删：chip 上的小 ✕ 是唯一删除热区（常显、弱化，hover 点亮） */
/* （B1-9 后 ✕ 不再嵌在 chip 内部，旧内嵌样式删除） */

.needs-compact .picker-avoid-row { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 8px; padding-top: 8px; border-top: 1px dashed var(--line); }
.needs-compact .picker-avoid-label { font-size: 11.5px; font-weight: 600; color: var(--quiet); }

/* 搜索添加（核心入口）＋下拉 */
.needs-compact .picker-search { position: relative; display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 8px; margin-top: 8px; }
.needs-compact .picker-search input { min-height: 34px; }
.needs-compact .picker-add-btn { min-height: 34px; padding: 4px 14px; white-space: nowrap; }
.needs-compact .picker-dropdown { position: absolute; top: calc(100% + 4px); left: 0; right: 0; z-index: 40; background: #fff; border: 1px solid var(--line-strong); border-radius: 10px; box-shadow: 0 14px 34px rgba(40, 37, 31, 0.16); max-height: 280px; overflow: auto; padding: 4px; }
.needs-compact .picker-opt { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; gap: 10px; width: 100%; text-align: left; border: 0; background: transparent; border-radius: 8px; padding: 7px 10px; min-height: 0; }
.needs-compact .picker-opt:hover { background: #f4f6f8; transform: none; }
.needs-compact .picker-opt b { font-size: 13px; color: var(--ink); font-weight: 500; }
.needs-compact .picker-opt span { font-size: 11.5px; color: var(--muted-soft); }
.needs-compact .picker-opt em { font-style: normal; font-size: 11.5px; color: var(--ok); font-weight: 600; min-width: 3em; text-align: right; }
.needs-compact .picker-opt.is-custom b { color: var(--blue); }

/* 按城市浏览（XQ-09 明面入口：入口条做成实按钮脸，景点/体验面板默认展开） */
.needs-compact .picker-browse { margin-top: 8px; border: 1px solid var(--line); border-radius: 10px; background: #fafbfc; }
.needs-compact .picker-browse > summary { display: flex; align-items: center; gap: 10px; min-height: 36px; padding: 8px 12px; cursor: pointer; list-style: none; font-size: 13px; font-weight: 600; color: var(--ink); user-select: none; background: #eef0f3; border: 0; border-radius: 9px; }
.needs-compact .picker-browse[open] > summary { border-radius: 9px 9px 0 0; border-bottom: 1px solid var(--line); }
.needs-compact .picker-browse > summary:hover { background: #e6e9ed; }
.needs-compact .picker-browse > summary::-webkit-details-marker { display: none; }
.needs-compact .picker-browse > summary::after { content: "展开 ▾"; margin-left: auto; flex: 0 0 auto; font-size: 11.5px; font-weight: 500; color: var(--quiet); }
.needs-compact .picker-browse[open] > summary::after { content: "收起 ▴"; }
.needs-compact .picker-browse > summary span { font-size: 11.5px; font-weight: 400; color: var(--quiet); }

/* XQ-08 分类 ≠ 选项：城市页签=无框下划线式分组导航，椭圆框只留给可点选的景点/体验 chip */
.needs-compact .picker-tabs { display: flex; gap: 14px; overflow-x: auto; padding: 4px 12px 0; margin: 0 10px; white-space: nowrap; scrollbar-width: thin; border-bottom: 1px solid var(--line); }
.needs-compact .ptab { flex: 0 0 auto; min-height: 0; border: 0; border-bottom: 2px solid transparent; border-radius: 0; background: none; color: var(--sub); font-size: 12.5px; font-weight: 500; padding: 3px 1px 6px; }
.needs-compact .ptab i { font-style: normal; font-size: 11px; color: var(--muted-soft); margin-left: 3px; }
.needs-compact .ptab.on { background: none; border-bottom-color: var(--ink); color: var(--ink); font-weight: 600; }
.needs-compact .ptab.on i { color: var(--quiet); }
.needs-compact .ptab:hover { transform: none; border-color: transparent; border-bottom-color: var(--line-strong); color: var(--ink); background: none; }
.needs-compact .ptab.on:hover { border-bottom-color: var(--ink); }
.needs-compact .picker-panels { padding: 8px 10px 10px; }
.needs-compact .picker-panel { display: flex; flex-wrap: wrap; gap: 6px; }
.needs-compact .picker-panel.hide { display: none; }
/* B1-10/11/13：候选 chip 未选=浅灰底；选中=实心色块（想去/已选=浅墨，必去=深墨，同色系两档深浅） */
.needs-compact .pchip-opt { min-height: 26px; border-radius: 999px; border: 1px solid transparent; background: #f1f3f5; color: var(--sub); font-size: 12.5px; padding: 3px 11px; font-weight: 400; }
.needs-compact .pchip-opt:hover { border-color: var(--ink); transform: none; }
.needs-compact .pchip-opt.on { background: var(--accent-soft); border-color: var(--accent-soft); color: #8a3d18; font-weight: 400; }  /* 已选普通=主彩浅底深字，不加粗（主理人嫌粗） */
.needs-compact .pchip-opt.on.must { background: var(--accent); border-color: var(--accent); color: #fff; }  /* 已选必去=主彩实心白字 */

/* XQ-11：文本方式改必去/避开——入口从小字链接升级为按钮脸，给存在感 */
.needs-compact .picker-rawedit { margin-top: 8px; }
.needs-compact .picker-rawedit > summary { display: inline-flex; align-items: center; gap: 6px; min-height: 32px; padding: 5px 12px; cursor: pointer; list-style: none; font-size: 12.5px; font-weight: 500; color: var(--ink); background: #fff; border: 1px solid var(--line-strong); border-radius: 8px; user-select: none; }
.needs-compact .picker-rawedit > summary::-webkit-details-marker { display: none; }
.needs-compact .picker-rawedit > summary:hover { background: #f4f6f8; color: var(--ink); }
.needs-compact .picker-rawedit > summary::after { content: "▾"; font-size: 11px; color: var(--quiet); }
.needs-compact .picker-rawedit[open] > summary::after { content: "▴"; }
.needs-compact .picker-rawedit-body { display: grid; gap: 8px; margin-top: 8px; }

/* ===== ① 需求工位 v2 五步向导（步骤条/分屏/折叠/底部导航/双维度/主题四组） ===== */

/* —— 五步步骤条：常驻吸顶（editor-tabs 是 sticky top:0 高约50px，本条挂在其下） —— */
.needs-compact .needs-stepper { position: sticky; top: 52px; z-index: 19; display: flex; align-items: stretch; gap: 2px; margin: 14px 0 12px; padding: 7px 8px; background: rgba(255, 255, 255, .97); backdrop-filter: blur(4px); border: 1px solid var(--line); border-radius: 12px; box-shadow: 0 6px 18px rgba(40, 37, 31, .06); overflow-x: auto; scrollbar-width: thin; }
.needs-compact .wstep { flex: 1 1 0; min-width: 118px; display: flex; flex-direction: column; align-items: flex-start; gap: 3px; border: 0; border-bottom: 2px solid transparent; border-radius: 8px 8px 0 0; background: none; padding: 6px 8px 7px; cursor: pointer; text-align: left; }
.needs-compact .wstep:hover { background: #f4f6f8; }
.needs-compact .wstep.on { background: var(--accent); border-bottom-color: var(--accent); border-radius: 10px; }  /* 配色v2：当前步=主彩实心圆角块，黑横线退役 */
.needs-compact .wstep-row { display: inline-flex; align-items: center; gap: 5px; max-width: 100%; }
.needs-compact .wstep-num { font-style: normal; font-size: 13px; color: var(--quiet); }
.needs-compact .wstep.on .wstep-num { color: #fff; }
.needs-compact .wstep-title { font-size: 12.5px; font-weight: 600; color: var(--sub); white-space: nowrap; }
.needs-compact .wstep.on .wstep-title { color: #fff; }
.needs-compact .wstep-dot { font-style: normal; font-size: 10.5px; line-height: 1; border-radius: 999px; padding: 3px 6px; font-weight: 600; flex: 0 0 auto; }
.needs-compact .wstep-dot.miss { background: #9d3d29; color: #fff; }   /* 红只留「缺」（白名单） */
.needs-compact .wstep-dot.pend { background: var(--gold-soft); color: #8a5a14; border: 1px solid #ead9b5; }
.needs-compact .wstep.on .wstep-dot.miss { background: #fff; color: #b03a22; }   /* 当前步橙底上：缺标签翻白底，不撞色 */
.needs-compact .wstep.on .wstep-dot.pend { background: #fff; color: #8a5a14; border-color: #fff; }
.needs-compact .wstep-dot.soft { background: #f1f3f5; color: var(--quiet); border: 1px solid var(--line); font-weight: 500; }
.needs-compact .wstep-dot.ok { background: none; color: var(--ok); padding: 0 1px; }
.needs-compact .wstep-sum { max-width: 100%; font-size: 11px; color: var(--sub); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.needs-compact .wstep-sum.empty { color: var(--muted-soft); }
.needs-compact .wstep.on .wstep-sum { color: rgba(255,255,255,0.85); }   /* 当前步橙底上：摘要灰字→半透明白，看得清又比标题柔一档 */
.needs-compact .wstep.on .wstep-sum.empty { color: rgba(255,255,255,0.6); }
.needs-compact .wstep-arrow { align-self: center; flex: 0 0 auto; color: var(--muted-soft); font-size: 12px; padding: 0 1px; }

/* —— 步屏：display 显隐切换（字段 DOM 常驻，保证 collectForm 全量采集） —— */
.needs-compact .wizard-step { display: none; }
.needs-compact .wizard-step.on { display: block; animation: wizardStepIn .16s ease; }
@keyframes wizardStepIn { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }
/* B1-20：步头贴紧上方导航，内容顶部对齐，不再沉到屏幕下半 */
.needs-compact .wizard-step-head { display: flex; align-items: baseline; gap: 8px; margin: 8px 0 6px; }
.needs-compact .wizard-step-head h2 { margin: 0; font-size: 16px; font-weight: 700; color: var(--ink); }
.needs-compact .wizard-step-num { font-size: 14px; color: var(--quiet); }
.needs-compact .wizard-step-sub { font-size: 12px; color: var(--quiet); }

/* —— 第①步折叠条（原始材料/线索档案）：细线分隔的轻折叠，不起新框 —— */
.needs-compact .wizard-fold { margin-top: 14px; border-top: 1px dashed var(--line); padding-top: 9px; }
.needs-compact .wizard-fold summary { cursor: pointer; user-select: none; list-style: none; font-size: 12.5px; color: var(--sub); }
.needs-compact .wizard-fold summary::-webkit-details-marker { display: none; }
.needs-compact .wizard-fold summary::before { content: "▸ "; color: var(--quiet); }
.needs-compact .wizard-fold[open] > summary::before { content: "▾ "; }
.needs-compact .wizard-fold summary:hover { color: var(--ink); }
.needs-compact .wizard-fold-body { margin-top: 10px; }

/* —— 步骤导航：B1-20 操作区上移——导航条紧跟步骤条之后、内容之前，不再吸底沉屏 —— */
.needs-compact .wizard-nav { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 8px; padding: 7px 10px; background: rgba(255, 255, 255, .97); border: 1px solid var(--line); border-radius: 12px; }
.needs-compact .wnav-prev, .needs-compact .wnav-next { border: 1px solid var(--line-strong); background: var(--panel); color: var(--ink); border-radius: 8px; padding: 7px 16px; font-size: 13px; cursor: pointer; }
.needs-compact .wnav-prev:hover { background: #f4f6f8; }
.needs-compact .wnav-prev:disabled { opacity: .35; cursor: default; background: var(--panel); }
.needs-compact .wnav-next { background: var(--ink); border-color: var(--ink); color: #fff; font-weight: 600; }
.needs-compact .wnav-next:hover { background: #3c382f; }
.needs-compact .wnav-pos { font-size: 12px; color: var(--quiet); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* —— 必去 chip 的 ★ 前缀 —— */
.needs-compact .pchip .pchip-star { font-style: normal; font-size: 10.5px; line-height: 1; margin-right: 1px; }

/* —— 体验「按城市/按类型」维度切换（细节3）：小分段开关，墨色系 —— */
.needs-compact .picker-dims { display: inline-flex; margin: 8px 10px 0; border: 1px solid var(--line-strong); border-radius: 8px; overflow: hidden; }
.needs-compact .pdim { border: 0; background: var(--panel); color: var(--sub); font-size: 12px; padding: 4px 14px; cursor: pointer; }
.needs-compact .pdim + .pdim { border-left: 1px solid var(--line-strong); }
.needs-compact .pdim.on { background: var(--ink); color: #fff; font-weight: 600; }
.needs-compact .pdim:not(.on):hover { background: #f4f6f8; color: var(--ink); }

/* —— 主题四组堆叠陈列（细节4）：分组小标题（文字+数量，无框），chip 才是选项 —— */
.needs-compact .picker-stacked { display: block; padding: 2px 10px 8px; }
.needs-compact .picker-stack-group { padding: 8px 0 2px; }
.needs-compact .picker-stack-group + .picker-stack-group { border-top: 1px dashed var(--line); }
.needs-compact .picker-group-head { display: block; font-size: 12px; font-weight: 600; color: var(--sub); margin: 2px 0 7px; }
.needs-compact .picker-group-head i { font-style: normal; font-size: 11px; font-weight: 400; color: var(--muted-soft); margin-left: 4px; }
.needs-compact .picker-stack-chips { display: flex; flex-wrap: wrap; gap: 6px; padding-bottom: 6px; }

/* —— 窄屏：步骤条横向滚动、吸顶位上调 —— */
@media (max-width: 720px) {
  .needs-compact .needs-stepper { top: 48px; }
  .needs-compact .wstep { min-width: 128px; }
}

/* ===== 批次1 新增控件样式（B1-3 / B1-12 / B1-15·17·19） ===== */
/* B1-3 抵离时间：时段下拉 + 原生时间框 同格双列 */
.needs-compact .timeslot-row { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 6px; }
.needs-compact .timeslot-row input[type="time"] { min-height: var(--control-h); padding: 4px 8px; }
/* REQ-N08：时段选「不确定」时收起时间框，时段下拉占满整行 */
.needs-compact .timeslot.no-time .timeslot-row { grid-template-columns: minmax(0, 1fr); }
.needs-compact .timeslot.no-time input[type="time"] { display: none; }

/* B1-15/17/19 附加复选小标签（重视早餐 / 需要儿童座椅）与「其他」自填框 */
.needs-compact .addon-check { display: inline-flex; align-items: center; gap: 6px; margin-top: 3px; font-size: 12.5px; color: var(--sub); cursor: pointer; user-select: none; }
.needs-compact .addon-check input { width: 14px; height: 14px; margin: 0; accent-color: var(--ink); cursor: pointer; }
.needs-compact .addonpref [data-ap-other] { margin-top: 4px; min-height: 30px; }

/* B1-12 选点区左右两列：左宽=选项区（搜索+浏览），右窄=已选清单；窄屏回退单列、已选置顶 */
.needs-compact .picker-cols { display: grid; grid-template-columns: minmax(0, 1fr) 248px; gap: 12px; align-items: start; margin-top: 4px; }
.needs-compact .picker-col-main { min-width: 0; }
.needs-compact .picker-col-main .picker-search { margin-top: 0; }
.needs-compact .picker-col-side { min-width: 0; position: sticky; top: 108px; }
.needs-compact .picker-col-side .picker-selected-head { margin-bottom: 2px; }
@media (max-width: 1000px) {
  .needs-compact .picker-cols { grid-template-columns: 1fr; }
  .needs-compact .picker-col-side { position: static; order: -1; }
}

/* ===== AI 主厨生成等待进度（底部居中浮条：spinner + 阶段文案 + 计秒） ===== */
.gen-progress {
  position: fixed;
  left: 50%;
  bottom: 22px;
  transform: translate(-50%, 16px);
  display: flex;
  align-items: center;
  gap: 10px;
  max-width: min(560px, calc(100vw - 32px));
  background: #20363a;
  color: #fff;
  border-radius: 999px;
  padding: 11px 20px;
  font-size: 14px;
  box-shadow: 0 18px 44px rgba(0,0,0,.24);
  z-index: 120; /* 盖过 toast(99)，生成期间它是第一信息位 */
  opacity: 0;
  pointer-events: none;
  transition: opacity .25s, transform .25s;
}
.gen-progress.on { opacity: 1; transform: translate(-50%, 0); }
.gen-progress-spin {
  width: 16px;
  height: 16px;
  flex: 0 0 auto;
  border-radius: 50%;
  border: 2px solid rgba(255,255,255,.28);
  border-top-color: #fff;
  animation: gen-spin .8s linear infinite;
}
.gen-progress.done .gen-progress-spin, .gen-progress.fail .gen-progress-spin { display: none; }
.gen-progress.done { background: var(--jade-dark, #2f5d49); }
.gen-progress.fail { background: #7c2d12; }
.gen-progress-text { line-height: 1.4; }
.gen-progress-sec { font-style: normal; font-size: 12px; color: rgba(255,255,255,.6); flex: 0 0 auto; }
@keyframes gen-spin { to { transform: rotate(360deg); } }

/* cs-chip(月份/天数/节奏)对齐 theme-chip(图2按城市挑景点)风格:字重400+边框+字号13px一致+间距放松(REQ-N21) */
.cs-row { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-top: 6px; }  /* 间距放松,不再太紧 */
.cs-row + .cs-row { margin-top: 8px; }
.cs-chip { background: var(--accent-faint); border: 1px solid var(--line-strong); color: #4a4036; border-radius: 999px; padding: 6px 15px; font-size: 13px; cursor: pointer; font-weight: 400; transition: all .12s; }
.cs-chip:hover { background: #ece5da; border-color: #d9cfc0; }
.cs-chip.on { background: var(--accent); border-color: var(--accent); color: #fff; }  /* 选中=主彩实心,一眼可辨 */

/* ===== 销售策略卡（吃线索库AI字段，2026-06-13）===== */
.needs-compact .sales-strategy-card { margin: 0 0 14px; border: 1px solid #ecd9c4; border-radius: 14px; background: linear-gradient(180deg,#fdf6ee,#fbf1e6); overflow: hidden; }
.needs-compact .strat-head { display: flex; align-items: center; gap: 8px; padding: 11px 16px; cursor: pointer; list-style: none; }
.needs-compact .strat-head::-webkit-details-marker { display: none; }
.needs-compact .strat-title { font-size: 13.5px; font-weight: 700; color: #8a3d18; }
.needs-compact .strat-level { font-size: 11px; font-weight: 700; color: #fff; background: var(--accent); border-radius: 6px; padding: 1px 7px; }
.needs-compact .strat-level-S { background: #c0392b; }
.needs-compact .strat-level-A { background: #c2602e; }
.needs-compact .strat-level-B { background: #2f5f8c; }
.needs-compact .strat-level-C { background: #8a857c; }
.needs-compact .strat-level-X { background: #b8b2a8; }
.needs-compact .strat-intent { font-size: 11.5px; color: #8a5a14; background: #fbeed6; border: 1px solid #ecdcb8; border-radius: 999px; padding: 1px 9px; }
.needs-compact .strat-src { margin-left: auto; font-size: 11px; color: #b29a82; }
.needs-compact .strat-caret { font-style: normal; color: #c2602e; transition: transform .15s; }
.needs-compact .sales-strategy-card[open] .strat-caret { transform: rotate(180deg); }
.needs-compact .strat-body { padding: 2px 16px 14px; display: flex; flex-direction: column; gap: 10px; }
.needs-compact .strat-row { display: flex; gap: 10px; align-items: flex-start; }
.needs-compact .strat-label { flex: 0 0 56px; font-size: 12px; font-weight: 600; color: #a07a52; padding-top: 1px; }
.needs-compact .strat-label-warn { color: #b07818; }
.needs-compact .strat-val { flex: 1; font-size: 13px; line-height: 1.7; color: #4a4036; }
.needs-compact .strat-script .strat-val { background: #fff; border: 1px solid #f0e2d0; border-radius: 10px; padding: 9px 12px; color: #3a3228; }

/* ===== 主题chips样式补全（收尾棒代理漏加CSS,导致点了没视觉反馈,2026-06-13修）===== */
.needs-compact .theme-chips { margin: 0; }
.needs-compact .theme-chip-row { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-top: 8px; }
.needs-compact .theme-chip { appearance: none; -webkit-appearance: none; font-size: 13px; line-height: 1.4; border-radius: 999px; padding: 6px 15px; border: 1px solid var(--line-strong); background: var(--accent-faint); color: #4a4036; cursor: pointer; transition: all .12s; font-weight: 400; }
.needs-compact .theme-chip:hover { background: #ece5da; border-color: #d9cfc0; }
.needs-compact .theme-chip.on { background: var(--accent); border-color: var(--accent); color: #fff; }   /* 选中=陶土橙实心,一眼可辨 */
.needs-compact .theme-chip.on.is-custom { background: var(--accent-soft); border-color: var(--accent-soft); color: #8a3d18; }  /* 自定义已选=浅橘底,与系统预设区分 */
.needs-compact .theme-chips .pchip-wrap { display: inline-flex; align-items: center; gap: 2px; }
.needs-compact .theme-custom-input { flex: 1 1 200px; min-width: 160px; font-size: 13px; border: 1px solid var(--line); border-radius: 10px; padding: 6px 12px; background: #fff; color: var(--ink); }
.needs-compact .theme-custom-input::placeholder { color: var(--quiet); }

/* 人群触发器：特定人群标签（高考生/中考生……）。沿用 theme-chip 视觉语言：实选=陶土橙，提示态=虚线 */
.needs-compact .cohort-chip-row { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-top: 8px; }
.needs-compact .cohort-chip { appearance: none; -webkit-appearance: none; font-size: 13px; line-height: 1.4; border-radius: 999px; padding: 6px 15px; border: 1px solid var(--line-strong); background: var(--accent-faint); color: #4a4036; cursor: pointer; transition: all .12s; font-weight: 400; }
.needs-compact .cohort-chip:hover { background: #ece5da; border-color: #d9cfc0; }
.needs-compact .cohort-chip.on { background: var(--accent); border-color: var(--accent); color: #fff; }
.needs-compact .cohort-chip.hinted { border: 1px dashed var(--accent); background: #fdf3ea; color: #8a3d18; }   /* 语义命中=虚线提示态，点一下转实选 */
.needs-compact .cohort-tips { margin-top: 10px; border: 1px solid #efd39a; background: #fffaf0; border-radius: 8px; padding: 10px 12px; }
.needs-compact .cohort-tips strong { color: #895810; display: block; margin-bottom: 4px; font-size: 13px; }
.needs-compact .cohort-tips ul { margin: 0; padding-left: 18px; }
.needs-compact .cohort-tips li { font-size: 12.5px; color: #6b5a3a; line-height: 1.5; }
/* 派单看板：用车备注（人群触发器注入）小字挂资源名下 */
.dispatch-note { display: block; font-size: 11.5px; color: var(--accent, #b45a28); font-style: normal; margin-top: 2px; }

/* ===== REQ-D18b 付款分期：预付弹窗 + 付款计划卡 + 派单角标（山西琉璃暖橙系，与 quote-totals 一致） ===== */
/* —— Block1 出报价预付弹窗 —— */
.pp-prepay-wrap { display: grid; gap: 10px; }
.pp-prepay-intro { font-size: 13.5px; color: var(--ink); line-height: 1.6; margin: 0 0 2px; }
.pp-prepay-row { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 10px 12px; border: 1px solid var(--line); border-left: 3px solid var(--accent); border-radius: 8px; background: var(--gold-soft, #fbf3e3); }
.pp-prepay-row.nc { border-left-color: #b3402a; background: var(--red-soft, #fbeee8); }
.pp-prepay-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.pp-prepay-main b { font-size: 13.5px; color: var(--ink); }
.pp-prepay-req { font-size: 12px; color: var(--sub); }
.pp-prepay-side { text-align: right; white-space: nowrap; }
.pp-prepay-amt { font-size: 14px; font-weight: 700; color: var(--clay); }
.pp-prepay-date { font-size: 11.5px; color: var(--quiet); margin-top: 1px; }
.pp-prepay-sum { display: flex; justify-content: space-between; align-items: center; padding: 11px 14px; border-radius: 8px; background: var(--red-soft, #fdf1ec); border: 1px solid var(--clay); margin-top: 2px; }
.pp-prepay-sum span { font-size: 13px; color: var(--sub); }
.pp-prepay-sum b { font-size: 20px; color: var(--clay); }
.pp-merge-toggle { display: flex; align-items: center; gap: 8px; font-size: 12.5px; color: var(--ink); cursor: pointer; padding: 4px 2px; line-height: 1.5; }
.pp-merge-toggle input { width: 15px; height: 15px; accent-color: var(--accent); }

/* —— Block2 付款计划卡 —— */
.pp-plan-card { margin: 12px 0 0; border: 1px solid var(--line); border-radius: 12px; background: var(--panel); overflow: hidden; }
.pp-plan-head { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding: 11px 14px; background: #fbfaf7; border-bottom: 1px solid var(--line); }
.pp-plan-title { font-size: 14px; font-weight: 700; color: var(--ink); }
.pp-plan-sub { font-size: 11.5px; font-weight: 400; color: var(--quiet); margin-left: 6px; }
.pp-seg-picker { display: inline-flex; border: 1px solid var(--line-strong); border-radius: 8px; overflow: hidden; }
.pp-seg-picker button { border: none; background: var(--panel); padding: 5px 14px; font-size: 12.5px; color: var(--sub); cursor: pointer; }
.pp-seg-picker button + button { border-left: 1px solid var(--line-strong); }
.pp-seg-picker button.active { background: var(--accent); color: #fff; font-weight: 600; }
.pp-plan-table { padding: 4px 6px; }
.pp-plan-row { display: grid; grid-template-columns: 30px minmax(0, 1.5fr) 92px 110px 150px minmax(0, 1fr); gap: 8px; align-items: center; padding: 7px 8px; border-bottom: 1px solid var(--line); font-size: 13px; }
.pp-plan-row:last-child { border-bottom: none; }
.pp-plan-row.pp-plan-hd { color: var(--quiet); font-weight: 650; font-size: 11.5px; background: transparent; }
.pp-seq { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; border-radius: 50%; background: var(--accent-soft); color: var(--jade-dark, #9c4a20); font-size: 12px; font-weight: 700; }
.pp-plan-label { color: var(--ink); }
.pp-plan-amt { font-weight: 700; color: var(--clay); display: flex; flex-direction: column; align-items: flex-start; line-height: 1.25; }
.pp-prepay-merged { font-style: normal; font-size: 10px; font-weight: 600; color: #fff; background: var(--accent); border-radius: 4px; padding: 0 5px; margin-top: 2px; }
.pp-pct-input, .pp-amt-input { width: 56px; padding: 4px 6px; border: 1px solid var(--line); border-radius: 6px; font-size: 12.5px; }
.pp-amt-input { width: 78px; }
.pp-pct-edit { display: inline-flex; align-items: center; gap: 2px; color: var(--sub); }
.pp-pct-auto { font-size: 12px; color: var(--quiet); font-style: italic; }
.pp-date-input { width: 100%; padding: 4px 6px; border: 1px solid var(--line); border-radius: 6px; font-size: 12px; color: var(--ink); }
.pp-plan-when { font-size: 12px; color: var(--sub); }
.pp-plan-foot { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 10px 14px; border-top: 1px solid var(--line); background: #fbfaf7; flex-wrap: wrap; }
.pp-plan-check { font-size: 12.5px; font-weight: 600; }
.pp-plan-check.ok { color: var(--ok, #3d7a55); }
.pp-plan-check.bad { color: #b3402a; }
.pp-plan-actions { display: flex; align-items: center; gap: 8px; }
.pp-mini-btn { border: 1px solid var(--line-strong); background: var(--panel); border-radius: 7px; padding: 5px 10px; font-size: 12px; color: var(--sub); cursor: pointer; }
.pp-mini-btn:hover { border-color: var(--accent); color: var(--accent); }
.pp-confirm-btn { padding: 6px 16px; }
.pp-plan-note { padding: 8px 14px; font-size: 12px; color: #8a3d18; background: #fbe9d8; border-top: 1px solid #e6c3a0; }

/* —— Block4 客户版付款计划（对客只显金额+时点） —— */
.pp-cust-plan { margin-top: 12px; border: 1px solid var(--clay); border-radius: 10px; overflow: hidden; background: var(--panel); }
.pp-cust-plan-head { padding: 10px 14px; background: var(--red-soft, #fdf1ec); font-weight: 700; color: var(--clay); font-size: 13.5px; border-bottom: 1px solid var(--line); }
.pp-cust-row { display: flex; align-items: center; gap: 10px; padding: 9px 14px; border-top: 1px solid var(--line); font-size: 13.5px; color: var(--ink); }
.pp-cust-row:first-of-type { border-top: none; }
.pp-cust-seq { display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; border-radius: 50%; background: var(--accent-soft); color: var(--jade-dark, #9c4a20); font-size: 11.5px; font-weight: 700; flex: none; }
.pp-cust-when b { color: var(--clay); }
.pp-cust-plan-tip { margin: 0; padding: 7px 14px 10px; font-size: 11.5px; color: var(--quiet); }

/* —— Block5 派单角标 —— */
.pp-dispatch-badge { display: block; font-style: normal; font-size: 11px; font-weight: 600; margin-top: 3px; border-radius: 5px; padding: 2px 7px; width: fit-content; max-width: 100%; }
.pp-dispatch-badge.balance { color: #fff; background: var(--accent); }
.pp-dispatch-badge.prepay { color: #fff; background: #b3402a; }

@media (max-width: 720px) {
  .pp-plan-row { grid-template-columns: 24px 1fr 70px; row-gap: 4px; }
  .pp-plan-row > .pp-plan-amt { grid-column: 2 / 4; }
  .pp-plan-row .pp-plan-date, .pp-plan-row .pp-plan-when { grid-column: 1 / 4; }
  .pp-plan-row.pp-plan-hd { display: none; }
}

/* ===== ② 行程工位 v2 鲲鹏式两层：第一层骨架主列表 + 第二层单天编辑抽屉 ===== */

/* —— 全程文案折叠（标题/开场/路线总览/结尾提醒收进来，字段 DOM 常驻） —— */
.plan-global-fold { margin: 0 0 14px; border: 1px solid var(--line); border-radius: 12px; background: var(--panel); }
.plan-global-fold > summary { cursor: pointer; user-select: none; list-style: none; padding: 11px 14px; font-size: 13px; font-weight: 600; color: var(--sub); }
.plan-global-fold > summary::-webkit-details-marker { display: none; }
.plan-global-fold > summary::before { content: "▸ "; color: var(--quiet); }
.plan-global-fold[open] > summary::before { content: "▾ "; }
.plan-global-fold > summary:hover { color: var(--ink); }
.plan-global-fold-body { padding: 0 14px 14px; }

/* —— 第一层 · 骨架主列表：每天一张轻卡，只看骨架 ——
   主理人6-13：两列并排+与工具条同宽，少拉几屏 */
.plan-skel-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin-bottom: 18px; align-items: start; }
@media (max-width: 1480px) { .plan-skel-list { grid-template-columns: 1fr; } } /* 窗口不够宽时回退单列，避免卡片太挤 */
.plan-two-pane .plan-edit-col .inline-customer-editor { max-width: none; } /* v2 放开768限宽对齐工具条；v1 回滚态仍限宽 */
.skel-day { border: 1px solid var(--line); border-radius: 14px; background: var(--panel); padding: 12px 14px 10px; box-shadow: 0 2px 8px rgba(40, 37, 31, .04); }
.skel-day.is-dragging { opacity: .45; }
.skel-day.row-target { outline: 2px dashed var(--ink); outline-offset: 2px; background: #f6f3ed; }
.skel-day-head { display: flex; align-items: center; gap: 8px; }
.skel-drag { cursor: grab; color: var(--muted-soft); font-size: 15px; padding: 2px 4px; border-radius: 6px; user-select: none; }
.skel-drag:hover { color: var(--ink); background: #f3efe8; }
.skel-day-no { font-size: 15px; color: var(--ink); }
.skel-day-date { font-size: 12px; color: var(--quiet); }
.skel-city { margin-left: auto; font-size: 11.5px; color: var(--sub); background: #f3efe8; border: 1px solid var(--line); border-radius: 999px; padding: 2px 9px; max-width: 12em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.skel-day-title { margin: 7px 0 7px 26px; font-size: 13.5px; font-weight: 600; color: var(--ink); }
.skel-spots { list-style: none; margin: 0 0 4px 26px; padding: 0; display: flex; flex-direction: column; gap: 2px; }
.skel-spot { display: flex; align-items: center; gap: 7px; padding: 4px 6px; border-radius: 8px; font-size: 13px; color: var(--ink); }
.skel-spot:hover { background: #f6f3ed; }
.skel-spot.is-dragging-row { opacity: .4; }
.skel-spot-drag { cursor: grab; color: var(--muted-soft); font-size: 13px; user-select: none; }
.skel-spot:hover .skel-spot-drag { color: var(--ink); }
.skel-spot-name { flex: 1 1 auto; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.skel-spot-period { font-style: normal; font-size: 10.5px; color: var(--quiet); background: #f3f1ec; border-radius: 999px; padding: 1px 7px; flex: 0 0 auto; }
.skel-spot-more { border: 0; background: none; color: var(--quiet); font-size: 15px; line-height: 1; padding: 2px 6px; border-radius: 6px; cursor: pointer; flex: 0 0 auto; }
.skel-spot-more:hover { background: #ece7de; color: var(--ink); }
.skel-spot-empty { font-size: 12px; color: var(--muted-soft); padding: 4px 6px; }
.skel-day-foot { display: flex; gap: 8px; margin: 8px 0 0 26px; padding-top: 8px; border-top: 1px dashed var(--line); }
.skel-act { border: 1px solid var(--line-strong); background: var(--panel); color: var(--ink); border-radius: 8px; padding: 5px 14px; font-size: 12.5px; cursor: pointer; }
.skel-act:hover { background: #f3efe8; }
.skel-act-edit { background: var(--ink); border-color: var(--ink); color: #fff; font-weight: 600; }
.skel-act-edit:hover { background: #3c382f; }

/* 行级拖拽指示线（天级沿用已有 .day-drop-line） */
.row-drop-line { height: 2px; background: var(--ink); border-radius: 2px; margin: 1px 6px; }

/* —— ⋯ 菜单 / 更多菜单：全局浮层 —— */
.skel-menu { position: fixed; z-index: 96; width: 220px; max-height: 320px; overflow-y: auto; background: var(--panel); border: 1px solid var(--line-strong); border-radius: 12px; box-shadow: 0 14px 38px rgba(37, 31, 27, .2); padding: 6px; }
.skel-menu button { display: block; width: 100%; text-align: left; border: 0; background: none; padding: 7px 10px; font-size: 12.5px; color: var(--ink); border-radius: 8px; cursor: pointer; }
.skel-menu button:hover { background: #f3efe8; }
.skel-menu .skel-menu-del { color: #9d3d29; font-weight: 600; }
.skel-menu .skel-menu-del.armed { background: #9d3d29; color: #fff; }
.skel-menu-group { border-top: 1px dashed var(--line); margin-top: 4px; padding-top: 4px; }
.skel-menu-group b { display: block; font-size: 11px; color: var(--quiet); padding: 2px 10px; font-weight: 600; }
.skel-menu-group button { display: inline-block; width: auto; padding: 5px 12px; }

/* —— 第二层 · 单天编辑抽屉：原日卡 display:none 常驻，点「编辑」右侧滑入 —— */
.plan-drawer-days .plan-day-drawer { display: none; }
/* C4 修复：抽屉背景必须不透明且压过任何模板皮肤。
   此前文艺版 V6 下 `.inline-customer-editor.tpl-v6 .wys-day{background:transparent}`(特异性更高)把抽屉(也是 .wys-day)染透明，
   导致编辑层透明、和底部预览串在一起没法填(见 Lucia 截图)。这里给打开态抽屉的背景上 !important，并显式 opaque 兜底色。 */
.plan-day-drawer.drawer-open { display: block; position: fixed; top: 0; right: 0; bottom: 0; z-index: 95; width: min(580px, 100vw); overflow-y: auto; background: #faf7f1 !important; border-left: 1px solid var(--line-strong); box-shadow: -18px 0 48px rgba(37, 31, 27, .28); border-radius: 0; animation: drawerIn .18s ease; margin: 0; }
/* 抽屉内容铺底，确保模板把内层块设成透明时也不会露出底下页面 */
.inline-customer-editor.tpl-v6 .plan-day-drawer.drawer-open,
.inline-customer-editor.tpl-v9 .plan-day-drawer.drawer-open,
.inline-customer-editor.tpl-standard .plan-day-drawer.drawer-open { background: #faf7f1 !important; }
@keyframes drawerIn { from { transform: translateX(40px); opacity: 0; } to { transform: none; opacity: 1; } }
.plan-drawer-mask { display: none; }
.plan-drawer-mask.on { display: block; position: fixed; inset: 0; z-index: 94; background: rgba(20, 16, 12, .48); }
body.plan-drawer-lock { overflow: hidden; }
.drawer-head { display: none; }
.plan-day-drawer.drawer-open .drawer-head { display: flex; align-items: center; gap: 10px; position: sticky; top: 0; z-index: 5; background: rgba(250, 248, 244, .97); backdrop-filter: blur(4px); border-bottom: 1px solid var(--line); padding: 12px 16px; }
.drawer-head-title { font-size: 15px; color: var(--ink); }
.drawer-head-tip { flex: 1 1 auto; font-size: 11.5px; color: var(--quiet); }
.drawer-close { border: 1px solid var(--line-strong); background: var(--panel); border-radius: 8px; font-size: 14px; line-height: 1; padding: 6px 10px; cursor: pointer; color: var(--ink); }
.drawer-close:hover { background: #f3efe8; }
.drawer-foot { display: none; }
.plan-day-drawer.drawer-open .drawer-foot { display: flex; gap: 10px; justify-content: flex-end; position: sticky; bottom: 0; z-index: 5; background: rgba(250, 248, 244, .97); backdrop-filter: blur(4px); border-top: 1px solid var(--line); padding: 10px 16px; }
.drawer-close-btn { border: 1px solid var(--line-strong); background: var(--panel); color: var(--sub); border-radius: 9px; padding: 8px 14px; font-size: 13px; cursor: pointer; }
.drawer-close-btn:hover { color: var(--ink); background: #f3efe8; }
.drawer-save { padding: 8px 18px; }

/* —— 新增景点搜索弹层 —— */
.spot-add-modal { width: min(520px, 92vw); max-height: min(640px, 86vh); display: flex; flex-direction: column; }
.spot-add-search { margin: 10px 14px 8px; padding: 9px 12px; border: 1px solid var(--line-strong); border-radius: 10px; font-size: 14px; }
.spot-add-list { flex: 1 1 auto; overflow-y: auto; padding: 0 10px 8px; display: flex; flex-direction: column; gap: 4px; }
.spot-add-item { display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; border: 1px solid var(--line); background: var(--panel); border-radius: 10px; padding: 8px 12px; cursor: pointer; }
.spot-add-item:hover { border-color: var(--ink); background: #f6f3ed; }
.spot-add-name { font-size: 13.5px; font-weight: 600; color: var(--ink); flex: 0 0 auto; }
.spot-add-tags { flex: 1 1 auto; min-width: 0; display: flex; gap: 4px; flex-wrap: wrap; }
.spot-add-tags i { font-style: normal; font-size: 10.5px; color: var(--sub); background: #f3f1ec; border-radius: 999px; padding: 1px 7px; }
.spot-add-go { flex: 0 0 auto; font-size: 12px; color: var(--ink); font-weight: 600; }
.spot-add-none { font-size: 12.5px; color: var(--quiet); padding: 14px; text-align: center; }
.spot-add-hint { font-size: 11px; color: var(--muted-soft); margin: 6px 14px 12px; }

/* —— 右侧手机预览：标准 iPhone 比例细边精致壳（C2，宽高/比例统一见上方 aspect-ratio 规则，此处不再覆盖宽度） —— */

/* 窄屏：抽屉全屏 */
@media (max-width: 640px) {
  .plan-day-drawer.drawer-open { width: 100vw; border-left: 0; }
}

/* ============ 资源卡展示 + 供应商管理 ============ */
/* 资源名单元格：可点资源名 + 链接直达图标 */
.res-name-cell {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 4px;
}
.res-name-link {
  cursor: pointer;
  color: var(--ink);
  font-weight: 600;
  text-decoration: none;
  border-bottom: 1px dashed var(--line-strong);
}
.res-name-link:hover { color: var(--accent); border-bottom-color: var(--accent); }
.res-direct {
  text-decoration: none;
  font-size: 13px;
  line-height: 1;
}
.res-direct:hover { filter: brightness(1.1); }

/* ---------- 景点门票采集板块 ---------- */
.tk-panel .panel-head { display: flex; align-items: center; justify-content: space-between; }
.tk-panel .panel-head h2 { display: flex; align-items: center; gap: 8px; }
.tk-first {
  font-size: 11px; font-weight: 700;
  background: var(--accent); color: #fff;
  padding: 1px 8px; border-radius: 999px;
}
.tk-head-right { display: flex; align-items: center; gap: 12px; }
.tk-red { color: #c0392b; font-weight: 700; }

.tk-table {
  display: grid; gap: 0;
  border: 1px solid var(--line); border-radius: 8px; overflow: hidden;
}
.tk-row {
  display: grid;
  grid-template-columns: minmax(0, 1.35fr) 86px 116px minmax(0, 0.9fr) minmax(0, 1.05fr) minmax(0, 1.05fr) 104px;
  gap: 10px;
  padding: 9px 12px;
  border-bottom: 1px solid var(--line);
  font-size: 13px;
  align-items: center;
}
.tk-row:last-child { border-bottom: none; }
.tk-head {
  background: var(--accent-faint);
  font-weight: 600; color: var(--quiet); font-size: 12px;
}
.tk-group-head {
  display: flex; justify-content: space-between; align-items: center;
  background: #faf7f1;
  padding: 6px 12px;
  border-bottom: 1px solid var(--line);
  font-size: 12px; color: var(--quiet);
}
.tk-group-head b { color: var(--ink); font-size: 13px; }
.tk-row.is-done { background: #f6fbf7; }
.tk-row.is-todo { background: #fffdf6; }
.tk-name { display: flex; align-items: center; gap: 6px; }
.tk-doc-dot { font-size: 10px; }
.tk-state { font-size: 12px; font-weight: 600; white-space: nowrap; }
.tk-state.done { color: #2f7d4f; }
.tk-state.todo { color: #b7791f; }
.tk-have { font-weight: 600; color: var(--ink); }
.tk-have-link { color: var(--accent); text-decoration: none; font-weight: 600; }
.tk-have-link:hover { text-decoration: underline; }
/* 成人价下方补一行其它人群价（学生/儿童/老人/特殊优待）：已录显淡墨，未录显「照携程补」提示 */
.tk-price { display: flex; flex-direction: column; gap: 1px; }
.tk-tier-line { font-size: 11px; color: var(--muted, #8a8f99); line-height: 1.3; }
.tk-tier-none { color: #b7791f; }
/* 编辑门票·各档定义：固定标在档名旁的括号（不是输入框），淡墨小字 */
.tier-def { color: var(--muted, #8a8f99); font-weight: 400; font-size: 11.5px; margin-left: 3px; }
/* 优待价适用人群：一行简单文字说明（非控件） */
.tier-special-note { margin: 6px 0 0; font-size: 12px; color: var(--quiet); line-height: 1.5; }
/* 操作列：一键抽取 + 编辑门票 两个按钮纵向堆叠 */
.tk-ops { display: flex; flex-direction: column; gap: 4px; align-items: flex-start; }
/* 采集面板(园内交通/体验):一行放完(Lucia 2026-07-03:一行放得下的信息为什么放那么多行)——四列布局+操作横排 */
.inv-collect-panel .tk-row { grid-template-columns: minmax(0, 1.5fr) 170px 170px minmax(0, 1.4fr); padding: 7px 12px; }
.inv-collect-panel .tk-ops { flex-direction: row; flex-wrap: wrap; gap: 4px 12px; align-items: center; }
.inv-collect-panel .btn-extract { padding: 2px 8px; }
/* 体验/园内交通采集:5 列(关联景点在最前)——关联景点 / 名称 / 价格 / 购票页 / 操作 */
.paste-collect .tk-row { grid-template-columns: minmax(0, 0.85fr) minmax(0, 1.5fr) 128px 150px minmax(0, 1.05fr); }
.tk-relspot { min-width: 0; overflow-wrap: anywhere; font-size: 12.5px; }
.tk-rel-has { color: #2f6d5b; font-weight: 600; }
.btn-extract {
  border: 1px solid var(--accent, #b8743a); background: var(--accent, #b8743a); color: #fff;
  border-radius: 6px; padding: 3px 9px; font-size: 12px; font-weight: 600; cursor: pointer; white-space: nowrap;
}
.btn-extract:hover:not([disabled]) { filter: brightness(1.06); }
.btn-extract[disabled] { background: #e7e3dc; color: #aaa; border-color: #e7e3dc; cursor: not-allowed; }
/* 关键项缺失红标（她反复强调：成人票价、购票链接必须标红） */
.tk-need { color: #c0392b; font-weight: 600; font-size: 12.5px; white-space: nowrap; }
.tk-docwrap { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.tk-doc.on { color: var(--accent); text-decoration: none; font-weight: 600; white-space: nowrap; }
.tk-doc.on:hover { text-decoration: underline; }
.tk-doc-add { color: var(--accent); }
/* 购票页粘贴入口（与景点信息并列的第二个入口） */
.tk-buydoc { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.tk-buy-doc.on { color: #7c5a12; background: #fbf3df; border-radius: 6px; padding: 2px 7px; text-decoration: none; font-weight: 600; white-space: nowrap; }
.tk-buy-doc.on:hover { background: #f6e9cf; }
.tk-buy-doc-add { color: #9a7320; white-space: nowrap; }
@media (max-width: 760px) {
  .tk-row { grid-template-columns: 1fr; gap: 4px; }
  .tk-head { display: none; }
}

/* 购票页抽取结果回显（弹框内 + 资源详情页复用） */
.tx-result { font-size: 13px; }
.tx-block { margin: 8px 0; padding: 8px 10px; border: 1px solid var(--line); border-radius: 8px; background: #fafafa; }
.tx-block.tx-warn { background: #fbf3df; border-color: #ecd9ad; }
.tx-h { font-weight: 600; color: var(--ink); margin-bottom: 6px; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.tx-note { font-weight: 400; font-size: 12px; color: #9a7320; }
.tx-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; padding: 3px 0; border-top: 1px dashed #eee; }
.tx-row:first-of-type { border-top: none; }
.tx-row.tx-side { opacity: 0.92; }
.tx-nm { flex: 1; min-width: 140px; color: var(--ink); }
.tx-tier { font-size: 11px; background: #eef2f7; color: #3b5169; border-radius: 4px; padding: 1px 6px; white-space: nowrap; }
.tx-price { font-weight: 700; color: #2e7d32; white-space: nowrap; }
.tx-from { font-weight: 600; color: #c0392b; white-space: nowrap; font-size: 12.5px; }
.tx-sales { font-size: 11.5px; color: var(--quiet); white-space: nowrap; }
.tx-empty, .tx-block .tx-empty { color: var(--quiet); font-size: 12.5px; padding: 4px 0; }

/* ---------- 酒店采集板块（复用 .tk-panel；城市级 3 槽 + 存量酒店）---------- */
.ht-cities { display: flex; flex-direction: column; gap: 14px; }
.ht-city {
  border: 1px solid var(--line); border-radius: 8px; overflow: hidden;
}
/* 城市级 3 个草稿文档槽 */
.ht-slots {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 0;
  border-bottom: 1px solid var(--line);
}
.ht-slot {
  display: flex; flex-direction: column; gap: 6px;
  padding: 10px 12px;
  border-right: 1px solid var(--line);
  font-size: 13px;
}
.ht-slot:last-child { border-right: none; }
.ht-slot.is-done { background: #f6fbf7; }
.ht-slot.is-todo { background: #fffdf6; }
.ht-slot-name { font-weight: 600; color: var(--ink); display: flex; align-items: center; gap: 4px; }
.ht-slot-doc { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ht-doc.on { color: var(--accent); text-decoration: none; font-weight: 600; white-space: nowrap; }
.ht-doc.on:hover { text-decoration: underline; }
.ht-doc-add { color: var(--accent); }
/* 存量酒店行 */
.ht-hotels { display: flex; flex-direction: column; }
.ht-hotel-row {
  display: grid;
  /* 7 列(此前只 6 列→操作钮换行到左边):勾选 / 酒店 / 草稿 / 市场价 / 协议价 / 维护人 / 操作 */
  grid-template-columns: 26px minmax(0, 1.7fr) 96px minmax(0, 0.8fr) minmax(0, 0.7fr) 78px minmax(0, 1.15fr);
  gap: 10px;
  padding: 8px 12px;
  border-bottom: 1px solid var(--line);
  font-size: 13px;
  align-items: center;
}
.ht-selcell { justify-self: center; }
.ht-selcell input[type="checkbox"] { width: 15px; height: 15px; accent-color: var(--accent); margin: 0; cursor: pointer; }
.ht-ops { display: flex; flex-wrap: wrap; gap: 4px 10px; justify-content: flex-end; align-items: center; }
.ht-ops .link-btn { white-space: nowrap; }
.ht-hotel-row:last-child { border-bottom: none; }
.ht-hotel-head {
  background: var(--accent-faint);
  font-weight: 600; color: var(--quiet); font-size: 12px;
}
.ht-hotel-row.is-done { background: #f6fbf7; }
.ht-hotel-row.is-todo { background: #fffdf6; }
/* A：采集状态行底色（已填绿 / 待填黄） */
.ht-hotel-row.is-filled { background: #f6fbf7; }
/* 流程态行底色：待建文档(红)/填飞书中(黄)/已提交清洗(蓝)/已清洗入库(绿)——对得上小伙伴动作 */
.ht-hotel-row.is-nodoc { background: #fdf6f5; }
.ht-hotel-row.is-filling { background: #fffdf6; }
.ht-hotel-row.is-submitted { background: #f4f8fd; }
.ht-hotel-row.is-stocked { background: #f6fbf7; }
.ht-range { color: var(--quiet); }
/* A：采集状态 badge */
.ht-state { font-size: 12px; font-weight: 600; white-space: nowrap; }
.ht-state.filled { color: #2f7d4f; }
.ht-state.todo { color: #b7791f; }
.ht-state.excluded { color: var(--quiet); }
/* 流程态单一徽章（替代旧「待填/已填」+ 独立清洗态混排）：醒目 pill，四态四色 */
.ht-flow { font-size: 12px; font-weight: 700; white-space: nowrap; padding: 1px 9px; border-radius: 999px; line-height: 1.7; }
.ht-flow.nodoc { color: #b4413a; background: #fbe6e3; }
.ht-flow.filling { color: #9a6512; background: #fbf0d6; }
.ht-flow.submitted { color: #2563a8; background: #e1edfb; }
.ht-flow.stocked { color: #2f7d4f; background: #dcf0e2; }
.ht-flow.excluded { color: var(--quiet); background: #ececea; }
/* C：不收录行—灰显，排到城市底部由 JS 排序保证 */
.ht-hotel-row.is-excluded { background: #f5f5f4; opacity: 0.62; }
.ht-hotel-row.is-excluded .res-name-link { color: var(--quiet); text-decoration: line-through; }
/* 📚 弹药库地基：资源行评分/钻级角标 + 清洗态 badge（名字旁，多 badge 自动换行不挤） */
.tk-name { flex-wrap: wrap; }
.ht-rating { font-size: 11.5px; font-weight: 700; color: #b7791f; white-space: nowrap; }
.ht-zuan { font-size: 11.5px; font-weight: 700; color: #b08a3e; white-space: nowrap; }
.ht-cleanse { font-size: 11.5px; font-weight: 600; white-space: nowrap; }
.ht-cleanse.todo { color: var(--quiet); }
.ht-cleanse.req { color: #b7791f; }
.ht-cleanse.done { color: #2f7d4f; }
.ht-cleanse-done { font-size: 11.5px; color: #2f7d4f; font-weight: 600; white-space: nowrap; }
/* 📚 弹药库名片（酒店二级详情·房型三价上方）：L1 指标四格 + L3 文档按钮 + L2 卖点 */
.hf-ammo { border: 1px solid #e6dcc4; background: #fcfaf3; border-radius: 12px; padding: 12px 14px; margin: 0 0 14px; }
.hf-ammo-head { font-size: 13.5px; font-weight: 700; color: var(--ink); display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-bottom: 10px; }
.hf-ammo-head .hf-ammo-tip { font-size: 11.5px; font-weight: 400; color: var(--quiet); }
.hf-ammo-l1 { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 8px; margin-bottom: 10px; }
.hf-ammo-cell { background: #fff; border: 1px solid var(--line); border-radius: 9px; padding: 7px 10px; }
.hf-ammo-k { display: block; font-size: 11px; color: var(--quiet); margin-bottom: 2px; }
.hf-ammo-v { display: block; font-size: 13.5px; font-weight: 700; color: var(--ink); }
.hf-ammo-v.todo { font-weight: 500; color: var(--quiet); }
.hf-ammo-doc-row { margin-bottom: 10px; }
.hf-ammo-doc.on { display: inline-block; font-size: 13px; font-weight: 600; color: #fff; background: #2f7d4f; border-radius: 8px; padding: 6px 14px; text-decoration: none; }
.hf-ammo-doc.on:hover { background: #276a43; }
.hf-ammo-doc.off { font-size: 12px; color: var(--quiet); }
.hf-ammo-l2 { border-top: 1px dashed #e6dcc4; padding-top: 9px; }
.hf-ammo-l2.empty { font-size: 12px; color: var(--quiet); }
.hf-ammo-l2h { font-size: 12.5px; font-weight: 700; color: var(--ink); margin-bottom: 6px; }
.hf-ammo-l2h .hf-ammo-sub { font-size: 11px; font-weight: 400; color: var(--quiet); margin-left: 6px; }
.hf-ammo-pt { display: flex; align-items: center; gap: 8px; background: #fff; border: 1px solid var(--line); border-radius: 8px; padding: 6px 10px; margin-bottom: 6px; cursor: pointer; transition: border-color .15s, background .15s; }
.hf-ammo-pt:hover { border-color: #c9b88a; background: #fffdf6; }
.hf-ammo-pt-t { flex: 1; font-size: 13px; color: var(--ink); line-height: 1.5; }
.hf-ammo-pt-cp { font-size: 11px; color: var(--quiet); white-space: nowrap; }
.hf-ammo-pt:hover .hf-ammo-pt-cp { color: #b7791f; }
/* 弹药库名片 v2·7 维分块（关键词/定位/避坑/区位/房型/设施/品质） */
.hf-ammo-dim { border-top: 1px dashed #e6dcc4; padding-top: 9px; margin-top: 9px; }
.hf-ammo-dim:first-of-type { border-top: none; padding-top: 0; margin-top: 0; }
.hf-ammo-dim-h { font-size: 12.5px; font-weight: 700; color: var(--ink); margin-bottom: 6px; }
.hf-ammo-dim-txt { font-size: 13px; color: var(--ink); line-height: 1.6; }
.hf-ammo-dim-empty { font-size: 12px; color: var(--quiet); font-style: normal; line-height: 1.5; }
/* 核心关键词 chip */
.hf-ammo-kw { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 8px; }
.hf-ammo-kw-t { font-size: 12px; font-weight: 600; color: #8a6d1f; background: #fbf3da; border: 1px solid #ecdca6; border-radius: 999px; padding: 3px 10px; }
/* 一句话定位·分层 */
.hf-ammo-pos { display: flex; flex-direction: column; gap: 4px; }
.hf-ammo-pos-row { display: flex; gap: 8px; align-items: baseline; font-size: 13px; line-height: 1.55; }
.hf-ammo-pos-k { flex: 0 0 auto; font-weight: 700; color: var(--sub); min-width: 56px; }
.hf-ammo-pos-v { flex: 1; color: var(--ink); }
/* 避坑提醒（暖橙警示，最强信任货币·前置） */
.hf-ammo-avoid { border-top: none; background: #fef6ec; border: 1px solid #f3d9b5; border-radius: 9px; padding: 9px 12px; margin-top: 9px; }
.hf-ammo-avoid .hf-ammo-dim-h { color: #b5701a; }
.hf-ammo-avoid-list { margin: 0; padding-left: 18px; }
.hf-ammo-avoid-list li { font-size: 12.5px; color: #6b4a1c; line-height: 1.6; margin-bottom: 3px; }
.hf-ammo-avoid-list li:last-child { margin-bottom: 0; }
/* 设施特色体验层 */
.hf-ammo-fac-list { margin: 0; padding-left: 18px; }
.hf-ammo-fac-list li { font-size: 12.5px; color: var(--ink); line-height: 1.6; margin-bottom: 3px; }
.hf-ammo-fac-list li:last-child { margin-bottom: 0; }
/* L1 cell 子标签（如 客房数·全店房间） */
.hf-ammo-k-sub { font-style: normal; font-weight: 400; color: var(--quiet); margin-left: 4px; font-size: 10px; }
/* 📚 弹药库回填编辑区（一级页·可先手填 L1/L3） */
.hf-ammo-edit { border: 1px dashed #d8cba6; border-radius: 10px; padding: 10px 12px; margin: 10px 0; background: #fdfbf4; }
.hf-ammo-edit-h { font-size: 13px; font-weight: 700; color: var(--ink); margin-bottom: 8px; }
/* B-展示：酒店采集图片画廊（详情弹窗内） */
/* 景区优势：紧邻景区醒目条（旧样式，保留兜底） */
.ht-adv { background: #eef7f0; border: 1px solid #cfe7d6; border-radius: 8px; padding: 7px 11px; margin: 0 0 8px; font-size: 12.5px; color: #2f7d4f; font-weight: 600; line-height: 1.5; }

/* REQ-D17 位置/景区优势：清爽层级——重点醒目、周边弱化折叠，不再一坨粗体 */
.ht-scenic { background: #f3f9f4; border: 1px solid #d8eadd; border-radius: 9px; padding: 9px 12px; margin: 0 0 10px; }
.ht-scenic-head { font-size: 12px; font-weight: 700; color: #2f7d4f; margin-bottom: 5px; }
.ht-scenic-lead { font-size: 13px; font-weight: 600; color: var(--ink); line-height: 1.5; margin-bottom: 5px; }
.ht-scenic-top { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 4px; }
.ht-scenic-spot { font-size: 12.5px; font-weight: 600; color: #2f7d4f; background: #e2f3e6; border-radius: 6px; padding: 3px 9px; }
.ht-scenic-tail { font-size: 12px; color: var(--sub); line-height: 1.5; margin-top: 2px; }
.ht-scenic-more { margin-top: 5px; }
.ht-scenic-more summary { cursor: pointer; font-size: 11.5px; color: var(--quiet); list-style: none; user-select: none; }
.ht-scenic-more summary::-webkit-details-marker { display: none; }
.ht-scenic-more summary::before { content: "▸ "; }
.ht-scenic-more[open] summary::before { content: "▾ "; }
.ht-scenic-more summary:hover { color: var(--accent); }
.ht-scenic-rest { font-size: 11.5px; color: var(--quiet); line-height: 1.7; margin-top: 5px; }

/* REQ-D17 入住权益（酒店级统一展示一次） */
.ht-perks { background: var(--accent-faint); border: 1px solid var(--line); border-radius: 9px; padding: 9px 12px; margin: 0 0 10px; }
.ht-perks-head { font-size: 12.5px; font-weight: 700; color: var(--accent); margin-bottom: 6px; }
.ht-perks-sub { font-size: 11px; font-weight: 500; color: var(--quiet); }
.ht-perks-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.ht-perk-chip { font-size: 12px; color: var(--clay); background: var(--panel); border: 1px solid var(--line); border-radius: 999px; padding: 3px 11px; }

/* REQ-D17 酒店特色（含待补占位） */
.ht-feat { border: 1px dashed var(--line); border-radius: 9px; padding: 9px 12px; margin: 0 0 10px; }
.ht-feat-head { font-size: 12.5px; font-weight: 700; color: var(--ink); margin-bottom: 6px; }
.ht-feat-sub { font-size: 11px; font-weight: 600; color: var(--amber); background: var(--gold-soft); border-radius: 5px; padding: 1px 7px; }
.ht-feat-chip { font-size: 12px; color: #4b3fa6; background: #eef0fc; border-radius: 999px; padding: 3px 11px; }
.ht-feat-todo { background: #fcfbf7; }
.ht-feat-placeholder { font-size: 11.5px; color: var(--quiet); line-height: 1.5; }

/* REQ-D17 差评摘要：弱化折叠，不堆在文字行里 */
.ht-flaw { margin: 0 0 10px; border: 1px solid #f0e0c8; border-radius: 9px; background: #fdf8ef; }
.ht-flaw summary { cursor: pointer; font-size: 12px; font-weight: 600; color: var(--amber); padding: 8px 12px; list-style: none; user-select: none; }
.ht-flaw summary::-webkit-details-marker { display: none; }
.ht-flaw-body { font-size: 12px; color: var(--sub); line-height: 1.6; padding: 0 12px 10px; }

/* REQ-D17 房型多图：缩略图组（点开各图看大图） */
.ht-room-thumb-multi { display: flex; align-items: center; gap: 3px; flex-wrap: nowrap; overflow: hidden; }
.ht-room-thumb-mini { display: block; width: 30px; height: 30px; border-radius: 5px; overflow: hidden; background: #f1f0ec; flex: 0 0 auto; }
.ht-room-thumb-mini img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ht-room-thumb-count { font-size: 9.5px; color: var(--quiet); white-space: nowrap; }
/* 房型表：一房型一行——缩略图 | 信息(名称/床型/含早) | 价 */
.ht-rooms { display: flex; flex-direction: column; border: 1px solid var(--line); border-radius: 8px; overflow: hidden; }
.ht-room-row { display: grid; grid-template-columns: 56px minmax(0, 1fr) 82px; gap: 10px; padding: 8px 10px; border-top: 1px solid var(--line); font-size: 12.5px; align-items: center; }
.ht-room-row:first-child { border-top: none; }
.ht-room-head { background: var(--accent-faint); font-weight: 600; color: var(--quiet); font-size: 11.5px; align-items: baseline; }
.ht-room-thumb { display: block; width: 56px; height: 44px; border-radius: 6px; overflow: hidden; background: #f1f0ec; }
.ht-room-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ht-room-thumb-none { display: flex; align-items: center; justify-content: center; font-size: 10px; color: var(--quiet); }
.ht-room-info { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.ht-room-name { font-weight: 600; color: var(--ink); }
.ht-room-bed { color: var(--jade-dark, #2f7d4f); font-weight: 600; font-size: 12px; }
.ht-room-sub { color: var(--sub); font-size: 11.5px; line-height: 1.45; }
.ht-room-extra { color: var(--quiet); font-size: 11px; line-height: 1.4; }
.ht-room-price { color: var(--accent); font-weight: 700; text-align: right; white-space: nowrap; }
/* 房型功能标签：叠加在房型名旁的小 chip（hard 实色 / soft 描边虚线浅色），绝不替换原房型名 */
.rt-tags { display: inline-flex; flex-wrap: wrap; gap: 4px; margin-left: 6px; vertical-align: middle; }
.rt-tag {
  display: inline-flex; align-items: center;
  font-size: 10.5px; line-height: 1; font-weight: 600;
  padding: 3px 7px; border-radius: 999px; white-space: nowrap;
  border: 1px solid transparent;
}
.rt-tag-warm  { background: #fbe9d8; color: #b4561a; }                 /* 家庭房·亲子 = 暖色 */
.rt-tag-blue  { background: #e6e6fb; color: #4b3fa6; }                 /* loft·复式 / 连通房 / 套房 = 蓝紫 */
.rt-tag-gray  { background: #ebeae6; color: #5f5b53; }                 /* 双床房 = 灰 */
.rt-tag-green { background: #e2f3e6; color: #2f7d4f; }                 /* 可加床 = 绿 */
.rt-tag-gold  { background: #f6ecd6; color: #8a6d1f; }                 /* 炕房·山西特色 = 金 */
.rt-tag.soft {                                                        /* 「床够大·可住一家」软提示 = 描边虚线浅色 */
  background: transparent; color: var(--quiet);
  border: 1px dashed var(--line); font-weight: 500;
}
@media (max-width: 760px) { .ht-room-row { grid-template-columns: 48px minmax(0,1fr) 70px; } }
.ht-gallery {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(108px, 1fr));
  gap: 8px;
}
.ht-gallery-item {
  display: block; aspect-ratio: 4 / 3;
  border: 1px solid var(--line); border-radius: 8px; overflow: hidden;
  background: #faf7f1;
}
.ht-gallery-item img {
  width: 100%; height: 100%; object-fit: cover; display: block;
  transition: transform 0.18s ease;
}
.ht-gallery-item:hover img { transform: scale(1.05); }
@media (max-width: 760px) {
  .ht-slots { grid-template-columns: 1fr; }
  .ht-slot { border-right: none; border-bottom: 1px solid var(--line); }
  .ht-hotel-row { grid-template-columns: 1fr; gap: 4px; }
  .ht-hotel-head { display: none; }
  .ht-gallery { grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); }
}

/* ===== REQ-D13 携程式酒店浏览面板 ===== 套山西琉璃色（陶土橙主彩+暖米白），不引入 claude 米色 */
.hb-panel .hb-kicker { font-size: 11.5px; font-weight: 600; color: var(--accent); background: var(--accent-faint); border-radius: 999px; padding: 1px 9px; margin-left: 8px; vertical-align: middle; }

/* 顶部筛选条 */
.hb-filters { display: flex; flex-direction: column; gap: 8px; padding: 4px 0 12px; border-bottom: 1px solid var(--line); margin-bottom: 14px; }
.hb-frow { display: flex; align-items: flex-start; gap: 10px; }
.hb-flabel { flex: 0 0 40px; font-size: 12.5px; font-weight: 700; color: var(--sub); padding-top: 5px; }
.hb-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.hb-filters .chip { font-size: 12.5px; padding: 3px 12px; min-height: 28px; }
.hb-sortrow { align-items: center; gap: 8px; }
.hb-sort { height: 32px; border: 1px solid var(--line-strong); border-radius: 7px; background: var(--panel); color: var(--ink); font-size: 12.5px; padding: 0 10px; cursor: pointer; }
/* P1-1 进阶筛选「筛选 ▾」开关 + 抽屉 */
.hb-filter-toggle { display: inline-flex; align-items: center; gap: 6px; height: 32px; border: 1px solid var(--line-strong); background: var(--panel); color: var(--sub); border-radius: 7px; font-size: 12.5px; font-weight: 600; padding: 0 12px; cursor: pointer; }
.hb-filter-toggle:hover { border-color: var(--accent); color: var(--accent); }
.hb-filter-toggle.on { border-color: var(--accent); color: var(--accent); background: var(--accent-faint); }
.hb-filter-badge { font-size: 11px; font-weight: 700; color: #fff; background: var(--accent); border-radius: 999px; padding: 1px 7px; line-height: 1.5; }
.hb-drawer { display: none; flex-direction: column; gap: 8px; margin-top: 4px; padding: 10px 0 2px; border-top: 1px dashed var(--line); }
.hb-drawer.open { display: flex; }
.hb-clear { height: 30px; border: 1px solid var(--line-strong); background: var(--panel); color: var(--sub); border-radius: 7px; font-size: 12px; padding: 0 12px; cursor: pointer; }
.hb-clear:hover { border-color: var(--accent); color: var(--accent); }
/* P1-3 卡片早餐徽标（与钻级/区位并列） */
.hb-bf { font-size: 11.5px; font-weight: 700; color: #2f7d4f; background: #e2f3e6; border-radius: 6px; padding: 1px 8px; white-space: nowrap; }
.hb-resultbar { font-size: 12.5px; color: var(--sub); margin: 0 0 12px; }
.hb-resultbar b { color: var(--accent); font-size: 14px; }

/* 卡片网格 */
.hb-cards { display: grid; grid-template-columns: 1fr; gap: 14px; }
.hb-card { display: flex; gap: 0; border: 1px solid var(--line); border-radius: 12px; overflow: hidden; background: var(--panel); box-shadow: var(--shadow); }
.hb-card.is-todo { opacity: 0.78; }
.hb-thumb { flex: 0 0 132px; align-self: stretch; min-height: 132px; background: var(--mint); display: block; overflow: hidden; }
.hb-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.hb-thumb-none { display: flex; align-items: center; justify-content: center; font-size: 12px; color: var(--quiet); }
.hb-body { flex: 1 1 auto; min-width: 0; padding: 12px 14px 14px; display: flex; flex-direction: column; gap: 8px; }

/* 卡片头 */
.hb-cardhead { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.hb-name { font-size: 16px; font-weight: 800; color: var(--ink); cursor: pointer; text-decoration: none; }
.hb-name:hover { color: var(--accent); }
.hb-lodge { font-size: 11.5px; font-weight: 700; border-radius: 999px; padding: 1px 9px; white-space: nowrap; }
.hb-lodge.bnb { background: #f0ead9; color: #8a6d1f; }
.hb-lodge.hotel { background: #e6eef6; color: var(--blue); }
.hb-zuan { font-size: 11.5px; font-weight: 700; color: var(--amber); background: var(--gold-soft); border-radius: 999px; padding: 1px 9px; white-space: nowrap; }
.hb-direct { margin-left: auto; font-size: 15px; text-decoration: none; }

/* ── 钻圈级徽标（仿携程）：钻=💎钻石 / 圈=橙色实心圆点 ●●●●●。统一组件 hotelRankBadge ── */
/*   下列 .hb-zuan/.lsw-zuan/.ht-zuan/.hdv3-rank 现在只是包裹 .rank-badge 的语义钩子，
     徽标自身样式都在 .rank-badge 上，包裹层去掉自带底色/内边距避免双层胶囊。 */
.hb-zuan:has(.rank-badge),
.lsw-zuan:has(.rank-badge),
.ht-zuan:has(.rank-badge),
.hdv3-rank:has(.rank-badge) { background: none !important; padding: 0 !important; }
.rank-badge { display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; vertical-align: middle; line-height: 1; }
.rank-badge .rank-gems { font-size: 11px; letter-spacing: -1px; }
.rank-badge .rank-num { font-size: 11.5px; font-weight: 700; }
/* 钻级=金色文字 */
.rank-diamond .rank-num { color: var(--amber); }
/* 圈级=橙色实心圆点 + 橙色文字（携程民宿圈级 #f5a623） */
.rank-circle .rank-num { color: #d9821a; }
.rank-circle .rank-dots { display: inline-flex; align-items: center; gap: 2px; }
.rank-circle .rank-dot { width: 7px; height: 7px; border-radius: 50%; background: #f5a623; display: inline-block; }

/* 地理一句话 + 价格 */
.hb-geo { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.hb-band { font-size: 11.5px; font-weight: 700; border-radius: 6px; padding: 1px 8px; white-space: nowrap; }
.hb-band.near { background: #e2f3e6; color: #2f7d4f; }
.hb-band.town { background: #ececec; color: #5f5b53; }
.hb-band.walk { background: var(--gold-soft); color: var(--amber); }
.hb-band.drive { background: #fbe9d8; color: var(--clay); }
.hb-oneliner { font-size: 12.5px; color: var(--sub); line-height: 1.4; min-width: 0; }
.hb-price { margin-left: auto; font-size: 12.5px; color: var(--quiet); white-space: nowrap; }
.hb-price b { font-size: 17px; font-weight: 800; color: var(--accent); }
.hb-price-todo { color: var(--amber); font-weight: 600; }

/* 酒店级标签 */
.hb-tags { display: flex; flex-wrap: wrap; gap: 5px; }
.hb-tag { font-size: 11px; color: var(--clay); background: var(--accent-faint); border-radius: 5px; padding: 1px 8px; }

/* 房型 3 类代表铺开 */
.hb-reps { display: flex; flex-direction: column; border: 1px solid var(--line); border-radius: 9px; overflow: hidden; }
.hb-rep { display: grid; grid-template-columns: 56px minmax(0, 1fr) auto auto; gap: 10px; align-items: center; padding: 8px 11px; border-top: 1px solid var(--line); font-size: 12.5px; }
.hb-rep:first-child { border-top: none; }
.hb-rep-bucket { font-size: 11px; font-weight: 700; color: var(--accent); background: var(--accent-faint); border-radius: 6px; padding: 3px 0; text-align: center; }
/* 房型缩略图（展开行左列·替换原对齐空格·data 里 room_N.jpg） */
.hb-rep-thumb { display: block; width: 100%; height: 42px; border-radius: 6px; overflow: hidden; background: var(--bg); }
.hb-rep-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.hb-rep-thumb-none { display: grid; place-items: center; width: 100%; height: 42px; border-radius: 6px; font-size: 10px; color: var(--quiet); background: var(--accent-faint); }
.hb-rep-main { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.hb-rep-name { font-weight: 600; color: var(--ink); display: flex; align-items: center; flex-wrap: wrap; gap: 4px; }
.hb-rep-low { font-size: 10px; font-weight: 600; color: #2f7d4f; background: #e2f3e6; border-radius: 4px; padding: 0 5px; }
.hb-rep-sub { color: var(--sub); font-size: 11.5px; line-height: 1.4; }
.hb-rep-price { font-weight: 800; color: var(--accent); white-space: nowrap; text-align: right; }
.hb-pick { border: 1px solid var(--accent); background: var(--accent); color: #fff; border-radius: 7px; font-size: 12px; font-weight: 600; padding: 5px 12px; cursor: pointer; white-space: nowrap; }
.hb-pick:hover { background: var(--jade-dark); border-color: var(--jade-dark); }
.hb-more { margin-top: 4px; align-self: flex-start; border: 1px solid var(--line-strong); background: var(--panel); color: var(--accent); border-radius: 7px; font-size: 12px; font-weight: 600; padding: 5px 12px; cursor: pointer; }
.hb-more:hover { border-color: var(--accent); background: var(--accent-faint); }
.hb-more-bottom { margin-top: 8px; }
/* REQ-D17 展开列表里全房型统一权益条（不再逐房重复） */
.hb-perkbar { font-size: 11.5px; color: var(--clay); line-height: 1.6; margin: 2px 0 6px; }
.hb-perk-chip { display: inline-block; font-size: 11px; color: var(--clay); background: var(--accent-faint); border-radius: 999px; padding: 1px 8px; margin: 2px 4px 2px 0; }
.hb-rep-extra { color: var(--quiet); font-size: 11px; line-height: 1.4; }
.hb-allrooms { margin-top: 6px; }
.hb-todo { font-size: 12.5px; color: var(--amber); background: var(--gold-soft); border: 1px dashed #e3cd99; border-radius: 8px; padding: 9px 11px; line-height: 1.5; }
.hb-todo .hb-more { margin-left: 6px; margin-top: 0; display: inline-block; }

@media (max-width: 860px) {
  .hb-cards { grid-template-columns: 1fr; }
}
@media (max-width: 560px) {
  .hb-card { flex-direction: column; }
  .hb-thumb { flex-basis: 150px; width: 100%; }
  .hb-rep { grid-template-columns: 50px minmax(0,1fr) auto; }
  .hb-pick { grid-column: 1 / -1; justify-self: stretch; }
  .hb-flabel { flex-basis: 36px; }
}

/* hover 详情卡（浮层，挂在 body 上，绝对定位） */
.res-hover-card {
  position: absolute;
  z-index: 9999;
  width: 280px;
  max-width: calc(100vw - 24px);
  background: var(--panel);
  border: 1px solid var(--line-strong);
  border-radius: 10px;
  box-shadow: var(--shadow);
  padding: 12px 14px;
  font-size: 12.5px;
  color: var(--ink);
  pointer-events: none;          /* 纯展示，不挡交互 */
}
.rhc-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
.rhc-head b { font-size: 14px; }
.rhc-cat {
  font-size: 11px;
  color: var(--accent);
  background: var(--accent-faint);
  border-radius: 999px;
  padding: 1px 8px;
  white-space: nowrap;
}
.rhc-sub { color: var(--sub); margin: 3px 0 8px; }
.rhc-grid {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 3px 10px;
}
.rhc-grid span { color: var(--quiet); }
.rhc-grid b { font-weight: 600; }
.rhc-todo { color: var(--quiet); font-weight: 400; font-style: italic; }
.rhc-tags { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 8px; }
.rhc-tag {
  font-size: 11px;
  background: var(--mint);
  color: var(--sub);
  border-radius: 6px;
  padding: 1px 7px;
}
.rhc-rating { margin-top: 8px; color: var(--amber); }
.rhc-ops {
  margin-top: 8px;
  background: var(--gold-soft);
  color: var(--amber);
  border-radius: 6px;
  padding: 5px 8px;
  line-height: 1.5;
}
.rhc-foot { margin-top: 8px; }
.rhc-foot a { color: var(--accent); text-decoration: none; font-weight: 600; pointer-events: auto; }

/* 资源详情视图（modal 内） */
.res-detail { font-size: 13px; color: var(--ink); }
.rd-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 6px 16px;
}
.rd-row { display: flex; gap: 8px; align-items: baseline; }
.rd-row span { color: var(--quiet); min-width: 60px; }
.rd-row b { font-weight: 600; word-break: break-word; }
.rd-ops {
  margin-top: 12px;
  background: var(--gold-soft);
  color: var(--amber);
  border-radius: 8px;
  padding: 8px 10px;
  line-height: 1.6;
}
.rd-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 12px; }
.rd-direct { margin-top: 14px; }
.rd-direct .btn-primary { text-decoration: none; display: inline-block; }
/* 景点采集信息：标签-值两列；介绍整段跨行 */
.rx-grid { display: flex; flex-direction: column; gap: 2px; }
.rx-row { display: grid; grid-template-columns: 96px minmax(0, 1fr); gap: 10px; padding: 6px 0; border-top: 1px dashed var(--line); align-items: baseline; }
.rx-row:first-child { border-top: none; }
.rx-k { color: var(--quiet); font-size: 12.5px; font-weight: 600; }
.rx-v { color: var(--ink); font-size: 13px; line-height: 1.65; word-break: break-word; }
.rx-row.rx-intro { grid-template-columns: 1fr; gap: 4px; }
.rx-row.rx-intro .rx-v { color: var(--sub); }
.rd-raw-details > summary { cursor: pointer; color: var(--accent); font-size: 12.5px; padding: 4px 0; }
.rd-raw {
  background: var(--bg);
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 10px 12px;
  font-size: 12.5px;
  color: var(--sub);
  line-height: 1.7;
  white-space: pre-wrap;
  word-break: break-word;
  max-height: 240px;
  overflow: auto;
}

/* 供应商清单行：8 列 */
.res-row.sup-row {
  grid-template-columns: minmax(0, 1.4fr) 72px 70px 84px minmax(0, 0.9fr) 110px 76px 110px;
}

/* 用户管理表：只有 4 列（昵称/角色/状态/操作）。
   原先复用资源表的 9 列模板 → 昵称挤成 54px 截断中文名、中间留一片空白、操作列只 56px 塞不下 4 个按钮。
   这里给它一套专属列宽：昵称给足空间不截断、操作列宽到能放下「编辑/停用/重置/删除」四个按钮。 */
.res-table--users .res-row {
  grid-template-columns: minmax(220px, 2fr) 150px 92px minmax(280px, 1fr);
  gap: 14px;
}
/* 昵称单元格：允许换行、不省略号截断中文名（覆盖通用 .res-row span 的 nowrap/ellipsis） */
.res-table--users .res-name-cell {
  white-space: normal;
  overflow: visible;
  text-overflow: clip;
  min-width: 0;
}
/* 操作区：4 个按钮允许换到第二行，不被裁切、不挤成一坨 */
.res-table--users .res-actions {
  flex-wrap: wrap;
  row-gap: 6px;
}
@media (max-width: 760px) {
  .res-table--users .res-row { grid-template-columns: 1fr; gap: 6px; }
}

/* 资质材料录入行 */
.sf-quals-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
.qual-row {
  display: grid;
  grid-template-columns: minmax(0, 1.2fr) 150px minmax(0, 1.4fr) 40px;
  gap: 8px;
  margin-bottom: 8px;
  align-items: center;
}
.qual-row input {
  width: 100%;
  height: var(--control-h);
  box-sizing: border-box;
}

@media (max-width: 760px) {
  .res-row.sup-row { grid-template-columns: 1fr; gap: 4px; }
  .qual-row { grid-template-columns: 1fr; }
  .rd-grid { grid-template-columns: 1fr; }
}

/* ======================================================================
   REQ-D14 报价住宿块（携程式选酒店/房型/间数/方案/早餐提示）
   配色沿用全站 token：--accent 陶土橙做主彩、--ok 绿达标、--amber 待确认、--red-soft 缺/错
   ====================================================================== */
.lodge-block {
  border: 1px solid var(--line-strong);
  border-radius: var(--radius);
  background: var(--gold-soft);
  padding: 14px 16px;
  margin: 4px 0;
}
.lodge-block.selected { background: #fff; border-color: var(--accent-soft); }
.lodge-head { display: flex; align-items: baseline; gap: 10px; margin-bottom: 8px; }
.lodge-head h3 { margin: 0; font-size: 16px; color: var(--ink); }
.lodge-sub { color: var(--sub); font-size: 13px; }

/* 多段住宿 Step1 · 只读拆段提示条（纯展示·不带写按钮） */
.lodge-seg-hint {
  display: flex; flex-wrap: wrap; gap: 4px 8px; align-items: center;
  padding: 7px 11px; margin: 0 0 10px;
  background: var(--mint); border: 1px dashed var(--line-strong); border-radius: 6px;
  font-size: 13px; color: var(--ink); line-height: 1.5;
}
.lodge-seg-hint-ic { flex-shrink: 0; }
.lodge-seg-hint-txt b { color: var(--accent, #9c4a20); }
.lodge-seg-hint-pill {
  font-size: 12px; color: var(--ink);
  background: #fff; border: 1px solid var(--line); border-radius: 999px; padding: 1px 9px;
}
.lodge-seg-hint-sep { color: var(--quiet); margin: 0 1px; }
.lodge-seg-hint-note { color: var(--quiet); font-size: 12px; }

/* 断点A · 报价台顶部「行程已变更」回溯条（红色·提示+一键，绝不静默覆盖） */
.quote-tripchg-banner {
  display: flex; align-items: flex-start; justify-content: space-between; gap: 12px;
  margin: 0 0 12px; padding: 11px 14px;
  background: var(--red-soft, #fbeee8); border: 1px solid #e7c3b3;
  border-left: 4px solid #c0492b; border-radius: 8px;
}
.quote-tripchg-main { display: flex; align-items: flex-start; gap: 9px; flex: 1; min-width: 0; }
.quote-tripchg-ic { flex-shrink: 0; font-size: 16px; line-height: 1.4; }
.quote-tripchg-body { min-width: 0; }
.quote-tripchg-title { font-size: 14px; font-weight: 800; color: #9d3d29; margin-bottom: 4px; }
.quote-tripchg-list { margin: 0 0 5px; padding-left: 18px; }
.quote-tripchg-list li { font-size: 13px; color: var(--ink); line-height: 1.55; }
.quote-tripchg-note { font-size: 12px; color: var(--sub); line-height: 1.5; }
.quote-tripchg-acts { display: flex; flex-direction: column; gap: 6px; flex-shrink: 0; align-items: stretch; }
.quote-tripchg-resplit {
  font-size: 13px; font-weight: 700; color: #fff; white-space: nowrap;
  background: #c0492b; border: 0; border-radius: 8px; padding: 7px 13px; cursor: pointer;
}
.quote-tripchg-resplit:hover { background: #a73d23; }
.quote-tripchg-dismiss {
  font-size: 12px; color: var(--sub); background: #fff;
  border: 1px solid var(--line); border-radius: 8px; padding: 5px 13px; cursor: pointer;
}
.quote-tripchg-dismiss:hover { background: var(--mint); }

/* 断点A · 需求页 duration 下的「行程已敲定 N 天」并存提示行 */
.trip-days-note {
  margin: -4px 0 10px; padding: 6px 11px;
  background: var(--mint); border: 1px dashed var(--line-strong); border-radius: 6px;
  font-size: 13px; color: var(--ink); line-height: 1.5;
}
.trip-days-note b { color: var(--accent, #9c4a20); font-weight: 800; }

/* 多段住宿 Step2 · 段卡 + 段头 + 城市选项卡 */
.lodge-seg-cards { display: flex; flex-direction: column; gap: 12px; }
.lodge-seg-card {
  border: 1px solid var(--line); border-radius: 8px; background: #fff;
  overflow: hidden; transition: border-color .12s, box-shadow .12s;
}
.lodge-seg-card.active { border-color: var(--accent-soft); box-shadow: 0 0 0 2px var(--accent-soft) inset; }
.lodge-seg-card.no-hotel { background: var(--gold-soft); }
.lodge-seg-head {
  display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px;
  padding: 9px 12px; cursor: pointer; border-bottom: 1px solid transparent;
  background: linear-gradient(0deg, rgba(0,0,0,0.015), transparent);
}
.lodge-seg-card.has-hotel .lodge-seg-head { border-bottom-color: var(--line); }
.lodge-seg-head:hover { background: var(--mint); }
.lodge-seg-loc { font-size: 14px; font-weight: 700; color: var(--ink); }
.lodge-seg-citywarn { color: var(--amber); font-weight: 700; }
.lodge-seg-day {
  font-size: 12px; color: var(--accent, #9c4a20); font-weight: 600;
  background: #fff; border: 1px solid var(--line); border-radius: 999px; padding: 1px 9px;
}
/* Step4：段头真实日期区间（出发日推算），填色区分于 Day 灰底胶囊 */
.lodge-seg-date {
  font-size: 12px; font-weight: 700; color: #fff; letter-spacing: .2px;
  background: var(--accent, #9c4a20); border-radius: 999px; padding: 1px 9px;
  white-space: nowrap;
}
.lodge-seg-nights, .lodge-seg-rooms { font-size: 12px; color: var(--sub); }

/* Step4：住宿区顶部「出发日」输入条 */
.lodge-depart-bar {
  display: flex; align-items: center; flex-wrap: wrap; gap: 8px 12px;
  margin: 0 0 10px; padding: 9px 12px;
  background: var(--gold-soft, #faf6ee); border: 1px solid var(--line); border-radius: 10px;
}
.lodge-depart-label { font-size: 13px; font-weight: 700; color: var(--ink); }
.lodge-depart-input {
  font-size: 13px; padding: 5px 9px; border: 1px solid var(--line); border-radius: 8px;
  background: #fff; color: var(--ink); min-width: 150px;
}
.lodge-depart-input:focus { outline: none; border-color: var(--accent, #9c4a20); }
.lodge-depart-span {
  font-size: 12px; font-weight: 700; color: var(--accent, #9c4a20);
  background: #fff; border: 1px solid var(--line); border-radius: 999px; padding: 2px 10px;
}
.lodge-depart-hint { font-size: 12px; color: var(--sub); }
.lodge-seg-idx { margin-left: auto; font-size: 11px; color: var(--quiet); }
.lodge-seg-orphan { font-size: 12px; color: var(--amber); font-weight: 600; }
.lodge-seg-empty { padding: 12px; }
.lodge-seg-empty p { margin: 0 0 10px; color: var(--sub); font-size: 13px; }
/* 段卡里的富卡去掉外层重复边框（段卡本身已有边框） */
.lodge-seg-card .lodge-card { border: 0; border-radius: 0; }

/* 城市选项卡（换酒店列表顶部） */
.lodge-city-tabs {
  display: flex; flex-wrap: wrap; gap: 6px;
  padding: 8px 10px; border-bottom: 1px solid var(--line); background: var(--gold-soft);
}
.lodge-city-tabs .chip { font-size: 12px; padding: 2px 10px; }
.lodge-city-tabs .chip em {
  font-style: normal; margin-left: 4px; font-size: 10px; color: var(--quiet);
}
.lodge-city-tabs .chip.on em { color: #fff; opacity: .85; }

/* 多段住宿 Step3 · 段头手动调段操作 + 按行程重新拆段 + 游离住宿行提示条 */
.lodge-seg-ops { margin-left: auto; display: flex; flex-wrap: wrap; gap: 4px; }
.lodge-seg-op {
  font-size: 11px; line-height: 1.4; padding: 1px 8px;
  border: 1px solid var(--line); border-radius: 999px; background: #fff;
  color: var(--sub); cursor: pointer; white-space: nowrap;
}
.lodge-seg-op:hover { border-color: var(--accent-soft); color: var(--accent, #9c4a20); background: var(--mint); }
.lodge-seg-card.has-hotel .lodge-seg-idx { margin-left: 0; }
.lodge-resplit-btn {
  margin-left: auto; font-size: 12px; padding: 2px 11px;
  border: 1px solid var(--line-strong); border-radius: 999px; background: #fff;
  color: var(--sub); cursor: pointer; white-space: nowrap;
}
.lodge-resplit-btn:hover { border-color: var(--accent-soft); color: var(--accent, #9c4a20); background: var(--mint); }
.lodge-floating-bar {
  display: flex; flex-wrap: wrap; gap: 8px 12px; align-items: center; justify-content: space-between;
  padding: 9px 12px; margin: 0 0 10px;
  background: #fff7ed; border: 1px solid var(--amber, #d98a3a); border-radius: 6px;
}
.lodge-floating-txt { font-size: 13px; color: var(--ink); line-height: 1.5; flex: 1 1 260px; }
.lodge-floating-txt b { color: var(--amber, #d98a3a); }
.lodge-floating-acts { display: flex; gap: 8px; align-items: center; flex-shrink: 0; }

.lodge-suggestbar {
  display: flex; flex-wrap: wrap; gap: 8px 14px; align-items: center;
  padding: 8px 10px; margin-bottom: 10px;
  background: var(--mint); border-radius: 6px; font-size: 13px;
}
.lodge-sg-item { color: var(--ink); }
.lodge-sg-item.dim { color: var(--quiet); }
.lodge-sg-warn { color: var(--amber); font-weight: 600; }

.lodge-empty { padding: 6px 0; }
.lodge-empty p { margin: 0 0 10px; color: var(--sub); }
.lodge-actions { display: flex; gap: 10px; flex-wrap: wrap; }

.lodge-card { border: 1px solid var(--line); border-radius: 6px; padding: 12px; background: #fff; }
.lodge-card-top { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; }
.lodge-hotelname { font-size: 15px; }
.lodge-hotelname b { color: var(--ink); }
.lodge-direct { margin-left: 6px; text-decoration: none; }
.lodge-cardactions { display: flex; gap: 8px; flex-shrink: 0; }
.lodge-geo { color: var(--sub); font-size: 13px; margin: 6px 0; }

/* 报价台住宿块·成交说辞条（L2 卖点 + 房型基础·纯展示） */
.lodge-sell { margin: 6px 0 8px; display: flex; flex-direction: column; gap: 5px; }
.lodge-sell-points { display: flex; flex-wrap: wrap; gap: 5px 6px; }
.lodge-sell-chip { font-size: 12px; line-height: 1.4; color: #9c4a20; background: var(--accent-soft, #f5dcc8); border: 1px solid #e7b78f; border-radius: 999px; padding: 2px 9px; }
.lodge-sell-facts { display: flex; flex-wrap: wrap; gap: 4px 10px; }
.lodge-sell-fact { font-size: 12px; color: var(--sub); background: var(--accent-faint, #f3efe9); border-radius: 6px; padding: 2px 7px; }

.lodge-controls { display: flex; flex-wrap: wrap; gap: 12px 18px; margin: 10px 0 4px; align-items: flex-end; }
.lodge-ctrl { display: flex; flex-direction: column; gap: 4px; font-size: 13px; color: var(--sub); }
.lodge-ctrl > span { font-weight: 600; }
.lodge-ctrl input { height: var(--control-h); border: 1px solid var(--line-strong); border-radius: 6px; padding: 0 8px; color: var(--ink); background: #fff; }
.lodge-price input { width: 140px; }
.lodge-stepper { flex-direction: row; align-items: center; gap: 6px; }
.lodge-stepper > span { margin-right: 4px; }
.lodge-stepper button { width: 28px; height: 28px; border: 1px solid var(--line-strong); background: #fff; border-radius: 6px; cursor: pointer; font-size: 16px; line-height: 1; color: var(--accent); }
.lodge-stepper button:hover { background: var(--accent-faint); }
.lodge-stepper b { min-width: 24px; text-align: center; font-size: 15px; color: var(--ink); }
.lodge-suggest { font-style: normal; color: var(--quiet); font-size: 12px; margin-left: 4px; }

.lodge-roomtags { margin: 6px 0; }
.lodge-plans { display: flex; align-items: center; gap: 8px; margin: 10px 0 4px; flex-wrap: wrap; }
.lodge-plabel { font-size: 13px; font-weight: 600; color: var(--sub); }
.lodge-plan {
  display: flex; flex-direction: column; align-items: flex-start; gap: 1px;
  border: 1px solid var(--line-strong); background: #fff; border-radius: 6px;
  padding: 6px 12px; cursor: pointer; font-size: 13px; color: var(--ink);
}
.lodge-plan small { color: var(--quiet); font-size: 11px; font-weight: 400; }
.lodge-plan.on { background: var(--accent-soft); border-color: var(--accent); color: var(--jade-dark); font-weight: 600; }
.lodge-plan.on small { color: var(--clay); }

.lodge-warn { margin: 8px 0 0; padding: 8px 10px; background: var(--red-soft); border-left: 3px solid #c0492e; border-radius: 4px; font-size: 13px; color: #8a2f1c; }
.lodge-warn.soft { background: var(--gold-soft); border-left-color: var(--amber); color: var(--amber); }
/* P1-2 住宿成本未填 → 利润虚高（醒目橙标，与无早 soft 警告区分开） */
.lodge-warn.cost { background: #fbe9d8; border-left-color: var(--clay); color: #8a3d18; font-weight: 500; }
.lodge-warn.cost b { color: var(--clay); }
.lodge-summary { margin-top: 10px; padding-top: 8px; border-top: 1px dashed var(--line); font-size: 14px; color: var(--ink); }
.lodge-summary b { color: var(--accent); }
.lodge-sum-total { font-size: 16px; }
.lodge-cost-note { color: var(--quiet); font-size: 12px; margin-left: 4px; }
.lodge-cost-note.warn { color: var(--clay); font-weight: 600; }

/* ════════ Step3 报价台已选酒店卡 · 信息三分区（身份/房型/价格）════════
   分层靠尺寸+留白+边界+低饱和琉璃色，绝不三区全白同色竖向叠（Lucia「看不见=没有」硬闸门）。
   .lodge-card 退成无内边距的分区容器，三区各自承托底色：
     ① 身份区 = 暖米浅底(--gold-soft 偏暖)；② 房型区 = 纯白承托(列表本身有边界)；
     ③ 价格区 = 琉璃浅蓝灰底(--mint 之上压一层)，价格落点醒目。 */
.lodge-card { padding: 0; overflow: hidden; }
.lodge-zone { padding: 12px 14px; }
.lodge-zone + .lodge-zone { border-top: 1px solid var(--line); }
/* ① 酒店身份区：暖琉璃浅底 */
.lodge-zone-id { background: var(--gold-soft); }
.lodge-rankbadge { margin-left: 8px; vertical-align: middle; }
/* ② 房型选择区：白底承托（与上下琉璃底拉开层次） */
.lodge-zone-rooms { background: #fff; }
/* ③ 数量/价格区：冷琉璃浅底（与暖身份区分色，不同色叠） */
.lodge-zone-price { background: #f0f4f3; }

/* 选中房型行：从 --gold-soft 浅底升级为 --accent-soft 实色高亮 + 左侧主彩条（别淡灰，要一眼看到选了哪间） */
.lodge-room.picked { background: var(--accent-soft); box-shadow: inset 3px 0 0 var(--accent); }
.lodge-room.picked .lodge-room-name { color: var(--jade-dark); }

/* 对客销售价焦点：最大字号、主彩、独立成块——定制师报价时第一眼落到「卖多少钱」 */
.lodge-price-focus {
  display: flex; align-items: center; flex-wrap: wrap; gap: 8px 14px;
  padding: 10px 12px; margin-bottom: 12px;
  background: #fff; border: 1px solid var(--accent-soft); border-radius: 8px;
}
.lodge-pf-label { font-size: 12.5px; font-weight: 600; color: var(--sub); }
.lodge-pf-input { display: inline-flex; align-items: baseline; gap: 2px; }
.lodge-pf-yen { font-size: 20px; font-weight: 800; color: var(--accent); }
.lodge-pf-input input {
  width: 130px; height: 40px; border: 1px solid var(--line-strong); border-radius: 7px;
  padding: 0 8px; background: var(--bg); color: var(--ink);
  font-size: 22px; font-weight: 800; line-height: 1; font-variant-numeric: tabular-nums;
}
.lodge-pf-input input:focus { border-color: var(--accent); outline: none; }

/* Step2 查看完整房型/介绍 入口按钮：与「换酒店/移除」并列但主彩描边，更可发现 */
.lodge-detail-btn { color: var(--accent); font-weight: 600; }
.lodge-detail-btn:hover { color: var(--jade-dark); text-decoration: underline; }

/* Step3 卖点 chip 区分：差异化卖点(point)主彩实底；核心关键词(key)中性浅底——两类视觉分层不同色 */
.lodge-sell-chip.is-key { color: var(--sub); background: var(--accent-faint, #f3efe9); border-color: var(--line); }

/* Step1 换酒店卡房型列表：全量房型可能很长 → 限高可滚动，不撑爆卡片 */
.lsw-rooms { max-height: none; }

/* D18a ② 选酒店卡顶部取消政策高亮 chip：默认能退不渲染，仅不可退(红实心)/有时限(琥珀) */
.lodge-cancel-chip {
  display: block; margin: 0 0 10px; padding: 7px 12px; border-radius: 6px;
  font-size: 13px; font-weight: 600; line-height: 1.4;
}
.lodge-cancel-chip.danger { background: #b3402a; color: #fff; }
.lodge-cancel-chip.amber { background: var(--gold-soft); color: var(--amber); border: 1px solid #e6c98a; }
/* 报价台酒店行小角标（note-cell 内，与 tier 按钮并列） */
.q-cancel-badge {
  flex: 0 0 auto; display: inline-flex; align-items: center; gap: 2px;
  font-size: 11px; font-weight: 600; border-radius: 999px; padding: 1px 8px; white-space: nowrap;
}
.q-cancel-badge.danger { background: #b3402a; color: #fff; }
.q-cancel-badge.amber { background: var(--gold-soft); color: var(--amber); border: 1px solid #e6c98a; }

/* D18a ① 供应商「付款与取消政策」子卡 */
.sf-pay-card {
  border: 1px solid var(--line); border-radius: 8px; background: var(--gold-soft);
  padding: 12px 14px; margin: 0 0 4px;
}
.sf-pay-grid { display: grid; grid-template-columns: minmax(170px, 1fr) minmax(170px, 1.4fr); gap: 12px; margin-bottom: 10px; align-items: start; }
.sf-pay-grid .field { margin: 0; }
.sf-pay-card label { display: block; font-size: 12.5px; font-weight: 600; color: var(--sub); margin-bottom: 4px; }
.sf-pay-card select,
.sf-pay-card input[type="number"],
.sf-pay-card input[type="time"],
.sf-pay-card input[type="text"],
.sf-pay-card .field > input {
  height: var(--control-h); border: 1px solid var(--line-strong); border-radius: 6px;
  padding: 0 8px; color: var(--ink); background: #fff; width: 100%;
}
.sf-pay-inline { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--sub); }
.sf-pay-inline input[type="number"] { width: 64px; display: inline-block; }
.sf-pay-inline2 { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.sf-pay-inline2 input[type="number"] { width: 70px; }
.sf-pay-inline2 input[type="time"] { width: 110px; }
.sf-pay-inline2 select { width: auto; min-width: 110px; }
.sf-pay-noparam { display: inline-block; color: var(--quiet); font-size: 12.5px; padding-top: 8px; }
.sf-pay-peak { margin: 4px 0 10px; padding: 8px 10px; background: #fff; border: 1px dashed var(--line-strong); border-radius: 6px; }
.sf-pay-toggle { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 500; color: var(--ink); cursor: pointer; margin: 0; }
.sf-pay-toggle input { width: auto; height: auto; }
.sf-pay-peak > div { margin-top: 8px; display: flex; flex-wrap: wrap; gap: 12px 18px; align-items: center; }
.sf-tier-row {
  display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
  font-size: 13px; color: var(--sub); margin-bottom: 6px;
}
.sf-tier-row input[type="number"] { width: 64px; }
.sf-pay-plain {
  margin-top: 4px; padding: 8px 10px; background: #fff; border-left: 3px solid var(--accent);
  border-radius: 4px; font-size: 13px; color: var(--ink); line-height: 1.5;
}

/* P1-4 报价台房型卡片行列表（替换原生 <select>，与资源库 hb-rep 同款观感） */
.lodge-roompick { margin: 10px 0 6px; }
.lodge-ctrl-label { display: block; font-size: 13px; font-weight: 600; color: var(--sub); margin-bottom: 5px; }
.lodge-room-count { font-style: normal; font-weight: 400; color: var(--quiet); font-size: 12px; margin-left: 6px; }
.lodge-rooms { display: flex; flex-direction: column; border: 1px solid var(--line); border-radius: 9px; overflow: hidden; max-height: 320px; overflow-y: auto; }
.lodge-room { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; gap: 10px; align-items: center; padding: 8px 11px; border-top: 1px solid var(--line); font-size: 12.5px; cursor: pointer; background: #fff; }
.lodge-room:first-child { border-top: none; }
.lodge-room:hover { background: var(--accent-faint); }
.lodge-room.picked { background: var(--gold-soft); }
.lodge-room-main { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.lodge-room-name { font-weight: 600; color: var(--ink); display: flex; align-items: center; flex-wrap: wrap; gap: 4px; }
.lodge-room-sub { color: var(--sub); font-size: 11.5px; line-height: 1.4; }
.lodge-room-price { font-weight: 800; color: var(--accent); white-space: nowrap; text-align: right; }
.lodge-room-pick { border: 1px solid var(--accent); background: var(--accent); color: #fff; border-radius: 7px; font-size: 12px; font-weight: 600; padding: 5px 12px; cursor: pointer; white-space: nowrap; }
.lodge-room-pick:hover { background: var(--jade-dark); border-color: var(--jade-dark); }
.lodge-room-cur { font-size: 11px; font-weight: 700; color: #2f7d4f; background: #e2f3e6; border-radius: 7px; padding: 5px 10px; white-space: nowrap; text-align: center; }
/* 报价台房型三价：主显销售价(对客报价)，下方小字标 携程/协议/毛利（同步资源详情 v3 口径） */
.lodge-room-saledef { font-size: 10px; font-weight: 600; color: var(--quiet); margin-left: 4px; vertical-align: middle; }
.lodge-room-3p { display: flex; flex-wrap: wrap; gap: 4px 8px; font-size: 11px; line-height: 1.4; margin-top: 2px; }
.lodge-rp-ctrip { color: var(--quiet); }
.lodge-rp-agree { color: #8a6634; font-weight: 600; }
.lodge-rp-margin { font-weight: 600; }
.lodge-rp-margin.is-pos { color: #2f7d4f; }
.lodge-rp-margin.is-neg { color: var(--clay, #c2602e); }
.lodge-rp-margin.is-todo { color: var(--quiet); font-weight: 400; }
.lodge-roomname-input { width: 100%; max-width: 420px; height: var(--control-h); border: 1px solid var(--line-strong); border-radius: 6px; padding: 0 8px; color: var(--ink); background: #fff; }
/* P1-5 手改房价标记 + 一键恢复采集价 */
.lodge-price-edited { font-style: normal; font-weight: 700; color: var(--clay); font-size: 11px; margin-left: 6px; }
.lodge-price-reset { margin-top: 4px; align-self: flex-start; border: 1px solid var(--line-strong); background: #fff; color: var(--sub); border-radius: 6px; font-size: 11.5px; padding: 3px 9px; cursor: pointer; }
.lodge-price-reset:hover { border-color: var(--accent); color: var(--accent); }

/* 换酒店内联小列表 */
.lodge-switch { margin-top: 12px; border: 1px solid var(--line); border-radius: 6px; background: var(--bg); }
.lodge-switch-head { display: flex; align-items: center; gap: 10px; padding: 8px 12px; border-bottom: 1px solid var(--line); }
.lodge-switch-head b { color: var(--ink); }
.lodge-switch-head .small { color: var(--quiet); flex: 1; }
.lodge-switch-list { max-height: 360px; overflow-y: auto; }
.lodge-pick { padding: 9px 12px; border-bottom: 1px solid var(--line); cursor: pointer; }
.lodge-pick:last-child { border-bottom: none; }
.lodge-pick:hover { background: var(--accent-faint); }
.lodge-pick.cur { background: var(--accent-soft); }
.lodge-pick-main { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.lodge-pick-name { font-weight: 600; color: var(--ink); }
.lodge-pick-band { font-size: 12px; color: var(--blue); }
.lodge-pick-tag { font-size: 11px; padding: 1px 7px; background: var(--mint); border-radius: 10px; color: var(--sub); }
.lodge-pick-sub { font-size: 12px; color: var(--sub); margin-top: 2px; }
.lodge-pick-price { color: var(--accent); margin-left: 6px; }

/* ===== P0 资源库↔报价住宿块打通 ===== 沿用山西琉璃色（陶土橙主彩 + 暖金），不引入 claude 米色 */

/* P0-1 「一键填入」暂存提示条（住宿块顶部） */
.lodge-pending {
  display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap;
  background: var(--gold-soft); border: 1px solid #e3cd99; border-left: 3px solid var(--accent);
  border-radius: 8px; padding: 10px 12px; margin-bottom: 10px;
}
.lodge-pending-txt { font-size: 13px; color: var(--clay); line-height: 1.5; min-width: 0; }
.lodge-pending-txt b { color: var(--jade-dark); }
.lodge-pending-acts { display: flex; align-items: center; gap: 8px; white-space: nowrap; }
.lodge-pending-acts .btn-primary { padding: 5px 14px; font-size: 13px; }

/* P0-4 资源库页头「← 回报价台」常驻返回按钮 */
.back-to-quote {
  display: inline-flex; align-items: center; margin-top: 8px;
  border: 1px solid var(--accent); background: var(--accent-faint); color: var(--accent);
  border-radius: 8px; font-size: 12.5px; font-weight: 600; padding: 5px 12px; cursor: pointer;
}
.back-to-quote:hover { background: var(--accent-soft); border-color: var(--jade-dark); color: var(--jade-dark); }

/* P0-2 换酒店列表：顶部工具条（搜索 + 区位band筛 + 价格排序） */
.lodge-switch-tools {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 10px 12px; border-bottom: 1px solid var(--line); background: var(--panel);
}
.lodge-switch-search {
  flex: 1 1 200px; min-width: 160px; height: 32px; border: 1px solid var(--line-strong);
  border-radius: 7px; background: var(--panel); color: var(--ink); font-size: 13px; padding: 0 11px;
}
.lodge-switch-search:focus { outline: none; border-color: var(--accent); }
.lodge-switch-bands { display: flex; flex-wrap: wrap; gap: 6px; }
.lodge-switch-bands .chip { font-size: 12px; padding: 3px 11px; min-height: 28px; }
.lodge-switch-sort {
  height: 32px; border: 1px solid var(--line-strong); border-radius: 7px;
  background: var(--panel); color: var(--ink); font-size: 12.5px; padding: 0 10px; cursor: pointer;
}

/* P0-2 换酒店精简卡片（与资源库 hb-card 同构、更紧凑） */
.lodge-switch-card {
  display: flex; gap: 0; border-bottom: 1px solid var(--line); background: var(--panel); overflow: hidden;
}
.lodge-switch-card:last-child { border-bottom: none; }
.lodge-switch-card.cur { background: var(--gold-soft); box-shadow: inset 3px 0 0 var(--accent); }
.lsw-thumb { flex: 0 0 96px; align-self: stretch; min-height: 96px; background: var(--mint); display: block; overflow: hidden; }
.lsw-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.lsw-thumb-none { display: flex; align-items: center; justify-content: center; font-size: 11.5px; color: var(--quiet); }
.lsw-body { flex: 1 1 auto; min-width: 0; padding: 10px 12px; display: flex; flex-direction: column; gap: 6px; }
.lsw-head { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.lsw-name { font-size: 14.5px; font-weight: 800; color: var(--ink); }
.lsw-zuan { font-size: 11px; font-weight: 700; color: var(--amber); background: var(--gold-soft); border-radius: 999px; padding: 1px 8px; white-space: nowrap; }
.lsw-band { font-size: 11px; font-weight: 700; border-radius: 6px; padding: 1px 7px; white-space: nowrap; }
.lsw-band.near { background: #e2f3e6; color: #2f7d4f; }
.lsw-band.town { background: #ececec; color: #5f5b53; }
.lsw-band.walk { background: var(--gold-soft); color: var(--amber); }
.lsw-band.drive { background: #fbe9d8; color: var(--clay); }
.lsw-cur-flag { font-size: 11px; font-weight: 700; color: #fff; background: var(--accent); border-radius: 999px; padding: 1px 9px; white-space: nowrap; }
.lsw-sub { font-size: 12px; color: var(--sub); line-height: 1.45; }
.lsw-start { color: var(--accent); font-weight: 800; font-size: 14px; margin-left: 4px; }
.lsw-tags { display: flex; flex-wrap: wrap; gap: 5px; }
.lsw-tag { font-size: 10.5px; color: var(--clay); background: var(--accent-faint); border-radius: 5px; padding: 1px 7px; }
.lsw-rooms { display: flex; flex-direction: column; border: 1px solid var(--line); border-radius: 8px; overflow: hidden; margin-top: 2px; }
.lsw-room { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; gap: 8px; align-items: center; padding: 6px 10px; border-top: 1px solid var(--line); font-size: 12px; }
.lsw-room:first-child { border-top: none; }
.lsw-room.picked { background: var(--gold-soft); }
.lsw-room-name { color: var(--ink); font-weight: 600; min-width: 0; }
.lsw-room-name em { font-style: normal; font-weight: 400; color: var(--quiet); font-size: 11px; margin-left: 6px; }
.lsw-room-price { color: var(--accent); font-weight: 800; white-space: nowrap; }
.lsw-pick { border: 1px solid var(--accent); background: var(--accent); color: #fff; border-radius: 6px; font-size: 11.5px; font-weight: 600; padding: 4px 11px; cursor: pointer; white-space: nowrap; }
.lsw-pick:hover { background: var(--jade-dark); border-color: var(--jade-dark); }
.lsw-addroom { margin-top: 6px; width: 100%; border: 1px dashed var(--accent); background: transparent; color: var(--accent); border-radius: 7px; font-size: 11.5px; font-weight: 600; padding: 5px 10px; cursor: pointer; }
.lsw-addroom:hover { background: var(--accent-faint, #eef7f1); }
.lsw-room-cur { font-size: 11px; font-weight: 700; color: #2f7d4f; background: #e2f3e6; border-radius: 6px; padding: 3px 9px; white-space: nowrap; }
.lsw-todo { font-size: 11.5px; color: var(--amber); background: var(--gold-soft); border: 1px dashed #e3cd99; border-radius: 7px; padding: 7px 10px; line-height: 1.5; }

/* P0-5 资源库卡片「当前报价已选 / 已暂存」标记 */
.hb-card.is-cur { box-shadow: 0 0 0 2px var(--accent), var(--shadow); }
.hb-cur-flag { font-size: 11px; font-weight: 700; color: #fff; background: var(--accent); border-radius: 999px; padding: 1px 9px; white-space: nowrap; }
.hb-pending-flag { font-size: 11px; font-weight: 700; color: var(--clay); background: var(--gold-soft); border: 1px solid #e3cd99; border-radius: 999px; padding: 0 8px; white-space: nowrap; }
.hb-rep.is-picked, .hb-rep-full.is-picked { background: var(--gold-soft); }
.hb-rep-cur { font-size: 11px; font-weight: 700; color: #2f7d4f; background: #e2f3e6; border-radius: 7px; padding: 5px 10px; white-space: nowrap; text-align: center; }

@media (max-width: 560px) {
  .lsw-room { grid-template-columns: minmax(0, 1fr) auto; }
  .lsw-pick, .lsw-room-cur { grid-column: 1 / -1; justify-self: stretch; text-align: center; }
  .lodge-switch-card { flex-direction: column; }
  .lsw-thumb { flex-basis: 120px; width: 100%; }
  /* P1-4 报价台房型卡片行窄屏：价格上提一行、选这间占满 */
  .lodge-room { grid-template-columns: minmax(0, 1fr) auto; }
  .lodge-room-pick, .lodge-room-cur { grid-column: 1 / -1; justify-self: stretch; text-align: center; }
}

/* ============================================================================
   订单派发 Stage2：三层视图 + 状态机收敛 + 收款绑 D18 + 下一步动作条
   山西琉璃陶土色系（--accent 陶土橙 / --clay 赭 / --ok 松绿 / 不可取消用窑变红 #b3402a）
   ============================================================================ */

/* —— 下一步动作条（单焦点，整条可点）—— */
.ord-next { display: flex; align-items: center; gap: 12px; padding: 13px 16px; border-radius: 12px; margin: 4px 0 14px;
  cursor: pointer; border: 1px solid var(--line); background: var(--panel); box-shadow: var(--shadow);
  transition: transform .08s ease, box-shadow .12s ease; }
.ord-next:hover { transform: translateY(-1px); box-shadow: 0 14px 34px rgba(40,37,31,.12); }
.ord-next-ic { font-size: 20px; line-height: 1; }
.ord-next-tx { flex: 1; font-size: 14.5px; font-weight: 700; color: var(--ink); }
.ord-next-go { font-size: 12.5px; font-weight: 700; color: var(--accent); white-space: nowrap; }
.ord-next.ord-next-warn { border-left: 4px solid var(--accent); background: linear-gradient(0deg, var(--panel), var(--panel)), var(--gold-soft); }
.ord-next.ord-next-warn .ord-next-tx { color: var(--clay); }
.ord-next.ord-next-money { border-left: 4px solid #b3402a; background: var(--red-soft); }
.ord-next.ord-next-money .ord-next-go { color: #b3402a; }
.ord-next.ord-next-ok { border-left: 4px solid var(--ok); background: #f1f7f3; }
.ord-next.ord-next-ok .ord-next-tx { color: var(--ok); }
.ord-next.ord-next-ok .ord-next-go { color: var(--ok); }

/* —— 三层视图 Tab —— */
.ord-tabs { display: flex; gap: 8px; margin: 0 0 14px; border-bottom: 1px solid var(--line); }
.ord-tab { appearance: none; border: none; background: transparent; cursor: pointer; padding: 9px 14px 11px;
  font-size: 14px; font-weight: 650; color: var(--sub); border-bottom: 2.5px solid transparent; margin-bottom: -1px;
  display: inline-flex; align-items: baseline; gap: 7px; border-radius: 8px 8px 0 0; transition: color .1s, background .1s; }
.ord-tab:hover { color: var(--ink); background: var(--accent-faint); }
.ord-tab em { font-style: normal; font-size: 11px; font-weight: 500; color: var(--quiet); }
.ord-tab.active { color: var(--accent); border-bottom-color: var(--accent); }
.ord-tab.active em { color: var(--clay); }

/* —— 状态机第四态：已完成（松绿实心）—— */
.dispatch-status.d-done { background: var(--ok, #3d7a55); color: #fff; border-color: var(--ok); }

/* —— 确认号输入框 —— */
.dispatch-confirm { width: 100%; min-width: 0; padding: 4px 7px; border: 1px solid var(--line); border-radius: 6px;
  font-size: 12px; color: var(--ink); background: #fbfaf7; }
.dispatch-confirm:focus { outline: none; border-color: var(--accent); background: #fff; }

/* 按天 Tab 表格补『确认号』列 → 8 列 */
.dispatch-row.dispatch-row-2 { grid-template-columns: 52px minmax(0,1.3fr) minmax(0,.9fr) 62px 62px 96px 92px 42px; }
.dispatch-row.d-head { grid-template-columns: 52px minmax(0,1.3fr) minmax(0,.9fr) 62px 62px 96px 92px 42px; }

/* —— Tab②：按供应商卡片 —— */
.sup-cards { display: grid; gap: 14px; }
.sup-card { border: 1px solid var(--line); border-radius: 12px; background: var(--panel); overflow: hidden;
  box-shadow: 0 4px 14px rgba(40,37,31,.04); }
.sup-card-head { display: flex; justify-content: space-between; align-items: center; gap: 12px;
  padding: 13px 16px; background: #fbfaf7; border-bottom: 1px solid var(--line); }
.sup-card-name { font-size: 15px; font-weight: 800; color: var(--ink); display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
.sup-prepay-tag { font-size: 11px; font-weight: 700; color: #fff; background: #b3402a; border-radius: 999px; padding: 2px 9px; }
.sup-card-amt { text-align: right; white-space: nowrap; display: flex; flex-direction: column; align-items: flex-end; line-height: 1.25; }
.sup-card-amt span { font-size: 11px; color: var(--quiet); }
.sup-card-amt b { font-size: 18px; color: var(--clay); }
.sup-card-amt em { font-style: normal; font-size: 11px; color: var(--ok); }
.sup-card-meta { display: flex; flex-wrap: wrap; gap: 8px 14px; padding: 10px 16px; border-bottom: 1px dashed var(--line); }
.sup-card-meta > span { font-size: 12.5px; color: var(--sub); }
.sup-contact { font-weight: 600; color: var(--ink); }
.sup-contact-miss { color: var(--quiet); font-weight: 400; font-style: italic; }
.sup-pay-plain { color: var(--clay); }
.sup-pending { color: var(--accent); font-weight: 700; }
.sup-allok { color: var(--ok); font-weight: 700; }
.sup-card-rows { padding: 6px 8px 8px; }
.sup-row { display: grid; grid-template-columns: minmax(110px,.9fr) minmax(0,1.3fr) minmax(86px,.7fr) 96px 92px;
  gap: 10px; align-items: center; padding: 8px 8px; border-bottom: 1px solid var(--line); font-size: 12.5px; }
.sup-row:last-child { border-bottom: none; }
.sup-row-cat { color: var(--quiet); font-size: 11.5px; }
.sup-row-name { color: var(--ink); font-weight: 600; min-width: 0; }
.sup-row-qty { color: var(--sub); white-space: nowrap; }
/* 预付/不可取消整卡描红置顶 */
.sup-card.sup-card-prepay { border-color: #e3a99a; box-shadow: 0 0 0 1px #e3a99a, 0 6px 18px rgba(179,64,42,.10); }
.sup-card.sup-card-prepay .sup-card-head { background: var(--red-soft); border-bottom-color: #eccabf; }
.sup-card.sup-card-done { opacity: .82; }
.sup-card.sup-card-done .sup-card-head { background: #f1f7f3; }
/* 待指派供应商：每个未绑供应商的资源各自独立成卡（绝不并成一整套行程），虚线+琥珀提示先指派 */
.sup-card.sup-card-unassigned { border-style: dashed; border-color: #e0a800; background: #fffdf5; }
.sup-card.sup-card-unassigned .sup-card-head { background: #fdf6e3; border-bottom-color: #f0e3b8; }
.sup-unassigned-tag { font-size: 11px; font-weight: 700; color: #6b5200; background: #ffe9a8; border-radius: 999px; padding: 2px 9px; }

/* —— M1 脱敏工单：供应商卡底部动作 + 预览弹窗 —— */
.sup-card-actions { display: flex; gap: 8px; justify-content: flex-end; padding: 8px 14px 12px; border-top: 1px dashed var(--line); }
.ws-btn { font-size: 12.5px; font-weight: 600; color: var(--sub); background: var(--panel); border: 1px solid var(--line);
  border-radius: 8px; padding: 6px 12px; cursor: pointer; transition: all .14s; }
.ws-btn:hover { border-color: var(--clay); color: var(--clay); }
.ws-btn-primary { color: #fff; background: var(--clay); border-color: var(--clay); }
.ws-btn-primary:hover { filter: brightness(1.06); color: #fff; }
.ws-withdraw { margin-right: auto; color: var(--quiet); }
.ws-withdraw:hover { border-color: #b3402a; color: #b3402a; }
/* 第二步「补发实名」按钮：可点=描金强调；灰态=未到补发时机（供应商未确认能接） */
.ws-btn-realname { color: #8a5a1b; border-color: #d9b27a; background: #fdf6ea; }
.ws-btn-realname:hover { border-color: #b8861f; color: #6f4612; filter: brightness(0.99); }
.ws-btn-realname.is-disabled, .ws-btn-realname:disabled { color: var(--quiet); background: var(--panel);
  border-color: var(--line); cursor: not-allowed; opacity: .6; filter: none; }
.sup-sent { font-size: 12.5px; color: #3d7a55; font-weight: 600; }
.sup-sent.overdue { color: #b3402a; }
/* M3 已订派生徽章（订单顶部·首付到账+合同已签才亮） */
.ordered-badge { display: inline-block; margin-left: 9px; font-size: 12.5px; font-weight: 700; color: #fff;
  background: #3d7a55; border-radius: 999px; padding: 3px 11px; vertical-align: middle; white-space: nowrap; }
/* M4 资源卡派单次数角标（REQ-D15 回流·出现在选资源当下） */
.dispatch-stat { display: inline-block; font-size: 11px; font-weight: 600; color: #6b5a3a; background: #f3ead7;
  border-radius: 999px; padding: 1px 8px; white-space: nowrap; }
.dispatch-stat.slow { color: #b3402a; background: #f7e3dd; }
/* Gap#2 抽取状态/申请抽取 */
.extract-stat { display: inline-block; font-size: 11px; font-weight: 600; border-radius: 999px; padding: 1px 8px; white-space: nowrap; border: 0; }
.extract-stat.done { color: #3d7a55; background: #e9f3ed; }
.extract-stat.req { color: #9a6b1f; background: #f6ecd5; }
.extract-stat.ask { color: #fff; background: var(--clay); cursor: pointer; }
.extract-stat.ask:hover { filter: brightness(1.07); }
/* 用户管理角色标 */
.role-chip { display: inline-block; font-size: 11px; font-weight: 600; color: var(--sub); background: var(--accent-faint); border-radius: 999px; padding: 1px 9px; }
/* 资源行 录入/维护人 + 认领 */
.res-owner { display: block; font-size: 11px; color: var(--quiet); margin-top: 2px; }
.res-claim { color: var(--clay); cursor: pointer; text-decoration: underline; }
.res-claim:hover { filter: brightness(1.1); }
/* 维护人看板（问责版） */
.mt-panel { margin-bottom: 14px; }
.mt-panel > summary { cursor: pointer; padding: 12px 16px; display: flex; align-items: center; gap: 10px; list-style: revert; }
.mt-panel > summary .small { color: var(--quiet); font-weight: 400; }
.mt-table { display: grid; gap: 0; padding: 0 16px 12px; }
.mt-row { display: grid; grid-template-columns: minmax(110px,1fr) 2fr auto auto; gap: 12px; align-items: center; padding: 9px 4px; border-top: 1px solid var(--line); font-size: 12.5px; }
.mt-row.mt-head { color: var(--quiet); font-size: 11px; border-top: none; }
.mt-name { font-weight: 600; color: var(--ink); }
.mt-cats { color: var(--sub); }
.mt-total { color: var(--quiet); white-space: nowrap; }
.mt-pending { color: #b3402a; font-weight: 600; white-space: nowrap; }
.mt-ok { color: #3d7a55; white-space: nowrap; }
.mt-row.has-pending { background: #fdf6f4; }
.ws-modal { display: grid; gap: 10px; }
.ws-banner { font-size: 12.5px; color: var(--clay); background: var(--accent-faint); border: 1px solid #eccabf;
  border-radius: 8px; padding: 9px 12px; line-height: 1.5; }
.ws-banner-rn { color: #6f4612; background: #fdf6ea; border-color: #d9b27a; }
.ws-leak { font-size: 12.5px; font-weight: 700; color: #fff; background: #b3402a; border-radius: 8px; padding: 9px 12px; line-height: 1.5; }
.ws-pre { font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace; font-size: 13px; line-height: 1.7; color: var(--ink);
  background: var(--bg); border: 1px solid var(--line); border-radius: 10px; padding: 14px 16px; margin: 0;
  white-space: pre-wrap; word-break: break-word; max-height: 56vh; overflow-y: auto; }

/* —— Tab③：收款（D18 各期）+ 老单回退 —— */
.pay-plan, .pay-legacy { display: grid; gap: 0; }
.pay-plan-row { display: grid; grid-template-columns: 26px 1fr auto auto; gap: 12px; align-items: center;
  padding: 11px 4px; border-bottom: 1px solid var(--line); }
.pay-plan-row:last-of-type { border-bottom: none; }
.pay-seq { width: 22px; height: 22px; border-radius: 999px; background: var(--accent-faint); color: var(--clay);
  font-size: 12px; font-weight: 700; display: grid; place-items: center; }
.pay-label { font-size: 13.5px; font-weight: 600; color: var(--ink); }
.pay-label em { font-style: normal; display: block; font-size: 11.5px; font-weight: 400; color: var(--quiet); margin-top: 1px; }
.pay-amt { font-size: 15px; font-weight: 700; color: var(--clay); white-space: nowrap; }
.pay-toggle { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--sub); cursor: pointer; white-space: nowrap; }
.pay-toggle input { width: 16px; height: 16px; accent-color: var(--ok); }
.pay-plan-row.paid { background: #f1f7f3; border-radius: 8px; }
.pay-plan-row.paid .pay-label { color: var(--ok); }
.pay-plan-row.paid .pay-toggle { color: var(--ok); font-weight: 700; }
.pay-plan-foot { display: flex; justify-content: flex-end; gap: 22px; padding: 11px 4px 2px; margin-top: 4px; border-top: 1.5px solid var(--line-strong); }
.pay-plan-foot span { font-size: 13px; color: var(--sub); }
.pay-plan-foot b.ok { color: var(--ok); font-size: 15px; }
.pay-plan-foot b.due { color: #b3402a; font-size: 15px; }
.pay-legacy .pay-plan-row { grid-template-columns: 1fr auto auto; }

/* —— 收款留痕台（REQ-X03）：每期记录 + 应收vs实收对账 + 凭证缩略 + 散收/退款 —— */
.rcpt-ledger .pay-amt { font-size: 13px; font-weight: 600; color: var(--sub); }
.rcpt-btn { border: 1px solid var(--clay); background: #fff; color: var(--clay); font-size: 12px; font-weight: 700;
  padding: 4px 11px; border-radius: 7px; cursor: pointer; white-space: nowrap; }
.rcpt-btn:hover { background: var(--gold-soft, #f7efe2); }
.rcpt-btn.done { border-color: var(--ok); color: var(--ok); }
.rcpt-undo { border: none; background: transparent; color: var(--quiet); font-size: 11.5px; cursor: pointer; margin-left: 4px; text-decoration: underline; }
.rcpt-undo:hover { color: #b3402a; }
/* 已收明细行（实收/方式/日期/备注/凭证） */
.rcpt-detail { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; padding: 4px 4px 9px 26px;
  font-size: 12px; color: var(--sub); border-bottom: 1px dashed var(--line); margin-bottom: 2px; }
.rcpt-detail.refund { background: #fbf2f0; border-radius: 6px; padding-left: 12px; }
.rcpt-actual b { color: var(--ok); font-size: 13.5px; }
.rcpt-detail.refund .rcpt-actual b { color: #b3402a; }
.rcpt-method { background: var(--accent-faint); border-radius: 999px; padding: 1px 8px; font-weight: 600; }
.rcpt-date { color: var(--quiet); }
.rcpt-note { color: var(--sub); max-width: 240px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rcpt-proof { display: inline-block; width: 34px; height: 34px; border-radius: 6px; overflow: hidden; border: 1px solid var(--line); }
.rcpt-proof img { width: 100%; height: 100%; object-fit: cover; display: block; }
/* 散收/退款 */
.rcpt-adhoc-list { margin-top: 2px; }
.pay-plan-row.is-refund .pay-label { color: #b3402a; }
.rcpt-adhoc-acts { display: flex; gap: 10px; padding: 8px 4px 2px; }
.rcpt-adhoc-btn { border: 1px dashed var(--line-strong); background: #fbfaf7; color: var(--sub); font-size: 12px; font-weight: 600;
  padding: 5px 12px; border-radius: 7px; cursor: pointer; }
.rcpt-adhoc-btn:hover { border-color: var(--clay); color: var(--clay); }
.rcpt-adhoc-btn.refund:hover { border-color: #b3402a; color: #b3402a; }
.rcpt-foot { gap: 18px; flex-wrap: wrap; }
.rcpt-foot b { font-size: 15px; }
.rcpt-refund-tag { font-style: normal; font-size: 11px; color: #b3402a; margin-left: 4px; }
/* 收款记录弹窗表单 */
.rcpt-form { display: grid; gap: 12px; }
.rcpt-form-tip { margin: 0; font-size: 12.5px; line-height: 1.6; color: var(--sub); background: var(--accent-faint); border-radius: 8px; padding: 9px 11px; }
.rcpt-f { display: grid; gap: 5px; }
.rcpt-f > span { font-size: 12.5px; font-weight: 600; color: var(--sub); }
.rcpt-f input, .rcpt-f select, .rcpt-f textarea { width: 100%; box-sizing: border-box; border: 1px solid var(--line-strong);
  border-radius: 8px; padding: 8px 10px; font-size: 13px; font-family: inherit; color: var(--ink); background: #fff; }
.rcpt-f textarea { resize: vertical; }
.rcpt-proof-pick { display: flex; gap: 8px; }
.rcpt-proof-pick input { flex: 1; background: #f7f5f1; color: var(--quiet); }
.rcpt-proof-pick button { border: 1px solid var(--clay); background: #fff; color: var(--clay); font-size: 12.5px; font-weight: 700;
  padding: 0 14px; border-radius: 8px; cursor: pointer; white-space: nowrap; }
.rcpt-proof-prev { margin-top: 6px; }
.rcpt-proof-prev .rcpt-proof { width: 96px; height: 96px; }

/* 概况里『待收/待签』强调红 */
.kv strong.due, strong.due { color: #b3402a; }

/* —— 出行人列表 —— */
.traveler-list { display: grid; gap: 6px; }
.traveler-row { display: flex; gap: 14px; align-items: baseline; padding: 8px 12px; border: 1px solid var(--line);
  border-radius: 8px; background: #fbfaf7; font-size: 13px; }
.traveler-row b { color: var(--ink); }
.traveler-row span { color: var(--sub); font-size: 12px; }

/* —— 订单列表行：派单进度 + 最近待办 —— */
.order-subline { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 5px; }
.order-progress { font-size: 11.5px; font-weight: 600; color: var(--quiet); background: var(--accent-faint); border-radius: 999px; padding: 1px 9px; }
.order-progress.pending { color: var(--clay); background: var(--gold-soft); }
.order-progress.done { color: var(--ok); background: #e6f1ea; }
.order-todo { font-size: 11.5px; font-weight: 600; color: var(--accent); }

@media (max-width: 720px) {
  .dispatch-row.dispatch-row-2, .dispatch-row.d-head { grid-template-columns: 1fr 1fr; row-gap: 5px; padding: 10px 12px; }
  .dispatch-row.d-head { display: none; }
  .sup-row { grid-template-columns: 1fr 1fr; row-gap: 6px; }
  .sup-row-name { grid-column: 1 / -1; }
  .pay-plan-row { grid-template-columns: 22px 1fr auto; row-gap: 5px; }
  .pay-plan-row .pay-check { grid-column: 2 / 4; }
}

/* ===== 资源系统 采集/浏览分离：页签 + 浏览页只读卡 ===== 套山西琉璃色，不引入 claude 米色 */
/* 顶部页签（浏览 / 采集） */
.res-tabs { display: inline-flex; gap: 6px; background: var(--accent-faint); border: 1px solid var(--line); border-radius: 10px; padding: 4px; }
.res-tab {
  display: inline-flex; align-items: center; gap: 6px; border: 0; background: transparent;
  color: var(--sub); font-size: 13px; font-weight: 700; padding: 6px 14px; border-radius: 7px; cursor: pointer;
  transition: background 0.12s, color 0.12s;
}
.res-tab:hover { color: var(--accent); }
.res-tab.on { background: var(--panel); color: var(--accent); box-shadow: var(--shadow); }
.res-tab-dot { color: #d9822b; font-size: 11px; line-height: 1; }

/* 采集页：把原右上批量动作收成一条工具栏 */
.res-collect-bar { margin-bottom: 14px; }
.res-collect-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.res-collect-actions .home-stat { margin-right: auto; }
.res-collect-actions button {
  border: 1px solid var(--line-strong); background: var(--panel); color: var(--ink);
  border-radius: 8px; font-size: 12.5px; font-weight: 600; padding: 6px 13px; cursor: pointer;
}
.res-collect-actions button:hover { border-color: var(--accent); color: var(--accent); }
.res-collect-actions .btn-primary { background: var(--accent); color: #fff; border-color: var(--accent); }
.res-collect-actions .btn-primary:hover { color: #fff; filter: brightness(1.04); }

/* 浏览页非酒店类目（门票/导游/体验/园内交通/交通）只读卡区 */
.bo-section { margin-top: 16px; }
.bo-section:first-child { margin-top: 6px; }
.bo-sec-head { display: flex; align-items: baseline; gap: 10px; margin: 0 0 10px; padding-bottom: 6px; border-bottom: 1px dashed var(--line); }
.bo-sec-head b { font-size: 14.5px; font-weight: 800; color: var(--ink); }
.bo-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(248px, 1fr)); gap: 12px; }
.bo-card {
  border: 1px solid var(--line); border-radius: 11px; background: var(--panel); box-shadow: var(--shadow);
  padding: 12px 13px; display: flex; flex-direction: column; gap: 8px;
}
.bo-card:hover { border-color: var(--accent); }
.bo-card.is-cur { box-shadow: 0 0 0 2px var(--accent), var(--shadow); }
.bo-cardhead { display: flex; align-items: center; gap: 8px; }
.bo-name { font-size: 15px; font-weight: 800; color: var(--ink); cursor: pointer; text-decoration: none; flex: 1 1 auto; min-width: 0; }
.bo-name:hover { color: var(--accent); }
.bo-direct { font-size: 14px; text-decoration: none; }
.bo-meta { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; font-size: 12.5px; color: var(--sub); }
.bo-city { white-space: nowrap; }
.bo-unit { color: var(--quiet); }
.bo-price { margin-left: auto; color: var(--ink); }
.bo-price b { color: var(--accent); font-size: 15px; }
.bo-price-todo { color: var(--quiet); font-style: italic; }
.bo-actions { display: flex; align-items: center; gap: 8px; margin-top: 2px; }
.bo-actions .link-btn { font-size: 12.5px; }
.bo-pick {
  margin-left: auto; border: 1px solid var(--accent); background: var(--accent); color: #fff;
  border-radius: 7px; font-size: 12.5px; font-weight: 700; padding: 5px 12px; cursor: pointer;
}
.bo-pick:hover { filter: brightness(1.05); }

@media (max-width: 720px) {
  .res-tabs { width: 100%; }
  .res-tab { flex: 1 1 0; justify-content: center; padding: 8px 6px; }
  .bo-cards { grid-template-columns: 1fr; }
  .res-collect-actions .home-stat { margin-right: 0; width: 100%; }
}

/* ============================================================================
   资源库 = 盘点体检台 + 决策洞察台（2026-06-17 推倒重做）
   左侧筛选导览 + 6 类各独立成块 + 缺口体检 + 批量治乱 + 真图表仪表盘
   ============================================================================ */
.res-lib-note { margin: -4px 0 14px; font-size: 12.5px; color: var(--sub); line-height: 1.6; }
.res-lib-note b { color: var(--accent); }

/* 盘点台两栏：左导览 + 右内容 */
.inv-layout { display: grid; grid-template-columns: 188px 1fr; gap: 16px; align-items: start; }
.inv-sidebar {
  position: sticky; top: 12px;
  background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius);
  padding: 10px; box-shadow: var(--shadow); display: flex; flex-direction: column; gap: 14px;
}
.inv-nav-group { display: flex; flex-direction: column; gap: 3px; }
.inv-nav-title { font-size: 11px; color: var(--quiet); font-weight: 700; letter-spacing: .04em; padding: 2px 6px 4px; text-transform: uppercase; }
.inv-nav-item {
  display: flex; align-items: center; gap: 8px; width: 100%;
  background: transparent; border: 1px solid transparent; border-radius: 8px;
  padding: 7px 9px; cursor: pointer; font-size: 13px; color: var(--ink); text-align: left;
}
.inv-nav-item:hover { background: var(--accent-faint); }
.inv-nav-item.on { background: var(--accent-soft); border-color: var(--accent); color: var(--accent); font-weight: 600; }
.inv-nav-ico { width: 18px; text-align: center; flex: 0 0 auto; }
.inv-nav-label { flex: 1 1 auto; }
.inv-nav-count { font-size: 11.5px; color: var(--quiet); font-variant-numeric: tabular-nums; background: var(--accent-faint); border-radius: 9px; padding: 1px 7px; }
.inv-nav-item.on .inv-nav-count { background: var(--panel); color: var(--accent); }
.inv-nav-status.warn .inv-nav-count { color: var(--amber); }
.inv-nav-status.hard .inv-nav-count { color: #c0392b; }
.inv-nav-status.ok .inv-nav-count { color: var(--ok); }

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

/* 批量操作条 */
.inv-batchbar { border-radius: var(--radius); padding: 9px 14px; font-size: 13px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.inv-batchbar.idle { background: var(--accent-faint); border: 1px dashed var(--line-strong); color: var(--sub); }
.inv-batch-hint { color: var(--sub); }
.inv-batchbar.active { background: #fff7ee; border: 1px solid var(--accent); }
.inv-batch-n { font-weight: 600; }
.inv-batch-n b { color: var(--accent); }
.inv-batchbar.active button { font-size: 12.5px; padding: 5px 11px; border-radius: 7px; border: 1px solid var(--line-strong); background: var(--panel); cursor: pointer; }
.inv-batchbar.active button:hover { border-color: var(--accent); color: var(--accent); }
.inv-batchbar.active button.danger { border-color: #e3b7ac; color: #c0392b; }
.inv-batchbar.active button.danger:hover { background: var(--red-soft); }
.inv-batchbar.active button.link-btn { border: none; background: none; }

/* 搜索条 */
.inv-searchbar { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.inv-searchbar input { flex: 0 1 260px; height: var(--control-h); border: 1px solid var(--line-strong); border-radius: 8px; padding: 0 12px; font-size: 13px; background: var(--panel); color: var(--ink); }
.inv-searchbar > button { height: var(--control-h); padding: 0 14px; border: 1px solid var(--line-strong); background: var(--panel); border-radius: 8px; cursor: pointer; font-size: 13px; }
.inv-searchbar > button.link-btn { border: none; background: none; }
.inv-quickadd { margin-left: auto; display: flex; gap: 6px; flex-wrap: wrap; }
.inv-quickadd button { height: var(--control-h); padding: 0 12px; border: 1px solid var(--line-strong); background: var(--panel); border-radius: 8px; cursor: pointer; font-size: 12.5px; }
.inv-quickadd button:hover { border-color: var(--accent); }
.inv-quickadd .btn-primary { background: var(--accent); color: #fff; border-color: var(--accent); }

/* 全部类目首页：只画摘要卡，不渲染资源行，减少进资源系统时的 DOM/事件压力 */
.inv-overview { background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow); padding: 14px 16px; }
.inv-overview-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin-bottom: 12px; }
.inv-overview-head h2 { margin: 0 0 4px; font-size: 16px; }
.inv-overview-head p { margin: 0; color: var(--sub); font-size: 12.5px; line-height: 1.6; }
.inv-overview-total { flex: 0 0 auto; border-radius: 999px; background: var(--accent-faint); color: var(--accent); padding: 4px 10px; font-size: 12px; font-weight: 700; }
.inv-cat-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.inv-cat-card { border: 1px solid var(--line); border-radius: 10px; padding: 12px; background: linear-gradient(180deg, #fff, var(--bg)); display: flex; flex-direction: column; gap: 10px; min-width: 0; }
.inv-cat-card.is-empty { opacity: .58; }
.inv-cat-card-top { display: flex; align-items: center; gap: 10px; }
.inv-cat-icon { width: 34px; height: 34px; border-radius: 10px; display: grid; place-items: center; background: var(--accent-faint); font-size: 18px; flex: 0 0 auto; }
.inv-cat-card h3 { margin: 0; font-size: 15px; }
.inv-cat-card p { margin: 0; color: var(--sub); font-size: 12.5px; line-height: 1.5; }
.inv-cat-card-metrics { display: flex; flex-wrap: wrap; gap: 6px; }
.inv-cat-card-metrics span { border: 1px solid var(--line); background: var(--panel); border-radius: 999px; padding: 2px 8px; font-size: 11.5px; color: var(--sub); }
.inv-cat-card-metrics .hard { color: #b03a22; background: var(--red-soft); border-color: #e8c4ba; }
.inv-cat-card-metrics .warn { color: var(--amber); background: var(--gold-soft); border-color: #ecdcb8; }
.inv-cat-card-metrics .ok { color: var(--ok); background: #eef6f0; border-color: #cfe6d6; }
.inv-cat-card-city { min-height: 36px; }
.inv-cat-enter { margin-top: auto; height: 32px; border: 1px solid var(--line-strong); border-radius: 8px; background: var(--panel); color: var(--ink); cursor: pointer; font-size: 12.5px; }
.inv-cat-enter:hover { border-color: var(--accent); color: var(--accent); }
.inv-cat-enter:disabled { cursor: not-allowed; color: var(--quiet); border-color: var(--line); }

/* 类目盘点块 */
.inv-block { background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow); padding: 14px 16px; }
.inv-block-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 10px; flex-wrap: wrap; }
.inv-block-head h2 { font-size: 16px; margin: 0; display: flex; align-items: baseline; gap: 8px; }
.inv-block-count { font-size: 12.5px; color: var(--quiet); font-weight: 500; }
.inv-block-head-right { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.inv-stock-warn { font-size: 12px; color: #c0392b; background: var(--red-soft); border-radius: 7px; padding: 2px 9px; }
.inv-collect-toggle { font-size: 12.5px; }

/* 缺口体检条（类目级·一眼缺什么） */
.inv-exam { display: flex; gap: 7px; flex-wrap: wrap; margin-bottom: 10px; }
.inv-exam-pill { font-size: 12px; border-radius: 12px; padding: 2px 10px; border: 1px solid var(--line); background: var(--bg); color: var(--sub); }
.inv-exam-pill b { font-variant-numeric: tabular-nums; }
.inv-exam-pill.hard { background: var(--red-soft); border-color: #e3b7ac; color: #b03a22; }
.inv-exam-pill.warn { background: var(--gold-soft); border-color: #e6d2a8; color: var(--amber); }
.inv-exam-pill.ok { background: #eef6f0; border-color: #cfe6d6; color: var(--ok); }
.inv-exam-pill.dim { background: var(--accent-faint); border-color: var(--line); color: var(--quiet); }

/* 盘点行表格 */
.inv-table { display: flex; flex-direction: column; }
.inv-row { display: grid; grid-template-columns: 32px minmax(150px, 1.6fr) 88px minmax(150px, 1.5fr) minmax(120px, 1fr) 150px 64px 168px; gap: 8px; align-items: center; padding: 8px 6px; border-bottom: 1px solid var(--line); font-size: 13px; }
.inv-row.inv-head { font-size: 11.5px; color: var(--quiet); font-weight: 700; border-bottom: 1.5px solid var(--line-strong); text-transform: none; }
.inv-row:last-child { border-bottom: none; }
.inv-row.has-hard { background: linear-gradient(90deg, rgba(192,57,46,0.045), transparent 40%); }
.inv-row.is-sel { background: var(--accent-soft); }
.inv-row.is-off { opacity: .55; }
/* 选框缩小（2026-06-17 定稿点④：之前太大）→ 约 14px */
.inv-c-check input[type="checkbox"] { width: 14px; height: 14px; cursor: pointer; accent-color: var(--accent); margin: 0; vertical-align: middle; }
.inv-c-name { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; min-width: 0; }
.inv-c-name .res-name-link { font-weight: 600; }
.inv-c-city { font-size: 12.5px; color: var(--sub); }
.inv-c-gap { display: flex; flex-wrap: wrap; gap: 4px; }
.inv-gap { font-size: 11px; border-radius: 9px; padding: 1px 7px; white-space: nowrap; }
.inv-gap.hard { background: var(--red-soft); color: #b03a22; border: 1px solid #e8c4ba; }
.inv-gap.soft { background: var(--gold-soft); color: var(--amber); border: 1px solid #ecdcb8; }
.inv-gap.ok { background: #eef6f0; color: var(--ok); border: 1px solid #cfe6d6; }
/* Step4 下次动作列：醒目有存在感(非淡灰·可读性铁律)。按缺什么自动判断的下一步。 */
.inv-c-next { display: flex; }
.inv-next { font-size: 11.5px; font-weight: 650; border-radius: 9px; padding: 2px 9px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.inv-next.act { background: var(--gold-soft); color: var(--amber); border: 1px solid #ecdcb8; }
.inv-next.shelf { background: #eef4ff; color: #2b4f8f; border: 1px solid #c2d4f2; }
.inv-next.ready { background: #eef6f0; color: var(--ok); border: 1px solid #cfe6d6; }
.inv-c-owner { font-size: 11.5px; color: var(--sub); display: flex; flex-direction: column; gap: 1px; }
.inv-owner-rec { color: var(--quiet); }
.res-claim { color: var(--accent); cursor: pointer; text-decoration: underline; }
.inv-c-use { font-size: 12px; color: var(--sub); font-variant-numeric: tabular-nums; }
.inv-use.dim { color: var(--quiet); }
.inv-c-ops { display: flex; gap: 4px; flex-wrap: wrap; }
.inv-c-ops .link-btn { font-size: 12px; padding: 2px 6px; }

/* 无主资源独立组 */
.inv-unowned { border-color: #e6d2a8; background: linear-gradient(180deg, #fffdf7, var(--panel) 60px); }
.inv-unowned-acts { display: flex; gap: 8px; align-items: center; }
.inv-unowned-note { font-size: 12.5px; color: var(--sub); line-height: 1.6; margin: 0 0 8px; }
.inv-unowned-note b { color: var(--accent); }

/* ---------- 资源库增强（2026-06-17 🔧阿筑）：两 tab / 多维筛选条 / 采集模式 / 看板注 ---------- */

/* 看板已砍·一行注 */
.res-board-note {
  margin: 6px 0 0; font-size: 12.5px; color: var(--sub); line-height: 1.6;
  background: var(--accent-faint); border: 1px dashed var(--line-strong); border-radius: var(--radius);
  padding: 8px 14px;
}
.res-board-note b { color: var(--ink); }

/* 采集·录入 / 盘点·回看 两 tab */
.inv-modetabs { display: flex; gap: 8px; margin-bottom: 2px; flex-wrap: wrap; }
.inv-modetab {
  display: flex; flex-direction: column; align-items: flex-start; gap: 1px;
  background: var(--panel); border: 1px solid var(--line-strong); border-radius: 10px;
  padding: 7px 16px; cursor: pointer; font-size: 14px; font-weight: 600; color: var(--sub); position: relative;
}
.inv-modetab:hover { border-color: var(--accent); }
.inv-modetab.on { background: var(--accent); border-color: var(--accent); color: #fff; }
.inv-modetab-sub { font-size: 11px; font-weight: 500; opacity: .8; }
.inv-modetab .inv-mode-dot { position: absolute; top: 6px; right: 8px; color: #ffd24a; font-size: 13px; }
.inv-modetab.on .inv-mode-dot { color: #fff; }

/* 多维筛选条（点进单类目才出·该类自己的维度） */
.inv-facetbar {
  background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius);
  box-shadow: var(--shadow); padding: 10px 14px; display: flex; flex-direction: column; gap: 8px; position: relative;
}
.inv-facet-row { display: flex; align-items: flex-start; gap: 10px; }
.inv-facet-key { flex: 0 0 auto; font-size: 12px; font-weight: 700; color: var(--quiet); padding-top: 5px; min-width: 42px; }
.inv-fchips { display: flex; flex-wrap: wrap; gap: 6px; }
.inv-fchip {
  display: inline-flex; align-items: center; gap: 5px;
  background: var(--bg); border: 1px solid var(--line-strong); border-radius: 14px;
  padding: 3px 11px; cursor: pointer; font-size: 12.5px; color: var(--ink); white-space: nowrap;
}
.inv-fchip:hover { border-color: var(--accent); }
.inv-fchip.on { background: var(--accent-soft); border-color: var(--accent); color: var(--accent); font-weight: 600; }
.inv-fchip-n { font-size: 11px; color: var(--quiet); font-variant-numeric: tabular-nums; background: var(--accent-faint); border-radius: 8px; padding: 0 6px; }
.inv-fchip.on .inv-fchip-n { background: var(--panel); color: var(--accent); }
.inv-facet-clear { position: absolute; top: 8px; right: 12px; font-size: 11.5px; color: var(--quiet); background: none; border: none; cursor: pointer; }
.inv-facet-clear:hover { color: var(--accent); }

/* 采集·录入 模式 */
.inv-collect-entry {
  background: linear-gradient(180deg, #fffdf7, var(--panel) 70px); border: 1px solid #e6d2a8;
  border-radius: var(--radius); box-shadow: var(--shadow); padding: 14px 16px;
  display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap;
}
.inv-collect-entry-main h3 { margin: 0 0 4px; font-size: 15px; }
.inv-collect-entry-main .small { margin: 0; color: var(--sub); max-width: 560px; line-height: 1.55; }
.inv-collect-entry-acts { display: flex; gap: 8px; flex-wrap: wrap; }
.inv-collect-entry-acts button { height: var(--control-h); padding: 0 13px; border: 1px solid var(--line-strong); background: var(--panel); border-radius: 8px; cursor: pointer; font-size: 12.5px; }
.inv-collect-entry-acts button:hover { border-color: var(--accent); }
.inv-collect-entry-acts .btn-primary { background: var(--accent); color: #fff; border-color: var(--accent); }
.inv-collect-pick { background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow); padding: 14px 16px; margin-top: 12px; }
.inv-collect-pick .small { margin: 0 0 10px; color: var(--sub); }
.inv-collect-pick-cards { display: flex; gap: 12px; flex-wrap: wrap; }
.inv-collect-card {
  display: flex; flex-direction: column; gap: 3px; align-items: flex-start;
  background: var(--bg); border: 1px solid var(--line-strong); border-radius: 10px;
  padding: 12px 16px; cursor: pointer; font-size: 14px; font-weight: 600; color: var(--ink); min-width: 200px; text-align: left;
}
.inv-collect-card:hover { border-color: var(--accent); background: var(--accent-faint); }
.inv-collect-card span { font-size: 11.5px; font-weight: 500; color: var(--sub); }

/* ---------- 维护人仪表盘 · 真图表 ---------- */
.dash-panel .panel-body { padding-top: 6px; }
.dash-bars { display: flex; flex-direction: column; gap: 7px; margin: 4px 0 2px; }
.dash-bar-row { display: grid; grid-template-columns: 116px 1fr 40px; gap: 10px; align-items: center; }
.dash-bar-label { font-size: 12.5px; color: var(--ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dash-bar-track { display: flex; height: 22px; background: var(--accent-faint); border-radius: 6px; overflow: hidden; }
.dash-seg { display: flex; align-items: center; justify-content: flex-end; padding: 0 6px; font-size: 11px; color: #fff; font-weight: 600; min-width: 18px; box-sizing: border-box; }
.dash-seg.hard { background: #c0503a; }
.dash-seg.soft { background: var(--amber); }
.dash-bar-num { font-size: 12.5px; color: var(--sub); font-variant-numeric: tabular-nums; text-align: right; font-weight: 600; }
.dash-legend { display: flex; gap: 16px; margin-top: 10px; font-size: 12px; }
.dash-leg.hard { color: #c0503a; }
.dash-leg.soft { color: var(--amber); }

/* 问责排行 */
.dash-rank { display: flex; flex-direction: column; }
.dash-rank-row { display: grid; grid-template-columns: 40px minmax(90px, 1.2fr) minmax(120px, 1.8fr) 60px auto; gap: 10px; align-items: center; padding: 8px 6px; border-bottom: 1px solid var(--line); font-size: 13px; }
.dash-rank-row:last-child { border-bottom: none; }
.dash-rank-row.urgent { background: linear-gradient(90deg, rgba(192,80,58,0.06), transparent 50%); }
.dash-rank-no { font-weight: 700; color: var(--quiet); font-variant-numeric: tabular-nums; }
.dash-rank-row.urgent .dash-rank-no { color: #c0503a; }
.dash-rank-name { font-weight: 600; }
.dash-rank-cats { font-size: 11.5px; color: var(--sub); }
.dash-rank-total { font-size: 12px; color: var(--quiet); }
.dash-rank-flag { font-size: 11.5px; border-radius: 10px; padding: 2px 9px; white-space: nowrap; }
.dash-rank-flag.hard { background: var(--red-soft); color: #b03a22; }
.dash-rank-flag.soft { background: var(--gold-soft); color: var(--amber); }
.dash-rank-flag.ok { background: #eef6f0; color: var(--ok); }

/* 责任热力图 */
.dash-heat { overflow-x: auto; }
.dash-heat-row { display: grid; grid-template-columns: 120px repeat(6, minmax(40px, 1fr)); gap: 4px; align-items: stretch; margin-bottom: 4px; }
.dash-heat-name { font-size: 12px; color: var(--ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: flex; align-items: center; }
.dash-heat-cell { position: relative; min-height: 30px; border: 1px solid var(--line); border-radius: 6px; display: flex; align-items: center; justify-content: center; font-size: 12.5px; font-weight: 600; color: var(--ink); font-variant-numeric: tabular-nums; }
.dash-heat-cell.head { background: var(--accent-faint); font-size: 15px; min-height: 26px; }
.dash-heat-cell.empty { background: var(--bg); color: var(--quiet); }
.dash-heat-cell.has { color: #3a2a1a; }
.dash-heat-hard { position: absolute; top: -5px; right: -5px; background: #c0503a; color: #fff; font-size: 9.5px; font-style: normal; border-radius: 8px; padding: 0 4px; line-height: 15px; font-weight: 700; }
.dash-heat-note { margin-top: 8px; color: var(--quiet); }

/* 派单盯单 */
.dash-track-list { display: flex; flex-direction: column; }
.dash-track-row { display: grid; grid-template-columns: minmax(120px, 1.6fr) 70px minmax(80px, 1fr) minmax(160px, 1.4fr); gap: 10px; align-items: center; padding: 7px 6px; border-bottom: 1px solid var(--line); font-size: 12.5px; }
.dash-track-row:last-child { border-bottom: none; }
.dash-track-cat { color: var(--sub); }
.dash-track-keeper { color: var(--sub); font-size: 11.5px; }
.dash-track-sig { color: var(--sub); }
.dash-track-sig b.warn { color: #c0503a; }

/* 我维护的体检（普通员工视图） */
.mt-mine-line { font-size: 13.5px; line-height: 1.7; }
.mt-mine-line b.hard { color: #c0503a; }
.mt-mine-line b.soft { color: var(--amber); }
.mt-ok-line { color: var(--ok); font-size: 13px; }

/* 报价台挑货增强：类目页签 + 城市筛 */
.qr-pick-cats { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 10px; }
.qr-cat { font-size: 12.5px; padding: 4px 11px; border-radius: 14px; border: 1px solid var(--line-strong); background: var(--panel); cursor: pointer; color: var(--sub); }
.qr-cat.on { background: var(--accent-soft); border-color: var(--accent); color: var(--accent); font-weight: 600; }
.qr-cat em { font-style: normal; font-size: 11px; color: var(--quiet); }
.qr-cat.on em { color: var(--accent); }
.qr-pick-tools { display: flex; gap: 8px; }
.qr-pick-tools input { flex: 1 1 auto; }
.qr-pick-tools select { height: var(--control-h); border: 1px solid var(--line-strong); border-radius: 8px; padding: 0 8px; font-size: 13px; background: var(--panel); color: var(--ink); }
.qr-pick-main { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; min-width: 0; }
.qr-pick-city { font-size: 11.5px; color: var(--sub); }
.qr-pick-shelf { font-size: 10.5px; color: var(--ok); background: #eef6f0; border-radius: 8px; padding: 1px 6px; }
.qr-pick-price { white-space: nowrap; }

@media (max-width: 900px) {
  .inv-layout { grid-template-columns: 1fr; }
  .inv-sidebar { position: static; flex-direction: row; flex-wrap: wrap; gap: 10px; }
  .inv-nav-group { flex: 1 1 240px; }
  .inv-row { grid-template-columns: 28px 1.4fr 1.4fr 56px; }
  .inv-row .inv-c-city, .inv-row .inv-c-owner, .inv-row .inv-c-next { display: none; }
  .dash-bar-row { grid-template-columns: 90px 1fr 34px; }
  .dash-rank-row { grid-template-columns: 30px 1fr auto; }
  .dash-rank-cats, .dash-rank-total { display: none; }
}

/* ───────── 酒店录入：一级页极简 + 二级页房型三价（Lucia 2026-06-18） ───────── */
.hf-wrap { display: grid; gap: 4px; }
.hf-sec-h { font-size: 15px; font-weight: 700; color: var(--ink); margin: 2px 0 12px; }
.hf-sec-h .hf-sub { font-size: 12.5px; font-weight: 500; color: var(--quiet); margin-left: 8px; }
.hf-l1 .field, .hf-l2 .field { display: grid; gap: 6px; margin-bottom: 12px; align-content: start; }
.hf-l1 label, .hf-l2 label { color: var(--sub); font-size: 13px; font-weight: 650; }
/* 直达链接置顶：暖色描边强调 */
.hf-direct input { border: 1.5px solid var(--accent); background: #fffaf5; }
.hf-auto, .hf-resv { font-size: 11px; font-weight: 500; color: var(--accent); background: var(--accent-faint); padding: 1px 6px; border-radius: 6px; margin-left: 6px; }
.hf-resv { color: var(--quiet); background: #f3efe9; }
.hf-paste-len { font-size: 11px; font-weight: 500; color: var(--quiet); margin-left: 8px; }
.hf-l1-actions { display: flex; gap: 10px; align-items: center; margin: 6px 0 4px; flex-wrap: wrap; }
.hf-extract-btn { font-size: 14px; }
.hf-save-l1, .hf-save-l2 { border: 1px solid var(--accent); background: #fff; color: var(--accent); border-radius: 8px; padding: 8px 14px; font-size: 13.5px; font-weight: 650; cursor: pointer; }
.hf-save-l1:hover, .hf-save-l2:hover { background: var(--accent-faint); }
.hf-extract-out { margin-top: 10px; }
.hf-ex-card { display: flex; flex-wrap: wrap; gap: 8px 12px; align-items: center; padding: 10px 12px; border: 1px solid var(--accent-soft); background: #fffaf5; border-radius: 8px; font-size: 13px; }
.hf-ex-ok { color: var(--ok); font-weight: 650; }
.hf-ex-zuan, .hf-ex-range { color: var(--ink); background: #fff; border: 1px solid var(--line); border-radius: 6px; padding: 2px 8px; font-size: 12.5px; }
.hf-ex-tip { flex-basis: 100%; color: var(--quiet); font-size: 12px; }
/* 二级页房型三价表 */
.hf-l2-actions { display: flex; gap: 10px; align-items: center; margin: 12px 0 6px; }
.hf-addroom { border: 1px dashed var(--line-strong); background: #fff; color: var(--sub); border-radius: 8px; padding: 8px 14px; font-size: 13px; cursor: pointer; }
.hf-addroom:hover { border-color: var(--accent); color: var(--accent); }
.hf-l2-note { font-size: 12px; color: var(--quiet); margin: 6px 0 0; }
.hf-rooms-empty { padding: 16px; border: 1px dashed var(--line-strong); border-radius: 8px; color: var(--quiet); font-size: 13px; line-height: 1.6; background: #fcfbf9; }
.hf-room-row { display: grid; grid-template-columns: minmax(0,2.2fr) minmax(0,1fr) minmax(0,1fr) minmax(0,1fr) 32px; gap: 8px; align-items: center; margin-bottom: 8px; }
.hf-room-head { font-size: 12px; font-weight: 650; color: var(--sub); margin-bottom: 6px; padding: 0 2px; }
.hf-room-head .hf-rp i { font-weight: 500; font-style: normal; color: var(--accent); font-size: 11px; }
.hf-room-row input { padding: 7px 9px; font-size: 13px; }
.hf-rp-ctrip { display: flex; align-items: center; justify-content: flex-start; padding: 7px 9px; font-size: 13px; font-weight: 650; color: var(--accent); background: #fffaf5; border: 1px solid var(--accent-soft); border-radius: 8px; min-height: 34px; box-sizing: border-box; }
.hf-ct-todo { color: var(--quiet); font-weight: 500; font-size: 12px; }
.hf-room-del { border: none; background: transparent; color: var(--quiet); font-size: 15px; cursor: pointer; padding: 4px; line-height: 1; }
.hf-room-del:hover { color: var(--danger, #c0392b); }

/* ============ 出行·合同（REQ-X04 MVP）============ */
.ctr-note { background: var(--accent-faint); border: 1px solid var(--accent-soft); border-radius: 12px; padding: 12px 14px; margin-bottom: 14px; font-size: 13px; line-height: 1.7; color: var(--ink); }
.ctr-note .ctr-auto { margin: 0 2px; }
.ctr-blocker { background: var(--red-soft, #fdecea); border: 1px solid #e8a99f; border-left: 4px solid var(--danger, #c0392b); border-radius: 10px; padding: 11px 14px; margin-bottom: 14px; font-size: 13px; line-height: 1.6; color: #8a2c1d; }
.ctr-blocker a { color: #b53a26; font-weight: 650; margin-left: 6px; }
.ctr-mod { margin-bottom: 14px; }
.ctr-modhead { display: flex; align-items: center; gap: 9px; padding-bottom: 10px; margin-bottom: 12px; border-bottom: 1px solid var(--line); }
.ctr-modhead h3 { margin: 0; font-size: 15px; font-weight: 700; color: var(--ink); }
.ctr-modno { display: inline-flex; align-items: center; justify-content: center; min-width: 24px; height: 24px; padding: 0 6px; border-radius: 7px; background: var(--accent); color: #fff; font-size: 13px; font-weight: 700; }
.ctr-todo, .ctr-blk-pill { margin-left: auto; font-size: 11px; font-weight: 600; color: #b06a1a; background: #fdf3e3; border: 1px solid #f0d9b0; border-radius: 6px; padding: 2px 8px; }
.ctr-ok-pill { margin-left: auto; font-size: 11px; font-weight: 600; color: var(--jade-dark, #1c7c54); background: #e9f7ef; border: 1px solid #b6e2c8; border-radius: 6px; padding: 2px 8px; }
.ctr-blk-pill { color: #b53a26; background: #fdecea; border-color: #e8a99f; }
.ctr-auto { display: inline-block; font-size: 11px; font-weight: 600; color: var(--jade-dark, #1c7c54); background: #eaf7f0; border: 1px solid #bfe6d0; border-radius: 6px; padding: 1px 7px; vertical-align: middle; }
.ctr-grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 16px; }
.ctr-grid3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px 16px; }
.ctr-grid4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px 16px; }
@media (max-width: 900px) { .ctr-grid3, .ctr-grid4 { grid-template-columns: 1fr 1fr; } }
@media (max-width: 720px) { .ctr-grid2, .ctr-grid3, .ctr-grid4 { grid-template-columns: 1fr; } }
/* 报单页按钮小一号（K12「按钮改小」） */
.ctr-mod .btn-sm, .ctr-actions .btn-sm, .home-topbar-actions .btn-sm { padding: 5px 12px; font-size: 12.5px; border-radius: 7px; }
/* K14 付款截图拖拽/粘贴区 */
.ctr-pay-drop { margin-top: 12px; padding: 16px; border: 1.5px dashed var(--line-strong, var(--line)); border-radius: 10px;
  background: #faf9f6; color: var(--sub); font-size: 12.5px; text-align: center; cursor: pointer; transition: border-color .12s, background .12s; }
.ctr-pay-drop:hover { border-color: var(--accent); }
.ctr-pay-drop.drag { border-color: var(--accent); background: var(--accent-faint, #eef7f1); }
.ctr-pay-drop b { color: var(--ink); }
.ctr-f { display: flex; flex-direction: column; gap: 4px; font-size: 12px; color: var(--sub); }
.ctr-f > span { font-weight: 600; }
.ctr-f .req { color: var(--danger, #c0392b); font-size: 11px; margin-left: 3px; }
.ctr-f input, .ctr-f select, .ctr-f textarea { padding: 8px 10px; font-size: 13px; border: 1px solid var(--line-strong, var(--line)); border-radius: 8px; background: #fff; color: var(--ink); box-sizing: border-box; width: 100%; }
.ctr-f textarea { resize: vertical; }
.ctr-f .ctr-disabled, .ctr-f input:disabled { background: #f3f1ee; color: var(--quiet); font-style: italic; }
.ctr-hint { font-size: 12px; color: var(--sub); line-height: 1.6; margin: 10px 0 0; }
.ctr-sub { font-size: 12.5px; font-weight: 650; color: var(--ink); margin-bottom: 6px; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
/* 法律正文占位 */
.ctr-legal { background: #faf8f4; border: 1px dashed var(--line-strong, #d8d2c8); border-radius: 10px; padding: 12px 14px; }
.ctr-legal-flag { display: inline-block; font-size: 12px; font-weight: 700; color: #8a6d3b; background: #fcf3df; border: 1px solid #ecd9ad; border-radius: 6px; padding: 2px 9px; margin-bottom: 8px; }
.ctr-legal p { margin: 0; font-size: 12.5px; line-height: 1.7; color: var(--sub); }
.ctr-refund { width: 100%; border-collapse: collapse; margin-top: 10px; font-size: 12.5px; }
.ctr-refund td { border: 1px solid var(--line); padding: 6px 10px; color: var(--ink); }
.ctr-refund td:first-child { color: var(--sub); width: 55%; }
.ctr-refund td:last-child { font-weight: 600; }
/* 名单 / 含项 / 分期 表 */
.ctr-tlist, .ctr-inst { width: 100%; border-collapse: collapse; margin-top: 6px; font-size: 12.5px; }
.ctr-tlist th, .ctr-tlist td, .ctr-inst th, .ctr-inst td { border: 1px solid var(--line); padding: 6px 9px; text-align: left; }
.ctr-tlist th, .ctr-inst th { background: var(--soft, #f6f4f0); color: var(--sub); font-weight: 600; }
.ctr-inst input { width: 100%; box-sizing: border-box; border: 1px solid var(--line); border-radius: 6px; padding: 5px 7px; font-size: 12.5px; }
.ctr-miss { color: var(--danger, #c0392b); font-weight: 600; }
.ctr-ok { color: var(--jade-dark, #1c7c54); font-weight: 600; }
/* 合同信息输出（K25/K26 · 2026-07-14）：高亮取数 + 分板块复制 + 凭证闸门 */
.ctr-hl { background: #fff4cc; color: inherit; border-radius: 3px; padding: 0 3px; font-weight: 700; box-decoration-break: clone; }
.ctr-out-block { margin-bottom: 14px; }
.ctr-out-headacts { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ctr-out-pre { white-space: pre-wrap; font: 13px/1.9 var(--font, inherit); background: var(--soft, #f6f4f0); border: 1px solid var(--line); border-radius: 10px; padding: 12px 14px; margin: 0; overflow-x: auto; }
.ctr-out-kv { grid-template-columns: repeat(2, 1fr); }
.ctr-out-kv .kv { align-items: flex-start; }
.ctr-out-kv-wide { grid-column: 1 / -1; }
.ctr-out-hint { font-size: 12px; color: var(--sub, #5f5a51); margin-top: 8px; }
.ctr-out-gate { display: flex; gap: 14px; align-items: flex-start; background: #fbf7ee; border: 1px dashed var(--accent-soft, #f0d9b8); border-radius: 12px; padding: 14px 16px; }
.ctr-out-gate-ic { font-size: 26px; line-height: 1; }
.ctr-out-gate b { font-size: 14px; color: var(--clay, #914f3a); }
.ctr-out-gate p { margin: 4px 0 0; font-size: 12.5px; color: var(--sub, #5f5a51); line-height: 1.7; }
.ctr-out-inc { border: 1px solid var(--line); border-radius: 10px; padding: 10px 12px; margin-bottom: 8px; }
.ctr-out-inc-h { margin-bottom: 4px; font-size: 13.5px; color: var(--ink); }
.ctr-out-inc ul { margin: 0; padding-left: 18px; font-size: 12.5px; line-height: 1.75; color: var(--sub, #4a463f); }
.ctr-out-ul, .ctr-out-ol { margin: 0; padding-left: 20px; font-size: 12.5px; line-height: 1.85; color: var(--ink); }
.ctr-out-ol li { margin-bottom: 4px; }
.ctr-out-review { margin-bottom: 4px; }
.ctr-out-trav-contact { font-size: 13px; margin-bottom: 8px; }
.ctr-out-econtract { text-decoration: none; }
@media (max-width: 720px) { .ctr-out-kv { grid-template-columns: 1fr; } }
.ctr-lines { display: flex; flex-direction: column; gap: 5px; }
.ctr-line { display: flex; gap: 10px; align-items: baseline; padding: 6px 9px; background: #faf9f6; border: 1px solid var(--line); border-radius: 8px; font-size: 13px; }
.ctr-cat { flex: 0 0 70px; font-weight: 650; color: var(--accent); }
.ctr-atts { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 10px; }
.ctr-att { font-size: 12px; color: var(--sub); background: #f6f4f0; border: 1px solid var(--line); border-radius: 7px; padding: 5px 9px; }
.ctr-att em { color: var(--quiet); font-style: normal; }
.ctr-travelers { margin-top: 10px; }
/* 保险卡口 */
.ctr-ins-box { border: 1px solid var(--line); border-radius: 10px; padding: 11px 13px; }
.ctr-ins-box.blk { border-color: #e8a99f; background: #fdf6f5; }
.ctr-li-warn { margin-top: 8px; font-size: 12px; color: #b53a26; font-weight: 600; }
.ctr-check { display: flex; align-items: flex-start; gap: 8px; margin-top: 10px; font-size: 12.5px; color: var(--ink); line-height: 1.5; cursor: pointer; }
.ctr-check input { margin-top: 2px; }
.ctr-sign { border: 1px solid var(--accent-soft); }
.ctr-actions { position: sticky; bottom: 0; display: flex; gap: 10px; justify-content: flex-end; padding: 12px 0; background: linear-gradient(transparent, var(--bg) 30%); margin-top: 4px; }
.ctr-actions button { padding: 9px 16px; }

/* —— 合同工作队列（出行·合同左侧导航落点）—— */
.ctrq-note { font-size: 13px; line-height: 1.7; color: var(--sub); background: var(--accent-faint); border-radius: 10px; padding: 11px 14px; margin: 0 0 16px; }
.ctrq-sec { margin-bottom: 16px; }
.ctrq-count { display: inline-block; min-width: 20px; text-align: center; font-size: 12px; font-weight: 700; color: var(--clay); background: var(--gold-soft); border-radius: 999px; padding: 1px 8px; margin-left: 6px; }
.ctrq-list { display: grid; gap: 10px; }
.ctrq-card { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 13px 15px;
  border: 1px solid var(--line); border-radius: 11px; background: #fff; cursor: pointer; transition: border-color .12s, box-shadow .12s; }
.ctrq-card:hover { border-color: var(--clay); box-shadow: 0 4px 14px rgba(145, 79, 58, .1); }
.ctrq-title { font-size: 14.5px; font-weight: 700; color: var(--ink); }
.ctrq-meta { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 4px; font-size: 12px; color: var(--sub); }
.ctrq-meta span:empty { display: none; }
.ctrq-sub { margin-top: 5px; font-size: 12px; color: var(--quiet); }
.ctrq-side { display: flex; flex-direction: column; align-items: flex-end; gap: 6px; flex: 0 0 auto; }
.ctrq-tag { font-size: 11.5px; font-weight: 700; padding: 3px 10px; border-radius: 999px; white-space: nowrap; }
.ctrq-tag.ready { color: #b3402a; background: #fbeae5; }
.ctrq-tag.wait { color: #8a6d3b; background: #fcf3df; }
.ctrq-tag.sign { color: var(--accent); background: var(--gold-soft); }
.ctrq-tag.done { color: var(--ok); background: #e6f1ea; }
.ctrq-go { font-size: 11.5px; font-weight: 600; color: var(--clay); }
.kpi-grid-4 { grid-template-columns: repeat(4, 1fr); }
@media (max-width: 720px) {
  .ctrq-card { flex-direction: column; align-items: stretch; }
  .ctrq-side { flex-direction: row; align-items: center; justify-content: space-between; }
  .kpi-grid-4 { grid-template-columns: repeat(2, 1fr); }
}

/* ============================================================================
   Step 4 报价台整页板块化：锚点进度条 + 品类板块卡（住宿/门票/车队/导游/保险服务费/报价确认）。
   信息分层靠「尺寸+留白+边界+低饱和琉璃色」，不同色叠；已确认=绿/有改动=陶土/待匹配=琥珀。
   ============================================================================ */

/* —— 顶部锚点进度条 —— 点击跳段、不强制顺序；带小状态点一眼看哪块没配 —— */
.q-anchorbar {
  display: flex; flex-wrap: wrap; align-items: center; gap: 2px 2px;
  padding: 8px 10px; margin-bottom: 14px;
  background: var(--gold-soft); border: 1px solid var(--line);
  border-radius: 10px; position: sticky; top: 0; z-index: 5;
}
.q-anchor {
  display: inline-flex; align-items: center; gap: 6px;
  min-height: 30px; padding: 4px 11px;
  background: transparent; border: 1px solid transparent; border-radius: 999px;
  color: var(--sub); font-size: 13px; font-weight: 600; cursor: pointer;
  transition: background .15s, color .15s, border-color .15s;
}
.q-anchor:hover { background: #fff; border-color: var(--accent-soft); color: var(--ink); }
.q-anchor em { font-style: normal; font-size: 11px; font-weight: 700; color: #fff; background: var(--accent); border-radius: 999px; padding: 0 6px; margin-left: 2px; }
.q-anchor-confirm { color: var(--clay); }
.q-anchor-sep { color: var(--line-strong); font-size: 12px; user-select: none; }
.q-anchor-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--quiet); flex: 0 0 auto; }
.q-anchor-dot.wait { background: var(--amber); }
.q-anchor-dot.change { background: var(--accent); }
.q-anchor-dot.done { background: var(--ok); }

/* —— 方案 C：品类/按天 视图开关 —— 一行分段控件，左切换右说明，不抢报价行焦点 —— */
.q-axis-toggle {
  display: flex; align-items: center; flex-wrap: wrap; gap: 8px 12px;
  margin-bottom: 10px;
}
.q-axis-cap { font-size: 12.5px; font-weight: 700; color: var(--quiet); }
.q-axis-seg {
  display: inline-flex; padding: 3px; gap: 2px;
  background: var(--gold-soft); border: 1px solid var(--line); border-radius: 999px;
}
.q-axis-btn {
  min-height: 28px; padding: 3px 14px; border: 0; background: transparent;
  border-radius: 999px; font-size: 13px; font-weight: 600; color: var(--sub); cursor: pointer;
  transition: background .15s, color .15s, box-shadow .15s;
}
.q-axis-btn:hover { color: var(--ink); }
.q-axis-btn.on { background: var(--panel); color: var(--ink); box-shadow: 0 1px 3px rgba(40,37,31,.12); }
.q-axis-sub { font-size: 12px; color: var(--quiet); }
.q-axis-usage { font-size: 11.5px; color: var(--quiet); opacity: .8; margin-left: auto; }

/* 客户页费用呈现模式切换（总价版/按板块版）——报价确认块 */
.q-mode-toggle { display: inline-flex; padding: 3px; gap: 2px; background: var(--gold-soft); border: 1px solid var(--line); border-radius: 999px; }
.q-mode-btn { min-height: 30px; padding: 4px 18px; border: 0; background: transparent; border-radius: 999px; font-size: 13px; font-weight: 600; color: var(--sub); cursor: pointer; transition: background .15s, color .15s, box-shadow .15s; }
.q-mode-btn:hover { color: var(--ink); }
.q-mode-btn.on { background: var(--panel); color: var(--ink); box-shadow: 0 1px 3px rgba(40,37,31,.12); }

/* 服务费行（按动线视图）：名称/金额手填 */
.qroute-row-svc { display: flex; align-items: center; gap: 8px; }
.qroute-row-svc .qroute-svc-name { flex: 1; min-width: 0; padding: 5px 9px; border: 1px solid var(--line-strong); border-radius: 8px; font-size: 13px; background: #fff; }
.qroute-row-svc .qroute-svc-price { white-space: nowrap; font-size: 13px; color: var(--sub); }
.qroute-row-svc .qroute-svc-sale { width: 72px; padding: 5px 8px; border: 1px solid var(--line-strong); border-radius: 8px; font-size: 13px; background: #fff; }

/* —— 逐日行程概览卡（报价地基：对着行程报价）—— 顶置、弱暖底，与报价行区隔但不抢戏 —— */
.qblock.qitin { background: var(--gold-soft); border-color: var(--line-strong); }
.qitin-toggle {
  min-height: 28px; padding: 3px 12px; font-size: 12.5px; font-weight: 600;
  border: 1px solid var(--line-strong); background: #fff; color: var(--sub);
  border-radius: 8px; cursor: pointer;
}
.qitin-toggle:hover { border-color: var(--accent); color: var(--accent); }
.qitin-plan {
  min-height: 28px; padding: 4px 12px; font-size: 12.5px; font-weight: 700;
  border: 1px solid #b85a2b; background: #fff7ef; color: #a84920;
  border-radius: 8px; cursor: pointer;
}
.qitin-plan:hover { background: #fff0e2; border-color: #943d18; color: #943d18; }
.qitin-empty {
  margin: 8px 0 2px; padding: 12px 14px; font-size: 13px; line-height: 1.65;
  color: #8a6313; background: #fbf0d9; border: 1px solid #ecd8a8; border-radius: 10px;
}
.qitin-nostart { display: block; margin: 0 0 8px; font-size: 11.5px; color: var(--quiet); }
.qitin-table { margin-top: 2px; display: flex; flex-direction: column; gap: 1px; background: var(--line); border: 1px solid var(--line); border-radius: 10px; overflow: hidden; }
/* 五列：天 / 日期 / 城市 / 景点·活动(主·吃大头) / 住宿(短·收窄) —— 文字多的列拉宽,别让住宿空一大片(2026-07-02 Lucia) */
.qitin-row {
  display: grid; grid-template-columns: 52px 56px 104px minmax(0, 1fr) 148px;
  align-items: baseline; gap: 12px; padding: 9px 12px; background: var(--panel); font-size: 13px; line-height: 1.5;
}
.qitin-row.qitin-hd { background: #faf7f1; font-size: 11.5px; font-weight: 700; color: var(--quiet); letter-spacing: .02em; }
.qitin-dayno { font-weight: 700; color: var(--ink); white-space: nowrap; }
.qitin-date { font-size: 12px; font-weight: 600; color: var(--accent); white-space: nowrap; }
.qitin-hd .qitin-date { color: var(--quiet); font-weight: 700; }
.qitin-city { font-weight: 600; color: var(--ink); min-width: 0; overflow-wrap: anywhere; } /* 「忻州(五台山)」不许被省略号吃掉 */
.qitin-spots { color: var(--sub); min-width: 0; overflow-wrap: anywhere; }
.qitin-lodging { color: var(--sub); font-size: 12.5px; min-width: 0; overflow-wrap: anywhere; }
.qitin-dim { color: var(--quiet); font-style: normal; }
@media (max-width: 720px) {
  .qitin-row { grid-template-columns: 48px 1fr; row-gap: 3px; }
  .qitin-row.qitin-hd { display: none; }
  .qitin-date { grid-column: 2; }
  .qitin-city { grid-column: 2; }
  .qitin-spots { grid-column: 1 / -1; }
  .qitin-lodging { grid-column: 1 / -1; }
}

/* —— 品类板块卡 —— 白底卡 + 清晰头部层次；卡间留白给焦点，不靠同色块堆叠 —— */
.qblock {
  background: var(--panel); border: 1px solid var(--line);
  border-radius: 12px; padding: 16px 18px; margin: 0 0 16px;
  box-shadow: 0 1px 2px rgba(40, 37, 31, 0.03);
}
.qblock-lodging { background: var(--gold-soft); border-color: var(--line-strong); }
.qblock-confirm { background: #fcfbf8; border-color: var(--line-strong); }
.qblock-flash { animation: qblockFlash .9s ease; }
@keyframes qblockFlash {
  0% { box-shadow: 0 0 0 0 var(--accent-soft); border-color: var(--accent); }
  100% { box-shadow: 0 0 0 6px rgba(194,96,46,0); }
}

.qblock-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.qblock-head-l { display: flex; align-items: center; gap: 9px; min-width: 0; }
.qblock-head-l h3 { margin: 0; font-size: 16px; font-weight: 700; color: var(--ink); }
.qblock-icon { font-size: 18px; line-height: 1; }
.qblock-head-r { display: flex; gap: 8px; flex: 0 0 auto; }

/* 状态徽章：待匹配(琥珀)/有改动(陶土)/已确认(绿)——低饱和底+深字，不与卡底同色 */
.qblock-badge { font-size: 12px; font-weight: 700; padding: 2px 10px; border-radius: 999px; white-space: nowrap; }
.qblock-badge.wait { color: #8a6313; background: #fbf0d9; border: 1px solid #ecd8a8; }
.qblock-badge.change { color: var(--clay); background: var(--red-soft); border: 1px solid #ecd0c2; }
.qblock-badge.ready { color: var(--blue); background: #e9f0f7; border: 1px solid #c6d8ea; }
.qblock-badge.done { color: #2c6444; background: #e7f1ea; border: 1px solid #bcd9c7; }

/* 板块操作按钮：✅确认 / ↻重新匹配 —— 弱化为次级操作，不抢报价行焦点 */
.qblock-act {
  min-height: 30px; padding: 4px 12px; font-size: 12.5px; font-weight: 600;
  border: 1px solid var(--line-strong); background: #fff; color: var(--sub);
  border-radius: 8px; cursor: pointer;
}
.qblock-act:hover { border-color: var(--accent); color: var(--accent); }
.qblock-act.confirm:hover { border-color: var(--ok); color: var(--ok); }

/* 「AI 为什么这样配」一行说明：浅灰小字，给定制师匹配依据，不喧宾夺主 */
.qblock-why { display: flex; align-items: baseline; gap: 8px; margin: 8px 0 12px; font-size: 12.5px; color: var(--quiet); line-height: 1.55; }
.qblock-why-tag { flex: 0 0 auto; font-size: 11px; font-weight: 700; color: var(--accent); background: var(--accent-faint); border-radius: 5px; padding: 1px 7px; }

/* 板块内空态 / 底部加项 / 表内小标 */
.qblock-empty { padding: 14px 4px; color: var(--sub); font-size: 13px; }
.qblock-empty .link-btn { font-weight: 600; }
.qblock-foot { margin-top: 10px; display: flex; gap: 14px; flex-wrap: wrap; }
.qblock-foot .link-btn { font-size: 13px; font-weight: 600; }
.qblock-table-cap { font-size: 12px; color: var(--quiet); margin: 10px 0 4px; font-weight: 600; }
.qblock-lodging .quote-table { margin-top: 8px; }

/* ───────── 酒店 V1·Step5：加入行程方案弹窗（独立 overlay，叠在资源详情弹窗之上）───────── */
/* 「＋ 加入行程方案 N」按钮上的已挂方案数角标（渲染在 v3 卡内，用全局样式兜底）。 */
.hdv3-planbadge {
  display: inline-block; min-width: 16px; padding: 0 5px; margin-left: 2px;
  font-size: 11px; line-height: 16px; text-align: center; font-weight: 700;
  color: #fff; background: var(--accent, #c2602e); border-radius: 9px; vertical-align: middle;
}
.plan-link-overlay {
  position: fixed; inset: 0; background: rgba(20, 18, 15, .5);
  display: grid; place-items: center; z-index: 120; padding: 24px;
}
.plan-link-card {
  width: 100%; max-width: 580px; max-height: 88vh; overflow: auto;
  background: var(--panel, #fff); border-radius: 14px;
  box-shadow: 0 20px 60px rgba(0, 0, 0, .3);
}
.plan-link-hd {
  display: flex; align-items: center; justify-content: space-between;
  padding: 16px 20px 12px; border-bottom: 1px solid var(--line, #e8e3da);
}
.plan-link-hd h3 { margin: 0; font-size: 16px; color: var(--ink, #28251f); }
.plan-link-hotel { color: var(--accent, #c2602e); }
.plan-link-x {
  border: none; background: transparent; font-size: 22px; line-height: 1;
  color: var(--quiet, #928d83); cursor: pointer; padding: 0 4px;
}
.plan-link-x:hover { color: var(--ink, #28251f); }
.plan-link-body { padding: 14px 20px 4px; }
.plan-link-tip { margin: 0 0 12px; font-size: 12.5px; color: var(--sub, #5f5a51); line-height: 1.6; }
.plan-link-sub { font-size: 12px; font-weight: 700; color: var(--sub, #5f5a51); margin: 0 0 8px; }
.plan-link-existing { margin-bottom: 14px; }
.plan-link-none, .plan-link-empty {
  font-size: 12.5px; color: var(--quiet, #928d83); background: var(--accent-faint, #f3efe9);
  border-radius: 8px; padding: 10px 12px; line-height: 1.6;
}
.plan-link-list { display: flex; flex-direction: column; gap: 8px; }
.plan-link-item {
  border: 1px solid var(--line, #e8e3da); border-radius: 10px; padding: 9px 11px; background: #fcfaf6;
}
.plan-link-item-top { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.plan-link-item-top b { font-size: 13px; color: var(--ink, #28251f); }
.plan-link-rolechip {
  font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 8px; white-space: nowrap;
}
.plan-link-rolechip.is-main { color: #fff; background: var(--accent, #c2602e); }
.plan-link-rolechip.is-alt { color: #9c4a20; background: var(--accent-soft, #f5dcc8); }
.plan-link-rolechip.is-pending { color: #8a6634; background: var(--gold-soft, #fbf3e3); border: 1px solid #e7cd9a; }
.plan-link-cf { font-size: 11px; padding: 1px 7px; border-radius: 7px; white-space: nowrap; }
.plan-link-cf.todo { color: #9a3a2f; background: #fbe6e0; }
.plan-link-cf.ok { color: #2f7a4a; background: #e3f3e9; }
.plan-link-del {
  margin-left: auto; border: 1px solid var(--line, #e8e3da); background: #fff; cursor: pointer;
  font-size: 11px; color: var(--quiet, #928d83); border-radius: 7px; padding: 2px 8px;
}
.plan-link-del:hover { color: #9a3a2f; border-color: #e7b0a4; }
.plan-link-item-row { font-size: 12px; color: var(--sub, #5f5a51); margin-top: 4px; line-height: 1.5; }
.plan-link-item-row span { color: var(--quiet, #928d83); margin-right: 6px; }
.plan-link-item-meta { font-size: 11px; color: var(--quiet, #928d83); margin-top: 5px; }
.plan-link-form {
  border-top: 1px dashed var(--line, #e8e3da); padding-top: 12px; margin-top: 4px;
}
.plan-link-field { margin-bottom: 11px; }
.plan-link-field > label {
  display: block; font-size: 12px; font-weight: 600; color: var(--sub, #5f5a51); margin-bottom: 5px;
}
.plan-link-select, .plan-link-field textarea {
  width: 100%; box-sizing: border-box; font: inherit; font-size: 13px;
  border: 1px solid var(--line, #e8e3da); border-radius: 8px; padding: 7px 9px;
  color: var(--ink, #28251f); background: #fff;
}
.plan-link-field textarea { resize: vertical; line-height: 1.5; }
.plan-link-select:focus, .plan-link-field textarea:focus { outline: none; border-color: var(--accent, #c2602e); }
.plan-link-roles { display: flex; gap: 14px; flex-wrap: wrap; align-items: center; }
.plan-link-radio { font-size: 13px; color: var(--ink, #28251f); cursor: pointer; display: inline-flex; align-items: center; gap: 4px; }
.plan-link-radio.is-locked { color: var(--sub, #5f5a51); }
.plan-link-rolehint { font-size: 11.5px; color: var(--quiet, #928d83); line-height: 1.5; flex-basis: 100%; }
.plan-link-confirm { display: flex; align-items: flex-start; gap: 7px; font-size: 12.5px; color: var(--sub, #5f5a51); line-height: 1.5; cursor: pointer; }
.plan-link-confirm input { margin-top: 2px; }
.plan-link-foot {
  display: flex; justify-content: flex-end; gap: 10px;
  padding: 12px 20px 18px; border-top: 1px solid var(--line, #e8e3da); margin-top: 6px;
}
.plan-link-foot button {
  font: inherit; font-size: 13px; padding: 7px 16px; border-radius: 9px;
  border: 1px solid var(--line, #e8e3da); background: #fff; color: var(--sub, #5f5a51); cursor: pointer;
}
.plan-link-foot button.btn-primary { border-color: var(--accent, #c2602e); background: var(--accent, #c2602e); color: #fff; }
.plan-link-foot button:hover { border-color: var(--accent, #c2602e); }

/* ============================================================================
   报价台第三视图「按动线」（2026-06-30）—— 逐景点配价 + A/B/C 方案 + 统一区。
   沿用全站暖陶土主彩（--accent）/ 琉璃绿（--ok）/ 琥珀（--amber），与 qblock 同视觉语言。
   ========================================================================== */
.qroute-loading, .qroute-empty {
  font-size: 13px; color: var(--sub); background: var(--accent-faint, #f3efe9);
  border: 1px solid var(--line, #e8e3da); border-radius: 10px; padding: 16px 18px; line-height: 1.6;
}
.qroute-empty .link-btn, .qroute-csec-cap .link-btn { font-size: 12.5px; }

/* A/B/C 方案选择器 */
.qroute-planbar {
  background: linear-gradient(180deg, #fff, var(--mint, #f3ece6));
  border: 1px solid var(--line-strong, #d6cfc3); border-radius: 12px;
  padding: 12px 14px; margin-bottom: 14px;
}
.qroute-planbar-cap { font-size: 12px; font-weight: 700; color: var(--clay, #914f3a); letter-spacing: .04em; margin-bottom: 8px; }
.qroute-plan-opts { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
.qroute-plan-btn {
  display: flex; flex-direction: column; align-items: flex-start; gap: 3px; text-align: left;
  border: 1.5px solid var(--line, #e8e3da); background: #fff; border-radius: 10px;
  padding: 10px 12px; cursor: pointer; transition: border-color .15s, box-shadow .15s, background .15s;
}
.qroute-plan-btn:hover { border-color: var(--accent-soft, #f5dcc8); }
.qroute-plan-btn.on { border-color: var(--accent, #c2602e); background: var(--gold-soft, #fbf3e3); box-shadow: 0 2px 8px rgba(194,96,46,.14); }
.qroute-plan-key {
  font-weight: 800; font-size: 13px; color: #fff; background: var(--quiet, #928d83);
  border-radius: 6px; min-width: 22px; text-align: center; padding: 1px 7px;
}
.qroute-plan-btn.on .qroute-plan-key { background: var(--accent, #c2602e); }
.qroute-plan-title { font-size: 13.5px; font-weight: 700; color: var(--ink); }
.qroute-plan-desc { font-size: 11.5px; color: var(--quiet, #928d83); line-height: 1.45; }
.qroute-planbar-hint { font-size: 11.5px; color: var(--quiet, #928d83); margin-top: 9px; }
.qroute-planbar-caphint { font-weight: 500; color: var(--quiet, #928d83); letter-spacing: 0; }
/* 一键匹配 + 展开控制(Lucia 2026-07-08) */
.qroute-planbar-actions { display: flex; align-items: center; gap: 12px; margin-top: 10px; flex-wrap: wrap; }
.qroute-match-btn {
  border: none; border-radius: 9px; padding: 9px 18px; cursor: pointer;
  background: linear-gradient(135deg, #c2602e, #a84e26); color: #fff; font-size: 14px; font-weight: 700;
  box-shadow: 0 2px 8px rgba(168,78,38,.28); transition: transform .08s, box-shadow .15s;
}
.qroute-match-btn:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(168,78,38,.36); }
.qroute-match-btn:active { transform: translateY(0); }
.qroute-expand-links { display: inline-flex; gap: 4px; }
.qroute-expand-link { border: 1px solid var(--line, #e5ddd0); background: #fff; border-radius: 7px; padding: 6px 11px; font-size: 12px; color: var(--sub); cursor: pointer; }
.qroute-expand-link:hover { border-color: var(--accent, #c2602e); color: var(--accent, #c2602e); }

/* 景点块 */
.qroute-spots { display: flex; flex-direction: column; gap: 10px; }
.qroute-spot {
  border: 1px solid var(--line, #e8e3da); border-left: 4px solid var(--accent, #c2602e);
  border-radius: 12px; background: #fff; padding: 14px 16px;
}
/* 折叠态:紧凑一行·点头部展开(Lucia 2026-07-08) */
.qroute-spot.is-collapsed { padding: 11px 16px; }
.qroute-spot.is-collapsed .qroute-spot-head { margin-bottom: 0; }
.qroute-spot-head { cursor: pointer; user-select: none; }
.qroute-spot-sum { flex: 1; min-width: 0; font-size: 12.5px; color: var(--sub); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.qroute-spot-sum .qroute-dim { color: var(--quiet, #b3ada2); }
.qroute-sum-warn { color: #c0392b; font-weight: 700; }
.qroute-spot-subv { font-size: 13px; color: var(--clay, #914f3a); font-variant-numeric: tabular-nums; white-space: nowrap; margin-left: 6px; }
.qroute-spot-toggle { font-size: 11.5px; color: var(--accent, #c2602e); font-weight: 600; white-space: nowrap; flex: none; }
.qroute-spot.is-open .qroute-spot-toggle { color: var(--quiet, #928d83); }
.qroute-spot-head { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }
.qroute-spot-ic { font-size: 16px; }
.qroute-spot-head h4 { margin: 0; font-size: 15.5px; font-weight: 700; color: var(--ink); }
.qroute-spot-city {
  font-size: 11.5px; font-weight: 600; color: var(--clay, #914f3a);
  background: var(--accent-faint, #f3efe9); border-radius: 999px; padding: 2px 9px;
}
.qroute-sub { margin-top: 10px; }
.qroute-sub-cap { font-size: 12.5px; font-weight: 700; color: var(--sub, #5f5a51); margin-bottom: 6px; }
.qroute-sub-tip { font-weight: 500; font-size: 11px; color: var(--quiet, #928d83); margin-left: 4px; }

/* 单选/复选行（门票/交通/体验/车/导游/保险） */
.qroute-row {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 11px; border: 1px solid var(--line, #e8e3da); border-radius: 9px;
  margin-bottom: 6px; cursor: pointer; transition: border-color .12s, background .12s;
}
.qroute-row:hover { border-color: var(--accent-soft, #f5dcc8); }
.qroute-row.on { border-color: var(--accent, #c2602e); background: var(--gold-soft, #fbf3e3); }
.qroute-row input[type="checkbox"], .qroute-row input[type="radio"] { width: 16px; height: 16px; accent-color: var(--accent, #c2602e); flex: 0 0 auto; cursor: pointer; }
.qroute-row-tag { font-size: 12px; font-weight: 700; color: var(--clay, #914f3a); white-space: nowrap; }
.qroute-row-name { font-size: 13px; color: var(--ink); flex: 1 1 auto; }
.qroute-row-price { font-size: 12px; color: var(--sub, #5f5a51); white-space: nowrap; font-variant-numeric: tabular-nums; }

/* 三品类按规则呈现(2026-07-02):未录价琥珀明示/体验分档价/单位标 */
.qroute-noprice { color: #8a6313; background: #fbf0d9; border: 1px solid #ecd8a8; border-radius: 6px; padding: 1px 8px; font-size: 12px; font-weight: 700; }
.qroute-row.noprice { background: #fffdf6; }
.qroute-tiers { font-weight: 700; color: var(--ink); }
.qroute-unit { margin-left: 8px; font-size: 11px; color: var(--quiet); border: 1px solid var(--line); border-radius: 999px; padding: 1px 7px; }
.qroute-car input[type=radio] { accent-color: var(--accent); }
/* 用车整程大包价:成本/报价手填框 + 日均只读(Lucia 2026-07-06) */
.qcar-flds { display: inline-flex; align-items: center; gap: 12px; flex-wrap: wrap; white-space: normal; }
.qcar-fld { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; color: var(--sub, #5f5a51); }
.qcar-fld label { font-weight: 700; color: var(--quiet, #8a8478); }
.qcar-in { width: 78px; padding: 3px 6px; border: 1px solid var(--line-strong, #d8d2c6); border-radius: 6px; font-size: 12.5px; font-variant-numeric: tabular-nums; text-align: right; background: #fff; }
.qcar-in:focus { border-color: var(--accent); outline: none; }
.qcar-avg { font-size: 12px; font-weight: 700; color: var(--accent, #b1502a); font-variant-numeric: tabular-nums; }
.qcar-avg em { font-weight: 400; color: var(--quiet, #8a8478); font-style: normal; font-size: 11px; }
.qroute-car.qcar-on { align-items: flex-start; }
/* 用车简化单行(Lucia 2026-07-06):座位数手填 + 车型/车队/成本/报价一行 */
.qroute-car.qcar-manual { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; }
.qcar-seats { display: inline-flex; align-items: center; gap: 3px; font-size: 13px; font-weight: 700; color: var(--sub, #5f5a51); white-space: nowrap; }
.qcar-in-seats { width: 54px; text-align: center; }
.qroute-planbar-src { margin: 6px 0 2px; font-size: 12px; color: var(--sub); background: var(--gold-soft, #faf3e3); border-radius: 8px; padding: 5px 10px; }
.qroute-planbar-src b { color: var(--ink); }
.qroute-empty-acts { display: flex; gap: 12px; padding: 4px 12px 8px; flex-wrap: wrap; }

/* 报价动线视图重排(2026-07-03 Lucia:多列分布/方案一行/酒店段直选表) */
/* 景点块=紧凑流式(2026-07-03 Lucia:别搞大块错位,做成统一区那种小巧的) */
.qroute-spot-grid { display: flex; flex-wrap: wrap; gap: 6px 16px; align-items: flex-start; }
.qroute-cell { flex: 0 1 auto; min-width: 180px; max-width: 100%; }
.qroute-cell .qroute-sub { margin-top: 0; }
/* ── 景点块整体高密度收敛(Lucia 2026-07-06 最高优先):一个景点收到几行小卡,别占大半屏 ── */
.qroute-spot { padding: 8px 11px !important; border-radius: 9px; border-left-width: 3px; }
.qroute-spot-head { margin-bottom: 6px !important; gap: 6px !important; }
.qroute-spot-ic { font-size: 13px; }
.qroute-spot-head h4 { font-size: 13px !important; }
.qroute-spot-city { font-size: 10.5px; padding: 1px 7px; }
.qroute-spot .qroute-sub { margin-top: 4px; }
.qroute-spot .qroute-sub-cap { font-size: 10.5px; margin: 0 0 3px; }
.qroute-spot .qroute-sub-tip { font-size: 10px; }
/* 门票/园内交通/体验行:小框、行内、扁 */
.qroute-spot .qroute-row { padding: 3px 7px; font-size: 11.5px; border-radius: 7px; margin-bottom: 4px; gap: 6px; }
.qroute-spot .qroute-row input[type="checkbox"], .qroute-spot .qroute-row input[type="radio"] { width: 13px; height: 13px; }
.qroute-spot .qroute-row-tag { font-size: 10.5px; }
.qroute-spot .qroute-row-name { font-size: 11.5px; }
.qroute-spot .qroute-row-price { font-size: 10.5px; }
.qroute-spot .qroute-noprice { font-size: 10.5px; padding: 0 6px; }
.qroute-spot .qroute-tiers { font-size: 10.5px; }
.qroute-spot .qroute-qtyin { width: 42px; padding: 1px 4px; font-size: 11px; }
/* 讲解:紧凑小 chip 一行(qroute-gchip),不再竖直大块 */
.qroute-spot .qroute-glist { gap: 4px; }
.qroute-spot .qroute-gchip { padding: 2px 7px; border-radius: 7px; }
.qroute-spot .qroute-gchip .qroute-gtier-k { font-size: 11px; }
.qroute-spot .qroute-gchip .qroute-gtier-p { font-size: 10px; }
/* 旧四档 chip(若还有走 gtier 的)一并收紧 */
.qroute-spot .qroute-guide { padding: 4px 6px; }
.qroute-spot .qroute-guide-name { font-size: 11px; margin-bottom: 3px; }
.qroute-spot .qroute-gtiers { gap: 3px; }
.qroute-spot .qroute-gtier { padding: 2px 6px; border-radius: 6px; }
.qroute-spot .qroute-gtier-k { font-size: 10.5px; }
.qroute-spot .qroute-gtier-p { font-size: 10px; }
.qroute-cargrp { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 4px 0; }
.qroute-cargrp-cap { flex: none; font-size: 12px; font-weight: 800; color: var(--quiet); width: 44px; }
.qroute-cargrp .qroute-row { flex: 0 1 auto; min-width: 240px; margin: 0; }
.qseg-pickbtn { font-size: 12.5px; padding: 6px 10px; border: 1px solid var(--line-strong); border-radius: 8px; background: #fff; cursor: pointer; color: var(--ink); white-space: nowrap; }
.qseg-pickbtn:hover { border-color: var(--accent); color: var(--accent); }
.qseg-actions { display: flex; flex-direction: row; flex-wrap: nowrap; gap: 6px; align-items: center; justify-content: flex-end; min-width: 0; }
.qseg-delseg { font-size: 11px; padding: 3px 8px; border: 1px solid var(--line); border-radius: 7px; background: #fff; color: var(--quiet); cursor: pointer; white-space: nowrap; }
.qseg-delseg:hover { color: #c0392b; border-color: #c0392b; }
.route-lodge-pick { max-height: 68vh; overflow-y: auto; }
/* 体验采集·形式标签 chips(名字下) */
.tk-form-chips { display: inline-flex; flex-wrap: wrap; gap: 5px; margin-left: 8px; vertical-align: middle; }
.tk-form-chip { font-size: 11px; font-weight: 700; color: var(--accent, #c2602e); background: var(--gold-soft, #fbf3e3); border-radius: 999px; padding: 1px 8px; white-space: nowrap; }
.tk-form-none { font-size: 11px; color: var(--quiet); }
/* 导游采集·讲解类型徽章 */
.tk-type-badge { font-size: 11px; font-weight: 700; color: #4a5a6a; background: #eef2f6; border-radius: 999px; padding: 1px 8px; margin-left: 8px; white-space: nowrap; }
/* 每日开篇图管理面板(首页) */
.dhero-admin-body { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; padding: 6px 2px 2px; }
.dhero-thumbs { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; min-height: 40px; }
.dhero-thumb { position: relative; width: 72px; height: 96px; border-radius: 8px; overflow: hidden; border: 1px solid var(--line); flex: 0 0 auto; }
.dhero-thumb img { width: 100%; height: 100%; object-fit: cover; }
.dhero-thumb-x { position: absolute; top: 3px; right: 3px; width: 20px; height: 20px; border-radius: 50%; border: none; background: rgba(0,0,0,.6); color: #fff; cursor: pointer; font-size: 12px; line-height: 1; padding: 0; }
.dhero-thumb-x:hover { background: #c0392b; }
.dhero-upload-btn { cursor: pointer; white-space: nowrap; }
.dhero-empty { color: var(--quiet); }
.dhero-cap-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 12px; padding-top: 12px; border-top: 1px dashed var(--line); }
.dhero-cap-input { flex: 1; min-width: 220px; padding: 6px 10px; border: 1px solid var(--line-strong); border-radius: 8px; font-size: 13px; }
.dhero-cap-hint { color: var(--quiet); flex-basis: 100%; }
.dhero-cap-hint b { color: var(--accent, #c2602e); font-weight: 600; }
/* 动线体验/交通·可填人次输入框 */
.qroute-qtyin { width: 42px; margin: 0 2px; padding: 1px 4px; font-size: 12.5px; font-weight: 700; text-align: center; border: 1px solid var(--accent, #c2602e); border-radius: 6px; background: #fffdf8; color: var(--ink); vertical-align: baseline; }
.qroute-qtyin:focus { outline: none; border-color: var(--accent, #c2602e); box-shadow: 0 0 0 2px var(--gold-soft, #fbf3e3); }

/* 报价台顶栏固定+迷你合计(2026-07-03 Lucia:总价放顶部,随滚随看) */
/* 吸顶堆栈=标题栏+人数天数+逐日概览(2026-07-03 Lucia:这块也要固定);概览展开时内部滚动,不吃满屏 */
.qtop-stack { position: sticky; top: 0; z-index: 60; background: var(--bg, #f6f1e7); box-shadow: 0 4px 14px rgba(37,31,27,.08); padding-bottom: 6px; }
.qtop-stack .home-topbar { padding-top: 10px; padding-bottom: 8px; margin-bottom: 0; }
.qtop-substrip { padding: 0 4px; }
.qtop-substrip .hint { margin: 2px 0 6px; font-size: 12px; }
.qtop-substrip .qitin-table { max-height: 30vh; overflow-y: auto; }
.qtop-party { font-size: 12px; color: var(--quiet); margin-left: 12px; white-space: nowrap; }
.qtop-totals { display: inline-flex; gap: 14px; margin-left: 16px; font-size: 12.5px; color: var(--sub); align-items: baseline; flex-wrap: wrap; }
.qtop-totals b { font-size: 15px; color: var(--ink); font-variant-numeric: tabular-nums; }
.qtop-totals .qtop-profit b { color: var(--accent, #c2602e); }
.qroute-inspills { display: flex; gap: 8px; flex-wrap: wrap; padding: 2px 0; }
.qroute-inspill { min-width: 130px; position: relative; }
/* 内部推荐角标(仅报价台·绝不上客户页):库里 ops_tips 含「推荐」的保险计划才出 */
.qroute-inspill.is-rec { border-color: #e0a91b; box-shadow: 0 0 0 1px rgba(224,169,27,.35); }
.qroute-inspill-rec { position: absolute; top: -8px; right: -6px; z-index: 2; font-size: 10px; font-weight: 800; color: #7a4d00; background: linear-gradient(180deg,#ffd968,#f2b90c); border-radius: 999px; padding: 1px 7px; line-height: 1.5; box-shadow: 0 1px 3px rgba(0,0,0,.18); white-space: nowrap; }
.qroute-inspill.on.is-rec { box-shadow: 0 0 0 2px rgba(224,169,27,.55); }
.qroute-plan-opts { display: grid !important; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
.qroute-plan-btn { padding: 8px 10px !important; }
.qroute-plan-btn .qroute-plan-desc { font-size: 11px; line-height: 1.4; }
.qroute-seg-hd, .qroute-seg-row {
  display: grid; grid-template-columns: 88px 56px 162px minmax(0, 1fr) 112px 132px 232px;
  gap: 10px; align-items: center; padding: 7px 10px;
}
/* 当前酒店：名字省略 + 留房小标一行（留房从右侧按钮列左移过来·Lucia 2026-07-11）*/
.qseg-cur { display: flex; align-items: center; gap: 7px; min-width: 0; }
.qseg-cur-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 600; }
/* 新建酒店：紧凑次要按钮，绝不竖排断行 */
.qseg-newhotel { font-size: 12px; padding: 6px 9px; border: 1px dashed var(--line-strong, #d8d2c6); border-radius: 8px; background: #fff; color: var(--sub, #5f5a51); cursor: pointer; white-space: nowrap; }
.qseg-newhotel:hover { border-color: var(--accent); color: var(--accent); }
.qseg-city { display: inline-flex; align-items: center; gap: 5px; flex-wrap: nowrap; }
.qseg-rooms { display: inline-flex; align-items: center; gap: 5px; white-space: nowrap; font-size: 12.5px; }
.qseg-rooms b { font-size: 14px; }
.qseg-step { width: 22px; height: 22px; border-radius: 6px; border: 1px solid var(--line-strong); background: #fff; cursor: pointer; line-height: 1; font-size: 14px; }
.qseg-step:hover { border-color: var(--accent); color: var(--accent); }
.qseg-sub { font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; }
.qseg-extra { display: inline-flex; align-items: center; gap: 3px; margin-left: 8px; font-size: 11.5px; color: var(--sub); background: var(--gold-soft, #fbf3e3); border-radius: 999px; padding: 1px 7px; }
.qseg-extra-x { border: none; background: transparent; cursor: pointer; color: var(--quiet); font-size: 11px; padding: 0 2px; }
.qseg-extra-x:hover { color: #c0392b; }
/* 房型逐行(2026-07-06 Batch B①;2026-07-14 REQ-K44 加「晚数」列):房型名|间数(紧挨房型)|晚数(该房型独立)|协议价|携程价|折扣|报价(只读=携程×折扣)|小计(只读)|删 */
.qseg-roomrow { display: grid; grid-template-columns: minmax(0,1fr) 112px 62px 78px 78px 62px 78px 80px 56px; gap: 7px; align-items: center;
  padding: 5px 10px 5px 26px; margin: 2px 0 2px 12px; background: #fffdf8; border: 1px dashed var(--line); border-radius: 8px; font-size: 12.5px; }
.qseg-rr-name { font-weight: 600; min-width: 0; overflow-wrap: anywhere; }
/* 房型晚数(REQ-K44):默认=段晚数,可改小做「第一晚家庭房·第二晚双床房」;超段晚数标黄⚠ */
.qseg-rnights { display: inline-flex; align-items: center; gap: 2px; font-size: 12px; color: var(--quiet, #8a8478); white-space: nowrap; justify-content: center; }
.qseg-rnights-in { width: 34px; padding: 2px 4px; border: 1px solid var(--line-strong, #d8d2c6); border-radius: 5px; font-size: 12px; font-variant-numeric: tabular-nums; text-align: right; background: #fff; }
.qseg-rnights-in:focus { border-color: var(--accent, #c2602e); outline: none; }
.qseg-rnights.over .qseg-rnights-in { border-color: #d9a520; background: #fdf6e3; }
.qseg-rnights-warn { color: #d9a520; font-size: 11px; }
.qseg-roomrow-hd .qseg-rnights { font-weight: 700; color: var(--quiet, #8a8478); }
/* 三价列:协议价(合作)绿 / 报价(对客)重点 / 携程价(参考)灰 */
.qseg-rr-p { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; font-size: 12px; }
.qseg-rr-agree { color: #1d6b46; }
.qseg-rr-sale { color: var(--accent, #b1502a); font-weight: 700; }
.qseg-rr-ctrip { color: var(--quiet, #8a8478); }
/* 可编辑价格输入(协议价/携程价/折扣) */
.qseg-rr-in { display: inline-flex; align-items: center; gap: 1px; justify-content: flex-end; font-size: 11px; color: var(--quiet, #8a8478); white-space: nowrap; }
.qseg-rr-in.qseg-rr-agree { color: #1d6b46; }
/* 报价现在可编辑(改报价反算折扣)·仍用对客重点色 */
.qseg-rr-in.qseg-rr-sale { color: var(--accent, #b1502a); font-weight: 700; }
.qseg-rr-in.qseg-rr-sale .qseg-price-in { color: var(--accent, #b1502a); font-weight: 700; }
/* 折扣默认档态:输入框淡底提示「系统默认·可覆盖」 */
.qseg-rr-disc-auto .qseg-disc-in { background: #f5f2ea; color: #8a8478; font-style: italic; }
.qseg-rr-disc-auto .qseg-disc-in:focus { background: #fff; font-style: normal; color: var(--ink); }
.qseg-price-in { width: 52px; padding: 2px 4px; border: 1px solid var(--line-strong, #d8d2c6); border-radius: 5px; font-size: 12px; font-variant-numeric: tabular-nums; text-align: right; background: #fff; }
.qseg-disc-in { width: 44px; padding: 2px 4px; border: 1px solid var(--line-strong, #d8d2c6); border-radius: 5px; font-size: 12px; font-variant-numeric: tabular-nums; text-align: right; background: #fff; }
.qseg-price-in:focus, .qseg-disc-in:focus { border-color: var(--accent, #c2602e); outline: none; }
/* 房型三价表头(小灰字) */
.qseg-roomrow-hd { background: transparent; border: none; padding-top: 2px; padding-bottom: 0; margin-bottom: 0; font-size: 11px; color: var(--quiet, #8a8478); font-weight: 700; }
.qseg-roomrow-hd .qseg-rr-name, .qseg-roomrow-hd .qseg-rooms, .qseg-roomrow-hd .qseg-sub { font-weight: 700; color: var(--quiet, #8a8478); }
.qseg-roomrow-hd .qseg-rr-p { color: var(--quiet, #8a8478); font-weight: 700; }
.lsw-pick.picked-on { background: #2c6e63 !important; color: #fff !important; border-color: #2c6e63 !important; }
.qseg-rr-x { border: 1px solid var(--line); background: #fff; border-radius: 7px; font-size: 11px; padding: 3px 8px; color: var(--quiet); cursor: pointer; justify-self: start; }
.qseg-rr-x:hover { color: #c0392b; border-color: #c0392b; }
.qseg-city-sel { font-size: 12.5px; border: 1px solid var(--line); border-radius: 7px; padding: 3px 6px; background: #fff; max-width: 78px; }
/* 留房按钮(Batch B③·内部标记·不上客户页) */
.qseg-holdbtn { border: 1px solid var(--line-strong, #d8d2c6); background: #fff; border-radius: 7px; font-size: 11.5px; padding: 3px 9px; color: var(--sub, #5f5a51); cursor: pointer; white-space: nowrap; }
.qseg-holdbtn:hover { border-color: #2c6e63; color: #2c6e63; }
.qseg-holdbtn.held { background: #e2f2e8; border-color: #2c6e63; color: #1d6b46; font-weight: 700; }
.qseg-addrow { display: flex; align-items: center; gap: 12px; padding: 6px 10px 2px; }
/* 赠送项目(Batch B④) */
.qgift-row { display: flex; align-items: center; gap: 6px; margin-bottom: 6px; flex-wrap: wrap; }
.qgift-in { padding: 4px 7px; border: 1px solid var(--line-strong, #d8d2c6); border-radius: 6px; font-size: 12.5px; background: #fff; }
.qgift-in:focus { border-color: var(--accent, #c2602e); outline: none; }
.qgift-name { flex: 1; min-width: 120px; }
.qgift-qty { width: 58px; text-align: right; font-variant-numeric: tabular-nums; }
.qgift-unit { width: 56px; }
.qgift-price { width: 72px; text-align: right; font-variant-numeric: tabular-nums; }
.qgift-x { font-size: 12px; color: var(--quiet, #8a8478); }
.qgift-del { border: 1px solid var(--line); background: #fff; border-radius: 6px; font-size: 12px; padding: 3px 8px; color: var(--quiet); cursor: pointer; }
.qgift-del:hover { color: #c0392b; border-color: #c0392b; }
.qgift-add { display: flex; align-items: center; gap: 14px; margin-top: 2px; }
.qgift-sum { font-size: 12px; font-weight: 700; color: #1d6b46; background: #e2f2e8; border-radius: 999px; padding: 2px 10px; }
/* 讲解紧凑小按钮(Batch B① Lucia 2026-07-06):扁平一行,像门票/园内交通那样 */
.qroute-glist { display: flex; flex-wrap: wrap; gap: 6px; }
.qroute-gchip { display: inline-flex; align-items: center; gap: 5px; padding: 3px 9px; border: 1px solid var(--line-strong, #e2dccf); background: #fff; border-radius: 8px; cursor: pointer; line-height: 1.3; }
.qroute-gchip:hover:not([disabled]) { border-color: var(--accent-soft, #f5dcc8); }
.qroute-gchip.on { border-color: var(--accent, #c2602e); background: var(--accent, #c2602e); }
.qroute-gchip.on .qroute-gtier-k, .qroute-gchip.on .qroute-gtier-p { color: #fff; }
.qroute-gchip[disabled] { opacity: .45; cursor: not-allowed; }
.qroute-gchip .qroute-gtier-k { font-size: 12px; font-weight: 800; color: var(--ink); }
.qroute-gchip .qroute-gtier-p { font-size: 10.5px; color: var(--sub, #5f5a51); font-variant-numeric: tabular-nums; }
.qseg-gap { margin-left: 10px; font-size: 12px; font-weight: 700; color: #8a6313; background: #fbf0d9; border-radius: 999px; padding: 2px 10px; }
.rf-kv-row { display: flex; gap: 8px; align-items: center; margin-bottom: 6px; }
.rf-kv-row .rf-kv-k { flex: 1; }
.rf-kv-row .rf-kv-v { width: 130px; }
.res-state { font-size: 11px; font-weight: 800; border-radius: 999px; padding: 1px 9px; }
.res-state.on { color: #1d6b46; background: #e2f2e8; }
.res-state.off { color: #7a7263; background: #efe9dc; }
.res-state.ex { color: #8a3a2e; background: #f7e3de; }
.rf-form-chips { display: flex; gap: 8px; flex-wrap: wrap; }
.rf-exp-chip.on { background: var(--accent, #c2602e); color: #fff; border-color: var(--accent, #c2602e); }
.lsw-agree { color: #8a5a00; font-style: normal; font-size: 11.5px; margin-left: 6px; }
.qroute-cap-sub { margin-left: 8px; font-size: 11.5px; font-weight: 800; color: var(--accent, #c2602e); background: var(--gold-soft, #fbf3e3); border-radius: 999px; padding: 1px 8px; }
.qroute-bd { color: var(--sub); font-size: 11.5px; }
/* 弹窗里的「收起」按钮无意义(那是按品类内嵌版的开关),藏掉防误点 */
.route-lodge-pick .lodge-switch-head .link-btn { display: none; }
.qroute-seg-hd { font-size: 11.5px; font-weight: 700; color: var(--quiet); border-bottom: 1px dashed var(--line); }
.qroute-seg-row { background: var(--panel); border: 1px solid var(--line); border-radius: 10px; margin: 6px 0; font-size: 13px; }
.qroute-seg-row.is-dragging { opacity: .48; }
.qroute-seg-row.is-drag-over { border-color: var(--accent,#c2602e); box-shadow: 0 0 0 3px rgba(194,96,46,.13); transform: translateY(1px); }
.qseg-drag { display:inline-flex; align-items:center; justify-content:center; width:22px; height:30px; margin-right:4px; color:#9b8a73; cursor:grab; user-select:none; font-size:18px; line-height:1; border-radius:6px; }
.qseg-drag:hover { color:var(--accent,#c2602e); background:rgba(194,96,46,.08); }
.qseg-drag:active { cursor:grabbing; }
.qseg-day { font-weight: 700; white-space: nowrap; }
/* 段头毛利(Lucia 2026-07-06·段报价−段成本·仅可见成本的角色显示) */
.qseg-margin { color: #1d6b46; font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; }
/* 卖亏兜底(Lucia 2026-07-08):报价<协议价→毛利/报价标红,防悄悄卖亏 */
.qseg-margin.is-loss { color: #c0392b; }
.qseg-rr-in.qseg-rr-sale-loss .qseg-price-in { color: #c0392b; }
.qseg-loss { display: inline-block; margin-left: 4px; padding: 0 5px; border-radius: 4px; background: #fdecea; color: #c0392b; font-size: 11px; font-weight: 700; white-space: nowrap; }
.qseg-date { color: var(--accent); font-size: 12px; white-space: nowrap; }
.qseg-city { color: var(--sub); white-space: nowrap; }
.qseg-cur { min-width: 0; }
.qseg-room { color: var(--sub); font-weight: 400; }
.qseg-pick { font-size: 12.5px; padding: 5px 8px; border: 1px solid var(--line-strong); border-radius: 8px; background: #fff; max-width: 100%; }
@media (max-width: 900px) {
  .qroute-spot-grid { grid-template-columns: 1fr; }
  .qroute-plan-opts { grid-template-columns: repeat(2, 1fr); }
  .qroute-seg-hd { display: none; }
  .qroute-seg-row { grid-template-columns: 1fr 1fr; }
  .qseg-pick { grid-column: 1 / -1; }
}

.qroute-ticket .qroute-row-name { font-weight: 600; }
.qroute-row-empty { cursor: default; background: var(--accent-faint, #f3efe9); border-style: dashed; }
.qroute-row-empty:hover { border-color: var(--line, #e8e3da); }
.qroute-row-flat { cursor: default; }
.qroute-dim { color: var(--quiet, #928d83); font-style: normal; }

/* 讲解四档单选 */
.qroute-guide {
  border: 1px solid var(--line, #e8e3da); border-radius: 9px; padding: 8px 11px; margin-bottom: 6px;
}
.qroute-guide.on { border-color: var(--accent, #c2602e); background: var(--gold-soft, #fbf3e3); }
.qroute-guide-name { font-size: 13px; color: var(--ink); font-weight: 600; margin-bottom: 7px; display: flex; align-items: center; gap: 8px; }
.qroute-guide-sel { font-size: 11px; font-weight: 700; color: #fff; background: var(--ok, #3d7a55); border-radius: 999px; padding: 1px 8px; }
.qroute-gtiers { display: flex; flex-wrap: wrap; gap: 7px; }
.qroute-gtier {
  display: inline-flex; flex-direction: column; align-items: center; gap: 1px;
  border: 1.5px solid var(--line, #e8e3da); background: #fff; border-radius: 8px;
  padding: 4px 12px; cursor: pointer; min-width: 58px; transition: border-color .12s, background .12s;
}
.qroute-gtier:hover:not([disabled]) { border-color: var(--accent-soft, #f5dcc8); }
.qroute-gtier.on { border-color: var(--accent, #c2602e); background: var(--accent, #c2602e); }
.qroute-gtier.on .qroute-gtier-k, .qroute-gtier.on .qroute-gtier-p { color: #fff; }
.qroute-gtier[disabled] { opacity: .45; cursor: not-allowed; }
.qroute-gtier-k { font-size: 12.5px; font-weight: 800; color: var(--ink); }
.qroute-gtier-p { font-size: 11px; color: var(--sub, #5f5a51); font-variant-numeric: tabular-nums; }
/* 保险保额直显(卡上第二行·醒目) */
.qroute-inspill-cov { font-size: 12px; font-weight: 800; color: #1d6b46; background: #e2f2e8; border-radius: 999px; padding: 0 8px; margin: 1px 0; }
.qroute-inspill-cov.cov-missing { color: #8a6313; background: #fbf0d9; font-weight: 700; }
.qroute-gtier.on .qroute-inspill-cov { color: #fff; background: rgba(255,255,255,.22); }

/* 底部统一区 */
.qroute-common {
  margin-top: 16px; border: 1px solid var(--line-strong, #d6cfc3);
  border-radius: 12px; background: var(--mint, #f3ece6); padding: 14px 16px;
}
.qroute-common-head { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; }
.qroute-common-head h4 { margin: 0; font-size: 15px; font-weight: 700; color: var(--ink); }
.qroute-csec { margin-top: 12px; }
.qroute-csec-cap {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  font-size: 13px; font-weight: 700; color: var(--clay, #914f3a); margin-bottom: 6px;
}
.qroute-csec .qroute-row { background: #fff; }
.qroute-csec .qroute-row.on { background: var(--gold-soft, #fbf3e3); }
.qroute-csec-tip { font-size: 11.5px; color: var(--quiet, #928d83); margin-top: 4px; }

/* 补充项目(Lucia 2026-07-08):自由加行·项目名/成本/报价/说明·利润自动算 */
.qcustom-sec { border-top: 1px dashed var(--line, #e5ddd0); padding-top: 10px; }
.qcustom-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; padding: 6px 0; }
.qcustom-in { border: 1px solid var(--line, #e5ddd0); border-radius: 7px; padding: 6px 9px; font-size: 13px; box-sizing: border-box; }
.qcustom-in:focus { outline: none; border-color: var(--accent, #c2602e); }
.qcustom-name { flex: 2; min-width: 160px; font-weight: 600; }
.qcustom-note { flex: 1.4; min-width: 120px; }
.qcustom-cell { display: inline-flex; align-items: center; gap: 3px; font-size: 12px; color: var(--sub); white-space: nowrap; }
.qcustom-cell label { color: var(--quiet, #928d83); }
.qcustom-num { width: 78px; }
.qcustom-profit { font-size: 12.5px; font-weight: 700; color: #1d6b46; white-space: nowrap; font-variant-numeric: tabular-nums; }
.qcustom-profit.is-neg { color: #c0392b; }
.qcustom-del { border: none; background: none; color: var(--quiet, #b3ada2); cursor: pointer; font-size: 15px; padding: 2px 6px; border-radius: 6px; flex: none; }
.qcustom-del:hover { background: #fdecea; color: #c0392b; }
.qcustom-empty { font-size: 12.5px; color: var(--quiet, #928d83); padding: 6px 0; }
.qcustom-add {
  margin-top: 8px; border: 1px dashed var(--accent, #c2602e); background: var(--gold-soft, #fbf3e3);
  color: var(--clay, #914f3a); border-radius: 8px; padding: 7px 16px; font-size: 13px; font-weight: 600; cursor: pointer;
}
.qcustom-add:hover { background: #f6e9cf; }

/* ==== 2026-07-02 编辑台整顿(Lucia:错位/占位/Tab挪右) ==== */
.customer-edit-section { position: relative; }
.cust-edit-tabs { position: absolute; top: 9px; right: 14px; display: flex; gap: 6px; z-index: 3; margin: 0; }
.cust-edit-tabs button { font-size: 12.5px; padding: 5px 12px; border-radius: 999px; line-height: 1.2; }
/* 工具条收紧:一行放下,别摊一屏 */
.customer-edit .edit-toolbar { padding: 10px 12px; }
.customer-edit .toolbar-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.customer-edit .toolbar-secondary { display: flex; flex-wrap: wrap; gap: 6px; }
.customer-edit .toolbar-secondary button { font-size: 12.5px; padding: 6px 10px; }
.customer-edit .toolbar-primary { margin-left: auto; }
.customer-edit .template-pills { display: flex; flex-wrap: wrap; gap: 6px; }
.customer-edit .template-pill { padding: 5px 10px; }
.customer-edit .template-pill span { display: none; } /* pill 副标题收起,省一半宽度 */
/* 抽屉·客户页文案区 */
.wys-v11-copy { display: flex; flex-direction: column; gap: 8px; margin: 8px 0 12px; }
.wys-copy-row { display: flex; align-items: flex-start; gap: 8px; }
.wys-copy-row > span { flex: 0 0 64px; font-size: 12px; color: #8a6a4a; font-weight: 700; padding-top: 8px; }
.wys-copy-row input, .wys-copy-row textarea { flex: 1; }

/* 报价推送记录弹窗(Lucia 2026-07-09) */
.ph-wrap { font-size: 13px; }
.ph-hint { font-size: 12px; color: var(--quiet,#928d83); margin: 0 0 10px; }
.ph-list, .ph-difftable { width: 100%; border-collapse: collapse; margin-bottom: 14px; }
.ph-list th, .ph-list td, .ph-difftable th, .ph-difftable td { padding: 7px 10px; text-align: left; border-bottom: 1px solid var(--line,#eee); font-variant-numeric: tabular-nums; }
.ph-list th, .ph-difftable th { font-size: 11.5px; color: var(--quiet,#928d83); font-weight: 700; background: var(--gold-soft,#faf3e3); }
.ph-list tr.ph-sa { background: #eaf4ff; } .ph-list tr.ph-sb { background: #fff3e8; }
.ph-list tr.ph-sa.ph-sb { background: #f0eafc; }
.ph-pick { white-space: nowrap; }
.ph-pick label { display: inline-flex; align-items: center; gap: 3px; margin-right: 10px; font-size: 12px; cursor: pointer; }
/* 锁死 radio 尺寸——工作台全局 input 样式会把它撑成大圆(Lucia 2026-07-09截图) */
.ph-pick input[type="radio"] { -webkit-appearance: radio; appearance: radio; width: 15px !important; height: 15px !important; min-width: 15px; min-height: 15px; margin: 0 !important; padding: 0 !important; flex: none; box-shadow: none; accent-color: var(--accent,#c2602e); }
.ph-diff { border-top: 1px dashed var(--line,#e5ddd0); padding-top: 12px; }
.ph-diff h4 { margin: 0 0 4px; font-size: 13.5px; color: var(--ink); }
.ph-ppd { font-size: 14px; font-weight: 700; margin: 4px 0 10px; }
.ph-up { color: #c0392b; } .ph-down { color: #1d6b46; }
.ph-difftable td:last-child { font-weight: 700; }

/* 行程方案历史弹窗(Lucia 2026-07-09) */
.etab-hist { margin-left: auto; border: 1px solid var(--line,#e5ddd0); background: #fff; border-radius: 8px; padding: 6px 12px; font-size: 12.5px; color: var(--clay,#914f3a); cursor: pointer; align-self: center; }
.etab-hist:hover { border-color: var(--accent,#c2602e); background: var(--gold-soft,#faf3e3); }
.pv-cur { font-size: 10px; background: var(--accent,#c2602e); color: #fff; border-radius: 4px; padding: 1px 5px; }
.pv-tag { display: inline-block; font-size: 11px; background: #eaf4ff; color: #1668c1; border-radius: 4px; padding: 1px 6px; margin-right: 4px; }
.pv-tagin { width: 88px; border: 1px solid var(--line,#e5ddd0); border-radius: 6px; padding: 3px 6px; font-size: 11.5px; }
.pv-view { border: 1px solid var(--line,#e5ddd0); background: #fff; border-radius: 6px; padding: 3px 8px; font-size: 11.5px; cursor: pointer; margin-left: 6px; }
.pv-view:hover { border-color: var(--accent,#c2602e); color: var(--accent,#c2602e); }
.pv-diff, .pv-view-box { border-top: 1px dashed var(--line,#e5ddd0); padding-top: 12px; }
.pv-diff h4, .pv-view-box h4 { margin: 0 0 8px; font-size: 13.5px; color: var(--ink); }
.pv-daydiff { font-size: 13px; margin: 4px 0 8px; }
.pv-spotdiff > div { margin: 6px 0; font-size: 12.5px; }
.pv-added { color: #1668c1; font-weight: 700; margin-right: 6px; }
.pv-removed { color: #c0392b; font-weight: 700; margin-right: 6px; }
.pv-chip { display: inline-block; border-radius: 5px; padding: 2px 7px; margin: 2px 3px; font-size: 12px; }
.pv-c-add { background: #eaf4ff; color: #1668c1; }
.pv-c-del { background: #fdecea; color: #c0392b; text-decoration: line-through; }
.pv-days { margin: 0; padding-left: 20px; font-size: 12.5px; line-height: 1.9; }
.pv-days li { margin-bottom: 2px; }

/* 方案库搜索(Lucia 2026-07-09) */
.plan-search-bar { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; }
.plan-search-in { flex: 1; box-sizing: border-box; padding: 10px 14px; border: 1px solid var(--line,#e5ddd0); border-radius: 10px; font-size: 14px; }
.plan-search-in:focus { outline: none; border-color: var(--accent,#c2602e); box-shadow: 0 0 0 3px rgba(194,96,46,.12); }
.plan-search-count { font-size: 12.5px; color: var(--quiet,#928d83); white-space: nowrap; }
.plan-search-empty { padding: 20px 4px; color: var(--quiet,#928d83); font-size: 13px; }

/* 骨架加天/删天/拖动重排(Lucia 2026-07-09) */
.prc-day { position: relative; cursor: default; transition: box-shadow .12s, transform .12s; }
.prc-day.prc-drop { box-shadow: 0 -3px 0 0 var(--accent,#c2602e) inset; }
.prc-day[draggable="true"]:active { opacity: .85; }
.prc-day-no { display: flex; align-items: center; gap: 4px; flex-wrap: wrap; }
/* 只手柄可拖：加大点击区+明确抓握态，正文/输入框打字不再误移（Lucia 2026-07-11）*/
.prc-drag { cursor: grab; color: #b3ada2; font-size: 17px; line-height: 1; user-select: none; padding: 4px 6px; border-radius: 6px; touch-action: none; }
.prc-drag:hover { color: var(--clay, #b5551d); background: #f2ece1; }
.prc-drag:active { cursor: grabbing; color: var(--clay, #b5551d); }
.prc-day[draggable="true"] { cursor: grabbing; }
.prc-day-move { display: inline-flex; flex-direction: column; gap: 1px; margin-left: 2px; }
.prc-day-move button { width: 20px; height: 15px; line-height: 1; padding: 0; font-size: 11px; border: 1px solid var(--line,#e5ddd0); background: #fff; border-radius: 4px; cursor: pointer; color: #8a7c64; }
.prc-day-move button:hover { border-color: var(--accent,#c2602e); color: var(--accent,#c2602e); }
.prc-day-del { position: absolute; top: 8px; right: 8px; border: 1px solid #f0d9be; background: #fff; color: #c0392b; border-radius: 6px; padding: 3px 8px; font-size: 11.5px; cursor: pointer; }
.prc-day-del:hover { background: #fdecea; }
.prc-add-day { display: block; width: 100%; margin-top: 10px; border: 1.5px dashed var(--accent,#c2602e); background: var(--gold-soft,#faf3e3); color: var(--clay,#914f3a); border-radius: 10px; padding: 11px; font-size: 14px; font-weight: 600; cursor: pointer; }
.prc-add-day:hover { background: #f6e9cf; }

/* 门票总价汇总条 + 新建门票(Lucia 2026-07-09) */
.qroute-catbar { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; margin: 10px 0 12px; padding: 10px 14px; background: var(--gold-soft,#faf3e3); border: 1px solid var(--line,#e8e3da); border-radius: 10px; }
.qroute-catsum { font-size: 13px; color: var(--sub,#6b6355); white-space: nowrap; font-variant-numeric: tabular-nums; }
.qroute-catsum b { color: var(--clay,#914f3a); font-size: 15px; }
.qroute-catbar-sp { flex: 1; }
.qroute-newticket { border: none; border-radius: 8px; padding: 8px 16px; background: linear-gradient(135deg,#c2602e,#a84e26); color: #fff; font-size: 13px; font-weight: 700; cursor: pointer; white-space: nowrap; box-shadow: 0 2px 6px rgba(168,78,38,.24); }
.qroute-newticket:hover { transform: translateY(-1px); }
.qroute-newticket-mini { border: 1px dashed var(--accent,#c2602e); background: #fff; color: var(--clay,#914f3a); border-radius: 6px; padding: 3px 10px; font-size: 11.5px; cursor: pointer; margin-left: 6px; }
.qroute-newticket-mini:hover { background: var(--gold-soft,#faf3e3); }
/* K08/K41(2026-07-14) 从库补一张 + 族谱候选 + 讲解改价 */
.qroute-ticket-acts { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 5px; }
.qroute-libpick-mini { border: 1px dashed var(--accent,#c2602e); background: var(--gold-soft,#faf3e3); color: var(--clay,#914f3a); border-radius: 6px; padding: 3px 10px; font-size: 11.5px; cursor: pointer; }
.qroute-libpick-mini:hover { background: #f6e6cd; }
.qroute-fam-tag { display: inline-block; margin-left: 6px; font-size: 10px; font-weight: 800; color: #8a5a13; background: #fbf0d9; border-radius: 999px; padding: 1px 7px; vertical-align: middle; }
.libpick .libpick-list { max-height: 52vh; overflow-y: auto; display: flex; flex-direction: column; gap: 6px; }
.libpick-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 8px 10px; border: 1px solid var(--line,#e8e2d6); border-radius: 8px; }
.libpick-row:hover { border-color: var(--accent-soft,#f5dcc8); background: #fffdf8; }
.libpick-row-main { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.libpick-city { font-size: 11px; color: var(--sub,#5f5a51); background: #f1ede4; border-radius: 999px; padding: 1px 8px; }
.libpick-price { font-size: 12px; color: var(--clay,#914f3a); font-variant-numeric: tabular-nums; }
.qroute-gprice-edit { margin-top: 6px; font-size: 12px; color: var(--sub,#5f5a51); display: flex; align-items: center; gap: 4px; flex-wrap: wrap; }
.qroute-gprice-in { width: 74px; padding: 3px 6px; border: 1px solid var(--line,#e8e2d6); border-radius: 6px; font-variant-numeric: tabular-nums; }
.qroute-gprice-tip { font-size: 10px; color: #9a9488; background: #f5f2ec; border-radius: 999px; padding: 1px 7px; }
.qroute-newtrans { background: linear-gradient(135deg,#3b7a57,#2f6347) !important; box-shadow: 0 2px 6px rgba(47,99,71,.24) !important; }
.qcustom-cat { flex: 0 0 auto; min-width: 150px; padding: 6px 8px; font-size: 12px; border: 1px solid var(--line,#e5ddd0); border-radius: 7px; background: #fff; cursor: pointer; }
.qcustom-cat:focus { outline: none; border-color: var(--accent,#c2602e); }

/* 酒店一次性模糊报价(Lucia 2026-07-09) */
.qfuz-row { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; padding: 10px 12px; margin: 6px 0; background: #fbf6ec; border: 1px dashed var(--accent,#c2602e); border-radius: 10px; }
.qfuz-tag { font-size: 11.5px; font-weight: 700; color: var(--clay,#914f3a); background: #fff; border-radius: 5px; padding: 2px 7px; white-space: nowrap; }
.qfuz-in { border: 1px solid var(--line,#e5ddd0); border-radius: 7px; padding: 6px 8px; font-size: 13px; box-sizing: border-box; }
.qfuz-in:focus { outline: none; border-color: var(--accent,#c2602e); }
.qfuz-name { flex: 1; min-width: 130px; font-weight: 600; }
.qfuz-num { width: 62px; text-align: center; }
.qfuz-x { font-size: 12.5px; color: var(--sub,#6b6355); white-space: nowrap; }
.qfuz-total { font-size: 14px; white-space: nowrap; margin-left: 4px; }
.qfuz-total b { color: var(--clay,#914f3a); }
.qfuz-mg { font-size: 11.5px; color: #1d6b46; font-style: normal; }
.qfuz-mg.neg { color: #c0392b; }
.qfuz-addbtn { color: var(--clay,#914f3a) !important; font-weight: 600; }

/* 排行程右侧动线地图(Lucia 2026-07-09) */
.plan-routemap-box { margin-bottom: 12px; }
.plan-routemap-cap { font-size: 12px; color: var(--sub,#6b6355); margin-bottom: 6px; line-height: 1.5; }
.plan-routemap-cap b { color: var(--clay,#914f3a); }
.plan-route-map-iframe { width: 100%; height: 460px; border: 1px solid var(--line,#e8e3da); border-radius: 12px; background: #fff; display: block; }

/* 酒店段:Day移动键 + 晚数可编辑(Lucia 2026-07-09) */
.qseg-day { display: inline-flex; align-items: center; gap: 5px; }
.qseg-day-edit { display:inline-flex; align-items:center; gap:2px; font-weight:700; color:var(--ink,#3f352c); }
.qseg-day-edit input { width:38px; padding:4px 2px; border:1px solid var(--line,#e5ddd0); border-radius:6px; background:#fffaf3; color:inherit; font:inherit; text-align:center; }
.qseg-day-edit input:focus { outline:2px solid rgba(194,96,46,.2); border-color:var(--accent,#c2602e); }
.qtop-party-edit { border:0; background:transparent; padding:0; color:inherit; font:inherit; cursor:pointer; }
.qtop-party-edit span { margin-left:4px; color:var(--accent,#c2602e); font-size:12px; text-decoration:underline; text-underline-offset:2px; }
.quote-party-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:12px; margin:14px 0; }
.quote-party-grid label { display:grid; gap:5px; font-weight:700; }
.quote-party-grid input { width:100%; box-sizing:border-box; padding:9px; border:1px solid var(--line,#e5ddd0); border-radius:8px; }
.quote-party-sync { display:flex; align-items:flex-start; gap:7px; padding:10px; background:#fff8e9; border-radius:8px; }
.q-cost-cell { display:grid; gap:3px; }
.q-cost-free { border:0; background:transparent; color:#9a6a42; font-size:10px; padding:0; text-align:left; cursor:pointer; }
.q-cost-free.on { color:#287a4b; font-weight:700; }
.qseg-nights-in { width: 40px; text-align: center; border: 1px solid var(--line,#e5ddd0); border-radius: 6px; padding: 3px 4px; font-size: 13px; font-weight: 700; color: var(--clay,#914f3a); }
.qseg-nights-in:focus { outline: none; border-color: var(--accent,#c2602e); }

/* ============================================================================
   计调工作台（/dispatch）：队列卡片进度条 + 移交状态徽标 + 出行前核对清单。
   复用 ctrq-* 卡片骨架，这里只加计调特有的小件。
   ============================================================================ */
.dph-main { flex: 1; min-width: 0; }
.dph-hand { display: inline-block; font-size: 11px; font-weight: 700; padding: 2px 9px; border-radius: 999px; color: #8a6d3b; background: #fcf3df; vertical-align: 1px; }
.dph-hand.mid { color: var(--accent); background: var(--gold-soft); }
.dph-hand.ok { color: var(--ok); background: #e6f1ea; }
.dph-prog { display: flex; align-items: center; gap: 10px; margin-top: 7px; }
.dph-bar { flex: 0 0 160px; height: 6px; border-radius: 999px; background: var(--accent-faint); overflow: hidden; }
.dph-bar i { display: block; height: 100%; border-radius: 999px; background: var(--ok); transition: width .2s; }
.dph-progtxt { font-size: 11.5px; font-weight: 600; color: var(--sub); }
.dph-urgent { font-size: 11.5px; font-weight: 700; padding: 3px 10px; border-radius: 999px; color: var(--clay); background: var(--gold-soft); white-space: nowrap; }
.dph-urgent.hot { color: #b3402a; background: #fbeae5; }
.dph-urgent.ok { color: var(--ok); background: #e6f1ea; }
/* 核对清单：跟在卡片下面的一块，逐项 ✅/🔴 + 缺项红字点名 + 去补按钮 */
.dph-checklist { margin: -4px 0 6px; padding: 10px 14px; border: 1px dashed var(--line); border-top: none; border-radius: 0 0 12px 12px; background: var(--accent-faint); }
.dph-check { display: flex; align-items: center; gap: 9px; padding: 5px 0; font-size: 13px; }
.dph-check + .dph-check { border-top: 1px dashed var(--line); }
.dph-check-ic { flex: 0 0 auto; font-size: 13px; }
.dph-check-tx { flex: 1; min-width: 0; font-weight: 600; color: var(--ink); }
.dph-check-tx em { font-style: normal; font-weight: 500; color: var(--quiet); }
.dph-check.bad .dph-check-tx { color: var(--sub); }
.dph-check-miss { display: inline-block; margin-left: 8px; font-size: 12px; font-weight: 700; color: #b3402a; }
.dph-check-go { flex: 0 0 auto; font-size: 12px; font-weight: 700; padding: 3px 10px; }
.dph-check-actions { display: flex; align-items: center; gap: 10px; margin-top: 9px; }
.dph-ready-badge { margin-top: 9px; font-size: 13px; font-weight: 700; color: var(--ok); }
@media (max-width: 720px) {
  .dph-bar { flex-basis: 100px; }
}
/* 推送历史·回滚(Lucia 2026-07-13) */
.ph-cur { font-size: 11.5px; color: #2f8a52; font-weight: 700; white-space: nowrap; }
.ph-rbtag { font-size: 10.5px; color: #5a3fb0; background: #e5e0f5; border-radius: 999px; padding: 1px 6px; font-weight: 700; }
/* 工作稿vs客户页不一致提醒(Lucia 2026-07-13) */
.quote-push-gap { margin: 0 0 8px; padding: 8px 12px; background: #eef3fb; border: 1px solid #c4d4ee; border-left: 3px solid #3b6bb3; border-radius: 6px; font-size: 12.5px; color: #2c4a75; line-height: 1.55; }
.quote-push-gap b { color: #1e3a5f; }

.quote-save-state { display: inline-flex; align-items: center; min-height: 28px; padding: 4px 10px; margin: 0 0 6px; border: 1px solid #bdd8c7; border-radius: 6px; background: #edf8f1; color: #27633c; font-size: 12px; font-weight: 700; }
.quote-save-state.dirty { border-color: #e5b36c; background: #fff5e5; color: #8a4e12; }
.quote-confirm-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 10px 0 14px; padding: 12px; border: 1px solid #dcc7b6; border-radius: 6px; background: #fffaf5; }
.quote-confirm-actions .hint { margin: 0; }
.quote-history-list { display: grid; gap: 8px; }
.quote-history-row { display: grid; grid-template-columns: minmax(190px, .8fr) minmax(280px, 1.4fr) auto; align-items: center; gap: 12px; padding: 10px 12px; border: 1px solid var(--line, #e4ddd3); border-radius: 6px; }
.quote-history-row > div:first-child { display: grid; gap: 3px; }
.quote-history-row span { color: var(--quiet, #746d65); font-size: 12px; }
@media (max-width: 760px) {
  .quote-history-row { grid-template-columns: 1fr; }
  .quote-history-row button { justify-self: start; }
}
/* ⚔️ 比价拆解卡（内部工具·帮客户算账）2026-07-14 */
.cbd-modal { max-width: 980px; width: 94vw; }
.cbd-hint { font-size: 12.5px; color: #6b6154; line-height: 1.6; margin: 0 0 8px; }
.cbd-hint b { color: #a14b26; }
.cbd-input { width: 100%; min-height: 130px; font-size: 13px; line-height: 1.6; padding: 10px 12px; border: 1px solid var(--line, #e5ddd0); border-radius: 8px; resize: vertical; box-sizing: border-box; }
.cbd-actions { display: flex; align-items: center; gap: 10px; margin: 10px 0 12px; }
.cbd-actions-hint { font-size: 12px; color: #8a7f6e; }
.cbd-card { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; align-items: start; }
@media (max-width: 760px) { .cbd-card { grid-template-columns: 1fr; } }
.cbd-col { border: 1px solid var(--line, #e5ddd0); border-radius: 10px; overflow: hidden; background: #fff; }
.cbd-col-them .cbd-col-head { background: #f3efe8; color: #6b6154; }
.cbd-col-us .cbd-col-head { background: #eaf4ec; color: #1f7a3d; }
.cbd-col-head { font-weight: 700; font-size: 13.5px; padding: 9px 12px; border-bottom: 1px solid var(--line, #e5ddd0); }
.cbd-sec { padding: 8px 12px 10px; border-top: 1px dashed #efe9df; }
.cbd-sec:first-of-type { border-top: none; }
.cbd-sec-title { font-weight: 700; font-size: 12.5px; color: #4a4238; margin-bottom: 6px; }
.cbd-sec-title small { font-weight: 600; color: #8a7f6e; margin-left: 6px; }
.cbd-dayrow { display: grid; grid-template-columns: 34px minmax(0, 1fr) auto; gap: 6px; align-items: center; padding: 3px 0; font-size: 12.5px; }
.cbd-dayrow-hotel { padding-top: 0; }
.cbd-dayno { font-weight: 700; color: #a14b26; }
.cbd-spots-input, .cbd-hotel-input { width: 100%; font-size: 12.5px; padding: 4px 8px; border: 1px solid #e8e1d5; border-radius: 6px; box-sizing: border-box; background: #fffdf8; }
.cbd-hotel-input { background: #fbf8f2; color: #6b6154; }
.cbd-ourspots { min-width: 0; overflow-wrap: anywhere; line-height: 1.5; }
.cbd-drive { white-space: nowrap; font-weight: 600; color: #4a4238; font-size: 12px; }
.cbd-red { color: #c0272d; font-weight: 700; }
.cbd-ok { color: #1f7a3d; font-weight: 700; font-size: 11.5px; background: #e9f6ec; border-radius: 999px; padding: 1px 8px; margin-left: 4px; }
.cbd-dim { color: #9a9184; }
.cbd-fact { font-size: 12.5px; line-height: 1.7; color: #3e372e; }
.cbd-num { width: 54px; font-size: 12.5px; padding: 3px 6px; border: 1px solid #e8e1d5; border-radius: 6px; }
.cbd-chk { display: inline-flex; align-items: center; gap: 5px; margin-right: 14px; font-size: 12.5px; color: #4a4238; }
.cbd-recalc { padding: 6px 12px 12px; }
.cbd-closing { margin: 12px 2px 4px; font-size: 13px; color: #6b6154; border-left: 3px solid #d8c9a8; padding-left: 10px; line-height: 1.7; }
.cbd-foot-actions { display: flex; align-items: center; gap: 10px; margin-top: 8px; flex-wrap: wrap; }
.quote-gift-note{margin:6px 0 2px;padding:7px 12px;background:#f6efe2;border:1px solid #e3d5b8;border-radius:8px;font-size:12.5px;color:#7a6742}
.quote-gift-note b{color:#a05a2c}

/* ============================================================================
   计调操作台 K18-K35（q105）
   ============================================================================ */
/* 仪表盘 */
.jd-dash { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin: 12px 0; }
.jd-dash-card { border: 1px solid var(--line); border-radius: 12px; background: var(--panel); padding: 14px 16px; }
.jd-dash-card.danger { border-color: #d9534f; background: #fdf1f0; }
.jd-dash-card.warn { border-color: var(--accent); background: var(--gold-soft, #fbf3e3); }
.jd-dash-card.ok { border-color: var(--line); }
.jd-dash-n { font-size: 30px; font-weight: 800; color: var(--ink); line-height: 1; }
.jd-dash-card.danger .jd-dash-n { color: #c0392b; }
.jd-dash-lbl { font-weight: 700; margin-top: 4px; }
.jd-dash-sub { font-size: 12px; color: var(--muted, #8a7c64); margin-top: 2px; }
.jd-dash-list { margin-top: 8px; display: flex; flex-direction: column; gap: 3px; }
.jd-dash-list a { font-size: 12px; color: #c0392b; cursor: pointer; text-decoration: none; }
.jd-dash-list a:hover { text-decoration: underline; }
.jd-dash-card a { cursor: pointer; color: var(--accent); }

/* 分区操作卡 */
.jd-op-hd h3 { color: var(--ink); }
.jd-zone-body { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 12px; }
.jd-item { border: 1px solid var(--line); border-radius: 12px; background: var(--panel); padding: 12px; border-left: 4px solid var(--line-strong); }
.jd-item.d-todo { border-left-color: #d0a94a; }
.jd-item.d-mid { border-left-color: var(--accent); }
.jd-item.d-ok { border-left-color: var(--ok, #3d7a55); }
.jd-item.d-done { border-left-color: #7a8a99; }
.jd-item-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 8px; }
.jd-item-title { font-weight: 700; font-size: 14px; }
.jd-wsno { font-size: 11px; background: var(--gold-soft, #fbf3e3); color: var(--accent); padding: 1px 6px; border-radius: 6px; margin-left: 4px; }
.jd-badge { font-size: 12px; padding: 2px 8px; border-radius: 8px; white-space: nowrap; font-weight: 700; }
.jd-badge.d-todo { background: #fbeecf; color: #8a6d1a; }
.jd-badge.d-mid { background: var(--accent-soft, #f5dcc8); color: var(--accent); }
.jd-badge.d-ok { background: #dcefe3; color: var(--ok, #3d7a55); }
.jd-badge.d-done { background: #e4e8ec; color: #58606a; }
.jd-window { margin: 6px 0; font-size: 12px; color: #b06a00; background: #fff6e6; border-radius: 6px; padding: 4px 8px; }
.jd-item-body { margin-top: 8px; display: flex; flex-direction: column; gap: 6px; }
.jd-line { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.jd-lbl { font-size: 12px; color: var(--muted, #8a7c64); min-width: 40px; }
.jd-payable { width: 90px; padding: 3px 6px; border: 1px solid var(--line-strong); border-radius: 6px; }
.jd-uploads { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 4px; }
.jd-up { font-size: 12px; padding: 4px 8px; border: 1px dashed var(--line-strong); border-radius: 7px; background: var(--accent-faint, #f3efe9); cursor: pointer; }
.jd-up:hover { border-color: var(--accent); }
.jd-pays { display: flex; flex-wrap: wrap; gap: 5px; }
.jd-pay-chip { font-size: 12px; background: #dcefe3; color: var(--ok, #3d7a55); padding: 2px 7px; border-radius: 7px; }
.jd-pay-chip.extra { background: #fbeecf; color: #8a6d1a; }
.jd-pay-chip b { cursor: pointer; margin-left: 4px; opacity: .6; }
.jd-pay-chip b:hover { opacity: 1; color: #c0392b; }
.jd-gt { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-top: 6px; padding-top: 6px; border-top: 1px dashed var(--line); }
.jd-date { padding: 3px 6px; border: 1px solid var(--line-strong); border-radius: 6px; }

/* K42 紧凑卡：默认两行 + 展开明细 */
.jd-item.jd-compact { padding: 10px 12px; }
.jd-c-row1 { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.jd-c-day { font-size: 12px; font-weight: 700; color: var(--muted, #8a7c64); background: var(--accent-faint, #f3efe9); border-radius: 6px; padding: 1px 7px; white-space: nowrap; }
.jd-c-name { font-weight: 700; font-size: 14px; color: var(--ink); flex: 1 1 auto; min-width: 0; }
.jd-win-ic { margin-left: 4px; cursor: help; font-size: 12px; }
.jd-c-amt { font-size: 12.5px; font-weight: 700; color: var(--ink); white-space: nowrap; }
.jd-c-row2 { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-top: 8px; }
.jd-c-sup { font-size: 11.5px; color: var(--muted, #8a7c64); margin-left: auto; max-width: 40%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.jd-c-more { margin-top: 8px; border-top: 1px dashed var(--line); padding-top: 6px; }
.jd-c-more > summary { cursor: pointer; font-size: 12px; color: var(--accent); list-style: none; user-select: none; }
.jd-c-more > summary::-webkit-details-marker { display: none; }
.jd-c-more > summary::before { content: "▸ "; }
.jd-c-more[open] > summary::before { content: "▾ "; }
.jd-c-morebody { margin-top: 8px; display: flex; flex-direction: column; gap: 8px; }
.jd-x-block { border: 1px solid var(--line); border-radius: 9px; padding: 8px 10px; background: var(--accent-faint, #f8f5f0); }
.jd-x-block.jd-x-manual { background: var(--panel); border-style: dashed; }
.jd-x-h { font-size: 12px; font-weight: 700; color: var(--muted, #8a7c64); margin-bottom: 5px; }
.jd-x-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 13px; margin: 3px 0; }
.jd-x-lbl { font-size: 12px; color: var(--muted, #8a7c64); min-width: 44px; }
.jd-x-note { font-size: 12px; color: var(--muted, #8a7c64); margin-top: 4px; }
.jd-x-window { font-size: 12px; color: #b06a00; background: #fff6e6; border-radius: 6px; padding: 4px 8px; margin-top: 6px; }
.jd-free { margin-top: 4px; }
.jd-free > summary { cursor: pointer; font-size: 12.5px; color: var(--ok, #3d7a55); font-weight: 600; user-select: none; }
.jd-free-body { margin-top: 6px; display: flex; flex-direction: column; gap: 4px; }
.jd-free-row { display: flex; justify-content: space-between; gap: 10px; font-size: 12.5px; padding: 3px 0; border-bottom: 1px dashed var(--line); }

/* 核对区 */
.jd-check-summary { display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 10px; font-size: 13px; }
.jd-check-summary .warn { color: #c0392b; font-weight: 700; }
.jd-check-summary .ok { color: var(--ok, #3d7a55); }
.jd-check-days { display: flex; flex-direction: column; gap: 6px; }
.jd-check-day { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; padding: 5px 0; border-bottom: 1px dashed var(--line); }
.jd-check-chip { font-size: 11px; padding: 2px 6px; border-radius: 6px; background: #f0ece4; }
.jd-check-chip.d-ok { background: #dcefe3; color: var(--ok, #3d7a55); }
.jd-check-chip.d-mid { background: var(--accent-soft, #f5dcc8); }
.jd-check-chip.d-todo { background: #fbeecf; }
.jd-check-chip.d-done { background: #e4e8ec; }

/* 弹层通用 */
.jd-pay-row { display: flex; align-items: center; gap: 8px; margin: 8px 0; }
.jd-pay-row label { min-width: 84px; font-size: 13px; color: var(--muted, #8a7c64); }
.jd-pay-row input, .jd-pay-row select { flex: 1; padding: 6px 8px; border: 1px solid var(--line-strong); border-radius: 7px; }
.jd-chan-row, .jd-chan-librow { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 8px 0; border-bottom: 1px dashed var(--line); }
.jd-chan-row.picked { background: var(--gold-soft, #fbf3e3); border-radius: 8px; padding: 8px; }
.jd-chan-form { margin-top: 8px; }
.jd-chan-libhead, .jd-pay-ledhead { display: grid; grid-template-columns: 1.4fr 1.4fr 1.6fr 1.2fr .8fr .6fr; gap: 8px; font-size: 12px; color: var(--muted, #8a7c64); font-weight: 700; padding-bottom: 6px; border-bottom: 1px solid var(--line-strong); }
.jd-chan-librow { display: grid; grid-template-columns: 1.4fr 1.4fr 1.6fr 1.2fr .8fr .6fr; align-items: center; }
.jd-pay-ledhead { grid-template-columns: 1fr 1.4fr .7fr .8fr 1.2fr 1.4fr; }
.jd-pay-ledrow { display: grid; grid-template-columns: 1fr 1.4fr .7fr .8fr 1.2fr 1.4fr; gap: 8px; align-items: center; padding: 7px 0; border-bottom: 1px dashed var(--line); font-size: 13px; }
.jd-notif-list { display: flex; flex-direction: column; gap: 6px; }
.jd-notif { padding: 8px 10px; border-radius: 8px; border: 1px solid var(--line); cursor: pointer; }
.jd-notif.unread { background: var(--gold-soft, #fbf3e3); border-color: var(--accent); }
.jd-notif-t { font-weight: 700; font-size: 13px; }
@media (max-width: 720px) { .jd-dash { grid-template-columns: 1fr; } .jd-chan-libhead, .jd-chan-librow, .jd-pay-ledhead, .jd-pay-ledrow { grid-template-columns: 1fr 1fr; } }

/* REQ-K45 车队总控台 —— 一屏横排卡片，车未派齐的出发在即团飘红置顶。 */
.fleet-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 14px; }
.fleet-card { border: 1px solid var(--line); border-radius: 12px; padding: 13px 14px; background: var(--paper, #fff);
  display: flex; flex-direction: column; gap: 8px; box-shadow: 0 1px 3px rgba(40, 37, 31, .05); }
.fleet-card.red { border-color: #e0483a; box-shadow: 0 0 0 2px rgba(224, 72, 58, .16); }
.fleet-card-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.fleet-card-title { font-weight: 800; font-size: 15px; }
.fleet-ono { font-size: 12px; color: var(--sub); font-weight: 600; margin-left: 2px; }
.fleet-badge { font-size: 12px; font-weight: 700; padding: 2px 9px; border-radius: 999px; white-space: nowrap; }
.fleet-badge.go { background: #eaf2ff; color: #2c7be5; }
.fleet-badge.live { background: #eafaf1; color: #1f9d63; }
.fleet-badge.wait { background: #fff3e0; color: #c47d16; }
.fleet-badge.done { background: #eef0f3; color: #8a8f98; }
.fleet-redbar { background: #fdecea; color: #c0392b; font-weight: 700; font-size: 13px; padding: 5px 9px; border-radius: 8px; }
.fleet-meta { display: flex; flex-wrap: wrap; gap: 12px; font-size: 13px; color: var(--sub); }
.fleet-cities { font-size: 13.5px; font-weight: 600; }
.fleet-car { border-top: 1px dashed var(--line); padding-top: 8px; display: flex; flex-direction: column; gap: 5px; }
.fleet-car-row { font-size: 13.5px; }
.fleet-car-row b { font-weight: 700; margin-right: 4px; }
.fleet-dim { color: #b04a3a; font-style: italic; }
.fleet-misstag { color: #c0392b; font-weight: 700; font-size: 12px; margin-left: 6px; }
.fleet-oktag { color: #1f9d63; font-weight: 700; font-size: 12px; margin-left: 6px; }
.fleet-chks { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 2px; }
.fleet-chk { font-size: 12px; font-weight: 700; padding: 1px 7px; border-radius: 6px; }
.fleet-chk.ok { background: #eafaf1; color: #1f9d63; }
.fleet-chk.miss { background: #fdecea; color: #c0392b; }
.fleet-contact-row { font-size: 13px; color: var(--sub); }
.fleet-card-acts { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 2px; }
.fleet-card-acts button { font-size: 13px; }
.fleet-folded { margin-top: 16px; }
.fleet-folded > summary { cursor: pointer; font-weight: 700; color: var(--sub); padding: 8px 0; }
.fleet-folded .fleet-grid { margin-top: 10px; }
@media (max-width: 560px) { .fleet-grid { grid-template-columns: 1fr; } }
.quote-recovery-bar {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin: 8px 0;
  padding: 10px 12px;
  border: 1px solid #d8a84e;
  border-radius: 10px;
  background: #fff8e8;
  color: #6f4c0f;
  font-size: 13px;
}
.quote-recovery-bar button {
  padding: 5px 10px;
}
