/* =========================================================================
 * site.css — 官网内页（关于/服务/套餐/案例/价格/知识/联系/预约）专属布局
 * 100% 复用 tokens.css / base.css 令牌与组件；本文件只承载内页独有结构。
 * 设计红线：禁水印图——无真实素材一律用「纯橙绿渐变占位」或「灰块 #D9D4CF 占位」。
 * 不引入任何新色值 / 间距 / 圆角体系。
 * ========================================================================= */

/* 占位灰（案例 before/after、地图、资质墙等；非令牌色，按 design-notes §二 指定 #D9D4CF） */
:root { --c-ph: #D9D4CF; }

/* ---------- 内页通用 Hero（橙绿渐变视觉占位） ---------- */
.inner-hero { background: var(--c-bg); }
.ih-inner {
  display: grid; grid-template-columns: 1.1fr .9fr; gap: var(--s-48); align-items: center;
  padding-block: var(--s-64);
}
.ih-copy .h1 { margin-bottom: var(--s-16); }
.ih-copy .lead { margin-bottom: var(--s-24); max-width: 520px; }
.ih-copy .trust-bar { display: flex; flex-wrap: wrap; gap: var(--s-12); margin-top: var(--s-8); }
.ih-copy .trust-bar .chip { box-shadow: var(--sh-card); }

.ih-visual {
  min-height: 320px; border-radius: var(--r-card); box-shadow: var(--sh-card);
  background: linear-gradient(135deg, var(--c-primary) 0%, var(--c-accent) 100%);
  display: flex; flex-direction: column; justify-content: flex-end; gap: var(--s-8);
  padding: var(--s-32); color: #fff; position: relative; overflow: hidden;
}
.ih-visual::after {
  content: ""; position: absolute; right: -40px; top: -40px; width: 220px; height: 220px;
  border-radius: 50%; background: rgba(255,255,255,.14);
}
.ih-visual .ih-label { font-size: 13px; opacity: .85; letter-spacing: 1px; }
.ih-visual .ih-title { font-size: 22px; font-weight: var(--w-bold); }
.ih-visual .ih-note { font-size: 13px; opacity: .8; }

/* ---------- 占位组件：灰块 / 渐变（禁水印图） ---------- */
.ph-block {
  background: var(--c-ph); border-radius: var(--r-img);
  min-height: 180px; display: flex; align-items: center; justify-content: center; text-align: center;
  color: #6B5E55; font-size: var(--fs-caption); padding: var(--s-16);
}
.ph-gradient {
  background: linear-gradient(135deg, var(--c-primary), var(--c-accent)); border-radius: var(--r-img);
  min-height: 160px; display: flex; align-items: center; justify-content: center; text-align: center;
  color: #fff; font-weight: var(--w-medium); padding: var(--s-16); position: relative; overflow: hidden;
}

/* ---------- 服务项目：8 业务卡（4×2 桌面 / 单列 移动） ---------- */
.svc-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--s-24); }
.svc-card { display: flex; flex-direction: column; gap: var(--s-12); }
/* 卡片型入口：锚点仅作跳转容器，视觉卡片内嵌，避免 <a> 直接套 card 类导致的重叠/可访问性问题 */
.svc-link { display: block; text-decoration: none; color: inherit; }
.svc-icon {
  width: 48px; height: 48px; border-radius: 12px; flex: 0 0 auto;
  background: linear-gradient(135deg, var(--c-primary), var(--c-accent)); color: #fff;
  display: flex; align-items: center; justify-content: center; font-size: 20px; font-weight: var(--w-bold);
}
.svc-card .h3 { margin-bottom: 0; }
.svc-summary { color: var(--c-text-2); font-size: var(--fs-body); margin: 0; flex: 1; }
.svc-price { color: var(--c-primary); font-weight: var(--w-bold); font-family: var(--font-en); }
.svc-price .ph-tip { color: var(--c-text-3); font-weight: var(--w-regular); font-size: var(--fs-caption); font-family: var(--font-zh); }
.svc-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-top: auto; }
.svc-card .btn { margin-top: var(--s-8); align-self: flex-start; }

/* 平台保障条（复用信任徽章） */
.guarantee-bar {
  display: flex; flex-wrap: wrap; gap: var(--s-16); justify-content: center;
  background: var(--c-surface); border: 1px solid var(--c-line); border-radius: var(--r-card);
  padding: var(--s-24); box-shadow: var(--sh-card);
}
.guarantee-bar .chip { box-shadow: var(--sh-card); }

/* ---------- 套餐活动：5 套餐卡（3 列 / 单列） ---------- */
.pkg-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--s-24); }
.pkg-card { display: flex; flex-direction: column; gap: var(--s-12); }
.pkg-card .pkg-head { display: flex; align-items: baseline; gap: var(--s-12); flex-wrap: wrap; }
.pkg-old { color: var(--c-text-3); text-decoration: line-through; font-size: var(--fs-body); }
.pkg-now { color: var(--c-primary); font-size: 28px; font-weight: var(--w-bold); font-family: var(--font-en); }
.pkg-now small { font-size: 14px; font-weight: var(--w-medium); }
.pkg-includes { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; flex: 1; }
.pkg-includes li { color: var(--c-text-2); font-size: var(--fs-body); padding-left: 18px; position: relative; }
.pkg-includes li::before { content: "✓"; color: var(--c-accent); position: absolute; left: 0; font-weight: var(--w-bold); }
.pkg-scene { color: var(--c-text-3); font-size: var(--fs-caption); }
.pkg-card .btn { margin-top: var(--s-8); }

/* ---------- 服务案例：8 案例对比卡（3 列 / 单列） ---------- */
.case-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--s-24); }
.case-card { display: flex; flex-direction: column; gap: var(--s-12); }
.case-ba { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.case-ba .ph-block { min-height: 120px; font-size: 12px; }
.case-ba .ph-block b { display: block; font-size: 13px; margin-bottom: 2px; color: var(--c-text); }
.case-stars { color: var(--c-warn); letter-spacing: 2px; }
.case-meta { color: var(--c-text-3); font-size: var(--fs-caption); }
.case-review { color: var(--c-text-2); font-size: var(--fs-body); margin: 0; font-style: italic; }

/* ---------- 透明价格：价目表 + 估价器 ---------- */
.price-table { width: 100%; border-collapse: collapse; overflow: hidden; border-radius: var(--r-card); }
.price-table th, .price-table td {
  text-align: left; padding: 16px var(--s-16); border-bottom: 1px solid var(--c-line); font-size: var(--fs-body);
}
.price-table thead th { background: var(--c-primary-soft); color: var(--c-primary); font-weight: var(--w-bold); }
.price-table tbody tr:last-child td { border-bottom: none; }
.price-table tbody tr:hover { background: var(--c-bg); }
.price-table .pt-cat { font-weight: var(--w-bold); color: var(--c-text); white-space: nowrap; }
.price-table .pt-range { color: var(--c-primary); font-family: var(--font-en); font-weight: var(--w-medium); white-space: nowrap; }
.price-table .pt-note { color: var(--c-text-3); font-size: var(--fs-caption); }
.table-caption { font-size: var(--fs-caption); color: var(--c-text-3); padding: 12px var(--s-16); background: var(--c-bg); border-top: 1px solid var(--c-line); }

.estimator { display: grid; grid-template-columns: 1fr 1fr; gap: var(--s-24); align-items: start; }
.estimator .est-form { display: grid; gap: var(--s-16); }
.est-result {
  background: var(--c-primary-soft); border: 1px solid var(--c-primary); border-radius: var(--r-card); padding: var(--s-24);
}
.est-result .est-amount { color: var(--c-primary); font-size: 30px; font-weight: var(--w-bold); font-family: var(--font-en); }
.est-result .est-hint { color: var(--c-text-2); font-size: var(--fs-caption); margin-top: var(--s-8); }
.est-result .btn { margin-top: var(--s-16); }

/* ---------- 家政知识：分类 Tab + 文章卡 ---------- */
.filter-tabs { display: flex; flex-wrap: wrap; gap: var(--s-8); justify-content: center; margin-bottom: var(--s-32); }
.filter-tab {
  border: 1px solid var(--c-line); background: #fff; color: var(--c-text-2);
  border-radius: var(--r-pill); padding: 8px 20px; font-size: var(--fs-body); font-weight: var(--w-medium); cursor: pointer;
}
.filter-tab:hover { border-color: var(--c-primary); color: var(--c-primary); }
.filter-tab.active { background: var(--c-primary-soft); color: var(--c-primary); border-color: var(--c-primary); }

.know-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--s-24); }
.know-card { display: flex; flex-direction: column; gap: var(--s-12); overflow: hidden; }
.know-cover { min-height: 160px; display: flex; align-items: flex-end; padding: var(--s-16);
  background: linear-gradient(135deg, var(--c-primary), var(--c-accent)); color: #fff; border-radius: var(--r-img); }
.know-cover .know-cat-icon { font-size: 22px; font-weight: var(--w-bold); }
.know-card h3 { margin: 0; }
.know-summary { color: var(--c-text-2); font-size: var(--fs-body); margin: 0; flex: 1; }
.know-meta { color: var(--c-text-3); font-size: var(--fs-caption); }

/* ---------- 联系我们：信息卡 + 地图占位 ---------- */
.contact-grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--s-24); align-items: start; }
.contact-info { display: grid; gap: var(--s-16); }
.contact-item { display: flex; gap: var(--s-16); align-items: flex-start; }
.contact-item .ci-icon {
  width: 44px; height: 44px; border-radius: 12px; flex: 0 0 auto;
  background: var(--c-primary-soft); color: var(--c-primary);
  display: flex; align-items: center; justify-content: center; font-size: 20px; font-weight: var(--w-bold);
}
.contact-item .ci-label { color: var(--c-text-3); font-size: var(--fs-caption); }
.contact-item .ci-value { color: var(--c-text); font-weight: var(--w-medium); font-size: var(--fs-body); }
.map-ph {
  min-height: 340px; background: var(--c-ph); border-radius: var(--r-card); box-shadow: var(--sh-card);
  display: flex; align-items: center; justify-content: center; text-align: center; color: #6B5E55;
  padding: var(--s-24); font-size: var(--fs-body);
}
.contact-cta { display: flex; gap: var(--s-16); flex-wrap: wrap; align-items: center; }

/* ---------- 关于我们：认证体系 / 资质墙 / 数据条 ---------- */
.about-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--s-24); }
.about-stats .stat-num { color: var(--c-primary); font-size: 36px; font-weight: var(--w-bold); font-family: var(--font-en); }
.about-stats .stat-label { color: var(--c-text-2); font-size: var(--fs-caption); }
.auth-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--s-24); }
.auth-card { text-align: center; }
.auth-card .auth-icon {
  width: 56px; height: 56px; border-radius: 14px; margin: 0 auto var(--s-12);
  background: linear-gradient(135deg, var(--c-primary), var(--c-accent)); color: #fff;
  display: flex; align-items: center; justify-content: center; font-size: 26px; font-weight: var(--w-bold);
}
.qual-wall { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--s-24); }
.qual-wall .ph-block { min-height: 200px; }

/* ---------- 在线预约：表单布局 + 成功绿卡 ---------- */
.booking-layout { display: grid; grid-template-columns: 1.5fr .85fr; gap: var(--s-32); align-items: start; }
.booking-form { display: grid; grid-template-columns: 1fr 1fr; gap: 0 var(--s-24); }
.booking-form .field.full { grid-column: 1 / -1; }
.booking-form .submit-row { grid-column: 1 / -1; margin-top: var(--s-8); }
.booking-form .submit-row .btn { width: 100%; max-width: 360px; }
.booking-side { display: grid; gap: var(--s-16); position: sticky; top: 88px; }
.booking-side .side-card { background: var(--c-surface); border: 1px solid var(--c-line); border-radius: var(--r-card); padding: var(--s-24); box-shadow: var(--sh-card); }
.booking-side .side-card h3 { font-size: var(--fs-h3); margin-bottom: var(--s-12); }
.booking-side .side-card .side-line { display: flex; gap: 8px; align-items: flex-start; color: var(--c-text-2); font-size: var(--fs-body); margin-bottom: var(--s-8); }
.booking-side .side-card .side-line b { color: var(--c-accent); }

/* 成功绿卡（提交成功态，复用 recruit 成功卡语义） */
.success-card {
  display: none; text-align: center; padding: var(--s-48) var(--s-32);
  background: var(--c-accent-soft); border: 1px solid var(--c-accent); border-radius: var(--r-card);
}
.success-card.show { display: block; }
.success-card .ok-badge {
  width: 64px; height: 64px; border-radius: 50%; background: var(--c-accent); color: #fff;
  display: flex; align-items: center; justify-content: center; font-size: 34px; margin: 0 auto var(--s-16);
}
.success-card h3 { color: var(--c-accent); margin-bottom: var(--s-8); }
.success-card p { color: var(--c-text-2); margin: 0 0 var(--s-8); }
.compliance-note {
  margin-top: var(--s-16); font-size: var(--fs-caption); color: var(--c-text-2);
  background: #fff; border-radius: var(--r-input); padding: 12px var(--s-16); border: 1px solid var(--c-line);
}

/* 重提交区（被驳回可带入 application_id + 手机号） */
.resubmit-box { border: 1px dashed var(--c-line); border-radius: var(--r-card); padding: var(--s-16) var(--s-24); margin-bottom: var(--s-24); background: var(--c-surface); }
.resubmit-box summary { cursor: pointer; color: var(--c-primary); font-weight: var(--w-medium); font-size: var(--fs-body); }
.resubmit-box .field { margin-top: var(--s-16); }

/* =========================================================================
 * 响应式：断点 768 / 390（移动端三铁律）
 * 基础 grid 折叠由 base.css 处理，这里补充 site.css 新增的自定义网格。
 * ========================================================================= */
@media (max-width: 768px) {
  .ih-inner { grid-template-columns: 1fr; gap: var(--s-32); padding-block: var(--s-48); }
  .ih-visual { min-height: 200px; }
  .svc-grid { grid-template-columns: repeat(2, 1fr); }   /* 768：业务 2 列 */
  .pkg-grid { grid-template-columns: 1fr; }               /* 套餐单列 */
  .case-grid { grid-template-columns: 1fr; }              /* 案例单列 */
  .know-grid { grid-template-columns: 1fr; }              /* 知识单列 */
  .estimator { grid-template-columns: 1fr; }
  .contact-grid { grid-template-columns: 1fr; }
  .booking-layout { grid-template-columns: 1fr; }
  .booking-side { position: static; }
  .booking-form { grid-template-columns: 1fr; }           /* 铁律②：表单单列 */
  .about-stats, .auth-grid, .qual-wall { grid-template-columns: 1fr; }
}

@media (max-width: 390px) {
  .svc-grid { grid-template-columns: 1fr; }               /* 手机：业务单列 */
  .ih-copy .lead { font-size: 16px; }
}

/* 价目表移动端卡片化（铁律③：不横向溢出） */
@media (max-width: 768px) {
  .price-table, .price-table tbody, .price-table tr, .price-table td { display: block; width: 100%; }
  .price-table thead { display: none; }
  .price-table tr {
    border: 1px solid var(--c-line); border-radius: var(--r-card);
    padding: var(--s-8) var(--s-16); margin-bottom: var(--s-16); background: #fff; box-shadow: var(--sh-card);
  }
  .price-table td { border: none; padding: 8px 0; }
  .price-table td::before {
    content: attr(data-label); display: block; font-size: var(--fs-caption);
    font-weight: var(--w-bold); color: var(--c-text); margin-bottom: 2px;
  }
}

/* =========================================================================
 * 后台 /admin：模块切换 Tab（师傅招募 / 预约管理）
 * ========================================================================= */
.module-switch { display: flex; gap: var(--s-8); margin-bottom: var(--s-24); flex-wrap: wrap; }
.module-tab {
  border: 1px solid var(--c-line); background: #fff; color: var(--c-text-2);
  border-radius: var(--r-btn); padding: 10px 20px; font-size: var(--fs-body); font-weight: var(--w-medium); cursor: pointer;
}
.module-tab:hover { border-color: var(--c-primary); color: var(--c-primary); }
.module-tab.active { background: var(--c-primary); color: #fff; border-color: var(--c-primary); }

/* 后台预约管理专用：状态标签文案与 recruit 同色，语义不同，已通过 .st-* 复用 */
.admin-note { color: var(--c-text-3); font-size: var(--fs-caption); margin-bottom: var(--s-12); }

/* =========================================================================
 * 活数据兼容层（保留后台 __OVERRIDE_* 实时下发内容的官网渲染）
 * 以下组件由 common.js 渲染，非设计师模版原生结构，但属红线内容（真实电话 / 服务 /
 * 套餐 / 评价 / 合作商 / Banner / 公告），故补一套令牌化样式，与模版视觉一致。
 * ========================================================================= */

/* 运营活动 Banner 轮播（common.js renderBanner 产出 .banner/.banner-track/.banner-slide/.banner-dots/.b-dot） */
.banner { width: 100%; overflow: hidden; position: relative; border-radius: var(--r-card); box-shadow: var(--sh-card); background: var(--c-primary-soft); }
.banner-track { display: flex; will-change: transform; }
.banner-slide {
  position: relative; flex: 0 0 100%; min-height: 200px;
  display: flex; flex-direction: column; justify-content: flex-end; gap: 6px;
  padding: var(--s-32); color: #fff;
}
.banner-slide .bt { font-size: var(--fs-h2); font-weight: var(--w-bold); position: relative; text-shadow: 0 1px 6px rgba(0,0,0,.25); }
.banner-slide .bs { font-size: var(--fs-body); opacity: .92; position: relative; text-shadow: 0 1px 6px rgba(0,0,0,.25); }
/* 2026-10-31 后台优化清单 3.1：后台帧配置跳转时整帧渲染为 <a>——去掉链接默认样式，视觉与 div 帧一致 */
a.banner-slide { text-decoration: none; color: inherit; cursor: pointer; }
.banner-dots { position: absolute; bottom: 12px; left: 50%; transform: translateX(-50%); display: flex; gap: 8px; z-index: 2; }
.banner-dots .b-dot { width: 8px; height: 8px; border-radius: 50%; background: rgba(255,255,255,.55); cursor: pointer; transition: width .2s, background .2s; }
.banner-dots .b-dot.on { background: #fff; width: 18px; border-radius: 4px; }

/* 系统公告条（common.js renderSiteNotice 产出 .site-notice/.sn-ic/.sn-txt/.sn-close） */
.site-notice {
  display: flex; align-items: center; gap: 10px;
  background: var(--c-primary-soft); color: var(--c-text);
  padding: 10px 16px; font-size: var(--fs-caption); border-bottom: 1px solid var(--c-line);
}
.site-notice .sn-ic { flex: 0 0 auto; }
.site-notice .sn-txt { flex: 1; }
.site-notice .sn-close { flex: 0 0 auto; border: 0; background: transparent; font-size: 18px; line-height: 1; cursor: pointer; color: var(--c-text-2); }

/* 合作商无缝滚动（common.js renderPartnerMarquee 产出 .marquee/.marquee-track/.partner-cell） */
.marquee {
  overflow: hidden;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 5%, #000 95%, transparent);
  mask-image: linear-gradient(90deg, transparent, #000 5%, #000 95%, transparent);
}
.marquee-track { display: flex; gap: var(--s-12); width: max-content; animation: marquee-scroll linear infinite; }
@keyframes marquee-scroll { from { transform: translateX(0); } to { transform: translateX(-50%); } }
.partner-cell {
  flex: 0 0 auto; width: 240px; background: var(--c-surface); border: 1px solid var(--c-line);
  border-radius: var(--r-card); padding: var(--s-16); box-shadow: var(--sh-card);
  display: flex; flex-direction: column; gap: 6px;
}
.partner-cell .pic { width: 100%; height: 120px; border-radius: var(--r-img); overflow: hidden; background: var(--c-ph); }
.partner-cell .pic img { width: 100%; height: 100%; object-fit: cover; }
.partner-cell .ic { width: 36px; height: 36px; border-radius: 10px; background: var(--c-primary-soft); color: var(--c-primary); display: flex; align-items: center; justify-content: center; font-weight: var(--w-bold); }
.partner-cell .tag { color: var(--c-accent); font-size: var(--fs-caption); font-weight: var(--w-medium); }
.partner-cell .nm { font-weight: var(--w-bold); color: var(--c-text); }
.partner-cell .it { color: var(--c-text-2); font-size: var(--fs-caption); }
.partner-cell .ph { color: var(--c-text-3); font-size: var(--fs-caption); }

/* 骨架屏 / 空状态 / 图片兜底（common.js renderSkeleton / renderEmpty / imgFallback） */
.skeleton { padding: var(--s-16); }
.sk-line { height: 12px; border-radius: 6px; background: var(--c-line); margin-bottom: 8px; animation: sk-pulse 1.2s ease-in-out infinite; }
.sk-line.w40 { width: 40%; } .sk-line.w60 { width: 60%; } .sk-line.w80 { width: 80%; }
@keyframes sk-pulse { 0%, 100% { opacity: .45; } 50% { opacity: 1; } }
.empty { text-align: center; padding: var(--s-32) var(--s-16); color: var(--c-text-3); }
.empty .ic { color: var(--c-primary); margin-bottom: 8px; }
.empty .t { font-weight: var(--w-medium); color: var(--c-text-2); }
.empty .s { font-size: var(--fs-caption); margin-top: 4px; }

/* ---------- 服务详情页（detail.html，活数据兼容层） ---------- */
.detail-hero { text-align: center; padding: var(--s-24) 0 var(--s-32); }
.detail-hero-ic { width: 56px; height: 56px; margin: 0 auto var(--s-12); border-radius: 14px; background: var(--c-primary-soft); color: var(--c-primary); display: flex; align-items: center; justify-content: center; font-weight: var(--w-bold); }
.detail-hero .h1 { margin: 0 0 var(--s-8); }
.detail-meta { color: var(--c-text-2); font-size: var(--fs-body); margin-bottom: var(--s-8); }
.detail-price { color: var(--c-primary); font-size: var(--fs-h2); font-weight: var(--w-bold); }
.detail-price small { font-size: var(--fs-caption); color: var(--c-text-2); font-weight: var(--w-regular); }
.kv { display: flex; gap: var(--s-16); padding: var(--s-12) 0; border-bottom: 1px solid var(--c-line); }
.kv:last-child { border-bottom: 0; }
.kv .k { flex: 0 0 84px; color: var(--c-text-3); font-size: var(--fs-body); }
.kv .v { flex: 1; color: var(--c-text); display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.note-card { background: var(--c-primary-soft); border-left: 3px solid var(--c-primary); color: var(--c-text-2); font-size: var(--fs-body); line-height: 1.7; }
.note-card.warn { background: #fff8ec; border-left-color: #f59e0b; color: #7a5a1e; }
.review-item { padding: var(--s-12) 0; border-bottom: 1px solid var(--c-line); }
.review-item:last-child { border-bottom: 0; }
.review-head { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; }
.review-tags { color: var(--c-text-3); font-size: var(--fs-caption); }
.review-text { margin: 0; font-size: var(--fs-body); color: var(--c-text); }

/* 详情页底部固定预约条 */
.detail-bar { position: fixed; left: 0; right: 0; bottom: 0; z-index: 50; background: #fff; border-top: 1px solid var(--c-line); box-shadow: 0 -4px 16px rgba(32,20,14,.08); padding: 10px var(--s-16); }
.detail-bar-inner { max-width: var(--container); margin: 0 auto; display: flex; align-items: center; gap: var(--s-12); }
.detail-bar-price { font-size: 20px; font-weight: var(--w-bold); color: var(--c-primary); margin-right: auto; }
.detail-bar-price small { font-size: var(--fs-caption); color: var(--c-text-2); font-weight: var(--w-regular); }
/* 描边按钮（电话预约等次级动作） */
.btn-ghost { background: #fff; color: var(--c-text); border: 1px solid var(--c-line); }
.btn-ghost:hover { border-color: var(--c-primary); color: var(--c-primary); }
@media (max-width: 390px) {
  .detail-bar-price { font-size: 16px; }
  .detail-bar-inner { gap: 8px; }
}

/* ---------- 首页减法形态（对齐模板 9 节奏，2026-10-23） ---------- */
/* Banner 细条形态：保留后台下发与轮播能力，弱化为单行横条 */
.banner-slim .banner-slide {
  min-height: 0; padding: 14px var(--s-24);
  flex-direction: row; flex-wrap: wrap; align-items: baseline; justify-content: flex-start; gap: 4px 12px;
}
.banner-slim .banner-slide .bt { font-size: var(--fs-body); font-weight: var(--w-bold); }
.banner-slim .banner-slide .bs { font-size: var(--fs-caption); opacity: .85; }

/* 套餐子标题（热销与套餐合并节内的次级标题） */
.pkg-subhead { margin-top: var(--s-32); margin-bottom: var(--s-16); }
.pkg-subhead .h3 { margin: 0 0 4px; }
.pkg-subhead .muted { margin: 0; }

/* 合作商页脚细条：左侧小标签 + 右侧滚动区 */
.partner-strip { display: flex; align-items: center; gap: var(--s-16); }
.partner-strip-label { flex: 0 0 auto; color: var(--c-text-3); font-size: var(--fs-caption); white-space: nowrap; }
.partner-strip .marquee { flex: 1; min-width: 0; }
.partner-strip .partner-cell { width: 200px; padding: var(--s-12); gap: 4px; }
.partner-strip .partner-cell .pic { height: 80px; }
@media (max-width: 768px) {
  .partner-strip { flex-direction: column; align-items: stretch; gap: var(--s-8); }
  .partner-strip-label { text-align: center; }
}

/* ---------- services 页速查目录（默认折叠，保证模板留白节奏） ---------- */
.svc-dir { margin-top: var(--s-24); border: 1px solid var(--c-line); border-radius: var(--r-card); background: var(--c-surface); }
.svc-dir summary {
  cursor: pointer; padding: var(--s-16) var(--s-20); font-weight: var(--w-medium); color: var(--c-text-2);
  list-style: none; display: flex; align-items: center; gap: 8px; user-select: none;
}
.svc-dir summary::-webkit-details-marker { display: none; }
.svc-dir summary::before { content: '▸'; color: var(--c-primary); transition: transform .2s; }
.svc-dir[open] summary::before { transform: rotate(90deg); }
.svc-dir[open] summary { border-bottom: 1px solid var(--c-line); }
.svc-dir .dir-group { padding: var(--s-16) var(--s-20) 0; }
.svc-dir .dir-group:last-child { padding-bottom: var(--s-16); }
.svc-dir .dir-title {
  display: flex; align-items: center; gap: 8px; font-weight: var(--w-bold); color: var(--c-text);
  margin-bottom: var(--s-8);
}
.svc-dir .dir-rows { display: grid; grid-template-columns: 1fr 1fr; gap: 0 var(--s-24); }
.svc-dir .dir-row {
  display: flex; justify-content: space-between; align-items: baseline; gap: 12px;
  padding: 7px 0; border-bottom: 1px dashed var(--c-line); text-decoration: none;
}
.svc-dir .dir-row:last-child { border-bottom: 0; }
.svc-dir .dir-row .nm { color: var(--c-text); font-size: var(--fs-body); }
.svc-dir .dir-row .pr { color: var(--c-primary); font-size: var(--fs-caption); white-space: nowrap; font-weight: var(--w-medium); }
.svc-dir .dir-row:hover .nm { color: var(--c-primary); }
/* 类目入口卡上的项数标注 */
.svc-count { color: var(--c-text-3); font-size: var(--fs-caption); margin-left: 8px; font-weight: var(--w-regular); }
@media (max-width: 768px) {
  .svc-dir .dir-rows { grid-template-columns: 1fr; }
}

/* Banner 无图形态：浅底配深字（修复白字落在浅粉底上不可读） */
.banner-slide.no-img { color: var(--c-text); background: var(--c-primary-soft); }
.banner-slide.no-img .bt { color: var(--c-text); text-shadow: none; }
.banner-slide.no-img .bs { color: var(--c-text-2); text-shadow: none; }

/* 价格页：B 类「上门评估」标（A 方案活数据价目表） */
.pt-eval { color: var(--c-text-2); font-size: var(--fs-caption); background: var(--c-surface); border: 1px dashed var(--c-line); border-radius: 999px; padding: 2px 10px; white-space: nowrap; }

/* 类目图位（P0 铺路）：素材未就位时显示 common.js categoryImageFallback 生成的品牌兜底图。
   满格贴合 .svc-icon 的 48×48 方块（含原 row-radius 12px），保证图片上线前后版面零位移。 */
.svc-cat-pic { overflow: hidden; padding: 0; line-height: 0; }
.svc-cat-pic img { width: 100%; height: 100%; object-fit: cover; border-radius: 12px; display: block; }

/* ---------- 主视觉图位（P0 铺路，2026-10-28） ----------
 * 适用 .hero-visual（首页/招募页）与 .ih-visual（其余内页页头）。
 * 契约：素材未就位 → 保持原有橙→绿渐变，视觉零退化；
 *      素材按 img/hero/<page>.jpg 落盘 → JS 加 .has-photo 并注入背景，自动生效。
 * ⚠️ 注意（踩坑记录）：这里的 url() 不能写在 CSS 里用相对路径 —— CSS 内的相对 url 以 css/ 目录为基准，
 *    会解析成 /css/img/hero/xxx.jpg 而 404。故背景图一律由 JS 以内联 style 设置（内联相对路径以页面为基准）。
 *    CSS 此处只负责尺寸与「已接图后隐藏施工提示」。 */
.hero-visual.has-photo,
.ih-visual.has-photo {
  background-size: cover, cover;
  background-position: center, center;
  background-repeat: no-repeat, no-repeat;
}
/* 已接真图后，「实拍主视觉待替换」等施工提示文案自动隐藏 */
.hero-visual.has-photo .hv-note,
.ih-visual.has-photo .ih-note { display: none; }

/* 案例前后对比图位（P0 铺路 F 组）：
   图在 → img 满格覆盖并浮出角标；图不在 → img.pic-miss 隐藏，露出原有的「服务前/服务后」文字占位。
   .ph-block 原本就是 min-height 120px 的占位块，这里加 position 让图片可绝对定位铺满，尺寸不变。 */
.case-pic { position: relative; padding: 0; overflow: hidden; }
.case-pic .ph-fallback { position: relative; z-index: 1; }
.case-pic img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 2; border-radius: inherit; }
.case-pic img.pic-miss { display: none; }
.case-pic .pic-badge {
  position: absolute; top: 6px; left: 6px; z-index: 3; display: none;
  background: rgba(255, 255, 255, .92); color: var(--c-text);
  font-size: 12px; font-weight: var(--w-bold); line-height: 1;
  padding: 4px 8px; border-radius: 999px;
}
/* 仅在图成功显示时才需要角标（图缺失时文字占位自带「服务前/服务后」） */
.case-pic img:not(.pic-miss) ~ .pic-badge { display: block; }

/* 套餐卡图位（P0 铺路 L 组）：3:2 顶部图，素材缺失由 onerror 降级占位；
   整块高度写死并与卡片宽同比例，保证有无素材两种状态卡片高度一致。 */
.pkg-pic { width: 100%; aspect-ratio: 3 / 2; border-radius: var(--r-img); overflow: hidden; margin-bottom: var(--s-12); background: var(--c-primary-soft); }
.pkg-pic[hidden] { display: none; }
.pkg-pic img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* 服务场景示意区（2026-10-28）：3 图横排，square 图 4:3 裁切，图注左对齐 */
.scene-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--s-24); }
.scene-card { margin: 0; border-radius: var(--r-img); overflow: hidden; background: #fff; box-shadow: var(--shadow-sm, 0 2px 10px rgba(32,20,14,.06)); }
.scene-card img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; display: block; }
.scene-card figcaption { display: flex; flex-direction: column; gap: 2px; padding: 12px 14px 14px; }
.scene-card figcaption strong { font-size: var(--fs-body); color: var(--c-ink, #20140E); }
.scene-card figcaption span { font-size: var(--fs-caption, 13px); color: var(--c-muted, #6B5D52); }

/* 场景示意区移动端（2026-10-31）：置于基础规则之后，保证覆盖生效 */
@media (max-width: 768px) {
  .scene-grid { grid-template-columns: 1fr; }             /* 场景示意单列 */
}

/* ============ 2026-10-31 卡片图放大 + 知识封面 ============ */
/* 服务页类目卡 & 首页热门卡：48px 角标图 → 卡顶全宽 3:2 主图（缺失时走品牌 SVG 兜底，版式一致） */
.svc-card .svc-icon.svc-cat-pic {
  width: 100%; height: auto; aspect-ratio: 3 / 2;
  border-radius: var(--r-img); background: var(--c-primary-soft);
  display: block; padding: 0; line-height: 0; overflow: hidden;
}
.svc-card .svc-icon.svc-cat-pic img { width: 100%; height: 100%; object-fit: cover; display: block; border-radius: 0; }
/* 知识卡封面照片态：与 CMS 文章 cover 字段同一套样式 */
.know-cover.know-cover-photo { padding: 0; min-height: 0; border-radius: var(--r-img); overflow: hidden; }
.know-cover.know-cover-photo img { width: 100%; aspect-ratio: 16 / 9; object-fit: cover; display: block; }
