/**
 * brand-site.css — 品牌官网专属层（首页 + about/events/vip/location）
 * 设计语言：深色 Hero × 象牙纸面 × 香槟金发丝线 × 衬线大字 × clip-path 图片揭示
 * 仅官网页面加载，不污染数据系统内页
 */

/* ============ 通用骨架 ============ */
.container-brand { max-width: 1200px; margin: 0 auto; padding: 0 1.5rem; }
.bs-section { padding: clamp(4rem, 9vw, 7.5rem) 0; position: relative; }
.bs-kicker {
    display: flex; align-items: center; gap: 0.75rem;
    font-size: var(--fs-xs); letter-spacing: 0.34em; text-transform: uppercase;
    color: hsl(var(--gold)); font-weight: var(--fw-semibold);
}
.bs-kicker::before { content: ''; width: 2.25rem; height: 1px; background: hsl(var(--gold)); }
.bs-kicker.center { justify-content: center; }
.bs-kicker.center::after { content: ''; width: 2.25rem; height: 1px; background: hsl(var(--gold)); }
.bs-title {
    font-family: var(--font-display); font-weight: 600;
    font-size: clamp(1.875rem, 4vw, 3rem); line-height: 1.18;
    color: hsl(var(--foreground)); margin: 1.125rem 0 0; letter-spacing: 0.02em;
}
.bs-sub {
    color: hsl(var(--muted-foreground)); font-size: var(--fs-base);
    line-height: 1.9; margin: 1rem 0 0; max-width: 42rem;
}
.bs-head-center { text-align: center; }
.bs-head-center .bs-sub { margin-left: auto; margin-right: auto; }

/* 金发丝分隔线（菱形节） */
.gold-rule { width: 4rem; height: 1px; background: hsl(var(--gold)); position: relative; margin: 1.5rem 0; }
.gold-rule::after {
    content: ''; position: absolute; left: 50%; top: -2.5px; width: 5px; height: 5px;
    background: hsl(var(--gold)); transform: translateX(-50%) rotate(45deg);
}
.gold-rule.center { margin-left: auto; margin-right: auto; }

/* ============ Hero（官网版） ============ */
.bs-hero {
    position: relative; min-height: 92vh; display: flex; align-items: center; justify-content: center;
    text-align: center; overflow: hidden; color: hsl(40 33% 96%);
}
.bs-hero-bg { position: absolute; inset: 0; }
.bs-hero-bg img { width: 100%; height: 100%; object-fit: cover; transform: scale(1.15); }
.bs-hero-bg::after {
    content: ''; position: absolute; inset: 0;
    background: linear-gradient(180deg, rgba(18,15,11,0.55) 0%, rgba(18,15,11,0.35) 40%, rgba(18,15,11,0.72) 100%);
}
.bs-hero-content { position: relative; z-index: 1; padding: 6rem 1.5rem 4rem; max-width: 60rem; }
.bs-hero .bs-kicker { justify-content: center; color: hsl(var(--gold-bright)); }
.bs-hero .bs-kicker::before, .bs-hero .bs-kicker::after { background: hsl(var(--gold-bright)); }
/* 轮播滑页：叠放 + 淡入淡出 + Ken Burns 缓推（高级感） */
.bs-hero-bg img.hero-slide {
    position: absolute; inset: 0;
    opacity: 0; transform: scale(1.08);
    transition: opacity 1.8s var(--ease-lux), transform 7.5s linear;
    will-change: opacity, transform;
}
.bs-hero-bg img.hero-slide.active { opacity: 1; transform: scale(1); }
/* 轮播指示条：细金线 */
.bs-hero-dots { position: absolute; right: 2.5rem; bottom: 2.25rem; z-index: 2; display: flex; gap: 0.5rem; }
.bs-hero-dots i {
    width: 1.5rem; height: 2px; background: hsl(40 20% 88% / 0.35);
    transition: width 0.5s var(--ease-lux), background 0.5s;
}
.bs-hero-dots i.on { width: 2.5rem; background: hsl(var(--gold-bright)); }
.bs-hero-logo { width: clamp(150px, 19vw, 250px); margin: 0 auto; filter: drop-shadow(0 6px 24px rgba(0,0,0,0.55)); }
.bs-hero-tag {
    font-family: var(--font-display); font-weight: 600;
    font-size: clamp(2.125rem, 5.6vw, 4.25rem); line-height: 1.15; letter-spacing: 0.06em; margin: 1.5rem 0 0;
}
.bs-hero-since {
    font-family: var(--font-display); font-style: italic;
    font-size: clamp(1rem, 2vw, 1.375rem); letter-spacing: 0.28em;
    color: hsl(var(--gold-bright)); margin: 1rem 0 0;
}
.bs-hero-sub { font-size: var(--fs-base); line-height: 2; color: hsl(40 20% 88% / 0.92); margin: 1.5rem auto 0; max-width: 34rem; }
.bs-hero-cta { display: flex; gap: 1rem; justify-content: center; margin-top: 2.5rem; flex-wrap: wrap; }
.bs-hero-scroll {
    position: absolute; bottom: 2rem; left: 50%; transform: translateX(-50%); z-index: 1;
    font-size: var(--fs-xs); letter-spacing: 0.4em; text-transform: uppercase; color: hsl(40 20% 88% / 0.7);
    writing-mode: vertical-rl; display: flex; align-items: center; gap: 0.75rem;
}
.bs-hero-scroll::after {
    content: ''; width: 1px; height: 3.5rem;
    background: linear-gradient(180deg, hsl(var(--gold-bright)), transparent);
    animation: bsScrollPulse 2.2s var(--ease-lux) infinite;
}
@keyframes bsScrollPulse { 0% { transform: scaleY(0); transform-origin: top; } 45% { transform: scaleY(1); transform-origin: top; } 55% { transform: scaleY(1); transform-origin: bottom; } 100% { transform: scaleY(0); transform-origin: bottom; } }

/* ============ 宣言（超大衬线） ============ */
.bs-decl { text-align: center; }
.bs-decl-line {
    font-family: var(--font-display); font-weight: 600;
    font-size: clamp(2rem, 5.5vw, 4.5rem); line-height: 1.25; letter-spacing: 0.04em;
    color: hsl(var(--foreground)); display: block;
}
.bs-decl-line em { font-style: normal; color: hsl(var(--gold)); }
.bs-decl .bs-sub { margin: 2rem auto 0; }

/* ============ 数字带 ============ */
.bs-stats {
    border-top: 1px solid hsl(var(--gold) / 0.35); border-bottom: 1px solid hsl(var(--gold) / 0.35);
    background: linear-gradient(180deg, hsl(var(--card)), hsl(var(--background)));
}
.bs-stats-inner {
    display: grid; grid-template-columns: repeat(6, 1fr);
    max-width: 1200px; margin: 0 auto;
}
.bs-stat { text-align: center; padding: 2.75rem 0.75rem; position: relative; }
.bs-stat + .bs-stat::before { content: ''; position: absolute; left: 0; top: 25%; height: 50%; width: 1px; background: hsl(var(--gold) / 0.25); }
.bs-stat-value {
    font-family: var(--font-display); font-weight: 600;
    font-size: clamp(1.5rem, 2.6vw, 2.25rem); color: hsl(var(--foreground));
    font-variant-numeric: tabular-nums; white-space: nowrap; letter-spacing: 0.01em;
}
.bs-stat-value .unit { font-size: 0.55em; color: hsl(var(--gold)); margin-left: 0.25em; letter-spacing: 0.08em; }
.bs-stat-label { font-size: var(--fs-xs); color: hsl(var(--muted-foreground)); letter-spacing: 0.12em; margin-top: 0.5rem; white-space: nowrap; }

/* ============ 编辑图文分栏 ============ */
.bs-split { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(2.5rem, 6vw, 5.5rem); align-items: center; }
.bs-split.reverse > .bs-split-media { order: 2; }
.bs-split-media { position: relative; }
.bs-split-media .frame {
    position: relative; overflow: hidden; border-radius: 2px;
    box-shadow: 0 30px 60px -20px rgba(20, 16, 10, 0.35);
}
.bs-split-media .frame::after {
    content: ''; position: absolute; inset: 0; pointer-events: none;
    border: 1px solid hsl(40 33% 96% / 0.25); margin: 0.875rem; /* 内描边画框感 */
}
.bs-split-media img { width: 100%; height: 100%; object-fit: cover; display: block; aspect-ratio: 4 / 3; transition: transform 1.4s var(--ease-lux); }
.bs-split-media:hover img { transform: scale(1.045); }
/* 悬浮徽章：独立组件，不绑定特定父级。
   原先写成 .bs-split-media .badge-float，导致首页把徽章移进 .bs-maisons-hero 后
   背景/阴影/圆角全部失效、只剩裸文字。改为裸类名后任何定位容器内都成立。
   注意：依赖父级 position:relative（.bs-split-media 与 .bs-maisons-hero 均已设置）。 */
.badge-float {
    position: absolute; bottom: -1.25rem; right: -1.25rem; z-index: 2;
    background: hsl(45 14% 10%); color: hsl(40 33% 96%);
    padding: 1.125rem 1.5rem; text-align: center; border-radius: 2px;
    box-shadow: 0 16px 40px rgba(20, 16, 10, 0.4);
}
.badge-float .n { font-family: var(--font-display); font-size: 1.5rem; font-weight: 600; color: hsl(var(--gold-bright)); white-space: nowrap; }
.badge-float .l { font-size: var(--fs-xs); letter-spacing: 0.18em; margin-top: 0.25rem; opacity: 0.85; white-space: nowrap; }
.bs-split-body p { color: hsl(var(--muted-foreground)); line-height: 2; font-size: var(--fs-base); margin: 1.25rem 0 0; }
.bs-split-body p:first-of-type { margin-top: 1.5rem; }

/* 迷你事实表（关于页 GFA 等） */
.bs-facts { margin-top: 2rem; border-top: 1px solid hsl(var(--border)); }
.bs-facts .row { display: flex; justify-content: space-between; align-items: baseline; gap: 1rem; padding: 0.875rem 0; border-bottom: 1px solid hsl(var(--border)); }
.bs-facts .k { font-size: var(--fs-sm); color: hsl(var(--muted-foreground)); letter-spacing: 0.1em; white-space: nowrap; }
.bs-facts .v { font-family: var(--font-display); font-size: 1.125rem; font-weight: 600; color: hsl(var(--foreground)); font-variant-numeric: tabular-nums; white-space: nowrap; text-align: right; }
/* 首页会员栏四张卡面缩略（2026-09-21 v27 客户要求：替代消费数据行）：
   单行四列，卡面 8:5 与 vip 页一致，投影沿用 .bs-vip-face 的深底悬浮感 */
.bs-vip-minicards { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.875rem; margin-top: 1.75rem; }
.bs-vip-minicards img { width: 100%; aspect-ratio: 8 / 5; object-fit: contain; filter: drop-shadow(0 6px 14px rgba(0,0,0,0.45)); }
@media (max-width: 640px) {
    .bs-vip-minicards { grid-template-columns: repeat(2, 1fr); }
}

/* ============ 深色区块（活动 / 会员） ============ */
.bs-dark {
    background: linear-gradient(170deg, hsl(45 16% 9%) 0%, hsl(45 14% 12%) 55%, hsl(45 16% 9%) 100%);
    color: hsl(40 25% 92%);
}
.bs-dark .bs-title { color: hsl(40 33% 96%); }
.bs-dark .bs-sub { color: hsl(40 15% 70%); }
.bs-dark .bs-kicker { color: hsl(var(--gold-bright)); }
/* ---------- 首页「艺术现场」章节背景图（2026-09-21 v28 客户要求，可选图片位 home.events.bg）----------
   绝对定位铺满章节，上层深色渐变压暗（沿用 bs-dark 底色系），保证标题/卡片可读；
   未上传图片时模板不渲染该层，章节保持原纯深色底 */
.bs-home-events { position: relative; overflow: hidden; }
.bs-home-events-bg { position: absolute; inset: 0; z-index: 0; pointer-events: none; }
.bs-home-events-bg img { width: 100%; height: 100%; object-fit: cover; }
.bs-home-events-bg::after {
    content: ''; position: absolute; inset: 0;
    background: linear-gradient(170deg, hsl(45 16% 9% / 0.86) 0%, hsl(45 14% 12% / 0.8) 55%, hsl(45 16% 9% / 0.93) 100%);
}
.bs-home-events > .container-brand { position: relative; z-index: 1; }
/* v30（客户反馈「设背景后查看全部活动看不清」）：透明底幽灵按钮压在背景图上对比不足，
   章节内改深色半透明底+磨砂+金色描边，底部遮罩同步加深（0.88→0.93） */
.bs-home-events .btn-ghost-lux {
    color: hsl(40 33% 96%);
    border-color: hsl(var(--gold) / 0.5);
    background: hsl(45 16% 9% / 0.55);
    backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);
}
.bs-home-events .btn-ghost-lux:hover {
    color: hsl(var(--gold-bright)); border-color: hsl(var(--gold-bright));
    background: hsl(45 16% 9% / 0.75); opacity: 1;
}
.bs-dark .bs-kicker::before, .bs-dark .bs-kicker::after { background: hsl(var(--gold-bright)); }

/* 活动卡片（官网 + 活动页共用） */
.bs-ev-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.75rem; margin-top: 3rem; }
.bs-ev-card {
    position: relative; display: block; overflow: hidden; border-radius: 2px;
    background: hsl(45 16% 15%); border: 1px solid hsl(var(--gold) / 0.28);
    transition: transform 0.5s var(--ease-lux), box-shadow 0.5s var(--ease-lux), border-color 0.5s;
    cursor: pointer;
}
.bs-ev-card:hover { transform: translateY(-6px); box-shadow: 0 24px 48px -12px rgba(0, 0, 0, 0.55); border-color: hsl(var(--gold) / 0.6); }
.bs-ev-media { position: relative; overflow: hidden; aspect-ratio: 4 / 3; background: hsl(45 12% 18%); }
.bs-ev-media img { width: 100%; height: 100%; object-fit: cover; transition: transform 1.2s var(--ease-lux), opacity 0.6s; }
.bs-ev-card:hover .bs-ev-media img { transform: scale(1.06); }
.bs-ev-media .no-img {
    position: absolute; inset: 0; display: flex; flex-direction: column; gap: 0.75rem;
    align-items: center; justify-content: center; color: hsl(40 15% 62%);
    font-size: var(--fs-xs); letter-spacing: 0.2em;
}
/* 状态徽章：实心金底深字，深色区块里最醒目的锚点 */
.bs-ev-status {
    position: absolute; top: 1rem; left: 1rem; z-index: 2;
    font-size: var(--fs-xs); letter-spacing: 0.22em; padding: 0.375rem 0.875rem;
    background: hsl(var(--gold-bright)); color: hsl(45 16% 10%); font-weight: var(--fw-semibold);
    box-shadow: 0 4px 14px rgba(0,0,0,0.35); white-space: nowrap;
}
.bs-ev-body { padding: 1.375rem 1.5rem 1.5rem; }
/* 无封面档期（多为「即将呈现」：还没开始、没有现场图）——不撑 4:3 的空占位框，
   收紧成文字卡：状态徽章从图角落进正文，正文垂直居中，
   与同行有图卡片等高时也不显空。无图可看故不可点，去掉指针与悬停抬起。 */
.bs-ev-card--text { cursor: default; }
.bs-ev-card--text:hover { transform: none; box-shadow: none; }
.bs-ev-card--text .bs-ev-body {
    display: flex; flex-direction: column; justify-content: center;
    padding: 1.75rem 1.5rem;
}
.bs-ev-status--flat {
    position: static; display: inline-block; align-self: flex-start;
    margin-bottom: 1.125rem; box-shadow: none;
}
.bs-ev-name { font-family: var(--font-display); font-size: 1.25rem; font-weight: 600; color: hsl(40 33% 97%); letter-spacing: 0.03em; }
.bs-ev-date { font-size: var(--fs-xs); color: hsl(40 18% 74%); letter-spacing: 0.14em; margin-top: 0.625rem; font-variant-numeric: tabular-nums; white-space: nowrap; }
/* v23（客户要求「即将呈现占位太多，未开始的不要占用这么多高度」）：
   upcoming 组整节收紧——章节上下内边距压缩、卡片一律紧凑文字卡
   （徽章/标题/行距全部收小），日期只显示年月（PHP 端已格式化） */
.bs-section--tight { padding-top: clamp(2.25rem, 4.5vh, 3.25rem); padding-bottom: clamp(2.25rem, 4.5vh, 3.25rem); }
.bs-ev-card--compact .bs-ev-body { padding: 1rem 1.25rem 1.125rem; }
.bs-ev-card--compact .bs-ev-name { font-size: 1.0625rem; }
.bs-ev-card--compact .bs-ev-date { margin-top: 0.375rem; }
.bs-ev-card--compact .bs-ev-status--flat { margin-bottom: 0.625rem; padding: 0.25rem 0.75rem; }
.bs-ev-more {
    display: inline-flex; align-items: center; gap: 0.5rem; margin-top: 1rem;
    font-size: var(--fs-xs); letter-spacing: 0.2em; color: hsl(var(--gold-bright));
}
.bs-ev-count { color: hsl(40 18% 74%); letter-spacing: 0.05em; }

/* 单个进行中档期：左卡 + 现场图从卡片背后涌出撒落（拍立得风，占满右区） */
.bs-ev-solo { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: clamp(1.5rem, 3vw, 2.5rem); align-items: center; }
.bs-ev-solo .bs-ev-card { z-index: 5; } /* 卡片主体在上，照片只从背后探出 */
/* 负左距：散布区伸进卡片列，首张左缘藏进卡片背后约 1/4 —— 探出感而不残缺 */
.bs-ev-scatter { position: relative; height: clamp(320px, 52vh, 460px); margin-left: clamp(-5rem, -6vw, -2.5rem); }
.bs-ev-scatter img {
    position: absolute; aspect-ratio: 4 / 3; object-fit: cover;
    border: 5px solid hsl(40 33% 96%); border-radius: 2px;
    box-shadow: 0 20px 44px -14px rgba(20, 16, 10, 0.5);
    cursor: pointer;
    transition: transform 0.5s var(--ease-lux), box-shadow 0.5s var(--ease-lux);
}
/* 6 个槽位：大小悬殊（28%~38%）、角度更野、上下跳跃分布，彻底散开 */
.bs-ev-scatter img:nth-child(1) { left: 0;   top: 20%; width: 32%; transform: rotate(-9deg);  z-index: 1; }
.bs-ev-scatter img:nth-child(2) { left: 24%; top: 0;   width: 36%; transform: rotate(7deg);   z-index: 2; }
.bs-ev-scatter img:nth-child(3) { left: 15%; top: 56%; width: 29%; transform: rotate(-5deg);  z-index: 1; }
.bs-ev-scatter img:nth-child(4) { left: 46%; top: 30%; width: 38%; transform: rotate(11deg);  z-index: 3; }
.bs-ev-scatter img:nth-child(5) { left: 66%; top: 64%; width: 28%; transform: rotate(-7deg);  z-index: 4; }
.bs-ev-scatter img:nth-child(6) { left: 70%; top: 8%;  width: 29%; transform: rotate(5deg);   z-index: 1; }
.bs-ev-scatter img:hover {
    transform: rotate(0deg) scale(1.07) translateY(-4px); z-index: 10;
    box-shadow: 0 28px 60px -16px rgba(20, 16, 10, 0.6);
}
@media (max-width: 899px) {
    .bs-ev-solo { grid-template-columns: 1fr; }
    .bs-ev-scatter { display: none; } /* 手机版不启用散布，档期卡片单列呈现 */
}

/* ============ 会员卡 ============ */
.bs-vip-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1.5rem; margin-top: 3rem; }
.bs-vip-card {
    position: relative; padding: 1.75rem 1.5rem 1.5rem; border-radius: 2px;
    background: linear-gradient(160deg, hsl(45 15% 13%), hsl(45 13% 10%));
    border: 1px solid hsl(var(--gold) / 0.3);
    transition: transform 0.5s var(--ease-lux), border-color 0.5s, box-shadow 0.5s var(--ease-lux);
    overflow: hidden;
}
.bs-vip-card::before {
    content: ''; position: absolute; top: 0; left: 0; right: 0; height: 2px;
    background: linear-gradient(90deg, transparent, hsl(var(--gold)), transparent);
    opacity: 0; transition: opacity 0.5s;
}
.bs-vip-card:hover { transform: translateY(-6px); border-color: hsl(var(--gold) / 0.65); box-shadow: 0 20px 44px -14px rgba(0, 0, 0, 0.55); }
.bs-vip-card:hover::before { opacity: 1; }
.bs-vip-card.top { border-color: hsl(var(--gold) / 0.55); background: linear-gradient(160deg, hsl(43 20% 15%), hsl(45 14% 10%)); }
.bs-vip-face { width: 100%; aspect-ratio: 8 / 5; object-fit: contain; margin-bottom: 1.25rem; filter: drop-shadow(0 8px 20px rgba(0,0,0,0.5)); }
.bs-vip-name { font-family: var(--font-display); font-size: 1.25rem; font-weight: 600; color: hsl(40 33% 96%); letter-spacing: 0.06em; }
.bs-vip-cond { font-size: var(--fs-xs); color: hsl(40 15% 65%); line-height: 1.8; margin-top: 0.625rem; min-height: 3.4em; }
.bs-vip-benefits { list-style: none; margin: 1rem 0 0; padding: 1rem 0 0; border-top: 1px solid hsl(40 20% 90% / 0.12); }
.bs-vip-benefits li {
    display: flex; align-items: center; gap: 0.5rem;
    font-size: var(--fs-xs); color: hsl(40 18% 78%); padding: 0.3rem 0; letter-spacing: 0.04em;
}
.bs-vip-benefits li svg { color: hsl(var(--gold-bright)); flex: none; }

/* ============ 位置 ============ */
/* v35（客户要求：参考高奢酒店 / K11 到访页重做，弃用 v34 卡片网格）——编辑式版式：
   距离总览条 .bs-dist-strip / 线描区位图 .bs-locmap / 编号路线行 .bs-route /
   周边策展清单 .bs-hood-*。发丝线 + 衬线大数字 + 金色点缀，与全站奢侈语法一致。 */
/* v37（客户要求「右图左文」）：距离总览改左栏竖排清单（发丝行线 + 衬线斜体数字） */
.bs-dist-list { margin-top: 2rem; border-top: 1px solid hsl(var(--border)); }
.bs-dist-row {
    display: grid; grid-template-columns: auto 1fr; gap: clamp(1.25rem, 2.5vw, 1.75rem);
    align-items: center; padding: 1.25rem 0; border-bottom: 1px solid hsl(var(--border));
}
.bs-dist-row .n {
    font-family: var(--font-display); font-weight: 600; font-style: italic;
    font-size: clamp(2rem, 3.4vw, 2.75rem); line-height: 1; color: hsl(var(--foreground));
    min-width: 4.25rem;
}
.bs-dist-row .n .u { font-style: normal; font-weight: 400; font-size: 0.34em; letter-spacing: 0.22em; margin-left: 0.35rem; color: hsl(var(--muted-foreground)); }
.bs-dist-row .k { font-size: var(--fs-xs); letter-spacing: 0.24em; color: hsl(var(--foreground)); text-transform: uppercase; }
.bs-dist-row .d { margin-top: 0.375rem; font-size: var(--fs-sm); color: hsl(var(--muted-foreground)); }
/* v37（客户要求「GIF 太大，右图左文」）：GIF 入右栏并缩小；不再铺通栏色带，
   改用两层 mask 将 GIF 四边羽化渐隐进页面底色——浅灰底与页面无硬边、不突兀，
   浅色 / 深色主题均自然衔接。 */
.bs-locmap-fade {
    -webkit-mask-image: linear-gradient(180deg, transparent 0, #000 7%, #000 93%, transparent 100%);
            mask-image: linear-gradient(180deg, transparent 0, #000 7%, #000 93%, transparent 100%);
}
.bs-locmap-fadein {
    -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 6%, #000 94%, transparent 100%);
            mask-image: linear-gradient(90deg, transparent 0, #000 6%, #000 94%, transparent 100%);
}
.bs-locmap-fadein img { width: 100%; height: auto; display: block; }
/* 覆盖 .bs-split-media img 的 4:3 裁切与悬停缩放——区位 GIF 须原比例完整展示 */
.bs-getting > .bs-split-media img { aspect-ratio: auto; height: auto; object-fit: initial; }
.bs-getting > .bs-split-media:hover img { transform: none; }
.bs-getting > .bs-split-media .bs-locmap-note { margin-top: 0.5rem; }
.bs-locmap-note { margin-top: 1.25rem; text-align: center; font-size: var(--fs-xs); letter-spacing: 0.22em; color: hsl(var(--muted-foreground)); text-transform: uppercase; }
/* 编号路线行 */
.bs-routes { margin-top: clamp(3rem, 6vw, 4.5rem); border-top: 1px solid hsl(var(--border)); }
.bs-route {
    display: grid; grid-template-columns: clamp(4rem, 7vw, 6.5rem) 1fr;
    gap: clamp(1.5rem, 3.5vw, 3.25rem);
    padding: clamp(1.875rem, 3.5vw, 2.75rem) 0;
    border-bottom: 1px solid hsl(var(--border));
}
.bs-route-idx {
    font-family: var(--font-display); font-weight: 600; font-style: italic;
    font-size: clamp(2.5rem, 5vw, 3.75rem); line-height: 0.9;
    color: hsl(var(--muted-foreground) / 0.38);
}
.bs-route-head { display: flex; align-items: center; gap: 1rem; flex-wrap: wrap; }
.bs-route-head .ic {
    flex: none; display: inline-flex; align-items: center; justify-content: center;
    width: 2.5rem; height: 2.5rem; border: 1px solid hsl(var(--gold) / 0.45);
    border-radius: 50%; color: hsl(var(--gold));
}
.bs-route-head .t { font-family: var(--font-display); font-weight: 600; font-size: clamp(1.25rem, 2vw, 1.5rem); color: hsl(var(--foreground)); letter-spacing: 0.04em; }
.bs-route-head .m { margin-left: auto; font-size: var(--fs-xs); letter-spacing: 0.2em; color: hsl(var(--muted-foreground)); text-transform: uppercase; }
.bs-route-steps { list-style: none; margin: 1.375rem 0 0; display: grid; gap: 0.625rem; }
.bs-route-steps li { position: relative; padding-left: 1.375rem; font-size: var(--fs-sm); line-height: 1.9; color: hsl(var(--muted-foreground)); }
.bs-route-steps li::before {
    content: ''; position: absolute; left: 0; top: 0.78em;
    width: 0.375rem; height: 0.375rem; border-radius: 50%;
    background: hsl(var(--gold) / 0.85);
}
/* 周边策展清单 */
.bs-hood-note { margin-top: 1.125rem; font-size: var(--fs-sm); color: hsl(var(--muted-foreground)); }
.bs-hood-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(2rem, 4vw, 4rem); margin-top: clamp(2.5rem, 5vw, 3.5rem); }
.bs-hood-col h3 {
    display: flex; align-items: center; gap: 0.75rem;
    font-size: var(--fs-xs); font-weight: 600; letter-spacing: 0.28em; text-transform: uppercase;
    color: hsl(var(--foreground)); padding-bottom: 1rem;
    border-bottom: 1px solid hsl(var(--gold) / 0.5);
}
.bs-hood-col h3 .ic { display: inline-flex; color: hsl(var(--gold)); }
.bs-hood-row { padding: 1.125rem 0; border-bottom: 1px solid hsl(var(--border)); }
.bs-hood-row .n { font-family: var(--font-display); font-weight: 600; font-size: var(--fs-base); color: hsl(var(--foreground)); letter-spacing: 0.03em; }
.bs-hood-row .d { margin-top: 0.4375rem; font-size: var(--fs-sm); line-height: 1.8; color: hsl(var(--muted-foreground)); }
.bs-hood-row .w { margin-top: 0.5625rem; font-size: var(--fs-xs); letter-spacing: 0.2em; color: hsl(var(--gold)); text-transform: uppercase; }
@media (max-width: 899px) {
    .bs-route { grid-template-columns: 1fr; gap: 0.875rem; }
    .bs-route-head .m { margin-left: 0; flex-basis: 100%; }
    .bs-hood-grid { grid-template-columns: 1fr; }
}
.bs-loc-list { margin-top: 2rem; }
.bs-loc-item { display: flex; gap: 1.125rem; padding: 1.125rem 0; border-bottom: 1px solid hsl(var(--border)); align-items: flex-start; }
.bs-loc-item:first-child { border-top: 1px solid hsl(var(--border)); }
.bs-loc-item .ic {
    flex: none; width: 2.5rem; height: 2.5rem; display: flex; align-items: center; justify-content: center;
    border: 1px solid hsl(var(--gold) / 0.45); color: hsl(var(--gold)); border-radius: 50%;
}
.bs-loc-item .k { font-size: var(--fs-xs); letter-spacing: 0.22em; color: hsl(var(--muted-foreground)); text-transform: uppercase; }
.bs-loc-item .v { font-size: var(--fs-base); color: hsl(var(--foreground)); margin-top: 0.375rem; line-height: 1.7; }

/* ---------- 首页「会员尊享 × 到访」合并栏的到访横带（2026-09-21 v25） ----------
   v27（客户要求）：区位动态示意小图删除；「到访」标题字号与「会员尊享」标题一致。
   v28（客户反馈「排布有点乱」）：改三段式——左大标题（右侧金色发丝竖线分隔）、
   中 地址/轨道两条信息、右 到访指引按钮，三段垂直居中对齐一条轴线 */
.bs-home-visit {
    display: grid; grid-template-columns: auto minmax(0, 1fr) auto;
    gap: clamp(1.75rem, 4vw, 3.5rem); align-items: center;
    margin-top: clamp(2.25rem, 4.5vh, 3.25rem);
    padding-top: clamp(2rem, 4vh, 2.75rem);
    border-top: 1px solid hsl(var(--border));
}
/* v32（客户反馈「到访排布不好看，要和会员尊享匹配」）：标题块与上方「CQTS MEMBERSHIP /
   会员尊享」同一排版语法——英文金色 kicker + 中文大标题（.bs-kicker 自带发丝横线前缀），
   块右侧金色发丝竖线与信息区分隔；信息两条与按钮保持同一条中轴线 */
.bs-home-visit-head {
    padding-right: clamp(1.75rem, 4vw, 3.5rem);
    border-right: 1px solid hsl(var(--gold) / 0.3);
}
.bs-home-visit-head .bs-kicker { white-space: nowrap; }
.bs-home-visit-t {
    font-family: var(--font-display); font-size: clamp(1.875rem, 4vw, 3rem); line-height: 1.18;
    font-weight: 600; letter-spacing: 0.02em; color: hsl(var(--foreground));
    margin-top: 0.75rem; white-space: nowrap;
}
.bs-home-visit .bs-loc-list { margin-top: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 0.75rem 2.75rem; }
.bs-home-visit .bs-loc-item { padding: 0; border: 0; align-items: center; gap: 0.875rem; }
.bs-home-visit .bs-loc-item:first-child { border-top: 0; }
.bs-home-visit .bs-loc-item .ic { width: 2.25rem; height: 2.25rem; }
.bs-home-visit .bs-loc-item .v { font-size: var(--fs-sm); }
@media (max-width: 1024px) {
    .bs-home-visit { grid-template-columns: 1fr; gap: 1.5rem; }
    .bs-home-visit-head { padding-right: 0; border-right: 0; }
    .bs-home-visit > .btn-ghost-lux { justify-self: start; }
}
@media (max-width: 640px) {
    .bs-home-visit .bs-loc-list { flex-direction: column; align-items: flex-start; }
}
html.fp-on .bs-home-visit { margin-top: clamp(1.25rem, 3vh, 2rem); padding-top: clamp(1.25rem, 3vh, 1.75rem); }

/* ============ 社交矩阵（2026-09-21 v25 客户要求：优化方块与内部布局，更高级有质感） ============
   卡片升级 flex 纵排：图标收进金线圆形徽章、顶缘金色发丝高光、底部淡金径向光晕、
   渠道名改衬线展示字体、链接/提示行钉在卡底（多卡对齐），悬停整卡上浮+徽章金光；
   栅格改 5 等列（原 6 列放 5 卡留空档），列数交给响应式规则而非页面内联样式 */
.bs-social-grid { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: clamp(0.875rem, 1.6vw, 1.25rem); margin-top: 2rem; }
/* v26（客户要求「方框占用不要这么高」）：内边距/徽章/字号/间距整体收紧，
   描述行两行截断，卡片高度约降三成；图标已换各渠道品牌 SVG（social_icon_svg） */
.bs-social-card {
    position: relative; overflow: hidden;
    display: flex; flex-direction: column; align-items: center; text-align: center;
    padding: 1.25rem 1.125rem 1.125rem; border-radius: 3px;
    background: linear-gradient(168deg, hsl(var(--card)) 0%, hsl(var(--card)) 58%, hsl(var(--gold) / 0.045) 100%);
    border: 1px solid hsl(var(--gold) / 0.18);
    transition: transform 0.45s var(--ease-lux), border-color 0.45s, box-shadow 0.45s;
}
.bs-social-card::before {   /* 顶缘金色发丝高光——玻璃切边感 */
    content: ''; position: absolute; top: 0; left: 12%; right: 12%; height: 1px;
    background: linear-gradient(90deg, transparent, hsl(var(--gold) / 0.55), transparent);
}
.bs-social-card::after {    /* 图标下方泛起的淡金径向光晕 */
    content: ''; position: absolute; top: -34%; left: 50%; transform: translateX(-50%);
    width: 150%; height: 72%; pointer-events: none;
    background: radial-gradient(ellipse at 50% 100%, hsl(var(--gold) / 0.08), transparent 65%);
}
.bs-social-card:hover { transform: translateY(-5px); border-color: hsl(var(--gold) / 0.55); box-shadow: 0 20px 44px -18px rgba(20, 16, 10, 0.35); }
.bs-social-card .ic {
    position: relative; z-index: 1;
    display: flex; align-items: center; justify-content: center;
    width: 2.625rem; height: 2.625rem; margin-bottom: 0.75rem;
    border: 1px solid hsl(var(--gold) / 0.45); border-radius: 50%;
    color: hsl(var(--gold));
    transition: color 0.45s, border-color 0.45s, box-shadow 0.45s;
}
.bs-social-card:hover .ic {
    color: hsl(var(--gold-bright)); border-color: hsl(var(--gold) / 0.8);
    box-shadow: 0 0 0 4px hsl(var(--gold) / 0.08), 0 0 22px -4px hsl(var(--gold) / 0.45);
}
.bs-social-card .n { position: relative; z-index: 1; font-family: var(--font-display); font-size: var(--fs-sm); font-weight: 600; color: hsl(var(--foreground)); letter-spacing: 0.14em; }
/* v28（客户要求）：粉丝数/评分数据行（.f）已从模板删除，对应样式一并移除 */
.bs-social-card .d {
    position: relative; z-index: 1; font-size: var(--fs-xs); color: hsl(var(--muted-foreground));
    margin-top: 0.375rem; line-height: 1.6;
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.bs-social-link, .bs-social-hint {
    position: relative; z-index: 1;
    display: inline-flex; align-items: center; justify-content: center; gap: 0.375rem;
    margin-top: auto; padding-top: 0.75rem; font-size: var(--fs-xs); letter-spacing: 0.04em; line-height: 1.5;
}
.bs-social-link {
    color: hsl(var(--gold)); text-decoration: none;
    padding-bottom: 2px; border-bottom: 1px solid hsl(var(--gold) / 0.35);
    transition: border-color 0.3s, color 0.3s;
}
.bs-social-link:hover { border-color: hsl(var(--gold)); color: hsl(var(--gold-bright)); }
.bs-social-hint { color: hsl(var(--muted-foreground)); }

/* ============ 分节小标题（目标受众 / 广告位 / 品牌合作） ============ */
.bs-aud-head { display: flex; align-items: center; justify-content: center; gap: 1.25rem; margin-top: 3.5rem; }
.bs-aud-line { flex: 0 1 120px; height: 1px; background: hsl(var(--border)); }
.bs-aud-label {
    font-size: var(--fs-xs); font-weight: var(--fw-semibold); letter-spacing: 0.14em;
    text-transform: uppercase; color: hsl(var(--muted-foreground)); white-space: nowrap;
}
.bs-dark .bs-aud-line { background: hsl(40 20% 90% / 0.2); }
.bs-dark .bs-aud-label { color: hsl(var(--gold-bright)); }

/* ============ 场内广告位 chips ============ */
.bs-ad-grid { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.75rem; margin-top: 1.75rem; }
.bs-ad-chip {
    display: inline-flex; align-items: center; gap: 0.5rem;
    padding: 0.625rem 1.125rem; border-radius: 999px;
    border: 1px solid hsl(var(--border)); background: hsl(var(--card));
    font-size: var(--fs-sm); color: hsl(var(--foreground)); letter-spacing: 0.02em;
    transition: border-color 0.35s, transform 0.35s var(--ease-lux);
}
.bs-ad-chip .ic { display: inline-flex; color: hsl(var(--gold)); }
.bs-ad-chip:hover { transform: translateY(-2px); border-color: hsl(var(--gold) / 0.55); }
.bs-dark .bs-ad-chip {
    border-color: hsl(40 20% 90% / 0.2); background: hsl(40 20% 90% / 0.04);
    color: hsl(40 25% 88%);
}
.bs-dark .bs-ad-chip:hover { border-color: hsl(var(--gold-bright) / 0.6); }
.bs-dark .bs-ad-chip .ic { color: hsl(var(--gold-bright)); }

.bs-coop-note {
    max-width: 46rem; margin: 2rem auto 0; text-align: center;
    font-size: var(--fs-sm); line-height: 2; color: hsl(var(--muted-foreground));
}
.bs-dark .bs-coop-note { color: hsl(40 15% 70%); }
@media (max-width: 768px) {
    .bs-aud-head { gap: 0.75rem; }
    .bs-aud-line { flex-basis: 40px; }
    .bs-aud-label { white-space: normal; text-align: center; }
}

/* ============ 数据系统入口带 ============ */
.bs-data-band { text-align: center; }
.bs-data-entries { display: flex; flex-wrap: wrap; gap: 0.875rem; justify-content: center; margin-top: 2.5rem; }
.bs-data-chip {
    display: inline-flex; align-items: center; gap: 0.625rem;
    padding: 0.75rem 1.375rem; border-radius: 999px;
    border: 1px solid hsl(40 20% 90% / 0.2); color: hsl(40 25% 88%);
    font-size: var(--fs-sm); letter-spacing: 0.06em; text-decoration: none;
    transition: border-color 0.4s, background 0.4s, transform 0.4s var(--ease-lux);
}
.bs-data-chip:hover { border-color: hsl(var(--gold-bright)); background: hsl(var(--gold) / 0.12); transform: translateY(-2px); }
.bs-data-chip svg { color: hsl(var(--gold-bright)); }

/* ============ 官网页脚 ============ */
/* v25（客户反馈「整体底部有点高，会导致首页的切屏切一半」）：
   上下留白与分隔间距整体收紧，末屏（社交矩阵+页脚）在 fp 整屏模式下一屏装下 */
.bs-footer { background: hsl(45 15% 8%); color: hsl(40 15% 65%); padding: 2.75rem 0 1.5rem; }
/* v24（客户要求「'主页'那部分也不要，整个都是礼宾预约」）：页脚改两列——
   左品牌栏，右侧整列留给礼宾预约表单；列宽加大后字段横排、表单整体更矮 */
.bs-footer-top { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: 2.5rem; padding-bottom: 1.75rem; border-bottom: 1px solid hsl(40 20% 90% / 0.1); }
.bs-footer-brand { font-family: var(--font-display); font-size: 1.375rem; font-weight: 600; color: hsl(40 33% 96%); letter-spacing: 0.1em; }
.bs-footer-brand-en { font-size: var(--fs-xs); letter-spacing: 0.32em; color: hsl(var(--gold-bright)); margin-top: 0.625rem; }
.bs-footer-line { font-size: var(--fs-sm); line-height: 1.9; margin-top: 1.25rem; max-width: 24rem; }
.bs-footer h4 { font-size: var(--fs-xs); letter-spacing: 0.28em; color: hsl(var(--gold-bright)); text-transform: uppercase; margin: 0 0 1.25rem; font-weight: var(--fw-semibold); }
.bs-footer-links { list-style: none; margin: 0; padding: 0; }
.bs-footer-links li { margin: 0.625rem 0; }
.bs-footer-links a { color: hsl(40 15% 70%); text-decoration: none; font-size: var(--fs-sm); transition: color 0.3s; }
.bs-footer-links a:hover { color: hsl(var(--gold-bright)); }
/* ---------- 页脚礼宾预约紧凑表单（2026-09-21 v23，客户要求：
   「礼宾预约缩小后放到底部导航栏，到访处的删除」）----------
   复用 .bs-con-f/.bs-con-row 既有深色输入件语法，仅收紧尺寸适配页脚第三列；
   id="concierge" 承接 PRG 重定向锚点（?action=location#concierge） */
.bs-footer-con form { display: grid; gap: 0.5rem; }
.bs-footer-con .bs-con-row { gap: 0.625rem; }
.bs-footer-con .bs-con-f { gap: 0.3rem; }
.bs-footer-con .bs-con-f label { font-size: 0.625rem; letter-spacing: 0.1em; color: hsl(40 15% 62%); }
.bs-footer-con .bs-con-f input,
.bs-footer-con .bs-con-f select { padding: 0.5rem 0.65rem; font-size: var(--fs-xs); background: hsl(45 14% 12%); }
.bs-footer-con .bs-con-msg { padding: 0.5rem 0.75rem; margin-bottom: 0.75rem; font-size: var(--fs-xs); line-height: 1.6; }
.bs-footer-con .bs-con-err { font-size: 0.625rem; }
.bs-footer-con .bs-con-hint { margin: -0.25rem 0 0; font-size: 0.625rem; color: hsl(40 15% 55%); }
.bs-footer-con .bs-con-hint svg { color: hsl(var(--gold) / 0.7); }
.bs-footer-con .bs-con-f-submit .btn-gold { width: 100%; height: 2.3125rem; padding: 0 1rem; font-size: var(--fs-xs); justify-content: center; white-space: nowrap; }
.bs-footer-con .bs-con-privacy { margin: 0.25rem 0 0; font-size: 0.625rem; line-height: 1.7; color: hsl(40 15% 52%); flex: none; }
/* 深色表单声明 color-scheme:dark——下拉弹层（服务/日期/时段）按深色渲染。
   v25：日期已从原生 input[type=date] 改为服务端生成的下拉选项
   （客户反馈原生控件弹不出选择器且「年/月/日」占位与页面语言混排），
   原日历图标反相规则随之移除 */
.bs-con-form { color-scheme: dark; }
/* ---------- v26：礼宾预约提交结果弹窗（客户要求「以弹窗来提示，不要刷新页面」）----------
   磨砂遮罩 + 深色金线对话框，与顶栏磨砂玻璃同一质感语言；
   成功金色对勾 / 失败红色警示，按钮复用 .btn-gold */
.bs-con-modal {
    position: fixed; inset: 0; z-index: 400;
    display: flex; align-items: center; justify-content: center; padding: 1.5rem;
    background: rgba(10, 8, 6, 0.55);
    backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);
    opacity: 0; pointer-events: none;
    transition: opacity 0.35s var(--ease-lux);
}
.bs-con-modal.is-open { opacity: 1; pointer-events: auto; }
.bs-con-modal-box {
    position: relative; overflow: hidden; width: 100%; max-width: 25rem;
    padding: 2.25rem 1.75rem 1.75rem; text-align: center;
    background: linear-gradient(168deg, hsl(45 16% 12%), hsl(45 14% 9%));
    border: 1px solid hsl(var(--gold) / 0.35); border-radius: 4px;
    box-shadow: 0 30px 80px -20px rgba(0, 0, 0, 0.6);
    transform: translateY(14px) scale(0.97);
    transition: transform 0.35s var(--ease-lux);
}
.bs-con-modal.is-open .bs-con-modal-box { transform: none; }
.bs-con-modal-box::before {   /* 顶缘金色发丝高光，与社交卡同一语法 */
    content: ''; position: absolute; top: 0; left: 15%; right: 15%; height: 1px;
    background: linear-gradient(90deg, transparent, hsl(var(--gold) / 0.6), transparent);
}
.bs-con-modal-ic { display: flex; justify-content: center; margin-bottom: 1rem; }
.bs-con-modal-ic.is-ok { color: hsl(var(--gold-bright)); }
.bs-con-modal-ic.is-bad { color: hsl(4 70% 66%); }
.bs-con-modal-msg { margin: 0 0 1.5rem; font-size: var(--fs-sm); line-height: 1.9; color: hsl(40 25% 92%); }
/* v29（客户确认抖动根因）：字段错误文案改在弹窗内逐条列出，不再插入表单撑高页脚 */
.bs-con-modal-errs { display: grid; gap: 0.375rem; margin: -0.875rem 0 1.5rem; }
.bs-con-modal-errs[hidden] { display: none; }
.bs-con-modal-errs span { font-size: var(--fs-xs); line-height: 1.6; color: hsl(4 70% 72%); letter-spacing: 0.02em; }
.bs-con-modal-ok { min-width: 7.5rem; justify-content: center; }
.bs-footer-bottom {
    display: flex; justify-content: space-between; align-items: baseline;
    gap: 0.5rem 1.5rem; flex-wrap: wrap;
    padding-top: 1.25rem; font-size: var(--fs-xs); letter-spacing: 0.08em;
}
/* 备案信息：与品牌署名同排（不再单独占一行），字号略小以让出横向空间 */
.bs-footer-beian {
    display: inline-flex; align-items: baseline; gap: 1.125rem; flex-wrap: wrap;
    font-size: 0.6875rem; letter-spacing: 0.04em; color: hsl(40 15% 52%);
}
.bs-footer-beian a {
    color: hsl(40 15% 58%); text-decoration: none; white-space: nowrap;
    transition: color 0.3s var(--ease-lux);
}
.bs-footer-beian a:hover { color: hsl(var(--gold-bright)); }
/* 页脚联络行：邮箱 + 电话（电话为空时由 PHP 省略） */
.bs-footer-contact {
    display: flex; align-items: center; gap: 0.625rem; flex-wrap: wrap;
    margin-top: 1.25rem; font-size: var(--fs-sm); letter-spacing: 0.06em;
}
.bs-footer-contact a {
    color: hsl(var(--gold-bright)); text-decoration: none;
    border-bottom: 1px solid hsl(var(--gold) / 0.35);
    transition: border-color 0.3s var(--ease-lux), color 0.3s var(--ease-lux);
}
.bs-footer-contact a:hover { border-color: hsl(var(--gold-bright)); }
.bs-footer-contact .bs-loc-sep { color: hsl(40 15% 45%); border: 0; }
/* v31（客户要求）：电话前引导文字「客户致电」，比金色号码链接弱一档 */
.bs-footer-telabel { color: hsl(40 15% 62%); font-size: var(--fs-xs); letter-spacing: 0.12em; }
/* 到访页联络项：邮箱/电话内联链接 */
.bs-loc-link {
    color: inherit; text-decoration: none;
    border-bottom: 1px solid hsl(var(--gold) / 0.4);
    transition: color 0.3s var(--ease-lux), border-color 0.3s var(--ease-lux);
}
.bs-loc-link:hover { color: hsl(var(--gold)); border-color: hsl(var(--gold)); }
.bs-loc-sep { margin: 0 0.375rem; color: hsl(var(--muted-foreground)); opacity: 0.6; }
/* 三项合计约 860px，窄于此改为居中竖排，避免半行折断 */
@media (max-width: 959px) {
    .bs-footer-bottom { flex-direction: column; align-items: center; text-align: center; gap: 0.625rem; }
    .bs-footer-beian { justify-content: center; }
}
/* 免责声明：页脚最末一段，靠上方发丝线与底栏分隔（0.07 比 .bs-footer-top 底边线 0.1 更淡，
   层级更低）。字号与备案信息同级 0.6875rem，颜色 50% 亮度——比备案行 52% 略暗但仍满足
   深底小字的 AA 对比度（约 5:1），不因追求"弱化"而牺牲可读性。
   v27（客户要求）：取消 62rem 限宽，与底栏同宽铺满容器，上下两段轴线长度一致。 */
.bs-footer-disclaimer {
    margin: 1.75rem 0 0; padding-top: 1.5rem;
    border-top: 1px solid hsl(40 20% 90% / 0.07);
    font-size: 0.6875rem; line-height: 1.95; letter-spacing: 0.04em;
    color: hsl(40 14% 50%);
}
/* 窄屏底栏已改居中竖排，免责声明同步居中保持轴线一致 */
@media (max-width: 959px) {
    .bs-footer-disclaimer { margin-inline: auto; text-align: center; }
}

/* ============ 官网内页 Hero ============ */
.bs-page-hero {
    position: relative; min-height: 52vh; display: flex; align-items: flex-end;
    overflow: hidden; color: hsl(40 33% 96%); padding-top: 4.5rem;
}
.bs-page-hero .bs-hero-bg::after {
    background: linear-gradient(180deg, rgba(18,15,11,0.5) 0%, rgba(18,15,11,0.3) 45%, rgba(18,15,11,0.82) 100%);
}
.bs-page-hero-inner { position: relative; z-index: 1; width: 100%; padding: 0 0 3.5rem; }
.bs-page-hero .bs-title { color: hsl(40 33% 96%); font-size: clamp(2rem, 4.5vw, 3.5rem); }
.bs-page-hero .bs-sub { color: hsl(40 20% 85% / 0.9); }

/* ============ 八层业态（紧凑网格） ============ */
.bs-mix-stats {
    display: grid; grid-template-columns: repeat(4, 1fr); gap: 1.5rem;
    max-width: 56rem; margin: 2.5rem auto 0; padding: 2rem 0;
    border-top: 1px solid hsl(var(--border)); border-bottom: 1px solid hsl(var(--border));
}
.bs-mix-stat { text-align: center; }
.bs-mix-stat .num {
    font-family: var(--font-display); font-size: clamp(2rem, 4vw, 2.75rem);
    font-weight: 600; color: hsl(var(--foreground)); line-height: 1;
    font-variant-numeric: tabular-nums;
}
.bs-mix-stat .num .unit { font-size: 0.55em; color: hsl(var(--gold)); margin-left: 0.15em; }
.bs-mix-stat .lbl {
    font-size: var(--fs-xs); color: hsl(var(--muted-foreground));
    letter-spacing: 0.08em; margin-top: 0.5rem;
}
.bs-mix-floors {
    display: grid; grid-template-columns: repeat(2, 1fr); gap: 0;
    max-width: 56rem; margin: 2.5rem auto 0;
    border: 1px solid hsl(var(--border)); border-radius: 2px;
}
.bs-mix-floor {
    display: flex; align-items: center; gap: 1rem;
    padding: 1.125rem 1.5rem;
    border-bottom: 1px solid hsl(var(--border));
}
.bs-mix-floor:nth-child(odd) { border-right: 1px solid hsl(var(--border)); }
.bs-mix-floor:nth-last-child(-n+2) { border-bottom: 0; }
.bs-mix-floor .lv {
    flex: 0 0 3rem; font-family: var(--font-display); font-weight: 600;
    font-size: 1.125rem; color: hsl(var(--gold)); letter-spacing: 0.05em;
    font-variant-numeric: tabular-nums;
}
.bs-mix-floor .mix {
    font-size: var(--fs-sm); color: hsl(var(--foreground)); line-height: 1.5;
}

/* ============ 图片揭示动效 ============ */
.clip-reveal { clip-path: inset(0 0 100% 0); transition: clip-path 1.3s var(--ease-lux); }
.clip-reveal.revealed { clip-path: inset(0 0 0 0); }
.js .bs-stat, .js .bs-ev-card, .js .bs-vip-card, .js .bs-social-card { will-change: transform; }

/* ============ 活动画廊弹层 ============ */
.bs-lightbox {
    position: fixed; inset: 0; z-index: 9999; display: none;
    background: hsl(45 15% 6% / 0.94); backdrop-filter: blur(10px);
}
.bs-lightbox.open { display: flex; flex-direction: column; }
.bs-lb-head { display: flex; align-items: center; justify-content: space-between; padding: 1.5rem 2rem; color: hsl(40 33% 96%); }
.bs-lb-title { font-family: var(--font-display); font-size: 1.25rem; letter-spacing: 0.06em; }
.bs-lb-title .dates { font-size: var(--fs-xs); color: hsl(40 15% 65%); letter-spacing: 0.18em; margin-left: 1rem; }
.bs-lb-close {
    background: none; border: 1px solid hsl(40 20% 90% / 0.3); color: hsl(40 33% 96%);
    width: 2.75rem; height: 2.75rem; border-radius: 50%; cursor: pointer;
    display: flex; align-items: center; justify-content: center; transition: border-color 0.3s, transform 0.3s;
}
.bs-lb-close:hover { border-color: hsl(var(--gold-bright)); transform: rotate(90deg); }
.bs-lb-grid { flex: 1; overflow-y: auto; padding: 0 2rem 2.5rem; display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; align-content: start; }
.bs-lb-grid img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 2px; cursor: zoom-in; transition: transform 0.5s var(--ease-lux); }
.bs-lb-grid img:hover { transform: scale(1.02); }
/* 单图模式（艺术项目缩略图带点开单张）：整幅居中，不套三列网格 */
.bs-lb-grid.single { display: flex; align-items: center; justify-content: center; }
.bs-lb-grid.single img {
    width: auto; max-width: 100%; max-height: calc(100vh - 12rem);
    aspect-ratio: auto; object-fit: contain;
}

/* ============ 响应式 ============ */
@media (max-width: 1024px) {
    .bs-stats-inner { grid-template-columns: repeat(3, 1fr); }
    .bs-stat:nth-child(4)::before { display: none; }
    .bs-ev-grid { grid-template-columns: repeat(2, 1fr); }
    .bs-vip-grid { grid-template-columns: repeat(2, 1fr); }
    .bs-social-grid { grid-template-columns: repeat(3, 1fr); }
    .bs-footer-top { grid-template-columns: 1fr 1fr; }
    .bs-lb-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 640px) {
    .bs-split { grid-template-columns: 1fr; }
    .bs-split.reverse > .bs-split-media { order: 0; }
    .bs-stats-inner { grid-template-columns: repeat(2, 1fr); }
    .bs-stat + .bs-stat::before { display: none; }
    .bs-ev-grid, .bs-vip-grid { grid-template-columns: 1fr; }
    .bs-social-grid { grid-template-columns: repeat(2, 1fr); }
    .bs-loc-grid { grid-template-columns: 1fr; }
    .bs-footer-top { grid-template-columns: 1fr; gap: 2rem; }
    .bs-lb-grid { grid-template-columns: 1fr; padding: 0 1rem 1.5rem; }
    .bs-lb-head { padding: 1rem 1.25rem; }
    .bs-mix-stats { grid-template-columns: repeat(2, 1fr); gap: 1.25rem; }
    .bs-mix-floors { grid-template-columns: 1fr; }
    .bs-mix-floor:nth-child(odd) { border-right: 0; }
    .bs-mix-floor:nth-last-child(2) { border-bottom: 1px solid hsl(var(--border)); }
    .bs-hero-cta .btn-gold, .bs-hero-cta .btn-ghost-lux { width: 100%; justify-content: center; }
    .badge-float { right: 0.75rem; bottom: -1rem; padding: 0.875rem 1.125rem; }
}
@media (prefers-reduced-motion: reduce) {
    .clip-reveal { clip-path: none; transition: none; }
    .bs-hero-scroll::after { animation: none; }
}

/* ============ 整屏翻页模式（桌面端 JS 启用，html.fp-on） ============
 * 一屏一区块：每区块 min-height:100vh + flex 垂直居中 → 上下自适应
 * 内容偏高的区块压缩内部尺寸，保证恰好装进一个视窗 */
html.fp-on .bs-hero { min-height: 100vh; }
html.fp-on body > section,
html.fp-on body > footer {
    min-height: 100vh;
    display: flex; flex-direction: column; justify-content: center;
}
html.fp-on .bs-section {
    padding-top: clamp(3rem, 7vh, 5rem) !important;   /* 覆盖两处 inline padding-top:0 */
    padding-bottom: clamp(3rem, 7vh, 5rem) !important;
}
/* 宣言与数字带同屏：间距收紧 */
.bs-decl .bs-stats { margin-top: clamp(2.5rem, 6vh, 4rem); }
html.fp-on .bs-decl .bs-stats { margin-top: clamp(2rem, 5vh, 3.5rem); }
/* 分栏图片限高：关于/会员 split 区块一屏装下 */
html.fp-on .bs-split-media img { max-height: 56vh; }
/* 精选活动：头 + 3 卡 + 按钮一屏装下 */
html.fp-on .bs-ev-grid { margin-top: clamp(1.5rem, 3.5vh, 2.5rem); }
html.fp-on .bs-ev-media { aspect-ratio: 16 / 9; }
html.fp-on .bs-ev-body { padding: 1rem 1.25rem 1.125rem; }
/* 社交矩阵间距收紧 */
html.fp-on .bs-social-grid { margin-top: clamp(1.5rem, 3.5vh, 2.5rem); }
/* 会员 facts 行距收紧 */
html.fp-on .bs-facts .row { padding: 0.625rem 0; }
/* 页脚：垂直居中，padding 让位 min-height */
/* 页脚在 fp 模式下不压缩：与其他页面同高（padding 4.5rem 0 2.5rem） */
/* 矮视窗（vh<720）兜底再压缩 */
@media (max-height: 720px) {
    html.fp-on .bs-section { padding-top: 2rem !important; padding-bottom: 2rem !important; }
    html.fp-on .bs-split-media img { max-height: 46vh; }
    html.fp-on .bs-ev-media { aspect-ratio: 21 / 9; }
    html.fp-on .bs-facts .row { padding: 0.375rem 0; }
    html.fp-on .bs-stat { padding: 1.75rem 0.75rem; }
    html.fp-on .bs-decl .bs-stats { margin-top: 1.5rem; }
}

/* ============ 阶段 C（2026-07-29 五期） ============ */

/* --- 需求④：Hero 深色底上的幽灵按钮（原 .hero 选择器过时，按钮透明看不清） --- */
.bs-hero .btn-ghost-lux {
    color: hsl(40 33% 94%); border-color: hsl(40 33% 94% / 0.5);
    background: hsl(45 16% 10% / 0.3); backdrop-filter: blur(6px);
}
.bs-hero .btn-ghost-lux:hover {
    border-color: hsl(var(--gold-bright)); color: hsl(var(--gold-bright));
    background: hsl(45 16% 10% / 0.5);
}

/* --- 需求①②：Hero 左文右标（右侧为品牌徽章 lockup：LOGO+金线+全称+年份，不孤立） --- */
.bs-hero-content {
    display: grid; grid-template-columns: minmax(0, 1fr) auto;
    gap: clamp(2.5rem, 6vw, 6rem); align-items: center;
    text-align: left; max-width: 74rem; width: 100%;
}
.bs-hero-brand { display: flex; flex-direction: column; align-items: center; text-align: center; }
.bs-hero-logo {
    width: clamp(190px, 20vw, 290px); margin: 0;
    filter: drop-shadow(0 8px 28px rgba(0,0,0,0.55));
}
.bs-hero-brand-rule {
    width: 3.5rem; height: 1px; background: hsl(var(--gold-bright));
    margin: clamp(1.25rem, 3vh, 1.875rem) 0 1.125rem; position: relative;
}
.bs-hero-brand-rule::after {
    content: ''; position: absolute; left: 50%; top: -2.5px; width: 5px; height: 5px;
    background: hsl(var(--gold-bright)); transform: translateX(-50%) rotate(45deg);
}
.bs-hero-brand-name {
    width: clamp(190px, 20vw, 290px); /* 与 LOGO 同宽，字符匀布铺满 */
    font-size: var(--fs-xs); letter-spacing: 0.08em; text-transform: uppercase;
    color: hsl(40 30% 92% / 0.9); font-weight: var(--fw-semibold);
    text-align: justify; text-align-last: justify; white-space: nowrap;
}
.bs-hero-brand-since {
    font-family: var(--font-display); font-style: italic;
    font-size: var(--fs-sm); letter-spacing: 0.28em;
    color: hsl(var(--gold-bright)); margin-top: 0.625rem;
}
/* 副标语：宣言同款展示衬线（--font-display），大字左对齐 */
/* min-height 按最长文案（英文 3 行）固定，中英切换时下方按钮不跳动 */
.bs-hero-content .bs-hero-sub {
    margin: 0; max-width: 40rem; min-height: 4.9em;
    font-family: var(--font-display); font-weight: 500;
    font-size: clamp(1.375rem, 2.5vw, 2.125rem); line-height: 1.62;
    letter-spacing: 0.03em; color: hsl(40 30% 94% / 0.95);
}
.bs-hero-sub .sub-ch { display: inline-block; }
.bs-hero-cta { justify-content: flex-start; }

/* 需求③：头图入场 —— 黑幕揭开 + 背景缓推 */
.bs-hero-veil {
    position: absolute; inset: 0; z-index: 3; background: hsl(45 16% 8%);
    pointer-events: none; animation: bsVeilOut 1.7s var(--ease-lux) 0.15s forwards;
}
@keyframes bsVeilOut { to { opacity: 0; visibility: hidden; } }
.bs-hero-bg { animation: bsHeroZoom 3s var(--ease-lux) both; }
@keyframes bsHeroZoom { from { transform: scale(1.07); } to { transform: scale(1); } }

/* --- 需求⑬：宣言区底部商场实景 marquee（横向左滚） --- */
.bs-marquee {
    margin-top: clamp(2.5rem, 6vh, 4rem); overflow: hidden;
    -webkit-mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent);
    mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent);
}
.bs-marquee-track { display: flex; gap: 1.25rem; width: max-content; animation: bsMarquee 48s linear infinite; }
.bs-marquee:hover .bs-marquee-track { animation-play-state: paused; }
.bs-marquee-track img {
    height: clamp(88px, 13vh, 148px); width: auto; aspect-ratio: 16 / 10;
    object-fit: cover; border-radius: 2px; opacity: 0.92;
}
@keyframes bsMarquee { to { transform: translateX(calc(-50% - 0.625rem)); } }

/* ============ 首座 + 品牌（整合：一屏内完成） ============ */
/* 上半：左右分栏（叙事 + 主视觉） */
.bs-maisons-top {
    display: grid; grid-template-columns: 1fr 1.2fr; gap: clamp(2rem, 5vw, 4rem);
    align-items: center; margin-bottom: clamp(2rem, 4vh, 3rem);
}
.bs-maisons-text .bs-title {
    font-size: clamp(1.875rem, 4vw, 2.75rem);
    line-height: 1.15; margin-top: 0.875rem;
}
/* 主视觉：紧凑尺寸 */
.bs-maisons-hero {
    position: relative;
}
.bs-maisons-hero .frame {
    aspect-ratio: 16 / 10;
    box-shadow: 0 24px 48px -20px rgba(20, 16, 10, 0.3);
}
.bs-maisons-hero .badge-float {
    bottom: -1rem; right: clamp(1rem, 3vw, 2rem);
    padding: 1rem 1.25rem;
}
.bs-maisons-hero .badge-float .n { font-size: 1.25rem; }
.bs-maisons-hero .badge-float .l { font-size: 0.6875rem; }

/* 下半：品牌 LOGO 带
   v28（客户要求「不要边框，做得高级豪华一些」）：去掉描边盒子与米色底板，LOGO 直接
   融入章节底色；左右用 mask 渐隐收边（替代原渐变贴片）；LOGO 默认单色低透明度，
   悬停恢复彩色并轻微上浮——奢侈品 logo wall 的经典克制做法 */
.bs-maisons-logos {
    overflow: hidden; position: relative;
    padding: clamp(1.5rem, 3vh, 2.25rem) 0;
    -webkit-mask-image: linear-gradient(90deg, transparent 0%, #000 10%, #000 90%, transparent 100%);
    mask-image: linear-gradient(90deg, transparent 0%, #000 10%, #000 90%, transparent 100%);
}
.bs-maisons-logos-track {
    display: flex; gap: clamp(2.5rem, 5vw, 4rem);
    animation: maisonsLogosScroll 25s linear infinite;
    width: max-content;
}
.bs-maisons-logo {
    flex: 0 0 auto; display: flex; align-items: center; justify-content: center;
    min-width: clamp(100px, 12vw, 150px); height: clamp(48px, 6.5vh, 64px);
}
.bs-maisons-logo img {
    max-width: 100%; max-height: 100%; object-fit: contain;
    filter: grayscale(1) contrast(1.05);
    opacity: 0.45;
    transition: transform 0.5s var(--ease-lux), filter 0.5s var(--ease-lux), opacity 0.5s var(--ease-lux);
}
.bs-maisons-logo:hover img {
    transform: translateY(-2px) scale(1.06);
    filter: grayscale(0) contrast(1.05);
    opacity: 1;
}
/* v30（客户反馈「循环完了之后重复会有跳动」）：flex gap 跑马灯总宽 = 两圈少一个 gap，
   纯 -50% 回环差半个 gap（clamp(2.5rem,5vw,4rem) 之半）→ 跳一格；calc 补齐，与 bsMarquee 同法 */
@keyframes maisonsLogosScroll {
    0% { transform: translateX(0); }
    100% { transform: translateX(calc(-50% - clamp(1.25rem, 2.5vw, 2rem))); }
}

@media (max-width: 899px) {
    .bs-maisons-top { grid-template-columns: 1fr; gap: 2rem; }
    .bs-maisons-hero .badge-float { right: 0.75rem; bottom: -0.875rem; }
}
@media (prefers-reduced-motion: reduce) {
    .bs-maisons-logos-track { animation: none; }
}

/* --- 需求⑤：返回顶部按钮（品牌站配色，通用样式在 base.css） --- */

/* --- 需求⑪：到访区块 fp 模式下内容充盈 --- */
html.fp-on .bs-loc-grid { grid-template-columns: 1.12fr 0.88fr; gap: clamp(2.5rem, 5vw, 4.5rem); }
html.fp-on .bs-loc-item { padding: 1.5rem 0; }
html.fp-on .bs-loc-list { margin-top: 2.5rem; }

/* --- 需求⑩：社交 + 页脚同屏（页脚贴底，社交区垂直居中充盈） --- */
html.fp-on body > .bs-last-screen {
    min-height: 100vh; display: flex; flex-direction: column;
}
html.fp-on .bs-last-screen > .bs-section {
    min-height: 0; flex: 1 0 auto;
    display: flex; flex-direction: column; justify-content: center;
    padding-top: clamp(2rem, 5vh, 3.5rem) !important;
    padding-bottom: clamp(2rem, 5vh, 3.5rem) !important;
}
html.fp-on .bs-last-screen > .bs-section > .container-brand { width: 100%; }
/* v25（客户反馈「底部有点高，首页切屏切一半」）：fp 整屏模式下页脚进一步压缩——
   留白/分隔线间距收紧、品牌栏宣言隐藏，保证末屏（社交矩阵+页脚）恰好一屏装下 */
html.fp-on .bs-last-screen > .bs-footer { min-height: 0; flex-shrink: 0; padding-top: 1.75rem; padding-bottom: 1.25rem; }
html.fp-on .bs-footer-top { padding-bottom: 1.25rem; gap: 2rem; }
/* v31（客户反馈「首页底部这段话怎么没了」）：v25 曾在 fp 整屏模式下隐藏品牌栏宣言段，
   现恢复展示；字号/行距/间距收紧一档，缓解末屏（社交矩阵+页脚）的高度压力 */
html.fp-on .bs-footer-line { margin-top: 0.75rem; font-size: var(--fs-xs); line-height: 1.8; }
html.fp-on .bs-footer-bottom { padding-top: 1rem; }
html.fp-on .bs-footer-con .bs-con-privacy { display: none; }

/* fp 模式下新增区块压缩 */
html.fp-on .bs-marquee { margin-top: clamp(1.5rem, 4vh, 2.5rem); }
html.fp-on .bs-marquee-track img { height: clamp(72px, 11vh, 120px); }

@media (max-width: 899px) {
    .bs-hero-content { grid-template-columns: 1fr; text-align: center; gap: 2.25rem; }
    .bs-hero-brand { order: -1; margin: 0 auto; }
    .bs-hero-logo { width: clamp(150px, 42vw, 220px); }
    .bs-hero-content .bs-hero-sub { margin-left: auto; margin-right: auto; }
    .bs-hero-cta { justify-content: center; }
}
@media (max-height: 720px) {
    html.fp-on .bs-last-screen .bs-social-card { padding: 1rem 0.875rem; }
    html.fp-on .bs-last-screen .bs-social-card .d { display: none; }
}
@media (prefers-reduced-motion: reduce) {
    .bs-hero-veil { display: none; }
    .bs-hero-bg { animation: none; }
    .bs-marquee-track { animation: none; }
    .bs-pt-track { animation: none; }
}

/* ===== 阶段 C 补：VIC 服务与计划（会员页，PDF 第33-34页） ===== */
.bs-vic-grid {
    display: grid; grid-template-columns: repeat(3, 1fr);
    gap: clamp(1.25rem, 2.5vw, 2rem);
    margin-top: clamp(2rem, 5vh, 3.5rem);
}
.bs-vic-card {
    padding: clamp(1.75rem, 3vw, 2.5rem);
    background: hsl(var(--card));
    border: 1px solid hsl(var(--gold) / 0.22);
    border-radius: 2px;
    transition: transform 0.5s var(--ease-lux), border-color 0.5s var(--ease-lux), box-shadow 0.5s var(--ease-lux);
}
.bs-vic-card:hover {
    transform: translateY(-4px);
    border-color: hsl(var(--gold) / 0.55);
    box-shadow: 0 24px 48px -24px rgba(20, 16, 10, 0.3);
}
.bs-vic-icon {
    width: 3rem; height: 3rem; display: flex; align-items: center; justify-content: center;
    color: hsl(var(--gold)); border: 1px solid hsl(var(--gold) / 0.4); border-radius: 50%;
    margin-bottom: 1.25rem;
}
.bs-vic-name { font-family: var(--font-display); font-size: var(--fs-xl); font-weight: 500; margin: 0 0 0.875rem; }
.bs-vic-desc { color: hsl(var(--muted-foreground)); line-height: 1.95; font-size: var(--fs-sm); margin: 0; }
.bs-vic-cases { margin-top: 1.25rem; display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; }
.bs-vic-cases-label {
    font-size: var(--fs-xs); letter-spacing: 0.14em; color: hsl(var(--gold));
    text-transform: uppercase; margin-right: 0.25rem;
}
.bs-vic-case {
    font-size: var(--fs-xs); padding: 0.3rem 0.75rem;
    border: 1px solid hsl(var(--gold) / 0.3); border-radius: 999px;
    color: hsl(var(--muted-foreground)); white-space: nowrap;
}
/* VIC 权益宽带 */
.bs-vic-priv {
    margin-top: clamp(1.25rem, 2.5vw, 2rem);
    padding: clamp(1.75rem, 3.5vw, 2.75rem);
    background: linear-gradient(150deg, hsl(var(--gold) / 0.08), hsl(var(--gold) / 0.02));
    border: 1px solid hsl(var(--gold) / 0.35);
    border-radius: 2px;
}
.bs-vic-priv-head { display: flex; align-items: center; gap: 1rem; margin-bottom: 1.5rem; }
.bs-vic-priv-head .bs-vic-icon { margin-bottom: 0; }
.bs-vic-priv-head .bs-vic-name { margin: 0; }
.bs-vic-priv-cols { display: grid; grid-template-columns: 1.4fr 1fr; gap: clamp(1.5rem, 3vw, 3rem); }
.bs-vic-priv-k {
    font-size: var(--fs-xs); letter-spacing: 0.16em; text-transform: uppercase;
    color: hsl(var(--gold)); margin-bottom: 1rem;
    padding-bottom: 0.625rem; border-bottom: 1px solid hsl(var(--gold) / 0.25);
}
.bs-vic-priv-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.625rem; }
.bs-vic-priv-list li {
    display: flex; align-items: flex-start; gap: 0.625rem;
    color: hsl(var(--muted-foreground)); font-size: var(--fs-sm); line-height: 1.8;
}
.bs-vic-priv-list svg { color: hsl(var(--gold)); flex-shrink: 0; margin-top: 0.3em; }
@media (max-width: 899px) {
    .bs-vic-grid { grid-template-columns: 1fr; }
    .bs-vic-priv-cols { grid-template-columns: 1fr; }
    .bs-vic-case { white-space: normal; }
}

/* ===== 阶段 C 补：关于我们（九龙仓沙漏标 / 内地物业 / 第三方客户） ===== */
/* 标题前九龙仓 LOGO：与字同高（em 随标题 clamp 自适应，天然手机适配） */
.bs-wharf-mark {
    height: 0.82em; width: auto; margin-right: 0.42em;
    vertical-align: -0.06em; display: inline-block;
}
/* 内地投资物业：左右布局（左文字+chips，右缩小版代码地图） */
.bs-ml-body { margin: 1.5rem 0 0; }
.bs-ml-body p { color: hsl(40 15% 72%); line-height: 2; margin: 0.75rem 0 0; }
/* 代码绘制中国地图（SVG，暗底金线奢华风）—— 去框融入 bs-dark 背景（省份面略亮自然区分） */
.bs-ml-map { padding: clamp(0.25rem, 1vw, 0.75rem); }
.bs-ml-svg { width: 100%; height: auto; display: block; }
.bs-ml-svg path {
    fill: hsl(45 12% 16%); stroke: hsl(var(--gold) / 0.45); stroke-width: 0.8;
    transition: fill 0.35s;
}
.bs-ml-svg path:hover { fill: hsl(45 14% 23%); }
.bs-ml-svg .ml-dot .core { fill: hsl(var(--gold-bright)); }
.bs-ml-svg .ml-dot .ring {
    fill: none; stroke: hsl(var(--gold-bright) / 0.55); stroke-width: 1;
    transform-box: fill-box; transform-origin: center;
    animation: mlPulse 2.6s var(--ease-lux) infinite;
}
/* 重庆（self）：高亮脉冲 + 白芯金边 */
.bs-ml-svg .ml-dot.self .core { fill: #fff; stroke: hsl(var(--gold-bright)); stroke-width: 2.5; }
.bs-ml-svg .ml-dot.self .ring {
    stroke: hsl(var(--gold-bright)); stroke-width: 2;
    animation: mlPulseSelf 2.2s var(--ease-lux) infinite;
}
/* 成都/长沙/上海/大连（bold）：加粗描边 */
.bs-ml-svg .ml-dot.bold .core { fill: hsl(var(--gold-bright)); stroke: hsl(var(--gold-bright)); stroke-width: 2; }
.bs-ml-svg .ml-dot.bold .ring { stroke: hsl(var(--gold-bright) / 0.75); stroke-width: 1.8; }
.bs-ml-svg .ml-dot text {
    fill: hsl(40 20% 86%); font-size: 19px; letter-spacing: 0.06em; /* 右栏半宽渲染，字号放大补偿 */
    font-family: inherit; pointer-events: none;
}
.bs-ml-svg .ml-dot.self text { fill: hsl(var(--gold-bright)); font-weight: 600; }
.bs-ml-svg .ml-dot.bold text { fill: hsl(40 20% 92%); font-weight: 500; }
@keyframes mlPulse {
    0% { transform: scale(0.55); opacity: 0.9; }
    70% { transform: scale(1.25); opacity: 0; }
    100% { transform: scale(1.25); opacity: 0; }
}
@keyframes mlPulseSelf {
    0% { transform: scale(0.6); opacity: 1; }
    60% { transform: scale(1.5); opacity: 0; }
    100% { transform: scale(1.5); opacity: 0; }
}
@media (max-width: 640px) {
    .bs-ml-svg .ml-dot text { font-size: 21px; } /* 窄屏 SVG 等比缩小，字需放大补偿 */
}
.bs-ml-projects {
    display: flex; flex-wrap: wrap;
    gap: 0.5rem; margin-top: clamp(1.5rem, 3vh, 2.25rem);
}
.bs-ml-chip {
    font-size: var(--fs-xs); padding: 0.3rem 0.75rem; border-radius: 999px;
    border: 1px solid hsl(40 20% 90% / 0.22); color: hsl(40 15% 78%);
    transition: border-color 0.35s, color 0.35s;
}
.bs-ml-chip:hover { border-color: hsl(var(--gold-bright)); color: hsl(var(--gold-bright)); }
.bs-ml-chip.self {
    border-color: hsl(var(--gold-bright)); color: hsl(45 16% 10%);
    background: hsl(var(--gold-bright)); font-weight: var(--fw-semibold);
}
/* 第三方客户：双行反向无限流滚动（裸排无框，两端渐隐，hover 暂停） */
.bs-pt-flow {
    display: flex; flex-direction: column; gap: clamp(1rem, 2.5vh, 1.75rem);
    margin-top: clamp(2rem, 4vh, 3rem); overflow: hidden;
    -webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
    mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
}
.bs-pt-row { padding: clamp(0.75rem, 1.8vh, 1.125rem) 0; border-radius: 2px; }
/* 深色主题：整条浅底光带（非单格框），保黑字 LOGO 可读 */
[data-theme="dark"] .bs-pt-row { background: linear-gradient(160deg, #faf7f1 0%, #f3eee4 100%); }
.bs-pt-track {
    display: flex; align-items: center; gap: clamp(2.5rem, 4vw, 4rem);
    width: max-content; animation: bsPtScroll 64s linear infinite;
}
.bs-pt-row-rev .bs-pt-track { animation-direction: reverse; }
.bs-pt-flow:hover .bs-pt-track { animation-play-state: paused; }
.bs-pt-track img {
    height: clamp(24px, 3.2vw, 40px); width: auto; max-width: clamp(110px, 12vw, 160px);
    object-fit: contain; flex-shrink: 0;
    opacity: 0.7; filter: saturate(0.85);
    transition: opacity 0.45s var(--ease-lux), filter 0.45s var(--ease-lux), transform 0.45s var(--ease-lux);
}
.bs-pt-track img:hover { opacity: 1; filter: saturate(1.05); transform: scale(1.12); }
/* 位移 = 半份内容 + 半个 gap（gap clamp 减半），保证首尾无缝 */
@keyframes bsPtScroll { to { transform: translateX(calc(-50% - clamp(1.25rem, 2vw, 2rem))); } }
@media (max-width: 899px) {
    .bs-ml-split { grid-template-columns: 1fr; }
}

/* ============ 活动筛选条（艺术与活动页 · 类型 × 年份，纯前端） ============ */
.bs-ev-filter {
    position: sticky; top: 3.75rem; z-index: 120;
    background: hsl(var(--background) / 0.92);
    backdrop-filter: blur(12px) saturate(1.4);
    -webkit-backdrop-filter: blur(12px) saturate(1.4);
    border-bottom: 1px solid hsl(var(--border));
    padding: 0.875rem 0;
}
.bs-ev-filter-row { display: flex; align-items: baseline; gap: 0.875rem; flex-wrap: wrap; }
.bs-ev-filter-row + .bs-ev-filter-row { margin-top: 0.625rem; }
.bs-ev-filter-label {
    font-size: var(--fs-xs); letter-spacing: 0.24em; text-transform: uppercase;
    color: hsl(var(--gold)); font-weight: var(--fw-semibold); flex: none; min-width: 3.5rem;
}
.bs-ev-chips { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.bs-ev-chip {
    font: inherit; cursor: pointer; white-space: nowrap;
    font-size: var(--fs-xs); letter-spacing: 0.08em;
    padding: 0.3rem 0.8rem; border-radius: 999px;
    border: 1px solid hsl(var(--border)); background: transparent;
    color: hsl(var(--muted-foreground));
    transition: color 0.3s var(--ease-lux), border-color 0.3s var(--ease-lux),
                background 0.3s var(--ease-lux);
}
.bs-ev-chip:hover { border-color: hsl(var(--gold) / 0.6); color: hsl(var(--gold)); }
.bs-ev-chip.active {
    border-color: hsl(var(--gold)); background: hsl(var(--gold));
    color: hsl(var(--gold-foreground)); font-weight: var(--fw-semibold);
}
.bs-ev-filter-meta {
    display: flex; align-items: center; gap: 1rem; flex-wrap: wrap;
    margin-top: 0.75rem; padding-top: 0.75rem;
    border-top: 1px solid hsl(var(--border));
    font-size: var(--fs-xs); color: hsl(var(--muted-foreground)); letter-spacing: 0.08em;
}
.bs-ev-filter-meta .cnt { color: hsl(var(--foreground)); font-variant-numeric: tabular-nums; }
.bs-ev-reset {
    font: inherit; font-size: var(--fs-xs); letter-spacing: 0.1em; cursor: pointer;
    background: none; border: 0; padding: 0; color: hsl(var(--gold));
    border-bottom: 1px solid hsl(var(--gold) / 0.4);
    transition: border-color 0.3s, color 0.3s;
}
.bs-ev-reset:hover { color: hsl(var(--gold-bright)); border-color: hsl(var(--gold-bright)); }
.bs-ev-reset[hidden] { display: none; }
.bs-ev-empty {
    text-align: center; padding: clamp(3rem, 8vh, 5rem) 1.5rem;
    font-family: var(--font-display); font-size: clamp(1.125rem, 2.4vw, 1.5rem);
    letter-spacing: 0.06em; color: hsl(var(--muted-foreground));
}
.bs-ev-empty[hidden] { display: none; }

/* ============ 一起 · 艺起：横向缩略图带 ============
   一排小图，不显示滚动条——桌面端由左右圆形按钮翻页，移动端走原生触摸滑动。
   沿用活动卡片的视觉语言：金线描边、2px 直角、悬停抬起 + 图片微推。 */
.bs-art-wrap { position: relative; margin-top: 2.75rem; }
.bs-art-strip {
    display: flex; gap: 0.875rem;
    overflow-x: auto; overflow-y: hidden;
    overscroll-behavior-x: contain;          /* 滚到尽头不带动整页横滚 */
    scroll-snap-type: x proximity;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;                   /* Firefox：不显示滚动条 */
}
.bs-art-strip::-webkit-scrollbar { display: none; }   /* Chrome/Safari：不显示滚动条 */
.bs-art-thumb {
    flex: 0 0 auto; width: clamp(132px, 14vw, 190px); margin: 0;
    scroll-snap-align: start; cursor: zoom-in;
    overflow: hidden; border-radius: 2px; background: hsl(45 16% 15%);
    border: 1px solid hsl(var(--gold) / 0.28);
    transition: transform 0.5s var(--ease-lux), box-shadow 0.5s var(--ease-lux), border-color 0.5s;
}
.bs-art-thumb:hover {
    transform: translateY(-4px);
    border-color: hsl(var(--gold) / 0.6);
    box-shadow: 0 16px 32px -12px rgba(0, 0, 0, 0.55);
}
.bs-art-thumb img {
    display: block; width: 100%; aspect-ratio: 4 / 3; object-fit: cover;
    transition: transform 1.2s var(--ease-lux);
}
.bs-art-thumb:hover img { transform: scale(1.06); }

/* 左右翻页按钮：压在图带两端，深色玻璃底 + 金线，浮在图片上仍清晰 */
.bs-art-nav {
    position: absolute; top: 50%; z-index: 3; transform: translateY(-50%);
    width: 2.75rem; height: 2.75rem; border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
    cursor: pointer; color: hsl(40 33% 96%);
    background: hsl(45 15% 8% / 0.7); border: 1px solid hsl(var(--gold) / 0.4);
    backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);
    transition: border-color 0.3s, color 0.3s, background 0.3s, opacity 0.3s;
}
.bs-art-nav:hover { border-color: hsl(var(--gold-bright)); color: hsl(var(--gold-bright)); background: hsl(45 15% 8% / 0.9); }
.bs-art-nav.prev { left: 0.75rem; }
.bs-art-nav.next { right: 0.75rem; }
/* 图标库里只有 chevron-down，旋转成左右指向 */
.bs-art-nav svg { transform: rotate(90deg); }
.bs-art-nav.next svg { transform: rotate(-90deg); }
.bs-art-nav[disabled] { opacity: 0.22; cursor: default; pointer-events: none; }
.bs-art-nav[hidden] { display: none; }

@media (max-width: 768px) {
    .bs-art-nav { display: none; }           /* 移动端用原生触摸滑动，不出按钮 */
}
@media (max-width: 640px) {
    .bs-art-wrap { margin-top: 2rem; }
    .bs-art-strip { gap: 0.625rem; }
}
@media (prefers-reduced-motion: reduce) {
    .bs-art-strip { scroll-snap-type: none; }
    .bs-art-thumb, .bs-art-thumb img { transition: none; }
    .bs-art-thumb:hover { transform: none; }
    .bs-art-thumb:hover img { transform: none; }
}
/* 筛选隐藏：档期卡、solo 散布容器、整组区块、侧栏章节项共用 */
.bs-ev-card.is-hidden, .bs-ev-solo.is-hidden, section.is-hidden, .bs-rail-list li.is-hidden { display: none !important; }
@media (max-width: 768px) {
    .bs-ev-filter { top: 3.25rem; padding: 0.75rem 0; }
    .bs-ev-filter-label { min-width: 0; width: 100%; }
}

/* ============ 移动端抽屉导航（官网版补充，基础样式在 brand.css） ============ */
.mobile-nav-head .brand-logo { height: 2rem; width: auto; }
.mobile-nav-foot {
    margin-top: auto; padding-top: 1.5rem;
    display: flex; align-items: center; gap: 0.625rem;
}
.mobile-nav-foot .btn-gold { flex: 1; justify-content: center; height: 2.75rem; }
.mobile-nav-lang {
    width: 2.75rem; height: 2.75rem; flex: none;
    border: 1px solid hsl(var(--border)); letter-spacing: 0.05em;
    font-size: var(--fs-sm);
}
/* 抽屉打开时盖住返回顶部按钮，避免两层浮层叠加 */
.mobile-nav { z-index: 950; }

/* ============ 章节侧栏（全品牌页右侧竖排章节轨，兼作阅读进度） ============
 * 结构：发丝轨道（含金色进度填充）+ 章节项（序号 / 竖排标题 / 触点横杆）
 * 触点横杆右端始终抵住轨道，当前章节横杆伸长并转金
 * 深浅区块交替：JS 依视窗中线所在区块切 .on-dark 配色（页脚同为深色）
 * 窄屏（<1024px）或矮屏（<620px）由 CSS 降级为顶部 2px 进度条 */
.bs-rail {
    position: fixed; right: clamp(0.75rem, 1.5vw, 1.625rem); top: calc(50% - 0.75rem);
    transform: translateY(-50%); z-index: 150;
    display: flex; justify-content: flex-end;
    opacity: 0; visibility: hidden;
    transition: opacity 0.7s var(--ease-lux), visibility 0.7s;
}
.bs-rail.ready { opacity: 1; visibility: visible; }
.bs-rail-track {
    position: absolute; right: 0; top: 0.25rem; bottom: 0.25rem; width: 1px;
    background: hsl(var(--foreground) / 0.13);
}
.bs-rail-fill {
    position: absolute; left: 0; top: 0; width: 1px; height: 0;
    background: linear-gradient(180deg, hsl(var(--gold) / 0.3), hsl(var(--gold-bright)));
}
.bs-rail-list {
    list-style: none; margin: 0; padding: 0;
    display: flex; flex-direction: column; align-items: flex-end;
}
.bs-rail-list li {
    opacity: 0; transform: translateX(10px);
    transition: opacity 0.6s var(--ease-lux), transform 0.6s var(--ease-lux);
    transition-delay: calc(var(--i, 0) * 55ms + 100ms);
}
.bs-rail.ready .bs-rail-list li { opacity: 1; transform: none; }
.bs-rail-item {
    display: flex; align-items: center; gap: 0.5rem;
    padding: clamp(0.1875rem, 0.55vh, 0.5rem) 0;
    background: none; border: 0; margin: 0; cursor: pointer;
    font: inherit; color: inherit; -webkit-tap-highlight-color: transparent;
}
.bs-rail-n {
    font-size: 0.5625rem; letter-spacing: 0.14em; line-height: 1;
    font-variant-numeric: tabular-nums;
    color: hsl(var(--foreground) / 0.32);
    transition: color 0.4s var(--ease-lux);
}
.bs-rail-t {
    writing-mode: vertical-rl; text-orientation: mixed;
    font-size: clamp(0.5625rem, 1.15vh, 0.75rem);
    letter-spacing: 0.16em; line-height: 1; white-space: nowrap;
    color: hsl(var(--foreground) / 0.5);
    transition: color 0.4s var(--ease-lux), letter-spacing 0.4s var(--ease-lux);
}
.bs-rail-tick {
    width: 0.625rem; height: 1px; flex-shrink: 0;
    background: hsl(var(--foreground) / 0.22);
    transition: width 0.45s var(--ease-lux), background 0.45s var(--ease-lux);
}
.bs-rail-item:hover .bs-rail-t,
.bs-rail-item:focus-visible .bs-rail-t { color: hsl(var(--gold)); }
.bs-rail-item:hover .bs-rail-tick,
.bs-rail-item:focus-visible .bs-rail-tick { width: 1rem; background: hsl(var(--gold) / 0.7); }
.bs-rail-item:focus-visible { outline: none; }
.bs-rail-item[aria-current="true"] .bs-rail-n { color: hsl(var(--gold)); }
.bs-rail-item[aria-current="true"] .bs-rail-t { color: hsl(var(--gold)); letter-spacing: 0.22em; }
.bs-rail-item[aria-current="true"] .bs-rail-tick { width: 1.375rem; background: hsl(var(--gold-bright)); }
/* 深色区块 / 页脚经过时整体提亮 */
.bs-rail.on-dark .bs-rail-track { background: hsl(40 25% 90% / 0.18); }
.bs-rail.on-dark .bs-rail-n { color: hsl(40 20% 88% / 0.42); }
.bs-rail.on-dark .bs-rail-t { color: hsl(40 20% 88% / 0.6); }
.bs-rail.on-dark .bs-rail-tick { background: hsl(40 25% 90% / 0.26); }
.bs-rail.on-dark .bs-rail-item:hover .bs-rail-t,
.bs-rail.on-dark .bs-rail-item:focus-visible .bs-rail-t,
.bs-rail.on-dark .bs-rail-item[aria-current="true"] .bs-rail-t { color: hsl(var(--gold-bright)); }
.bs-rail.on-dark .bs-rail-item:hover .bs-rail-tick,
.bs-rail.on-dark .bs-rail-item[aria-current="true"] .bs-rail-tick { background: hsl(var(--gold-bright)); }
.bs-rail.on-dark .bs-rail-item[aria-current="true"] .bs-rail-n { color: hsl(var(--gold-bright)); }

/* 顶部阅读进度条（窄屏 / 矮屏降级形态） */
.bs-rail-bar {
    position: fixed; left: 0; top: 0; height: 2px; width: 0; z-index: 260;
    background: linear-gradient(90deg, hsl(var(--gold) / 0.45), hsl(var(--gold-bright)));
    display: none; pointer-events: none;
}
@media (min-width: 769px) and (max-width: 1180px) {
    .site-nav a { padding: 0.375rem 0.5rem; font-size: var(--fs-xs); }
    .site-nav a.active::after { left: 0.5rem; right: 0.5rem; }
}
@media (max-width: 1023px), (max-height: 619px) {
    .bs-rail { display: none; }
    .bs-rail-bar { display: block; }
}
@media (prefers-reduced-motion: reduce) {
    .bs-rail, .bs-rail-list li, .bs-rail-n, .bs-rail-t, .bs-rail-tick { transition: none; }
    .bs-rail-list li { opacity: 1; transform: none; }
}

/* ============ 数字带列数变体 ============ */
.bs-stats-inner.cols-4 { grid-template-columns: repeat(4, 1fr); }

/* ==================================================================
   重庆专页（?action=city）—— 第三版排布
   ------------------------------------------------------------------
   叙事：01 概览 → 02 量级 → 03 地位 → 04 魅力 → 05 山城 → 06 商圈 → 07 地标

   返工要点（针对「只放大字号，与其他页割裂」）：
   · 层级靠构图不靠字号。章节标题只比全站 .bs-title(48px) 高一级到 52px，
     页头 68px（其他子页页头 56px）；分量来自「语义断行成两行对句」与图文咬合，
     而不是把同一套盒子整体放大。
   · 图片作结构骨架：七章中五章有图，8 处图片位 / 7 张不同素材 / 零重复，
     且每处展示宽度都小于源图宽度（全部缩小显示），从根上消除旧版页头发虚。
   · 文字与图片咬合：02 章主数字压在图上、06 章同心环叠在实景图上、
     07 章 2011 徽章挂在画框外角。
   · 本页专属规则一律加 .bp-city 前缀或只用 city 独占类名，
     其余五页（31 个 .bs-section、207 处 .reveal）完全不受影响。
   ================================================================== */

/* ---------- 全页基调：间距 / 发丝线 / 纸纹 ---------- */
/* 章节间距：基线 120px 提到 144px。比第二版的 176px 收敛，
   既让七章之间有呼吸，又不至于与兄弟页的纵向节奏差太多。 */
.bp-city .bs-section { padding: clamp(5rem, 11vw, 9rem) 0; }

/* 发丝线：审计实测旧版单页约 30 条横线（24 数据行 + 6 容器顶线），读作 Excel 账本。
   改为只保留容器首尾两条线，行间靠留白分组——高端规格表靠间距呼吸，不靠网格线。 */
.bp-city .bs-scale-rows .r,
.bp-city .bs-ledger li,
.bp-city .bs-delta .row,
.bp-city .bs-rings-list li,
.bp-city .bs-city-facts .r,
.bp-city .bs-facts .row {
    border-bottom: 0;
    padding-top: 1.5rem; padding-bottom: 1.5rem;
}
.bp-city .bs-scale-rows,
.bp-city .bs-ledger,
.bp-city .bs-delta,
.bp-city .bs-rings-list,
.bp-city .bs-city-facts,
.bp-city .bs-facts { border-bottom: 1px solid hsl(var(--border)); }
.bp-city .bs-dark .bs-rings-list,
.bp-city .bs-dark .bs-city-facts,
.bp-city .bs-dark .bs-facts { border-bottom-color: hsl(40 20% 90% / 0.16); }

/* 纸纹：象牙白 #FAF8F4 无纹理会读作「数字白」而非「暖纸」。
   按规范只挂 fixed + pointer-events:none 伪元素，绝不挂滚动容器（否则逐帧 GPU 重绘）。
   z-index 60：在页面内容(≤10)之上，在章节轨(150)/顶栏(200)/返回顶部(900)/弹层(9999)之下，
   只给正文加纸感，不污染 UI 组件。 */
body.bp-city::after {
    content: ''; position: fixed; inset: 0; z-index: 60; pointer-events: none;
    opacity: 0.04; mix-blend-mode: overlay;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='p'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23p)'/%3E%3C/svg%3E");
}

/* ---------- 标题语义断行 + 行级遮罩 ----------
   服务端已按逗号/间隔号把标题切成 .tl 行并删去标点，故这里不需要 JS 量 offsetTop 盲切。
   .is-split 也由服务端直接写上 → 标题不依赖 JS 即可见，无 JS / JS 失败都不会白屏。
   .tl 行高放到 1.5 再用 -0.34em 负外边距收回：overflow:hidden 在行盒边缘裁切，
   而 Playfair Display / Noto Serif SC 的内容区(ascent+descent)明显大于 1em，
   紧凑行高会裁掉下伸部(g q y p)与中文逗号尾部。本机无 fontTools、
   fc-scan 也不输出 woff2 度量，故不依赖精确数值，刻意留足余量。
   只用 margin-bottom 不用 margin-top，避免首个 .tl 的负上边距与 h2 边距合并。 */
.bp-city .bs-title .tl {
    display: block; overflow: hidden;
    line-height: 1.5; margin-bottom: -0.34em;
}
.bp-city .bs-title .tl:last-child { margin-bottom: 0; }
.bp-city .bs-title .tl > i { display: block; font-style: normal; will-change: transform; }

/* ---------- 章节头：编号 / KICKER / 坐标母题（全页统一语法） ---------- */
.bs-chapter {
    display: flex; align-items: baseline; gap: 1rem; flex-wrap: wrap;
    padding-top: 1rem; margin-bottom: clamp(1.75rem, 3.5vh, 2.75rem);
    border-top: 1px solid hsl(var(--border));
}
.bs-chapter .n {
    font-family: var(--font-display); font-weight: 600; font-size: var(--fs-sm);
    letter-spacing: 0.16em; color: hsl(var(--gold)); font-variant-numeric: tabular-nums;
}
.bs-chapter .k {
    font-size: var(--fs-xs); letter-spacing: 0.28em; text-transform: uppercase;
    color: hsl(var(--muted-foreground));
}
.bs-chapter .c {
    margin-left: auto; font-size: 0.6875rem; letter-spacing: 0.14em; white-space: nowrap;
    color: hsl(var(--muted-foreground)); font-variant-numeric: tabular-nums;
}
.bs-dark .bs-chapter { border-top-color: hsl(40 20% 90% / 0.16); }
.bs-dark .bs-chapter .k, .bs-dark .bs-chapter .c { color: hsl(40 15% 62%); }

/* 标题左对齐 + 右侧限宽导语；7:5 分栏给标题更多横向空间 */
.bs-chapter-head {
    display: grid; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
    gap: clamp(1.5rem, 4vw, 4rem); align-items: end;
    margin-bottom: clamp(2.5rem, 5.5vh, 4rem);
}
.bp-city .bs-chapter-head .bs-title {
    margin: 0; text-align: left;
    font-size: clamp(1.9375rem, 4.2vw, 3.25rem);
    letter-spacing: 0.01em;
}
html[lang="en"] .bp-city .bs-chapter-head .bs-title {
    font-size: clamp(1.75rem, 3.6vw, 2.75rem);
    letter-spacing: -0.01em;
}
.bs-chapter-lead {
    margin: 0 0 0.35rem; max-width: 42ch;
    font-size: var(--fs-sm); line-height: 2.05; color: hsl(var(--muted-foreground));
}
.bs-dark .bs-chapter-lead { color: hsl(40 15% 72%); }

/* ---------- 01 页头：满屏栏头（与其他子页保持一致） ----------
   city.hero 仅 866px，在 1920px 视口下要放大 2.55 倍必然发虚。
   加深遮罩并叠一层极细颗粒，让柔和读作「氛围」而非「低清」。
   日后在后台素材管理把 city.hero 换成 ≥1920px 横幅图，这两层依然成立、不碍事。 */
.bs-city-hero .bs-hero-bg::after {
    background: linear-gradient(180deg, rgba(18, 15, 11, 0.74) 0%, rgba(18, 15, 11, 0.58) 45%, rgba(18, 15, 11, 0.92) 100%);
}
.bs-city-hero::after {
    content: ''; position: absolute; inset: 0; z-index: 0; pointer-events: none;
    opacity: 0.13; mix-blend-mode: overlay;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)'/%3E%3C/svg%3E");
}
.bs-city-hero .bs-title {
    margin: 1.375rem 0 0; color: hsl(40 33% 96%);
    font-size: clamp(2.5rem, 6.5vw, 5rem);
}
html[lang="en"] .bs-city-hero .bs-title { font-size: clamp(2.125rem, 5.2vw, 4rem); }
.bs-city-hero .bs-sub { color: hsl(40 20% 85% / 0.88); }
/* 坐标条：编号 + 坐标母题，随章节推近（重庆 → 解放碑商圈 → 重庆时代广场） */
.bs-city-coord {
    display: flex; align-items: baseline; gap: 0.875rem; flex-wrap: wrap;
    margin-top: 2.25rem; padding-top: 1rem;
    border-top: 1px solid hsl(40 20% 90% / 0.22);
    font-size: 0.6875rem; letter-spacing: 0.2em; color: hsl(40 20% 78%);
    font-variant-numeric: tabular-nums;
}
.bs-city-coord .n {
    font-family: var(--font-display); font-weight: 600; letter-spacing: 0.16em;
    color: hsl(var(--gold-bright));
}

/* ---------- 02 数据三栏（2026-09-18 v13：三图并排作背景，关键数据压图，图多字少） ----------
   三块竖幅照片面板等宽并排（3:4 cover），深色渐变纱自下而上压底保证文字对比度；
   文字只留每栏关键一两组：金色小 kicker（量级/荣誉/热度）+ 象牙白主数字 +
   两行小注。荣誉栏无主数字，改五条荣誉名称细行（发丝线分隔）。
   底图缺失时面板降级为深棕衬底（background），文字照常可读。
   图片视差由 city-motion.js 接管（.bs-tri-panel 在视差名单内），故 img 关掉 CSS 过渡。 */
/* v14（客户要求）：02 章整节铺一张城市图作「从下到上」渐变背景——
   底部图像完整、向上逐渐融入页面底色，章头文字落在纯净底色上，
   下沿与三块大图面板的影调无缝衔接；背景层 z-index 0，内容层 1 */
.bs-tri-section { position: relative; overflow: hidden; }
/* v17（客户纠正：「不是从 50% 开始虚化，图从 50% 拦腰再开始显示」）：
   背景层只铺本节下半段（top:50%），上半段与章头落在干净页面底色上；
   图上缘虚化柔化——虚化层（blur 7px）只露层顶、清晰层自顶部渐入，
   图像从底色里朦胧「长出」；下半段图像保持清晰，不虚化 */
.bs-tri-bg { position: absolute; left: 0; right: 0; bottom: 0; top: 50%; z-index: 0; }
.bs-tri-bg img {
    position: absolute; inset: 0;
    width: 100%; height: 100%; object-fit: cover; object-position: center 45%;
    display: block;
}
/* v20（客户反馈「效果还是不够好，顶部出现黑边」，按 GitHub 高星方案重构）：
   黑边根因——filter:blur() 直接作用于 img 会采样图像边界外的透明黑，
   形成暗色条纹并从蒙版半透明区漏出。改用 Progressive Blur 渐进虚化
   （joogps/Glur 2k★、nikstar/VariableBlur 等同款技术）：
   清晰 img 单层铺底，其上叠 6 层 backdrop-filter 纱（每层 blur 3px，
   顶部累计 18px），各层蒙版在 15%→60% 依次淡出，虚化强度随深度连续
   递减到 0；backdrop-filter 采样的是背后真实画面（图像+页面白底），
   天然无黑边，顶部呈「白雾→朦胧→清晰」的连续过渡 */
.bs-tri-bg img.sharp {
    filter: brightness(0.88) saturate(1.06);
    -webkit-mask-image: linear-gradient(to bottom, transparent 0, rgba(0, 0, 0, 0.3) 20%, rgba(0, 0, 0, 0.75) 42%, #000 58%);
    mask-image: linear-gradient(to bottom, transparent 0, rgba(0, 0, 0, 0.3) 20%, rgba(0, 0, 0, 0.75) 42%, #000 58%);
}
.bs-tri-bg .pblur {
    position: absolute; inset: 0;
    -webkit-backdrop-filter: blur(3px);
    backdrop-filter: blur(3px);
}
.pblur-1 { -webkit-mask-image: linear-gradient(to bottom, #000 0, #000 5%, transparent 15%); mask-image: linear-gradient(to bottom, #000 0, #000 5%, transparent 15%); }
.pblur-2 { -webkit-mask-image: linear-gradient(to bottom, #000 0, #000 14%, transparent 24%); mask-image: linear-gradient(to bottom, #000 0, #000 14%, transparent 24%); }
.pblur-3 { -webkit-mask-image: linear-gradient(to bottom, #000 0, #000 23%, transparent 33%); mask-image: linear-gradient(to bottom, #000 0, #000 23%, transparent 33%); }
.pblur-4 { -webkit-mask-image: linear-gradient(to bottom, #000 0, #000 32%, transparent 42%); mask-image: linear-gradient(to bottom, #000 0, #000 32%, transparent 42%); }
.pblur-5 { -webkit-mask-image: linear-gradient(to bottom, #000 0, #000 41%, transparent 51%); mask-image: linear-gradient(to bottom, #000 0, #000 41%, transparent 51%); }
.pblur-6 { -webkit-mask-image: linear-gradient(to bottom, #000 0, #000 50%, transparent 60%); mask-image: linear-gradient(to bottom, #000 0, #000 50%, transparent 60%); }
/* v20：收口层——顶部只留轻雾辅助过渡（主过渡由渐进虚化完成，
   不再用浓白纱硬压），底部仍融入下一章（03 地貌照片章）
   同一暗色 hsl(222 40% 4%)，接缝暗对暗融合 */
.bs-tri-bg::after {
    content: ''; position: absolute; inset: 0;
    background: linear-gradient(to bottom,
        hsl(var(--background) / 0.4) 0,
        hsl(var(--background) / 0.14) 10%,
        hsl(var(--background) / 0) 22%,
        hsl(222 40% 4% / 0) 58%,
        hsl(222 40% 4% / 0.5) 86%,
        hsl(222 40% 4% / 0.9) 100%);
}
.bs-tri-section > .container-brand { position: relative; z-index: 1; }

.bs-city-tri {
    display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: clamp(0.875rem, 1.8vw, 1.375rem);
    margin-top: clamp(2.25rem, 4.5vw, 3.25rem);
}
/* v15：去掉面板硬描边——矩形金边是「拼接生硬」的主要来源之一，
   轮廓改由渐变纱与顶部柔化遮罩建立 */
.bs-tri-panel {
    position: relative; margin: 0; overflow: hidden; min-width: 0;
    display: flex; align-items: flex-end;
    min-height: clamp(25rem, 44vw, 33rem);
    border-radius: 2px; border: 0;
    background: linear-gradient(165deg, hsl(34 16% 17%), hsl(30 13% 9%));
}
/* v15：媒体层（img+scrim）顶部柔化遮罩——面板上缘由全透明渐入，
   从虚化背景里「长出来」；遮罩挂在固定层上，不随视差位移漂移 */
.bs-tri-media {
    position: absolute; inset: 0;
    -webkit-mask-image: linear-gradient(to bottom, transparent 0, rgba(0, 0, 0, 0.45) 7%, #000 18%);
    mask-image: linear-gradient(to bottom, transparent 0, rgba(0, 0, 0, 0.45) 7%, #000 18%);
}
.bs-tri-panel img {
    position: absolute; inset: 0; width: 100%; height: 100%;
    object-fit: cover; display: block;
    transition: none; will-change: transform;
}
.bs-tri-panel .scrim {
    position: absolute; inset: 0;
    background: linear-gradient(180deg, rgba(16, 13, 9, 0.34) 0%, rgba(16, 13, 9, 0.1) 30%, rgba(16, 13, 9, 0.3) 46%, rgba(16, 13, 9, 0.88) 100%);
}
.bs-tri-panel figcaption { position: relative; z-index: 2; width: 100%; padding: clamp(1.375rem, 2.6vw, 2rem); }
/* v14（客户要求）：「量级/荣誉/热度」移到面板图片左上角、字体加大——
   金色衬线大字压图，顶部渐变纱加深一档 + 文字投影保证任何底图上可读 */
.bs-tri-panel .k {
    position: absolute; top: 0; left: 0; z-index: 3;
    padding: clamp(1.125rem, 2.2vw, 1.625rem) clamp(1.25rem, 2.4vw, 1.75rem);
    font-family: var(--font-display); font-weight: 600; line-height: 1.2;
    font-size: clamp(1.5rem, 2.6vw, 2.125rem);
    letter-spacing: 0.14em; color: hsl(var(--gold-bright));
    text-shadow: 0 1px 14px rgba(10, 8, 5, 0.55);
    /* v15：面板顶部柔化后标签直接压在背景上，补一团无硬边的径向暗纱保可读 */
    background: radial-gradient(120% 95% at 0% 0%, rgba(12, 10, 7, 0.5), rgba(12, 10, 7, 0) 70%);
}
.bs-tri-panel .v {
    display: block; font-family: var(--font-display); font-weight: 600; line-height: 1;
    font-size: clamp(2.125rem, 3.6vw, 3rem); letter-spacing: -0.01em;
    color: hsl(40 33% 96%); font-variant-numeric: tabular-nums;
}
.bs-tri-panel .v .unit { font-size: 0.32em; letter-spacing: 0.08em; margin-left: 0.4em; color: hsl(var(--gold-bright)); }
.bs-tri-panel .l {
    display: block; margin-top: 0.75rem;
    font-size: var(--fs-xs); letter-spacing: 0.16em; color: hsl(40 20% 80%);
}
.bs-tri-panel .s {
    display: block; margin-top: 0.4375rem;
    font-size: var(--fs-xs); letter-spacing: 0.06em; color: hsl(40 20% 80% / 0.72);
}
.bs-tri-panel .h {
    display: block; padding: 0.5rem 0;
    font-size: var(--fs-sm); letter-spacing: 0.06em; line-height: 1.5;
    color: hsl(40 33% 96% / 0.92);
    border-bottom: 1px solid hsl(40 20% 90% / 0.14);
}
.bs-tri-panel .h:last-child { border-bottom: 0; padding-bottom: 0; }

/* ---------- （已下线）02 量级：主数字压在图上 + 四行档案表 ----------
   v12 三章合一后本页不再使用 .bs-scale 图数咬合布局，样式保留备查 */
.bs-scale {
    display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
    gap: clamp(2.5rem, 6vw, 5rem); align-items: start;
}
.bs-scale-figure { position: relative; margin: 0; }
.bs-scale-figure .frame {
    position: relative; overflow: hidden; border-radius: 2px;
    border: 1px solid hsl(var(--gold) / 0.22);
}
.bs-scale-figure .frame img { width: 100%; aspect-ratio: 4 / 5; object-fit: cover; display: block; }
.bs-scale-num { position: absolute; left: 0; right: 0; bottom: 0; z-index: 2;
    padding: clamp(3rem, 8vh, 4.5rem) 1.5rem 1.5rem;
    background: linear-gradient(180deg, transparent, rgba(16, 13, 9, 0.88));
}
.bs-scale-num .v {
    font-family: var(--font-display); font-weight: 600; line-height: 0.94;
    font-size: clamp(2.5rem, 6vw, 4rem); letter-spacing: -0.01em;
    color: hsl(40 33% 96%); font-variant-numeric: tabular-nums;
}
.bs-scale-num .v .unit { font-size: 0.3em; letter-spacing: 0.08em; margin-left: 0.4em; color: hsl(var(--gold-bright)); }
.bs-scale-num .l {
    margin-top: 0.875rem; font-size: var(--fs-xs); letter-spacing: 0.22em;
    text-transform: uppercase; color: hsl(40 20% 80%);
}
.bs-scale-rows { margin: 0; border-top: 1px solid hsl(var(--border)); }
.bs-scale-rows .r {
    display: flex; align-items: baseline; justify-content: space-between; gap: 1.5rem;
    padding-left: 0.25rem; padding-right: 0.25rem;
    transition: background 0.4s var(--ease-lux), padding-left 0.4s var(--ease-lux);
}
.bs-scale-rows .r:hover { background: hsl(var(--gold) / 0.05); padding-left: 0.75rem; }
.bs-scale-rows dt { font-size: var(--fs-sm); letter-spacing: 0.08em; color: hsl(var(--muted-foreground)); }
.bs-scale-rows dd {
    margin: 0; font-family: var(--font-display); font-weight: 600; font-size: 1.375rem;
    color: hsl(var(--foreground)); font-variant-numeric: tabular-nums; white-space: nowrap;
}

/* ---------- 03 地位：年份账册（全页两处纯文字乐章之一） ---------- */
.bs-ledger { list-style: none; margin: 0; padding: 0; border-top: 1px solid hsl(var(--border)); }
.bs-ledger li {
    display: grid; grid-template-columns: 7.5rem minmax(0, 1fr);
    gap: clamp(1rem, 3vw, 2.5rem); align-items: baseline;
    padding-left: 0.25rem; padding-right: 0.25rem;
    transition: background 0.45s var(--ease-lux), padding-left 0.45s var(--ease-lux);
}
.bs-ledger li:hover { background: hsl(var(--gold) / 0.05); padding-left: 0.75rem; }
.bs-ledger .yr {
    font-family: var(--font-display); font-weight: 600; letter-spacing: 0.06em;
    font-size: clamp(1.25rem, 2.4vw, 1.75rem); color: hsl(var(--gold));
    font-variant-numeric: tabular-nums;
}
.bs-ledger .yr.none { color: hsl(var(--muted-foreground)); opacity: 0.45; }
.bs-ledger .nm {
    font-family: var(--font-display); font-weight: 600; letter-spacing: 0.02em;
    font-size: clamp(1.0625rem, 2vw, 1.5rem); color: hsl(var(--foreground));
}
.bs-ledger .rk {
    margin-left: 0.875rem; font-size: var(--fs-xs); letter-spacing: 0.18em;
    color: hsl(var(--muted-foreground)); white-space: nowrap;
}

/* ---------- 04 魅力：左 sticky 竖幅图 / 右增量对照 ---------- */
.bs-city-sticky {
    display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
    gap: clamp(2rem, 5vw, 4.5rem); align-items: start;
}
.bs-city-sticky-media { position: sticky; top: clamp(5rem, 12vh, 7.5rem); }
.bs-city-sticky-media .frame {
    overflow: hidden; border-radius: 2px; border: 1px solid hsl(var(--gold) / 0.22);
}
.bs-city-sticky-media img { width: 100%; aspect-ratio: 3 / 4; object-fit: cover; display: block; }
.bs-delta { border-top: 1px solid hsl(var(--border)); }
.bs-delta .row {
    display: flex; align-items: baseline; gap: 0.875rem; flex-wrap: wrap;
    padding-left: 0.25rem; padding-right: 0.25rem;
}
.bs-delta .k {
    min-width: 7.5rem; font-size: var(--fs-xs); letter-spacing: 0.16em;
    text-transform: uppercase; color: hsl(var(--muted-foreground));
}
.bs-delta .from {
    font-family: var(--font-display); font-size: 1.0625rem; white-space: nowrap;
    color: hsl(var(--muted-foreground)); font-variant-numeric: tabular-nums;
}
.bs-delta .arrow { color: hsl(var(--muted-foreground)); opacity: 0.5; }
.bs-delta .to {
    font-family: var(--font-display); font-weight: 600; white-space: nowrap;
    font-size: clamp(1.25rem, 2.4vw, 1.75rem); color: hsl(var(--foreground));
    font-variant-numeric: tabular-nums;
}
.bs-delta .d {
    margin-left: auto; padding: 0.2rem 0.6rem; border-radius: 999px; white-space: nowrap;
    font-size: var(--fs-xs); letter-spacing: 0.1em; font-variant-numeric: tabular-nums;
    color: hsl(var(--gold)); border: 1px solid hsl(var(--gold) / 0.45);
    background: hsl(var(--gold-soft) / 0.5);
}
.bs-delta-note {
    margin-top: 1.25rem; font-size: var(--fs-xs); letter-spacing: 0.14em;
    color: hsl(var(--muted-foreground));
}

/* ---------- 08 山城光影：原比例瀑布流画廊（2026-09-18 重构，全页唯一深色、唯一高潮） ----------
   旧版 .bs-collage 按三图节奏强制裁切（16:10 / 3:4 / 1:1），9 张横竖混杂时
   节奏错乱、裁切失控（客户反馈「很混乱」）。新版三列瀑布流：原比例零裁切、
   横竖自然错落、1–24 张任意数量成立；img 带真实 width/height 占位，
   懒加载不抖动、分列稳定。窄屏降为两列，触屏题注常显。 */
.bs-gallery {
    columns: 3; column-gap: clamp(0.75rem, 1.6vw, 1.25rem);
    margin-top: clamp(1rem, 3vh, 2rem);
}
.bs-gallery figure {
    break-inside: avoid; margin: 0 0 clamp(0.75rem, 1.6vw, 1.25rem);
    position: relative; overflow: hidden; border-radius: 2px;
    border: 1px solid hsl(var(--gold) / 0.22);
    transition: border-color 0.5s var(--ease-lux);
}
.bs-gallery figure:hover { border-color: hsl(var(--gold) / 0.6); }
.bs-gallery a { display: block; }
.bs-gallery img {
    width: 100%; height: auto; display: block;
    transition: transform 0.6s var(--ease-lux);
}
.bs-gallery figure:hover img { transform: scale(1.03); }
.bs-gallery figcaption {
    position: absolute; left: 0; right: 0; bottom: 0; z-index: 2; padding: 1.5rem 1rem 0.75rem;
    font-size: var(--fs-xs); letter-spacing: 0.2em; color: hsl(40 33% 96%);
    background: linear-gradient(180deg, transparent, rgba(18, 15, 11, 0.74));
    opacity: 0; transition: opacity 0.4s var(--ease-lux); pointer-events: none;
}
.bs-gallery figure:hover figcaption,
.bs-gallery a:focus-visible + figcaption { opacity: 1; }
/* v21（客户要求「只显示一行，下面有展示更多」）：默认只显前 3 张
   （三列瀑布流各列一张即一行），其余 data-more 隐藏；
   按钮切换 .is-open 展开全部 / 收起（JS 在 city-motion.js） */
.bs-gallery figure[data-more] { display: none; }
.bs-gallery.is-open figure[data-more] { display: block; }
.bs-gallery-more {
    display: block; margin: clamp(1.75rem, 4vh, 2.75rem) auto 0;
    padding: 0.875rem 2.25rem;
    background: transparent; border: 1px solid hsl(var(--gold) / 0.45); border-radius: 2px;
    color: hsl(var(--gold-bright)); font-family: inherit;
    font-size: var(--fs-xs); letter-spacing: 0.24em; text-transform: uppercase;
    cursor: pointer;
    transition: border-color 0.4s var(--ease-lux), background-color 0.4s var(--ease-lux);
}
.bs-gallery-more:hover { border-color: hsl(var(--gold-bright)); background: hsl(var(--gold) / 0.08); }
@media (max-width: 900px) {
    .bs-gallery { columns: 2; }
}
@media (max-width: 560px) {
    .bs-gallery { columns: 2; column-gap: 0.6rem; }
    .bs-gallery figure { margin-bottom: 0.6rem; }
    .bs-gallery figcaption { opacity: 1; padding: 1rem 0.6rem 0.5rem; }   /* 触屏无悬停，题注常显 */
}

/* ---------- 06 商圈：同心环叠在实景图上 ----------
   「文字/图形半盖图片」落点之二。旧版环示意图是纯 CSS 画在空白底上，读作图表；
   叠到解放碑实景图上并压一层径向暗纱后，立刻读作「区位」——
   圆心不再是抽象几何点，而是这座城里一个真实位置。
   figure 自带 aspect-ratio 与底色，即使 city.centre 无图也不会塌陷成零高。 */
.bs-centre {
    display: grid; grid-template-columns: minmax(0, 6fr) minmax(0, 6fr);
    gap: clamp(2.5rem, 6vw, 5rem); align-items: start;
}
.bs-centre-media {
    position: relative; margin: 0; overflow: hidden; border-radius: 2px;
    aspect-ratio: 4 / 3; background: hsl(var(--muted));
    border: 1px solid hsl(var(--gold) / 0.22);
}
.bs-centre-media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.bs-centre-media .scrim {
    position: absolute; inset: 0; z-index: 1;
    background: radial-gradient(circle at 50% 48%, rgba(14, 12, 8, 0.66) 0%, rgba(14, 12, 8, 0.3) 52%, rgba(14, 12, 8, 0.7) 100%);
}
.bs-centre-media .bs-rings-diagram {
    position: absolute; left: 50%; top: 48%; z-index: 2;
    transform: translate(-50%, -50%);
    width: min(68%, 20rem); aspect-ratio: 1 / 1;
}
.bs-rings-diagram .ring { position: absolute; inset: 0; border-radius: 50%; border: 1px solid hsl(var(--gold) / 0.26); }
.bs-rings-diagram .ring.r2 { inset: 17%; border-color: hsl(var(--gold) / 0.42); }
.bs-rings-diagram .ring.r1 { inset: 34%; border-color: hsl(var(--gold) / 0.62); }
.bs-rings-diagram .core {
    position: absolute; left: 50%; top: 50%; width: 0.875rem; height: 0.875rem;
    margin: -0.4375rem 0 0 -0.4375rem; border-radius: 50%;
    background: hsl(var(--gold-bright));
    box-shadow: 0 0 0 6px hsl(var(--gold) / 0.14), 0 0 22px 4px hsl(var(--gold) / 0.4);
}
.bs-rings-diagram .core::after {
    content: ''; position: absolute; inset: -6px; border-radius: 50%;
    border: 1px solid hsl(var(--gold) / 0.5);
    animation: bsRingPulse 3.6s var(--ease-lux) infinite;
}
/* 叠在照片上时环与圆心要提亮，否则被实景吃掉 */
.bs-centre-media .ring { border-color: hsl(40 33% 96% / 0.32); }
.bs-centre-media .ring.r2 { border-color: hsl(40 33% 96% / 0.48); }
.bs-centre-media .ring.r1 { border-color: hsl(var(--gold-bright) / 0.8); }
.bs-centre-media .core { background: hsl(var(--gold-bright)); box-shadow: 0 0 0 6px hsl(var(--gold-bright) / 0.2), 0 0 28px 6px hsl(var(--gold-bright) / 0.55); }
.bs-centre-media .core::after { border-color: hsl(var(--gold-bright) / 0.6); }
.bs-centre-media figcaption {
    position: absolute; left: 0; right: 0; bottom: 0; z-index: 3;
    padding: 2.75rem 1.25rem 1rem;
    font-size: var(--fs-xs); letter-spacing: 0.24em; text-transform: uppercase;
    color: hsl(40 33% 96%);
    background: linear-gradient(180deg, transparent, rgba(14, 12, 8, 0.72));
}
@keyframes bsRingPulse {
    0%   { transform: scale(0.6); opacity: 0.9; }
    70%  { transform: scale(2.6); opacity: 0; }
    100% { transform: scale(2.6); opacity: 0; }
}
.bs-rings-list { list-style: none; margin: 0; padding: 0; border-top: 1px solid hsl(var(--border)); }
.bs-rings-list li {
    display: flex; align-items: baseline; gap: 1rem; flex-wrap: wrap;
    padding-left: 0.25rem; padding-right: 0.25rem;
}
.bs-rings-list .i {
    flex: 0 0 auto; font-family: var(--font-display); font-size: var(--fs-xs);
    letter-spacing: 0.16em; color: hsl(var(--gold)); font-variant-numeric: tabular-nums;
}
.bs-rings-list .k { font-size: var(--fs-sm); letter-spacing: 0.04em; color: hsl(var(--foreground)); }
.bs-rings-list .v {
    margin-left: auto; font-size: var(--fs-xs); letter-spacing: 0.12em;
    color: hsl(var(--muted-foreground)); text-align: right;
}
/* 区位事实：两列，复用到访页已核实的地址/轨道/停车/营业时间 */
.bs-city-facts {
    display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: clamp(2rem, 5vw, 4rem);
    margin-top: clamp(2.25rem, 5vh, 3.25rem); border-top: 1px solid hsl(var(--border));
}
.bs-city-facts .r {
    display: flex; align-items: baseline; justify-content: space-between; gap: 1.25rem;
    padding-left: 0.25rem; padding-right: 0.25rem;
}
.bs-city-facts .k {
    font-size: var(--fs-xs); letter-spacing: 0.14em; text-transform: uppercase;
    color: hsl(var(--muted-foreground)); white-space: nowrap;
}
.bs-city-facts .v { font-size: var(--fs-sm); color: hsl(var(--foreground)); text-align: right; }
.bs-centre-cta { margin-top: 2rem; }

/* ---------- 07 地标（2026-09-21 v21 客户要求重构） ----------
   夜景收束带（.bs-landmark-band）已删除；本节新增：
   · 可配置整节背景图（city.landmark.bg）——叠浅色纱保证文字可读
   · 三张横排配图条（city.landmark.shots）——替代原「奢侈品商场 · 2011」文字行 */
.bs-landmark-section { position: relative; overflow: hidden; }
.bs-lm-bg { position: absolute; inset: 0; z-index: 0; }
.bs-lm-bg img { width: 100%; height: 100%; object-fit: cover; object-position: center 45%; display: block; }
.bs-lm-bg::after {
    content: ''; position: absolute; inset: 0;
    background: linear-gradient(to bottom,
        hsl(var(--background) / 0.9) 0,
        hsl(var(--background) / 0.82) 60%,
        hsl(var(--background) / 0.9) 100%);
}
.bs-landmark-section > .container-brand { position: relative; z-index: 1; }
.bs-landmark-strip { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: clamp(0.625rem, 1.4vw, 1rem); }
.bs-landmark-strip figure { margin: 0; position: relative; overflow: hidden; border-radius: 2px; border: 1px solid hsl(var(--gold) / 0.22); }
.bs-landmark-strip img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; display: block; transition: transform 0.6s var(--ease-lux); }
.bs-landmark-strip figure:hover img { transform: scale(1.04); }
.bs-landmark-strip + .bs-landmark-cta { margin-top: clamp(1.5rem, 3vw, 2rem); }
/* v22（客户要求「于城市之心 右侧的图高度和文字一样」）：
   右栏图框改绝对定位铺满列高、不再参与行高竞争——行高只由左栏
   （三图条 + CTA）决定，图片随之与文字栏等高（object-fit cover 裁切填充）；
   仅作用于 07 地标章，不影响 about/vip/home/location 的 .bs-split */
.bs-landmark-section .bs-split { align-items: stretch; }
.bs-landmark-section .bs-split-media .frame { position: absolute; inset: 0; }
.bs-landmark-section .bs-split-media img { aspect-ratio: auto; height: 100%; max-height: none; }
@media (max-width: 1024px) {
    /* 窄屏单列：图框回归文档流并恢复 4:3 比例，避免绝对定位导致高度塌陷 */
    .bs-landmark-section .bs-split-media .frame { position: relative; }
    .bs-landmark-section .bs-split-media img { aspect-ratio: 4 / 3; height: auto; }
}
/* 数字带压平：去掉渐变底，让它在浅色章节里读作一条安静的规格线 */
.bp-city .bs-stats-plain { background: none; }
/* v12 商圈·地标合并章：双 CTA 并排（了解重庆时代广场 / 查看到访指引） */
.bs-landmark-cta { margin-top: 2rem; display: flex; flex-wrap: wrap; gap: 0.75rem; align-items: center; }

/* ---------- 视差图：关掉 CSS transform 过渡 ----------
   视差由 GSAP 逐帧写 inline transform，若保留原 transition 会与 scrub 打架产生拖影；
   悬停放大一并让位（inline transform 优先级更高，留着也是死代码）。 */
.bp-city .bs-split-media img,
.bp-city .bs-scale-figure img,
.bp-city .bs-centre-media img { transition: none; will-change: transform; }
.bp-city .bs-split-media:hover img { transform: none; }

/* ---------- 响应式 ---------- */
@media (max-width: 1024px) {
    .bs-chapter-head, .bs-scale, .bs-city-sticky, .bs-centre { grid-template-columns: 1fr; }
    /* v13 数据三栏照片面板：窄屏叠单列，面板高度收敛 */
    .bs-city-tri { grid-template-columns: 1fr; gap: 1rem; }
    .bs-tri-panel { min-height: 22rem; }
    .bs-chapter-head { align-items: start; gap: 1.25rem; }
    .bs-city-hero-grid { grid-template-columns: 1fr; gap: 2.5rem; align-items: start; }
    .bs-city-hero-media { max-width: 26rem; }
    .bs-city-sticky-media { position: static; max-width: 30rem; }
    .bs-centre-media { max-width: 34rem; }
}
@media (max-width: 640px) {
    .bs-chapter .c { margin-left: 0; width: 100%; }
    .bp-city .bs-section { padding: clamp(3.5rem, 10vw, 5rem) 0; }
    .bs-city-facts { grid-template-columns: 1fr; }
    .bs-ledger li { grid-template-columns: 1fr; gap: 0.375rem; }
    .bs-delta .k { min-width: 0; width: 100%; }
    .bs-delta .d { margin-left: 0; }
    .bs-rings-list .v { margin-left: 0; width: 100%; text-align: left; }
    .bs-scale-num .v { font-size: clamp(2rem, 12vw, 3rem); }
    /* 窄屏行内边距收回，避免单屏只放得下两三行 */
    .bp-city .bs-scale-rows .r,
    .bp-city .bs-ledger li,
    .bp-city .bs-delta .row,
    .bp-city .bs-rings-list li,
    .bp-city .bs-city-facts .r,
    .bp-city .bs-facts .row { padding-top: 1.125rem; padding-bottom: 1.125rem; }
}
@media (prefers-reduced-motion: reduce) {
    .bs-rings-diagram .core::after { animation: none; opacity: 0; }
    .bp-city .bs-title .tl > i { will-change: auto; }
    .bp-city .bs-split-media img,
    .bp-city .bs-scale-figure img, .bp-city .bs-centre-media img { will-change: auto; }
}

/* ==========================================================================
   城市语境三专题（2026-09-17 新增，2026-09-18 重排为 05 地貌 / 06 碑史 / 07 人文）
   --------------------------------------------------------------------------
   沿用本页既有设计语言：发丝线(hsl(var(--border)))作主要结构手段、
   var(--ease-lux) 统一缓动、clamp() 做响应式量级；金色按全站纪律
   只用于序号、分隔线与时间轴节点，不做大面积铺色、不作正文色。
   三章均不带 .bs-dark —— 08 山城光影画廊仍是全页唯一深色章与唯一高潮。
   入场动效复用既有 .reveal / .clip-reveal 机制（city-motion.js 通用选择器
   已覆盖，无需改 JS）；无图时容器不带 .has-media，自动走单栏纯文字布局。
   ========================================================================== */

/* --- 收束句：两章共用的编辑式引文，金色细线居中 --- */
.bs-pullquote {
    margin: clamp(2.5rem, 6vw, 4rem) auto 0;
    max-width: 46rem;
    text-align: center;
    font-family: var(--font-display);
    font-size: clamp(1.0625rem, 2.1vw, 1.375rem);
    line-height: 1.9;
    color: hsl(var(--foreground));
    position: relative;
    padding-top: 2rem;
}
.bs-pullquote::before {
    content: ''; position: absolute; top: 0; left: 50%;
    width: 3rem; height: 1px; margin-left: -1.5rem;
    background: hsl(var(--gold));
}

/* --- 06 地貌：可选图 + 六项编号清单 --- */
.bs-terrain { margin-top: clamp(2rem, 5vw, 3.5rem); }
.bs-terrain.has-media {
    display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
    gap: clamp(1.75rem, 4vw, 3.5rem); align-items: start;
}
.bs-terrain-media .frame img { width: 100%; height: auto; display: block; aspect-ratio: 4 / 5; object-fit: cover; }
.bs-terrain-list,
.bs-culture-list {
    list-style: none; margin: 0; padding: 0;
    border-top: 1px solid hsl(var(--border));
}
.bs-terrain-list li,
.bs-culture-list li {
    display: grid; grid-template-columns: 3rem minmax(0, 1fr);
    gap: 0.25rem clamp(1rem, 2.5vw, 2rem);
    padding: 1.375rem 0.25rem;
    border-bottom: 1px solid hsl(var(--border));
    transition: background 0.45s var(--ease-lux), padding-left 0.45s var(--ease-lux);
}
.bs-terrain-list li:hover,
.bs-culture-list li:hover { background: hsl(var(--gold) / 0.045); padding-left: 0.75rem; }
.bs-terrain-list .i,
.bs-culture-list .i {
    grid-row: 1 / span 2;
    font-family: var(--font-display); font-size: 0.9375rem;
    color: hsl(var(--gold)); letter-spacing: 0.08em;
    font-variant-numeric: tabular-nums; padding-top: 0.15rem;
}
.bs-terrain-list .k,
.bs-culture-list .k {
    font-family: var(--font-display); font-size: 1.0625rem; font-weight: 600;
    color: hsl(var(--foreground)); letter-spacing: 0.01em;
}
.bs-terrain-list .v,
.bs-culture-list .v {
    font-size: var(--fs-sm); line-height: 1.85;
    color: hsl(var(--muted-foreground));
}

/* --- 07 碑史：纵向时间轴（全页唯一） --- */
.bs-monument { margin-top: clamp(2rem, 5vw, 3.5rem); }
.bs-monument.has-media {
    display: grid; grid-template-columns: minmax(0, 4fr) minmax(0, 8fr);
    gap: clamp(1.75rem, 4vw, 3.5rem); align-items: start;
}
.bs-monument-media { margin: 0; }
.bs-monument-media img { width: 100%; height: auto; display: block; aspect-ratio: 3 / 4; object-fit: cover; }
.bs-timeline { list-style: none; margin: 0; padding: 0 0 0 clamp(1.25rem, 3vw, 2.25rem); position: relative; }
/* 金色竖线：贯穿全部节点，末端渐隐，避免生硬截断 */
.bs-timeline::before {
    content: ''; position: absolute; left: 0; top: 0.5rem; bottom: 0.5rem; width: 1px;
    background: linear-gradient(to bottom,
        hsl(var(--gold) / 0) 0%, hsl(var(--gold) / 0.55) 12%,
        hsl(var(--gold) / 0.55) 82%, hsl(var(--gold) / 0) 100%);
}
.bs-timeline li {
    position: relative; display: grid;
    grid-template-columns: 5.5rem minmax(0, 1fr);
    gap: 0.375rem clamp(1rem, 2.5vw, 2rem);
    padding: 1.25rem 0;
}
.bs-timeline li + li { border-top: 1px solid hsl(var(--border)); }
/* 节点圆点：压在竖线上，用页面底色挖出间隙 */
.bs-timeline .dot {
    position: absolute; left: calc(-1 * clamp(1.25rem, 3vw, 2.25rem)); top: 1.85rem;
    width: 7px; height: 7px; margin-left: -3px; border-radius: 50%;
    background: hsl(var(--gold));
    box-shadow: 0 0 0 3px hsl(var(--background));
}
.bs-timeline .yr {
    font-family: var(--font-display); font-size: 1.25rem; font-weight: 600;
    color: hsl(var(--gold)); letter-spacing: 0.04em;
    font-variant-numeric: tabular-nums; line-height: 1.4;
}
.bs-timeline .tx { display: block; }
.bs-timeline .t {
    display: block; font-family: var(--font-display);
    font-size: 1.0625rem; font-weight: 600; color: hsl(var(--foreground));
}
.bs-timeline .d {
    display: block; margin-top: 0.375rem;
    font-size: var(--fs-sm); line-height: 1.85; color: hsl(var(--muted-foreground));
}
.bs-monument-facts {
    margin-top: clamp(1.75rem, 4vw, 2.75rem);
    border-top: 1px solid hsl(var(--border));
}
.bs-monument-facts .r {
    display: flex; justify-content: space-between; align-items: baseline;
    gap: 1rem; padding: 0.9375rem 0.25rem;
    border-bottom: 1px solid hsl(var(--border));
}
.bs-monument-facts .k { font-size: var(--fs-sm); color: hsl(var(--muted-foreground)); letter-spacing: 0.08em; }
.bs-monument-facts .v {
    font-family: var(--font-display); font-size: 1rem; font-weight: 600;
    color: hsl(var(--foreground)); text-align: right;
}

/* --- 08 人文：六条文化坐标 + 散文段 --- */
.bs-culture { margin-top: clamp(2rem, 5vw, 3.5rem); }
.bs-culture.has-media {
    display: grid; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
    gap: clamp(1.75rem, 4vw, 3.5rem); align-items: start;
}
.bs-culture-media { margin: 0; }
.bs-culture-media img { width: 100%; height: auto; display: block; aspect-ratio: 4 / 5; object-fit: cover; }
.bs-culture-life {
    margin-top: clamp(2.25rem, 5vw, 3.5rem);
    padding: clamp(1.75rem, 4vw, 2.75rem) clamp(1.5rem, 4vw, 3rem);
    border: 1px solid hsl(var(--border));
    border-left: 2px solid hsl(var(--gold));
    background: hsl(var(--gold) / 0.03);
}
.bs-culture-life-t {
    margin: 0; font-family: var(--font-display);
    font-size: clamp(1.125rem, 2.2vw, 1.375rem); font-weight: 600;
    color: hsl(var(--foreground)); letter-spacing: 0.01em;
}
.bs-culture-life-d {
    margin: 0.875rem 0 0; max-width: 52rem;
    font-size: var(--fs-base); line-height: 2.05;
    color: hsl(var(--muted-foreground));
}

/* --- 响应式：与本页既有断点(900 / 640)保持一致 --- */
@media (max-width: 900px) {
    .bs-terrain.has-media,
    .bs-monument.has-media,
    .bs-culture.has-media { grid-template-columns: minmax(0, 1fr); }
    .bs-terrain-media .frame img,
    .bs-monument-media img,
    .bs-culture-media img { aspect-ratio: 16 / 10; }
    .bs-culture.has-media .bs-culture-media { order: -1; }
}
@media (max-width: 640px) {
    .bs-terrain-list li,
    .bs-culture-list li { grid-template-columns: 2.25rem minmax(0, 1fr); padding: 1.125rem 0.25rem; }
    .bs-timeline li { grid-template-columns: minmax(0, 1fr); gap: 0.25rem; }
    .bs-timeline .yr { font-size: 1.125rem; }
    .bs-monument-facts .r { flex-direction: column; gap: 0.25rem; }
    .bs-monument-facts .v { text-align: left; }
    .bs-pullquote { padding-top: 1.5rem; }
}

/* ==========================================================================
   VISIT 页扩建（2026-09-17）：楼层导览 / 品牌 A-Z / 礼宾预约
   --------------------------------------------------------------------------
   沿用全站设计语言：发丝线作结构、金色只用于序号/分隔线/焦点态/选中态、
   var(--ease-lux) 统一缓动、clamp() 做响应式量级。
   渐进增强：楼层面板默认全部平铺可见（无 JS 也能读全信息），
   仅在 <html> 带 .js 类时才收敛为「点选单层」——.js 由 brand_page.php 头部写入。
   ========================================================================== */

/* ---------- 03 楼层导览 ---------- */
.bs-floorguide {
    display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
    gap: clamp(1.75rem, 4vw, 3.5rem); align-items: start;
    margin-top: clamp(2.25rem, 5vw, 3.5rem);
}
/* 2026-09-18 修复：选择器必须限定直接子级，避免把行内小图标拉伸到 width:100% */
.bs-fg-svg > svg { width: 100%; height: auto; display: block; overflow: visible; }
/* 「点选楼层查看详情」提示已删（2026-09-18 客户反馈多余），.bs-fg-hint 样式随之下线 */

/* SVG 内部：地面线（2026-09-18 起标签为「1号门 解放碑」，左端立纪念碑 SVG）
   v10（同日，客户反馈珠点「怎么还是虚线」）：彻底去掉 dasharray，
   改为纯细实线 + #fgLineFade 两端渐隐（见 brands.php defs）——
   1.2px 金色发丝线，中段清晰、向两端淡出消失，无任何虚线质感 */
.fg-ground {
    stroke: url(#fgLineFade); stroke-width: 1.2;
    transition: stroke-width 0.45s var(--ease-lux), filter 0.45s var(--ease-lux), opacity 0.45s var(--ease-lux);
}
/* 2026-09-18 v11（客户要求横线「跟着点击/选择楼层有动效变化」）：
   选中层板底的线加 .is-lit——加粗一档 + 金色柔光，与楼层板选中态同呼吸；
   切换瞬间由 visit.js 重触发 .is-pulse 光晕脉冲（0.9s 闪亮后落回常亮） */
.fg-ground.is-lit { stroke-width: 1.8; filter: drop-shadow(0 0 5px hsl(var(--gold) / 0.4)); }
.fg-ground.is-pulse, .fg-metro-line.is-pulse { animation: fgLinePulse 0.9s var(--ease-lux); }
@keyframes fgLinePulse {
    0%   { filter: drop-shadow(0 0 0 hsl(var(--gold) / 0)); }
    35%  { filter: drop-shadow(0 0 10px hsl(var(--gold) / 0.8)); }
    100% { filter: drop-shadow(0 0 5px hsl(var(--gold) / 0.4)); }
}
@media (prefers-reduced-motion: reduce) {
    .fg-ground.is-pulse, .fg-metro-line.is-pulse { animation: none; }
}
/* 解放碑纪念碑：方尖碑身（金色淡填充 + 金描边）+ 加粗基座线，立于地面虚线左端 */
.fg-monument path {
    fill: hsl(var(--gold) / 0.16);
    stroke: hsl(var(--gold) / 0.85); stroke-width: 1; stroke-linejoin: round;
}
.fg-mon-base { stroke: hsl(var(--gold) / 0.85); stroke-width: 2; }
.fg-ground-lb {
    fill: hsl(var(--muted-foreground)); font-size: 10.5px; letter-spacing: 2px;
    font-family: var(--font-sans);
}
/* SVG 内部：楼层板（2026-09-18 高级化重做，客户反馈「样式劣质感、楼层没有放大」）
   · 选中层整块放大跳出（scale 1.07，transform-box:fill-box 以自身中心缩放），
     金色渐变底 + 金色描边 + 柔光投影，在剖面上形成明确的「当前层」体积感
   · 悬停层轻微放大 + 淡金染色，给出即时可点反馈
   · 所有变换走 var(--ease-lux) 缓动，与全站动效同一呼吸 */
.fg-slab {
    cursor: pointer;
    transform-box: fill-box; transform-origin: center;
    transition: transform 0.45s var(--ease-lux);
}
/* 2026-09-18 v8：楼板拆成填充 .fg-slab-bg + 描边 .fg-slab-edge 两笔，
   描边路径顶边在层号处断开留口，边框线不再横穿楼层大字（见 brands.php） */
.fg-slab .fg-slab-bg {
    fill: hsl(var(--card)); stroke: none;
    transition: fill 0.4s var(--ease-lux);
}
.fg-slab .fg-slab-edge {
    fill: none; stroke: hsl(var(--border)); stroke-width: 1;
    transition: stroke 0.4s var(--ease-lux);
}
.fg-slab:hover { transform: scale(1.025); }
.fg-slab:hover .fg-slab-bg { fill: hsl(var(--gold) / 0.07); }
.fg-slab:hover .fg-slab-edge { stroke: hsl(var(--gold) / 0.55); }
.fg-slab.is-active {
    transform: scale(1.07);
    filter: drop-shadow(0 3px 14px hsl(var(--gold) / 0.28));
}
.fg-slab.is-active .fg-slab-bg { fill: hsl(var(--gold) / 0.16); }
.fg-slab.is-active .fg-slab-edge { stroke: hsl(var(--gold)); stroke-width: 1.5; }
/* 键盘焦点态：金色双线，绝不 outline:none（全站无障碍纪律） */
.fg-slab:focus { outline: none; }
.fg-slab:focus-visible .fg-slab-edge { stroke: hsl(var(--gold-bright)); stroke-width: 2; stroke-dasharray: 3 2; }
/* 2026-09-18 客户反馈「文字看不清」：SVG 内全部字号整体上调
   （业态/设施 9.5→11.5），配合板高 42→52。
   v8（同日，客户要求「楼层的字大一些」）：楼层号 32px（选中 34px），板内左缘
   x=SLAB_X+20、基线 y+12，字形上半部从顶边断口穿出楼板；行距 80 留 28px 板间隙，
   虚线贴板底 +5px 不被大字压到；overflow:visible 保证不被裁切 */
.fg-lb {
    fill: hsl(var(--foreground)); font-family: var(--font-display);
    font-size: 32px; font-weight: 600; letter-spacing: 1px;
    transition: fill 0.4s var(--ease-lux), font-size 0.4s var(--ease-lux);
}
.fg-slab.is-active .fg-lb { fill: hsl(var(--gold)); font-size: 34px; }
/* .fg-lb-line 已下线（2026-09-18 v5：站牌横线/括号客户澄清为示意边框，不渲染） */
/* 2026-09-18：楼层板右侧由「N 个品牌」计数改为业态短文案（原 .fg-ct 废弃） */
.fg-mix { fill: hsl(var(--muted-foreground)); font-family: var(--font-sans); font-size: 11.5px; letter-spacing: 0.5px; }
.fg-fac { fill: hsl(var(--gold) / 0.85); font-family: var(--font-sans); font-size: 11.5px; letter-spacing: 1px; }
/* SVG 内部：设施小图标（2026-09-18 客户要求：B1 轨道图标、B2 停车场图标；
   v2 移至剖面左边栏，与解放碑纪念碑同排布，不在楼层按钮内）
   金色细线勾勒，与 .fg-fac 设施文字同一色彩层级；.fill 为实心细节（车窗/车轮），
   .p 为停车场 P 字（衬线字体、金色实心） */
.fg-icon rect, .fg-icon line { fill: none; stroke: hsl(var(--gold) / 0.85); stroke-width: 1.25; }
.fg-icon .fill { fill: hsl(var(--gold) / 0.85); stroke: none; }
.fg-icon text.p {
    fill: hsl(var(--gold) / 0.9); stroke: none;
    font-family: var(--font-display); font-size: 12.5px; font-weight: 700;
}
/* SVG 内部：轨道直通标记（v10 与地面线同款渐隐实线，层级比地面线淡一档） */
.fg-metro-line {
    stroke: url(#fgLineFade); stroke-width: 1;
    opacity: 0.75;
    transition: stroke-width 0.45s var(--ease-lux), filter 0.45s var(--ease-lux), opacity 0.45s var(--ease-lux);
}
/* v11：选中 B1/B2 时对应轨道线点亮（回到满不透明 + 加粗 + 金光） */
.fg-metro-line.is-lit { stroke-width: 1.5; opacity: 1; filter: drop-shadow(0 0 5px hsl(var(--gold) / 0.4)); }
.fg-metro-dot { fill: hsl(var(--gold)); }
.fg-metro-lb {
    fill: hsl(var(--gold)); font-family: var(--font-display);
    font-size: 12px; font-weight: 600; letter-spacing: 1px;
}

/* 楼层详情面板（2026-09-18 高级化：客户反馈「右侧上下底部的横条不好看，
   和每个品牌底部的横条冲突」——去掉容器上下横线，层级靠留白与字号建立，
   品牌行横线也一并撤掉，改悬停淡金染色） */
.bs-fg-panels { position: relative; }
.bs-floor-panel { padding: 0.5rem 0.25rem 1.5rem; }
/* 有 JS 时收敛为单层显示；无 JS 时全部楼层平铺，信息不丢 */
.js .bs-floor-panel { display: none; }
.js .bs-floor-panel.is-active { display: block; }
.bs-fp-head { display: flex; align-items: baseline; flex-wrap: wrap; gap: 0.75rem; }
.bs-fp-id {
    font-family: var(--font-display); font-size: clamp(1.75rem, 4vw, 2.5rem);
    font-weight: 600; color: hsl(var(--gold)); letter-spacing: 0.02em; line-height: 1;
}
.bs-fp-facs { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.bs-fp-fac {
    font-size: var(--fs-xs); letter-spacing: 0.06em; padding: 0.2rem 0.6rem;
    border: 1px solid hsl(var(--gold) / 0.4); color: hsl(var(--gold));
    border-radius: 999px; white-space: nowrap;
}
.bs-fp-label {
    margin-top: 1.5rem; font-size: var(--fs-xs); letter-spacing: 0.14em;
    text-transform: uppercase; color: hsl(var(--muted-foreground));
}
/* 面板业态行（2026-09-18）：与关于我们页 about.floor.* 同一文案 */
.bs-fp-mix {
    margin-top: 0.6rem; font-size: var(--fs-sm); line-height: 1.8;
    color: hsl(var(--muted-foreground)); letter-spacing: 0.02em;
}
.bs-fp-brands {
    list-style: none; margin: 0.75rem 0 0; padding: 0;
    display: grid; grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr)); gap: 0.5rem 1.25rem;
}
/* 2026-09-18 客户要求恢复品牌行下划线（上一轮高级化时误删）；
   悬停淡金染色保留，容器上下横条仍按客户此前要求不加回 */
.bs-fp-brands li {
    display: flex; justify-content: space-between; align-items: baseline; gap: 0.75rem;
    padding: 0.55rem 0.6rem; border-bottom: 1px solid hsl(var(--border));
    transition: background 0.35s var(--ease-lux);
}
.bs-fp-brands li:hover { background: hsl(var(--gold) / 0.06); }
.bs-fp-brands .n { font-size: var(--fs-sm); color: hsl(var(--foreground)); }
/* 品牌名为弹框触发按钮（2026-09-18）：外观保持正文样式，仅交互态提示可点 */
.bs-fp-open {
    background: none; border: 0; padding: 0; margin: 0; cursor: pointer;
    font: inherit; font-size: var(--fs-sm); color: hsl(var(--foreground));
    text-align: left; transition: color 0.3s var(--ease-lux);
}
.bs-fp-open:hover, .bs-fp-open:focus-visible { color: hsl(var(--gold)); }
.bs-fp-brands .s {
    font-family: var(--font-mono); font-size: var(--fs-xs);
    color: hsl(var(--muted-foreground)); white-space: nowrap;
}
.bs-fp-none { margin: 0.75rem 0 0; font-size: var(--fs-sm); color: hsl(var(--muted-foreground)); line-height: 1.9; }

/* ---------- 04 品牌 A-Z ---------- */
.bs-az-tools {
    display: flex; flex-wrap: wrap; align-items: flex-end; gap: 1rem 1.5rem;
    margin-top: clamp(2rem, 4vw, 3rem); padding-bottom: 1.25rem;
    border-bottom: 1px solid hsl(var(--border));
}
.bs-az-search, .bs-az-filter { display: flex; flex-direction: column; gap: 0.4rem; }
.bs-az-search label, .bs-az-filter label {
    display: flex; align-items: center; gap: 0.35rem;
    font-size: var(--fs-xs); letter-spacing: 0.12em; text-transform: uppercase;
    color: hsl(var(--muted-foreground));
}
.bs-az-search label svg, .bs-az-filter label svg { color: hsl(var(--gold)); }
.bs-az-search input, .bs-az-filter select {
    font-family: var(--font-sans); font-size: var(--fs-sm);
    color: hsl(var(--foreground)); background: hsl(var(--card));
    border: 1px solid hsl(var(--border)); border-radius: var(--radius);
    padding: 0.6rem 0.85rem; min-width: 13rem;
    transition: border-color 0.3s var(--ease-lux), box-shadow 0.3s var(--ease-lux);
}
.bs-az-search input:focus, .bs-az-filter select:focus {
    outline: none; border-color: hsl(var(--gold));
    box-shadow: 0 0 0 3px hsl(var(--gold) / 0.16);
}
.bs-az-count {
    margin-left: auto; font-family: var(--font-display); font-size: var(--fs-sm);
    color: hsl(var(--muted-foreground)); letter-spacing: 0.06em;
    font-variant-numeric: tabular-nums;
}
.bs-az { margin-top: 1.5rem; }
.bs-az-group { display: grid; grid-template-columns: 3.5rem minmax(0, 1fr); gap: clamp(1rem, 3vw, 2.5rem); }
.bs-az-group.is-hidden { display: none; }
.bs-az-letter {
    font-family: var(--font-display); font-size: clamp(1.5rem, 3.4vw, 2.125rem);
    font-weight: 600; color: hsl(var(--gold)); line-height: 1.35;
    border-top: 1px solid hsl(var(--border)); padding-top: 0.5rem;
}
.bs-az-items {
    list-style: none; margin: 0; padding: 0;
    border-top: 1px solid hsl(var(--border));
    display: grid; grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr)); gap: 0 1.75rem;
}
.bs-az-item {
    display: flex; align-items: center; gap: 0.875rem;
    padding: 0.875rem 0.25rem; border-bottom: 1px solid hsl(var(--border));
    transition: background 0.4s var(--ease-lux), padding-left 0.4s var(--ease-lux);
}
.bs-az-item:hover { background: hsl(var(--gold) / 0.045); padding-left: 0.6rem; }
.bs-az-item.is-hidden { display: none; }
/* 2026-09-18：LOGO 移入弹框展示，列表不再出现（客户要求），原 .bs-az-logo 规则废弃移除 */
.bs-az-body { min-width: 0; }
/* 品牌名按钮：触发信息弹框，外观保持既有 .bs-az-name 排版 */
.bs-az-open {
    background: none; border: 0; padding: 0; margin: 0; cursor: pointer;
    font: inherit; text-align: left; display: inline-flex; align-items: center;
    flex-wrap: wrap; gap: 0.35rem; max-width: 100%;
}
.bs-az-open .bs-az-name { transition: color 0.3s var(--ease-lux); }
.bs-az-open:hover .bs-az-name, .bs-az-open:focus-visible .bs-az-name { color: hsl(var(--gold)); }
.bs-az-name {
    display: block; font-family: var(--font-display); font-size: 1rem; font-weight: 600;
    color: hsl(var(--foreground)); letter-spacing: 0.01em;
}
.bs-az-meta {
    display: block; margin-top: 0.2rem; font-size: var(--fs-xs);
    color: hsl(var(--muted-foreground)); letter-spacing: 0.04em;
}
.bs-az-sep { margin: 0 0.3rem; opacity: 0.5; }
.bs-az-empty, .bs-az-none {
    display: flex; align-items: center; justify-content: center; gap: 0.5rem;
    padding: clamp(2.5rem, 7vw, 4.5rem) 1rem; text-align: center;
    font-size: var(--fs-base); color: hsl(var(--muted-foreground)); line-height: 1.9;
}
.bs-az-empty svg { color: hsl(var(--gold)); }
/* 2026-09-18 修复：上方 display:flex 覆盖了 hidden 属性的 UA 默认 display:none，
   导致「未找到匹配的品牌」常驻显示。显式补回。 */
.bs-az-empty[hidden] { display: none; }

/* ---------- 05 礼宾预约 ---------- */
.bs-con-wrap {
    display: grid; grid-template-columns: minmax(0, 4fr) minmax(0, 8fr);
    gap: clamp(2rem, 5vw, 4rem); align-items: start;
}
.bs-con-svcs {
    list-style: none; margin: 2rem 0 0; padding: 0;
    display: grid; gap: 0.625rem;
}
.bs-con-svcs li {
    display: flex; align-items: center; gap: 0.6rem;
    font-size: var(--fs-sm); color: hsl(40 15% 78%); letter-spacing: 0.03em;
}
.bs-con-svcs svg { color: hsl(var(--gold-bright)); flex: 0 0 auto; }
.bs-con-formbox {
    background: hsl(45 14% 13%); border: 1px solid hsl(40 20% 90% / 0.14);
    border-radius: var(--radius); padding: clamp(1.5rem, 3.5vw, 2.5rem);
}
.bs-con-msg {
    display: flex; align-items: flex-start; gap: 0.6rem;
    padding: 0.875rem 1rem; margin-bottom: 1.5rem; border-radius: var(--radius);
    font-size: var(--fs-sm); line-height: 1.75;
}
.bs-con-msg svg { flex: 0 0 auto; margin-top: 0.15rem; }
.bs-con-msg.is-ok { background: hsl(var(--gold) / 0.14); color: hsl(var(--gold-bright)); border: 1px solid hsl(var(--gold) / 0.4); }
.bs-con-msg.is-bad { background: hsl(4 55% 45% / 0.16); color: hsl(4 70% 76%); border: 1px solid hsl(4 55% 45% / 0.4); }
.bs-con-form { display: grid; gap: 1.125rem; }
.bs-con-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr)); gap: 1.125rem; }
.bs-con-f { display: flex; flex-direction: column; gap: 0.4rem; min-width: 0; }
.bs-con-f-sm { max-width: 8rem; }
.bs-con-f label {
    font-size: var(--fs-xs); letter-spacing: 0.12em; text-transform: uppercase;
    color: hsl(40 15% 68%);
}
.bs-con-f label em { font-style: normal; color: hsl(var(--gold)); letter-spacing: 0.04em; text-transform: none; }
.bs-con-f input, .bs-con-f select, .bs-con-f textarea {
    font-family: var(--font-sans); font-size: var(--fs-sm); color: hsl(40 25% 94%);
    background: hsl(45 14% 9%); border: 1px solid hsl(40 20% 90% / 0.18);
    border-radius: var(--radius); padding: 0.7rem 0.85rem; width: 100%;
    transition: border-color 0.3s var(--ease-lux), box-shadow 0.3s var(--ease-lux);
}
.bs-con-f textarea { resize: vertical; min-height: 5rem; line-height: 1.8; }
.bs-con-f select { appearance: none; cursor: pointer; }
.bs-con-f input:focus, .bs-con-f select:focus, .bs-con-f textarea:focus {
    outline: none; border-color: hsl(var(--gold));
    box-shadow: 0 0 0 3px hsl(var(--gold) / 0.2);
}
.bs-con-f.is-error input, .bs-con-f.is-error select, .bs-con-f.is-error textarea { border-color: hsl(4 60% 55%); }
.bs-con-err { font-size: var(--fs-xs); color: hsl(4 70% 72%); letter-spacing: 0.02em; }
.bs-con-hint {
    display: flex; align-items: center; gap: 0.4rem; margin: -0.5rem 0 0;
    font-size: var(--fs-xs); color: hsl(40 15% 60%); letter-spacing: 0.03em;
}
.bs-con-hint svg { color: hsl(var(--gold) / 0.8); flex: 0 0 auto; }
.bs-con-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 1.25rem; margin-top: 0.5rem; }
.bs-con-privacy {
    margin: 0; flex: 1 1 16rem; font-size: var(--fs-xs); line-height: 1.8;
    color: hsl(40 15% 58%);
}
/* honeypot：移出视口而非 display:none（部分脚本会跳过 display:none 字段） */
.bs-con-hp { position: absolute !important; left: -9999px !important; width: 1px; height: 1px; overflow: hidden; }

/* ---------- 响应式（与本页既有断点 900 / 640 一致） ---------- */
@media (max-width: 900px) {
    .bs-floorguide, .bs-con-wrap { grid-template-columns: minmax(0, 1fr); }
    .bs-az-group { grid-template-columns: 2.5rem minmax(0, 1fr); }
    .bs-az-count { margin-left: 0; width: 100%; }
}
@media (max-width: 640px) {
    .bs-az-search input, .bs-az-filter select { min-width: 0; width: 100%; }
    .bs-az-search, .bs-az-filter { flex: 1 1 100%; }
    .bs-az-items { grid-template-columns: minmax(0, 1fr); }
    .bs-fp-brands { grid-template-columns: minmax(0, 1fr); }
    .bs-con-f-sm { max-width: none; }
    .bs-fg-hint { font-size: 10px; }
}

/* ==========================================================================
   VISIT 页样式修正（2026-09-18）
   --------------------------------------------------------------------------
   修正两处实测缺陷，并补「维护中」状态样式：
   1) 品牌 LOGO 盒原为 2.75rem 正方形，但实测素材宽高比从 1.8:1(rolex)
      到 10.5:1(armani 525×50)、10.25:1(saintlaurent 574×56) 悬殊；
      在正方形盒内 object-fit:contain 会把宽幅字标压成约 44×4px，几乎不可见。
      改为宽幅盒，让字标与方形标都能按各自比例完整显示。
   2) brands.floor 全空时，10 个交互面板全是空态、且默认选中层用了
      is-default 类而 CSS/JS 用的是 is-active，导致选中态从未高亮。
      模板已改为无数据时不渲染交互面板（见 .bs-fg-maint），并统一用 is-active。
   ========================================================================== */

/* --- 修正 1（已废弃 2026-09-18 第二轮）：LOGO 移入弹框展示，列表 logo 盒规则移除；
   弹框内 .bs-modal-logo 为固定浅底衬宽幅砖，天然适配 10:1 字标与方形标 --- */
.bs-az-item { align-items: center; }

/* --- 修正 2a：无楼层数据时 SVG 不作可交互控件呈现 --- */
.bs-floorguide.is-static .fg-slab { cursor: default; }
.bs-floorguide.is-static .fg-slab:hover .fg-slab-bg { fill: hsl(var(--card)); }
.bs-floorguide.is-static .fg-slab:hover .fg-slab-edge { stroke: hsl(var(--border)); }

/* --- 修正 2b：维护中状态块（替代 10 个空面板）--- */
.bs-fg-maint {
    border: 1px solid hsl(var(--border)); border-radius: var(--radius);
    padding: clamp(1.5rem, 3.5vw, 2.25rem);
    background: hsl(var(--card));
    align-self: start;
}
.bs-fg-maint-badge {
    display: inline-flex; align-items: center; gap: 0.4rem;
    font-size: var(--fs-xs); letter-spacing: 0.14em; text-transform: uppercase;
    color: hsl(var(--gold)); border: 1px solid hsl(var(--gold) / 0.4);
    border-radius: 999px; padding: 0.25rem 0.75rem;
}
.bs-fg-maint-title {
    margin: 1.25rem 0 0; font-family: var(--font-display);
    font-size: clamp(1.25rem, 2.6vw, 1.625rem); font-weight: 600;
    color: hsl(var(--foreground)); line-height: 1.5; letter-spacing: 0.01em;
}
.bs-fg-maint-body {
    margin: 0.875rem 0 0; font-size: var(--fs-sm); line-height: 2;
    color: hsl(var(--muted-foreground));
}
.bs-fg-maint-label {
    margin-top: 1.75rem; padding-top: 1.25rem;
    border-top: 1px solid hsl(var(--border));
    font-size: var(--fs-xs); letter-spacing: 0.14em; text-transform: uppercase;
    color: hsl(var(--muted-foreground));
}
.bs-fg-faclist { list-style: none; margin: 0.875rem 0 0; padding: 0; }
.bs-fg-faclist li {
    display: flex; align-items: baseline; gap: 1rem;
    padding: 0.75rem 0.25rem; border-bottom: 1px solid hsl(var(--border));
}
.bs-fg-faclist .id {
    flex: 0 0 3rem; font-family: var(--font-display);
    font-size: 1.0625rem; font-weight: 600; color: hsl(var(--gold));
    letter-spacing: 0.04em;
}
.bs-fg-faclist .fac { display: flex; flex-wrap: wrap; gap: 0.4rem 0.75rem; }
.bs-fg-faclist .fac span {
    font-size: var(--fs-sm); color: hsl(var(--foreground)); letter-spacing: 0.02em;
}
.bs-fg-faclist .fac span::before {
    content: '·'; margin-right: 0.5rem; color: hsl(var(--gold)); opacity: 0.7;
}

/* --- A-Z 楼层说明（无楼层数据时整块一句，替代逐条「待分配」）--- */
.bs-az-nofloor {
    display: flex; align-items: center; gap: 0.5rem;
    margin: 1.25rem 0 0; font-size: var(--fs-sm); line-height: 1.8;
    color: hsl(var(--muted-foreground));
}
.bs-az-nofloor svg { color: hsl(var(--gold)); flex: 0 0 auto; }

@media (max-width: 900px) {
    .bs-fg-maint { margin-top: 0.5rem; }
}
@media (max-width: 640px) {
    .bs-az-item { gap: 0.625rem; }
    .bs-fg-faclist li { flex-direction: column; gap: 0.25rem; }
    .bs-fg-faclist .id { flex: 0 0 auto; }
}

/* ==========================================================================
   2026-09-18 · 品牌独立页（?action=brands）
   --------------------------------------------------------------------------
   品牌内容从到访页拆出：楼层导览与 A-Z 名录整体迁移（样式沿用既有类），
   本段覆盖：
   1) .bs-az-status     「即将开业」徽标（A-Z 名录 / 楼层面板 / 弹框共用）
   2) .bs-modal*        品牌信息弹框（替代上一版 details 下拉展开——客户反馈
                        下拉不专业；LOGO 也改为只在弹框内显示）+ 弹框门店照片
   （原 3) .bs-brands-cta 到访页入口条已按客户要求于同日删除，样式一并移除）
   上一版的 .bs-az-logo 宽幅盒与 .bs-az-more details 样式已随功能废弃移除。
   ========================================================================== */

/* --- 1) 即将开业徽标 --- */
.bs-az-status {
    display: inline-block; vertical-align: 0.15em;
    font-family: var(--font-body); font-size: 10px; font-weight: 500;
    letter-spacing: 0.12em; line-height: 1;
    color: hsl(var(--gold)); border: 1px solid hsl(var(--gold) / 0.45);
    border-radius: 999px; padding: 0.28em 0.7em; white-space: nowrap;
}
.bs-az-open .bs-az-status { margin-left: 0.15rem; }

/* --- 2) 品牌信息弹框 --- */
html.modal-open { overflow: hidden; }   /* 打开期间锁定页面滚动 */
.bs-modal {
    position: fixed; inset: 0; z-index: 120;
    display: grid; place-items: center; padding: clamp(1rem, 4vw, 2.5rem);
    opacity: 0; transition: opacity 0.3s var(--ease-lux);
}
.bs-modal.is-open { opacity: 1; }
.bs-modal[hidden] { display: none; }
.bs-modal-backdrop {
    position: absolute; inset: 0; cursor: pointer;
    background: hsl(0 0% 4% / 0.72);
    backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);
}
.bs-modal-card {
    position: relative; width: min(40rem, 100%); max-height: min(84vh, 46rem);
    display: flex; flex-direction: column;
    background: hsl(var(--card)); border: 1px solid hsl(var(--gold) / 0.25);
    border-radius: var(--radius); box-shadow: 0 24px 80px hsl(0 0% 0% / 0.5);
    transform: translateY(14px); transition: transform 0.3s var(--ease-lux);
}
.bs-modal.is-open .bs-modal-card { transform: translateY(0); }
.bs-modal-x {
    position: absolute; top: 0.75rem; right: 0.75rem; z-index: 1;
    display: grid; place-items: center; width: 2.25rem; height: 2.25rem;
    background: none; border: 1px solid hsl(var(--border)); border-radius: 999px;
    color: hsl(var(--muted-foreground)); cursor: pointer;
    transition: color 0.3s var(--ease-lux), border-color 0.3s var(--ease-lux);
}
.bs-modal-x:hover, .bs-modal-x:focus-visible { color: hsl(var(--gold)); border-color: hsl(var(--gold) / 0.5); }
.bs-modal-body { overflow-y: auto; padding: clamp(1.5rem, 4vw, 2.25rem); }
.bs-modal-head { display: flex; align-items: center; gap: clamp(1rem, 3vw, 1.5rem); }
/* LOGO 砖：固定浅底衬，深浅主题下透明/白底 logo 都可辨 */
.bs-modal-logo {
    flex: 0 0 auto; width: 7.5rem; height: 4.5rem;
    display: grid; place-items: center; padding: 0.6rem;
    background: hsl(40 20% 97%); border: 1px solid hsl(var(--border));
    border-radius: var(--radius);
}
.bs-modal-logo img { max-width: 100%; max-height: 100%; width: auto; height: auto; object-fit: contain; }
.bs-modal-titles { min-width: 0; }
.bs-modal-titles h3 {
    font-family: var(--font-display); font-size: clamp(1.25rem, 3vw, 1.625rem);
    font-weight: 600; color: hsl(var(--foreground)); letter-spacing: 0.01em; line-height: 1.4;
}
.bs-modal-alt {
    margin: 0.25rem 0 0; font-size: var(--fs-sm); letter-spacing: 0.06em;
    color: hsl(var(--muted-foreground));
}
.bs-modal-titles .bs-az-status { margin-top: 0.5rem; }
.bs-modal-facts {
    display: grid; grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr));
    gap: 0.75rem 1.5rem; margin: 1.5rem 0 0; padding: 1.25rem 0 0;
    border-top: 1px solid hsl(var(--border));
}
.bs-modal-facts dt {
    font-size: var(--fs-xs); letter-spacing: 0.12em; text-transform: uppercase;
    color: hsl(var(--muted-foreground));
}
.bs-modal-facts dd { margin: 0.3rem 0 0; font-size: var(--fs-sm); color: hsl(var(--foreground)); }
.bs-modal-facts a { color: hsl(var(--gold)); text-decoration: none; }
.bs-modal-facts a:hover { text-decoration: underline; }
.bs-modal-intro {
    margin: 1.5rem 0 0; padding-top: 1.25rem;
    border-top: 1px solid hsl(var(--border));
    font-size: var(--fs-sm); line-height: 2; color: hsl(var(--muted-foreground));
}
@media (max-width: 560px) {
    .bs-modal-head { flex-direction: column; align-items: flex-start; }
    .bs-modal-logo { width: 6.5rem; height: 3.75rem; }
}

/* --- 3) 弹框内门店照片（2026-09-18：后台品牌管理上传，有图才渲染） --- */
.bs-modal-photos { margin-top: 1.5rem; padding-top: 1.25rem; border-top: 1px solid hsl(var(--border)); }
.bs-modal-photos-label {
    font-size: var(--fs-xs); letter-spacing: 0.12em; text-transform: uppercase;
    color: hsl(var(--muted-foreground)); margin-bottom: 0.75rem;
}
/* 2026-09-18 v2：固定三列等宽瓦片（窄屏两列）。此前 auto-fill 的空轨道也参与
   分宽，照片少时大小不一；叠加 bm-grad 的单图放大规则后多图品牌又变单列竖排
   ——即客户反馈的「大小和排布都乱了」。固定列数保证任何张数下瓦片尺寸一致。 */
.bs-modal-photos-grid {
    display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.6rem;
}
@media (max-width: 560px) {
    .bs-modal-photos-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
.bs-modal-photos-grid a {
    display: block; overflow: hidden; border-radius: var(--radius);
    border: 1px solid hsl(var(--border)); aspect-ratio: 4 / 3;
}
.bs-modal-photos-grid img {
    width: 100%; height: 100%; object-fit: cover; display: block;
    transition: transform 0.5s var(--ease-lux);
}
.bs-modal-photos-grid a:hover img { transform: scale(1.04); }

/* --- 4) 门头照片栏头横幅（2026-09-18 v2，客户反馈「渐变门头照片效果还是没有」） ---
   有门店照片的品牌：visit.js 给 .bs-modal-card 加 .bm-hero 并把首图写入
   --bm-hero-img。照片清晰铺在弹框顶部横幅区（不模糊——旧 bm-grad 整卡
   模糊照片再压 0.8+ 深色遮罩，照片几乎不可见，读作纯色深底而非「门头照片
   渐变」，已整体废弃），底部经渐变淡出融入卡片底色，LOGO 与品牌名压在
   渐变带上；横幅以下正文保持正常卡片底色，深浅主题皆成立。
   无照片的品牌不加类，本节样式完全不生效。 */
.bs-modal-card.bm-hero {
    overflow: hidden;
    --bm-hero-h: clamp(9.5rem, 26vh, 12.5rem);
}
.bs-modal-card.bm-hero::before,
.bs-modal-card.bm-hero::after {
    content: ""; position: absolute; z-index: 0; pointer-events: none;
    top: 0; left: 0; right: 0; height: var(--bm-hero-h);
}
.bs-modal-card.bm-hero::before {
    background: var(--bm-hero-img) center 35% / cover no-repeat;
}
.bs-modal-card.bm-hero::after {
    background: linear-gradient(180deg,
        hsl(var(--card) / 0) 0%,
        hsl(var(--card) / 0.32) 48%,
        hsl(var(--card) / 0.86) 78%,
        hsl(var(--card)) 100%);
}
.bs-modal-card.bm-hero .bs-modal-body { position: relative; z-index: 1; padding-top: 0; }
.bs-modal-card.bm-hero .bs-modal-head {
    min-height: var(--bm-hero-h);
    align-items: flex-end;                 /* LOGO/品牌名沉到横幅底部的渐变带上 */
    padding: 1rem 0 0.25rem; box-sizing: border-box;
}
.bs-modal-card.bm-hero .bs-modal-x {
    z-index: 2; color: hsl(40 33% 96%);
    border-color: hsl(0 0% 100% / 0.4); background: hsl(0 0% 6% / 0.35);
}
.bs-modal-card.bm-hero .bs-modal-x:hover,
.bs-modal-card.bm-hero .bs-modal-x:focus-visible {
    color: hsl(var(--gold)); border-color: hsl(var(--gold) / 0.6);
}
@media (max-width: 560px) {
    .bs-modal-card.bm-hero { --bm-hero-h: 9rem; }
    /* 窄屏 head 为纵向堆叠：内容整体沉底、左对齐 */
    .bs-modal-card.bm-hero .bs-modal-head { justify-content: flex-end; align-items: flex-start; }
}

/* ---------- 图片灯箱（2026-09-18 客户要求：点击照片内嵌放大，替代新窗口） ----------
   挂钩 a[data-lbx]：品牌弹框门店照片 / 城市页光影画廊。z-index 300 压过
   品牌弹框（120），从弹框内点开时两层叠加成立；遮罩点击与 ESC 关闭由
   visit.js initLightbox() 驱动，无 JS 时链接仍新窗口打开原图（兜底）。 */
.bs-lbx {
    position: fixed; inset: 0; z-index: 300;
    display: grid; place-items: center; padding: clamp(1rem, 4vw, 3rem);
    background: hsl(0 0% 3% / 0.92);
    backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
    opacity: 0; transition: opacity 0.25s var(--ease-lux);
    cursor: zoom-out;
}
.bs-lbx.open { opacity: 1; }
.bs-lbx[hidden] { display: none; }
.bs-lbx-img {
    max-width: 100%; max-height: 100%; width: auto; height: auto;
    object-fit: contain; border-radius: 2px; cursor: default;
    box-shadow: 0 24px 80px hsl(0 0% 0% / 0.6);
}
.bs-lbx-x {
    position: absolute; top: 1rem; right: 1rem; z-index: 1;
    display: grid; place-items: center; width: 2.5rem; height: 2.5rem;
    background: hsl(0 0% 100% / 0.06); color: hsl(40 33% 96%);
    border: 1px solid hsl(40 30% 70% / 0.35); border-radius: 999px;
    font-size: 1rem; cursor: pointer;
    transition: color 0.3s var(--ease-lux), border-color 0.3s var(--ease-lux);
}
.bs-lbx-x:hover, .bs-lbx-x:focus-visible { color: hsl(var(--gold)); border-color: hsl(var(--gold) / 0.6); }

/* ---------- 沉浸式照片章（2026-09-18 客户要求：重庆景色底图上叠文字，更有意境） ----------
   三专题章（地貌/碑史/人文）有底图时挂 .bs-dark .bs-photo-chapter：
   照片铺满整章，双重渐变纱（纵向压深保对比 + 横向左侧压深迎文字）覆于其上，
   正文经 isolation/z-index 浮在纱上。.bs-dark 已提供标题/kicker/sub 浅色体系，
   本节只补清单/时间轴/事实行/散文段/引文的深色覆盖，并以纯色深底作图片加载前的垫底。 */
.bs-photo-chapter {
    background: hsl(222 38% 6%);
    position: relative; isolation: isolate; overflow: hidden;
}
.bs-pc-bg { position: absolute; inset: 0; z-index: -2; }
.bs-pc-bg img { width: 100%; height: 100%; object-fit: cover; object-position: center 45%; display: block; }
.bs-pc-scrim {
    position: absolute; inset: 0; z-index: -1;
    background:
        linear-gradient(180deg,
            hsl(222 40% 4% / 0.84) 0%,
            hsl(222 40% 5% / 0.62) 38%,
            hsl(222 40% 4% / 0.86) 100%),
        linear-gradient(90deg, hsl(222 40% 4% / 0.45) 0%, transparent 60%);
}
.bs-photo-chapter .container-brand { position: relative; z-index: 1; }
.bs-photo-chapter .bs-chapter-lead { color: hsl(40 16% 78%); }
/* 专题清单（地貌/人文共用皮肤）：发丝线换暖金淡色，悬停改白色微光 */
.bs-photo-chapter .bs-terrain-list,
.bs-photo-chapter .bs-culture-list { border-top-color: hsl(40 30% 70% / 0.25); }
.bs-photo-chapter .bs-terrain-list li,
.bs-photo-chapter .bs-culture-list li { border-bottom-color: hsl(40 30% 70% / 0.18); }
.bs-photo-chapter .bs-terrain-list li:hover,
.bs-photo-chapter .bs-culture-list li:hover { background: hsl(0 0% 100% / 0.06); }
.bs-photo-chapter .bs-terrain-list .k,
.bs-photo-chapter .bs-culture-list .k { color: hsl(40 26% 93%); }
.bs-photo-chapter .bs-terrain-list .v,
.bs-photo-chapter .bs-culture-list .v { color: hsl(40 16% 76%); }
/* 碑史时间轴：节点挖空色随深底，正文换浅色 */
.bs-photo-chapter .bs-timeline li + li { border-top-color: hsl(40 30% 70% / 0.18); }
.bs-photo-chapter .bs-timeline .dot { box-shadow: 0 0 0 3px hsl(222 38% 7%); }
.bs-photo-chapter .bs-timeline .t { color: hsl(40 26% 93%); }
.bs-photo-chapter .bs-timeline .d { color: hsl(40 16% 76%); }
.bs-photo-chapter .bs-monument-facts { border-top-color: hsl(40 30% 70% / 0.25); }
.bs-photo-chapter .bs-monument-facts .r { border-bottom-color: hsl(40 30% 70% / 0.18); }
.bs-photo-chapter .bs-monument-facts .k { color: hsl(40 16% 76%); }
.bs-photo-chapter .bs-monument-facts .v { color: hsl(40 26% 93%); }
/* 人文散文段：深色玻璃卡，与底图拉开一层 */
.bs-photo-chapter .bs-culture-life {
    background: hsl(222 38% 5% / 0.55);
    border-color: hsl(40 30% 70% / 0.22);
    border-left: 2px solid hsl(var(--gold));
    backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
}
.bs-photo-chapter .bs-culture-life-t { color: hsl(40 28% 94%); }
.bs-photo-chapter .bs-culture-life-d { color: hsl(40 16% 78%); }
/* 收束句 */
.bs-photo-chapter .bs-pullquote { color: hsl(40 24% 88%); }
