:root{
    --primary:#014DFF; --primary-hover:#0E42C4; --primary-light:#EAF2FF; --primary-soft:#F2F6FF;
    --accent:#FF6A00; --dark:#0F172A;
    --text:#1A1D23; --text-2:#667085; --text-3:#6B7280;
    --bg:#FFFFFF; --bg-2:#FAFBFC; --border:#E6E9EF; --divider:#EEF0F4;
    --font:Inter,-apple-system,"SF Pro Display","Segoe UI",system-ui,"PingFang SC","Microsoft YaHei",sans-serif;
    --mono:ui-monospace,"SF Mono","JetBrains Mono","Cascadia Code",Menlo,monospace;
    --ok:#16A34A; --warn:#F59E0B;
    /* v1.0.216：评价五星的颜色**收成令牌** ✓ —— 原来散在 `.t-card .stars{color:#B45309}` ✗
       ⇒ 现在改一处即可全站生效 ✓（评价区块与旧样板同源 ✓ 不会双份色值 ✗）*/
    --star:#B45309;
    /* 1400px 为目标宽；100% - 128px 保证左右始终留 64px 安全边（悬浮客服小组件默认态常见 56–64px，不会压住正文） */
    --max:min(1400px, 100% - 128px); --r:6px;
    /* 案例模块专用变量（统一到全局一处，替代 case.css 原有 :root，避免双份定义） */
    --primary-deep:#0033CC; --primary-tint:#E1EBFF; --ink-1:#0B1220; --text-sub:#4B5563; --text-weak:#98A2B3; --bg-sub:#F7F9FC; --accent-deep:#E65E00; --success:#10B981; --r-md:15px; --r-lg:25px;
    /* v1.0.83：列表卡封面统一比例 —— 案例卡 / 博客卡共用（场景式横图：现场照 / 配图）。
       容器消费 aspect-ratio，图片 object-fit:cover 等比裁切，无论上传图原始尺寸如何，
       前端封面高度完全一致（含无图兜底区）。移动端沿用同一比例。 */
    --cover-ratio: 16 / 9;
    /* v1.0.84：产品卡封面比例单独区分（主体式商品图：白底特写、主体占满画幅）——
       16/9 横向裁切会切掉商品主体上下边缘，4/3 更贴合商品图构图（亦为产品列表 v1.0.19 的原比例）。
       注意：产品卡出现在 6 处（列表 / 分类 / 产品搜索 / 详情相关推荐 / 搜索结果推荐 / 首页 flt/product-grid 区块），
       其中详情推荐与首页区块不在 .flt-product-list 作用域内 → 故必须按 .prod-card 组件级区分，不能挂容器作用域。 */
    --cover-ratio-product: 4 / 3;
  }
  *{margin:0;padding:0;box-sizing:border-box}
  html{scroll-behavior:smooth}
  body{font-family:var(--font);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;font-size:16px;line-height:1.7}
  a{color:var(--primary);text-decoration:none}
  .wrap{max-width:var(--max);margin:0 auto;padding:0 32px}
footer .wrap{padding:0}
  .mono{font-family:var(--mono)}
  /* 装饰：kicker 圆点 + halo（贯穿全站的最小装饰单元） */
  .kicker{display:inline-flex;align-items:center;gap:10px;font-family:var(--mono);font-size:12px;font-weight:600;letter-spacing:.08em;color:var(--primary)}
  .kicker::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--primary);box-shadow:0 0 0 4px rgba(1,77,255,.14)}
  .kicker .en{color:var(--text-3);font-weight:500;letter-spacing:.1em;text-transform:uppercase;margin-left:2px}

  /* ============ NAV（左对齐 + mega menu） ============ */
  /* v29 双态导航：初始透明融入 Hero（浅色 Hero，字色不变）；滚动即切 .nav-solid 恢复白底（阈值 10px，不做 hero 高度计算） */
  .nav{position:fixed;top:0;left:0;right:0;width:100%;z-index:200;background:transparent;border-bottom:1px solid transparent;backdrop-filter:none;-webkit-backdrop-filter:none;transform:translateZ(0);transition:background .25s ease,border-color .25s ease}
  /* 登录态：WP admin bar 高度 32px，导航整体下移避免被遮 */
  .admin-bar .nav{top:32px}
  /* v1.0.66：WP 移动端（≤782px）admin bar 高度是 46px（非桌面的 32px）——
     登录态下移动端 nav 只下移 32px 会被 admin bar 遮住顶部 14px */
  @media(max-width:782px){.admin-bar .nav{top:46px}}
  .nav.nav-solid{background:rgba(255,255,255,.92);backdrop-filter:saturate(180%) blur(12px);-webkit-backdrop-filter:saturate(180%) blur(12px);border-bottom-color:var(--border)}
  /* 导航全宽：.nav-bar 同时挂了 .wrap，会被 .wrap 的 max-width:var(--max)（1400px）居中限宽。
     这里用 max-width:100% 顶掉它（同为单类选择器，本规则位置在 .wrap 之后，顺序胜出）。
     只放开导航这一层，其余 .wrap 容器的 1400px 上限保持不变。 */
  .nav-bar{position:relative;display:flex;align-items:center;gap:36px;height:64px;padding:0 32px;max-width:100%}
  .logo{display:flex;align-items:center;gap:9px;font-size:16px;font-weight:700;letter-spacing:-.01em;color:var(--text);flex:0 0 auto;white-space:nowrap}
  /* v1.0.134：主导航 logo **防"窗口缩小被挤扁/变形"**（Boss 反馈）。
     背景：.logo 容器已 flex:0 0 auto ✓，但 WP 的 the_custom_logo() 会输出
     `<a class="custom-logo-link"><img class="custom-logo" …></a>` —— 这两层
     **此前都没有任何尺寸/收缩约束** ✗ ⇒ 窄窗口下被 flex 挤扁，或"max-width:100% + 固定高"
     把宽高比压歪 ✗。
     处理原则：① 图片与链接都不参与收缩（flex:0 0 auto）② 只给最大高度上限，
     宽高都 auto ⇒ **按原图比例自适应**，永不拉伸 ③ object-fit:contain 兜底 ✓ */
  .logo .custom-logo-link{display:inline-flex;align-items:center;flex:0 0 auto;min-width:0}
  .logo img{display:block;width:auto;height:auto;max-height:40px;max-width:100%;object-fit:contain;flex:0 0 auto}
  .logo .mark{font-family:var(--mono);font-size:12px;font-weight:700;color:var(--primary);border:1px solid var(--primary);border-radius:5px;padding:3px 6px;letter-spacing:0}
  /* 去掉 margin:0 auto：上一版把 nav-bar 全宽放开后，菜单被推到视口正中，两边空一大截，
     与左对齐+CTA 贴右的导航语义相违。改回 margin:0，菜单直接跟在 logo 后面。 */
  .menu{display:flex;align-items:stretch;gap:2px;align-self:stretch;margin:0}
  /* v0.5.14：普通 dropdown 需锚定到父级菜单项正下方，
     故 .menu-item 必须成为定位上下文（position:relative）。
     注意：这会连带改变 .mega 的锚点（原本靠全宽 .nav-bar 撑满），
     因此 .mega 在下方改为 position:fixed 锚视口（见 .mega 规则）。 */
  .menu-item{position:relative;display:flex}
  /* v1.0.134：加 white-space:nowrap（Boss 指定）—— 窄窗口下菜单项文字不再折成两行
     （此前 "产品 / 方案 / 资源中心 / 关于" 会被压成竖排两行 ✗）。 */
  .menu-link{position:relative;display:inline-flex;flex:1;align-items:center;gap:6px;padding:0 14px;font-size:14.5px;font-weight:500;color:var(--text-2);background:none;border:none;cursor:pointer;font-family:var(--font);transition:color .15s;white-space:nowrap}
  /* 配套（防副作用）：nowrap 之后中窄桌面（1024~1240，≤1023 已切汉堡菜单）若仍嫌挤，
     只需收紧间距/内边距即可，**不会**再出现折行 ✓ */
  @media(max-width:1240px){.nav-bar{gap:20px}.menu-link{padding:0 10px}}
  /* 下划线只作「点击展开」的状态标识：hover 不出线，仅变文字色 */
  .menu-link::after{content:"";position:absolute;left:50%;bottom:0;width:28px;height:2px;background:#014dff;border-radius:2px;transform:translateX(-50%) scaleX(0);transform-origin:center;transition:transform .18s ease}
  .menu-link:hover::after,.menu-item.open .menu-link::after{transform:translateX(-50%) scaleX(1)}
  .menu-link:hover{color:#014dff}
  .menu-item.open .menu-link{color:#014dff}
  .menu-link .chev{width:10px;height:10px;transition:transform .15s}
  .menu-item:hover .chev,.menu-item.open .chev{transform:rotate(180deg)}
  /* v1.0.59：margin-left:auto → margin:0 36px 0 auto（顶导右侧加 36px 右外边距，避免贴边 logo 区） */
.nav-right{display:flex;align-items:center;gap:14px;flex:0 0 auto;margin:0 36px 0 auto}
  /* 顶部右侧：销售热线 + 语言下拉 */
  .nav-phone{font-family:var(--mono);font-size:13px;color:var(--text);font-weight:600;letter-spacing:.02em;display:inline-flex;align-items:center;gap:8px}
  .nav-phone::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--ok);box-shadow:0 0 0 3px rgba(22,163,74,.18);flex:0 0 auto}
  .nav-phone a{color:var(--text)}
  .nav-phone a:hover{color:var(--primary)}
  /* 顶部产品搜索（v1.0.22 · M1-07）：桌面端常驻，≤1023 隐藏（移动端用列表页全宽搜索框）。
     带 post_type=flt_product 隐藏域，保证全站搜索只出产品。 */
  .nav-search{display:flex;align-items:center;border:1px solid var(--border);border-radius:999px;background:var(--bg);overflow:hidden}
  .nav-search .ps-input{border:0;background:transparent;font-family:var(--font);font-size:13px;color:var(--text);padding:8px 12px;width:150px;min-height:36px;outline:none;transition:width .18s}
  .nav-search .ps-input:focus{width:210px}
  .nav-search .ps-btn{border:0;background:transparent;color:var(--text-2);display:grid;place-items:center;width:36px;min-height:36px;cursor:pointer;padding:0}
  .nav-search .ps-btn svg{width:16px;height:16px}
  .nav-search .ps-btn:hover{color:var(--primary)}
  @media(max-width:1023px){.nav-search{display:none}}
  /* 通用搜索结果列表（非产品搜索时，search.php 输出） */
  .flt-search-list{list-style:none;margin:24px 0 0;padding:0}
  .flt-search-list li{padding:16px 0;border-bottom:1px solid var(--divider)}
  .flt-search-list .type{font-family:var(--mono);font-size:11px;color:var(--text-2);margin-left:8px}
  .flt-search-list p{margin:6px 0 0;font-size:14px;color:var(--text-2)}
  .lang-dd{position:relative;font-family:var(--mono);font-size:12.5px;color:var(--text-2)}
  /* ⚠️ v1.0.296：语言切换器**常驻浅灰圆角外框** ✓（Boss 2026-09-22：「需要加一个浅灰色的圆角外边框，
     类似悬停后的那种外边框样式」✓）
     —— 原先是 `border:1px solid transparent` ✗ ⇒ 只有悬停才"出现边框"⚠️
        ⇒ 未悬停时与旁边的搜索框/电话视觉不齐 ✓ 现在改成常驻边框 ✓ 与悬停态一致 ✓ */
  .lang-dd .lang-btn{display:inline-flex;align-items:center;gap:7px;cursor:pointer;padding:7px 12px;border-radius:5px;background:transparent;border:1px solid var(--border);transition:all .15s;color:var(--text-2)}
  .lang-dd .lang-btn:hover{background:var(--bg-2);color:var(--text);border-color:var(--border)}
  .lang-dd .lang-btn .globe{width:13px;height:13px;flex:0 0 auto}
  .lang-dd .lang-btn .chev{width:9px;height:9px;transition:transform .15s;flex:0 0 auto}
  .lang-dd.open .lang-btn .chev{transform:rotate(180deg)}
  .lang-dd .lang-menu{position:absolute;top:calc(100% + 8px);right:0;min-width:160px;background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:0 14px 32px rgba(16,24,40,.14);padding:6px;display:none;z-index:300}
  .lang-dd.open .lang-menu{display:block}
  .lang-dd .lang-menu a{display:flex;align-items:center;justify-content:space-between;padding:9px 12px;border-radius:5px;font-size:13px;color:var(--text-2);transition:all .12s}
  .lang-dd .lang-menu a:hover{background:var(--bg-2);color:var(--text)}
  .lang-dd .lang-menu a.on{color:var(--primary);font-weight:600;background:var(--primary-soft)}
  .lang-dd .lang-menu a .check{opacity:0;font-size:12px;color:var(--primary)}
  .lang-dd .lang-menu a.on .check{opacity:1}
  .nav-cta{display:inline-flex;align-items:center;gap:6px;background:#0f172a;color:#fff;font-size:13.5px;font-weight:600;padding:10px 18px;border-radius:5px;transition:background .15s}
  .nav-cta:hover{background:#014dff;color:#fff}
  .burger{display:none;background:none;border:none;flex-direction:column;justify-content:center;gap:4px;width:20px;height:16px;cursor:pointer}
  .burger span{width:20px;height:2px;background:var(--text);transition:transform .18s ease,opacity .18s ease}
  .burger.on span:nth-child(1){transform:translateY(6px) rotate(45deg)}
  .burger.on span:nth-child(2){opacity:0}
  .burger.on span:nth-child(3){transform:translateY(-6px) rotate(-45deg)}
  /* v0.5.14：因 .menu-item 已变 position:relative，.mega 若仍 absolute 会改锚到 menu-item 并缩成父项宽。
     改为 position:fixed 锚 .nav；v0.5.16：.nav 现已加 transform:translateZ(0) 强制成为 containing block，
     故 mega 的 top:64px 恒为「从 .nav 顶部往下 64px」= .nav 高度，无论是否登录、是否滚动都准确坐在 nav 正下方。
     admin-bar 的 32px 偏移已由 .admin-bar .nav{top:32px} 处理，此处不再叠加 top:96px——
     否则登录态下 nav-solid 的 backdrop-filter 让 .nav 成为 containing block，top:96px 会二次计入偏移，
     使 mega 落到 nav 下方 31px 处形成无法 hover 的死区（已修复）。 */
  .mega{position:fixed;left:0;right:0;top:64px;display:none;background:#fff;border-bottom:1px solid var(--border);box-shadow:0 30px 60px rgba(16,24,40,.12)}
  /* 普通窄下拉：有子项但未启用 mega 的菜单项使用（M0 v0.5.13 / v0.5.14 修复定位）
     v0.5.14：去掉 left:0（原锚全宽 .nav-bar 导致落到视口左缘），改由 .menu-item{position:relative} 锚定父项下方；
     加 border-radius:8px 圆角。 */
  .dropdown{position:absolute;top:100%;min-width:220px;max-width:300px;background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:0 20px 40px rgba(16,24,40,.10);padding:8px 0;display:none;z-index:40}
  .menu-item:hover .mega,.menu-item.open .mega,.menu-item:focus-within .mega{display:block}
  .menu-item:hover .dropdown,.menu-item.open .dropdown,.menu-item:focus-within .dropdown{display:block}
  .dropdown a{display:flex;align-items:center;gap:8px;padding:8px 20px;font-size:13px;color:var(--text);transition:color .15s,background .15s}
  .dropdown a:hover{color:var(--primary);background:var(--bg-2)}
  /* v0.5.15：下拉子级 flyout 飞出（支持任意层级，三级天然成立）。
     .sub-menu 锚定到父 .menu-item（已 position:relative，v0.5.14），left:100% 向右飞出。 */
  .sub-menu{position:absolute;left:100%;top:-1px;min-width:200px;max-width:280px;background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:0 20px 40px rgba(16,24,40,.10);padding:8px 0;display:none;z-index:50}
  .menu-item:hover > .sub-menu{display:block}
  /* 右向 chev（down chev 旋转 -90 成右向），hover 展开时旋转 90 成下向作为展开提示；
     单独 class 避免被全局 .menu-item:hover .chev 的 180° 规则误旋转 */
  .chev-fly{width:9px;height:9px;flex:0 0 auto;transition:transform .15s;transform:rotate(-90deg)}
  .dropdown .sub-menu .menu-item:hover > a > .chev-fly{transform:rotate(90deg)}
  .mega-inner{max-width:var(--max);margin:0 auto;padding:28px;display:grid;grid-template-columns:240px 1fr 240px;gap:24px;align-items:stretch}
  .mega-info{background:var(--bg-2);border:1px solid var(--border);border-radius:8px;padding:22px;display:flex;flex-direction:column;justify-content:space-between}
  .mega-info .info-kicker{font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--primary);font-weight:600}
  .mega-info h4{font-size:15.5px;font-weight:600;color:var(--text);margin:10px 0 8px;line-height:1.4}
  .mega-info p{font-size:12.5px;color:var(--text-2);line-height:1.75;margin-bottom:16px}
  .mega-info>a{font-size:13.5px;font-weight:600;color:var(--primary);display:inline-flex;align-items:center;gap:4px}
  .mega-info>a:hover{color:var(--primary-hover)}
  .mega-cols{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}
  .mega-cols .mega-col{min-width:0}
  .mega-col h5{font-family:var(--mono);font-size:10.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--text-3);margin-bottom:10px}
  .mega-col a{display:block;font-size:13px;color:var(--text);padding:5px 0;transition:color .15s}
  .mega-col a:hover{color:var(--primary)}
  .mega-col a .sub{display:block;font-size:10.5px;color:var(--text-3);font-weight:400;font-family:var(--mono);margin-top:1px}
  /* 右栏：纯文字组介绍（无底色无边框，与左侧信息卡形成主次差异） */
  .mega-help{display:flex;flex-direction:column;justify-content:space-between;gap:24px;padding:6px 0}
  .mega-help h4{font-size:15.5px;font-weight:600;color:var(--text);margin:0 0 8px}
  .mega-help p{font-size:12.5px;color:var(--text-2);line-height:1.75;margin:0 0 18px}
  .mega-help .help-list{list-style:none;margin:0;padding:0}
  .mega-help .help-list li{position:relative;padding-left:14px;font-size:12.5px;color:var(--text-2);line-height:1.9}
  .mega-help .help-list li::before{content:"";position:absolute;left:0;top:9px;width:5px;height:5px;border-radius:50%;background:var(--primary);opacity:.55}
  .mega-help>a{font-size:13.5px;font-weight:600;color:var(--primary);display:inline-flex;align-items:center;gap:4px}
  .mega-help>a:hover{color:var(--primary-hover)}

  /* ============ HERO（全宽首屏：撑满 100vh 视窗 + 紧邻全宽信任条） ============ */
  /* padding:0 覆盖通用 section{padding:104px 0}；用 height + min-height 双重锁定 hero 区高度，防止被 grid 内容意外撑开或被压缩。
     减去的 90px = trust 区实际渲染高度（box-sizing:border-box 下 .trust .wrap{min-height:88px} 的 88
     是包含 padding 的总高，trust 再加自身上下 1px×2 边框 = 90）。
     这个值依赖 .lead-col 单行排版（max-width:360px 保证），如果客户改成双行 trust 会涨到 ~112，
     hero 算式就会少减 22px，trust 底部会被顶出视口 22px——届时同步把 90 改成 112 即可。
     关键：.nav 是 position:fixed 不占文档流，hero 从文档 y=0 开始（顶部 65px 只是被导航盖住），
     所以这里不能再减导航高度。 */
  .hero{position:relative;overflow:hidden;background:var(--bg);padding:0;height:calc(100vh - 90px);min-height:calc(100vh - 90px);display:flex;flex-direction:column;justify-content:center}
  /* 登录态补偿：WP 内核 wp_enqueue_admin_bar_bump_styles() 会给 html 加 margin-top:32px !important
     （<782px 断点为 46px），整个文档下移，hero 需同步多减这部分，否则 trust 会被顶出视口 32px。
     --wp-admin--admin-bar--height 由内核 admin-bar.css 定义在 html 上，可继承；未登录时该样式表不加载，
     此时 .admin-bar 也不存在，本规则不命中，兜底值 32px 不会用到。 */
  .admin-bar .hero{height:calc(100vh - 90px - var(--wp-admin--admin-bar--height,32px));min-height:calc(100vh - 90px - var(--wp-admin--admin-bar--height,32px))}
  .hero-bg{position:absolute;top:0;right:0;width:62%;height:100%;pointer-events:none;
    -webkit-mask-image:linear-gradient(90deg,transparent 0%,#000 46%);mask-image:linear-gradient(90deg,transparent 0%,#000 46%);
    opacity:.11;filter:saturate(.55)}
  .hero-bg .scene,.hero-figure .scene{display:block;width:100%;height:100%}
  /* width:100% 必需：margin:0 auto 在 column flex 容器下会禁用交叉轴 stretch，导致取到 max-width 1200 被裁切 */
  .hero .wrap{position:relative;width:100%;display:flex;flex-direction:column;justify-content:flex-start;gap:40px;padding-top:64px;padding-bottom:0}
  .hero-grid{display:grid;grid-template-columns:1.02fr .98fr;gap:56px;align-items:stretch}
  .hero h1{font-size:48px;line-height:1.22;font-weight:700;letter-spacing:-.015em;margin:20px 0 20px;text-wrap:balance}
  .hero h1 .accent{color:var(--primary)}
  .hero .sub{font-size:17px;color:var(--text-2);max-width:480px;margin-bottom:36px;line-height:1.7}
  /* v0.6.3：margin-bottom 是「按钮与数据条横线」之间的最小间距兜底。
     单靠 .hero-data 的 margin-top:auto 不够——它只在左列还有剩余空间时才生效，
     窄屏（如 1440×900）文字行数变多，左列内容比右图还高，auto 被压成 0，
     .hero-data 的 border-top 就会贴到按钮底边上。
     加了这条之后：空间够时由 auto 撑开（宽屏观感不变），空间不够时保底 36px。
     注意只能写 margin-bottom——归零规则只抹 margin-block-start，margin-bottom 不受影响。 */
  .hero-cta{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin-bottom:36px}
  .btn{display:inline-flex;align-items:center;gap:8px;font-size:15px;font-weight:600;padding:13px 28px;border-radius:5px;border:1px solid transparent;cursor:pointer;transition:all .15s}
  /* v1.0.78：按钮类链接在任何状态下都不带下划线（防御：正文/区块的 a:hover 规则可能命中按钮） */
  .btn,.btn:hover,.btn:focus,.btn:active,.button,.button:hover{text-decoration:none}
  /* 紧凑按钮（吸顶条 pnbar「询盘」等小场景用）。若缺失，.btn 全尺寸 padding
     (13px/28px) 会把 50–58px 高的窄容器撑爆、冲破吸顶条高度。值与 demo 对齐。 */
  .btn-sm{padding:9px 16px;font-size:13.5px;border-radius:5px}
  /* v29 对比度修复：白字压 #FF6A00 仅 2.87，改深字保持橙色纯度（橙仍专属询盘），对比 6.2 */
  .btn-primary{background:var(--accent);color:#0F172A}
  .btn-primary:hover{filter:brightness(1.06)}
  .btn-ghost{background:var(--bg);color:var(--text);border-color:var(--border)}
  .btn-ghost:hover{border-color:var(--primary);color:var(--primary)}
  /* Hero 左列：flex column + 数据条 margin-top:auto，让数据条贴到左列底部、与右侧图对齐，消除左下留白 */
  .hero-left{display:flex;flex-direction:column}
  .hero-right{position:relative}
  /* ⭐ v1.0.210（Boss 2026-09-17：「图片圆角，应用全局的」✓）：
     原来写死 `10px` ✗ —— 而全站卡片/网格用的是全局令牌 `--r-md`（15px ✓ 见 L12/L273/L292/L333/L366/L378 ✓）
     ⇒ 改用 `var(--r-md)` ✓ ⇒ **圆角统一由全局令牌驱动** ✓（改一处 ⇒ 全站一致 ✓）
     ⚠️ 本规则是 `.hero-figure` 的**唯一**来源 ✓ ⇒ 三个 hero 变体（industrial / photo-card / photo-full）
        与 `flt/hero-full` 区块**同时生效** ✓ 不存在"改了这个漏了那个" ✗ */
  .hero-figure{position:relative;height:500px;border:1px solid var(--border);border-radius:var(--r-md);overflow:hidden;background:var(--dark)}
  /* 工程蓝图网格：64px 细线 + 径向遮罩向四周淡出，只用在首屏与深色卡片，避免全页铺满 */
  .hero::before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
    background-image:linear-gradient(to right,rgba(15,23,42,.04) 1px,transparent 1px),linear-gradient(to bottom,rgba(15,23,42,.04) 1px,transparent 1px);
    background-size:64px 64px;
    -webkit-mask-image:radial-gradient(ellipse 78% 62% at 50% 42%,#000 0%,transparent 78%);
    mask-image:radial-gradient(ellipse 78% 62% at 50% 42%,#000 0%,transparent 78%)}
  /* 网格 z-index:0、线稿 z-index:1 —— 定位元素才吃 z-index，若不给 .scene 加 position:relative，
     静态的 SVG 会绘制在 absolute 的 .photo 之前，结果是网格压在图上面（蓝图应该是纸在下、图在上） */
  .hero-figure .scene{position:relative;z-index:1}
  .hero-figure .photo{position:absolute;inset:0;z-index:0;background-size:56px 56px;background-position:center;
    background-image:linear-gradient(to right,rgba(255,255,255,.055) 1px,transparent 1px),linear-gradient(to bottom,rgba(255,255,255,.055) 1px,transparent 1px)}
  .fig-cap{display:flex;justify-content:space-between;align-items:center;margin-top:12px;font-family:var(--mono);font-size:11px;color:var(--text-3);letter-spacing:.04em}
  /* Hero 数据条：2×2 网格，margin-top:auto 推至左列底部（与右图对齐），消除左下留白 */
  .hero-data{display:grid;grid-template-columns:1fr 1fr;column-gap:36px;row-gap:18px;margin-top:auto;padding-top:30px;border-top:1px solid var(--divider)}
  .hero-data .m{position:relative;padding-left:16px}
  .hero-data .m::before{content:"";position:absolute;left:0;top:9px;width:2px;height:18px;background:var(--primary);border-radius:1px}
  .hero-data b{display:block;font-size:22px;font-weight:700;letter-spacing:-.01em;font-family:var(--mono);color:var(--text);line-height:1.2}
  .hero-data b i{font-style:normal;font-size:13px;color:var(--primary);margin-left:3px;font-weight:600}
  .hero-data span{font-size:13.5px;color:var(--text-2);margin-top:4px;display:block}
  /* ============ 信任条：独立全通栏（浅灰底色带，左文案 + 右 logo 墙，无遮罩渐隐） ============ */
  .trust{background:#F7F8FA;border-top:1px solid var(--border);border-bottom:1px solid var(--border);padding:0;overflow:hidden}
  .trust .wrap{display:flex;justify-content:space-between;align-items:center;gap:48px;min-height:88px;padding-top:16px;padding-bottom:16px}
  .lead-col{flex:0 0 auto;max-width:360px}
  .lead{margin:0;font-size:14.5px;color:var(--text-2);line-height:1.7}
  .lead b{color:var(--text);font-weight:700}
  .lead-2{margin:8px 0 0;font-size:12px;color:var(--text-3);letter-spacing:.06em;font-family:var(--mono);text-transform:uppercase}
  .marquee{flex:1;min-width:0;overflow:hidden}
  /* 无缝滚动结构：轨道上两个等宽 .mq-group，动画位移 -50% 恰好等于一组宽度 → 首尾零错位。
     不能把 gap 直接写在 track 上：N 项 2N-1 个 gap，-50% 会落在第 N+1 项起点前 0.5 个 gap 处，
     每圈产生 gap/2（36px）的回跳——这就是之前"抖动顿感"的根因。
     translate3d + will-change 走合成器，避免主线程重排引起的掉帧 */
  /* v0.6.1：animation 从这里挪到 .marquee-track.is-looping（见文件末尾兼容层）。
     区块版式的信任条在内容里只有一组 .mq-group，第二组由 main.js 前端克隆；
     动画必须等克隆完才能起，否则单组轨道位移 -50% 会滚出半屏空白。
     JS 不执行时不滚，但内容照常排列可读——比滚出空白好。 */
  .marquee-track{display:flex;width:max-content;will-change:transform}
  .mq-group{display:flex;gap:72px;padding-right:72px;flex:0 0 auto}
  .marquee:hover .marquee-track{animation-play-state:paused}
  .marquee span{font-family:var(--mono);font-size:17px;font-weight:700;letter-spacing:.06em;color:#6B7280;flex:0 0 auto;transition:color .2s;cursor:default}
  .marquee span:hover{color:var(--text)}
  @keyframes scroll{from{transform:translate3d(0,0,0)}to{transform:translate3d(-50%,0,0)}}

  /* ============ 通用区块 ============ */
  section{padding:104px 0}
  section + section{padding-top:104px}
  /* v1.0.114【Boss 反馈】非首页收口 —— 原 104×2 = **208px** 的 section 间距过大
     （"距离过大导致不美观"）。**首页除外**：body.home 保持 104 的原节奏
     （首页分区的气势就是这个值撑起来的）。
     ⚠️ 另外，**自己管间距**的模板会再把它覆盖为 0（见 .flt-pdetail 的既有先例
     与 .flt-search 的新规则）—— 那类模板的区块各自有 padding，不覆盖就会"翻倍"。 */
  body:not(.home) section{padding:64px 0}
  body:not(.home) section + section{padding-top:64px}
  .sec-head{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:52px;padding-bottom:0;border-bottom:none}
  .sec-head h2{font-size:32px;font-weight:700;letter-spacing:-.015em;line-height:1.25}
  .sec-head .right{font-size:14px;color:var(--text-2);text-align:right}
  .sec-head .right.has-dot{display:inline-flex;align-items:center;gap:10px}
  .sec-head .right.has-dot::before{content:"";width:6px;height:6px;border-radius:50%;background:#014dff;box-shadow:0 0 0 4px rgba(1,77,255,.12);flex:0 0 auto}

  /* ============ 核心优势 ============ */
  .values{background:var(--bg-2)}
  .values-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--border);border:1px solid var(--border);border-radius:var(--r-md);overflow:hidden}
  .value{background:var(--bg);padding:34px 30px}
  /* ⭐ v1.0.210（Boss 2026-09-17：「01/02/03 这组数字应该加大，24~48px 之间」✓）：
     原来 **12px** ✗ ⇒ 视觉上几乎看不见 ✓ ⇒ 提到 **32px**（区间中值 ✓）
     ⚠️ **单点可调** ✓：想更小/更大只改这一个数 ✓（24 收敛 / 32 标准 / 40 强调 / 48 最大 ✓）
     ⇒ 同时作用于「样板 `patterns/sections/values.php`」与「主题骨架 `template-parts/home/values.php`」✓
       （两者共用 `.value .idx` ✓ 不需要分别改 ✓）
     配套：`line-height:1` 防 32px 撑开行盒 ⇒ 与下方 h3 的 14px 间距保持设计稿节奏 ✓ */
  .value .idx{font-family:var(--mono);font-size:32px;line-height:1;letter-spacing:-.01em;color:var(--primary);font-weight:600}
  .value h3{font-size:17px;font-weight:600;margin:14px 0 8px}
  .value p{font-size:14px;color:var(--text-2)}
  .certs{display:flex;align-items:center;gap:10px;margin-top:30px;flex-wrap:wrap}
  .certs .lbl{font-family:var(--mono);font-size:11px;color:var(--text-3);letter-spacing:.06em;margin-right:6px}
  .certs .c{font-family:var(--mono);font-size:12px;color:var(--text-2);border:1px solid var(--border);border-radius:4px;padding:5px 11px;background:var(--bg)}

  /* ============ 产品 ============ */
  .products .filters{display:flex;gap:8px;margin-bottom:36px;flex-wrap:wrap}
  /* 桌面端隐藏左右切换箭头：分类少时不折行，本就不需要滚动。
     ≤767 由媒体查询改为 display:grid 显示。放在这里而不是只写在媒体查询里，
     是为了避免桌面端出现浏览器默认的 <button> 样式（无 CSS 规则的裸按钮）。 */
  .filters-nav{display:none}
  .filter{padding:9px 18px;border:1px solid var(--border);border-radius:5px;font-size:14px;font-weight:500;color:var(--text-2);background:var(--bg);cursor:pointer;transition:all .15s;font-family:var(--font)}
  .filter:hover{border-color:var(--primary);color:var(--primary)}
  .filter.active,.filter.active:hover{background:var(--primary);color:#fff;border-color:var(--primary)}
  .prod-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}
  .prod-card{position:relative;border:1px solid var(--border);border-radius:var(--r-md);overflow:hidden;background:var(--bg);transition:all .18s;display:flex;flex-direction:column}
  /* 主推型号角标：蓝色只服务于这一张卡，避免高亮变成无语义装饰 */
  .pflag{position:absolute;top:0;left:0;z-index:2;font-family:var(--mono);font-size:10.5px;font-weight:700;letter-spacing:.06em;color:#fff;background:var(--primary);padding:5px 11px;border-radius:var(--r-md) 0 var(--r-md) 0}
  .prod-card:hover{transform:translateY(-4px);box-shadow:0 12px 28px rgba(1,77,255,.1);border-color:var(--primary)}
  .prod-card .art{height:150px;background:var(--bg-2);display:grid;place-items:center;border-bottom:1px solid var(--divider)}
  .prod-card .body{padding:18px;display:flex;flex-direction:column;flex:1}
  /* v1.0.19：卡片内容区对齐 demo（model 主色 / .tl 用途行 / .kv 采购两格 / row 去分隔线）
     .spec 为 v1.0.18 及以前的旧结构类，DOM 已不再输出，保留选择器仅为兼容历史缓存。 */
  .prod-card .model{font-family:var(--mono);font-size:11px;color:var(--primary);font-weight:600;letter-spacing:.05em;text-transform:uppercase}
  .prod-card h3{font-size:16px;font-weight:600;margin:6px 0 4px;line-height:1.42}
  .prod-card .tl{font-size:12.5px;line-height:1.55;color:var(--text-2);margin-bottom:11px}
  .prod-card .kv{display:flex;gap:6px;font-family:var(--mono);font-size:11px;color:var(--text-3);border-top:1px solid var(--divider);padding-top:10px;margin-bottom:12px}
  .prod-card .kv span{flex:1;min-width:0}
  .prod-card .kv i{font-style:normal;color:var(--text-2)}
  .prod-card .row{display:flex;justify-content:space-between;align-items:center;margin-top:auto}
  .prod-card .price{font-family:var(--mono);font-size:15px;color:var(--text);font-weight:700}
  /* 币种符号：列表卡与详情页同风格（accent 色小号），由 flt_split_price() 拆出 <i class="cur"> */
  .prod-card .price .cur{font-style:normal;font-size:12px;font-weight:600;color:var(--accent);margin-right:2px}
  .prod-card .price em{font-style:normal;font-size:11.5px;color:var(--text-3);font-weight:400;margin-left:4px}
  .prod-card .link{font-size:13px;font-weight:600;color:var(--primary)}
  .prod-card .spec{font-family:var(--mono);font-size:11.5px;color:var(--text-3);margin-bottom:14px;letter-spacing:.02em}
  .all-link{margin-top:44px;text-align:center}
  .all-link a{font-size:14.5px;font-weight:600;display:inline-flex;align-items:center;gap:6px}

  /* ============ 解决方案（错落布局：主推 2×2 + 4 普通 + 1 链接条） ============ */
  .solutions{background:var(--bg-2)}
  .solutions-grid{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:minmax(168px,auto);gap:16px}
  .sol-feat{grid-column:span 2;grid-row:span 2;position:relative;overflow:hidden;background:var(--primary);color:#fff;border-radius:12px;padding:36px 34px;display:flex;flex-direction:column;justify-content:space-between;min-height:380px}
  .sol-feat .flag{position:absolute;top:0;right:0;font-family:var(--mono);font-size:10.5px;font-weight:700;letter-spacing:.1em;color:#fff;background:rgba(255,255,255,.12);padding:6px 12px;border-radius:0 0 0 8px}
  .sol-feat .ico{width:48px;height:48px;border-radius:10px;background:rgba(255,255,255,.18);color:#fff;display:grid;place-items:center;margin-bottom:6px}
  .sol-feat h3{color:#fff;font-size:23px;font-weight:700;letter-spacing:-.01em;margin:18px 0 12px;line-height:1.35}
  .sol-feat .desc{color:rgba(255,255,255,.85);font-size:14.5px;line-height:1.75;flex:1;margin-bottom:24px}
  .sol-feat .stats{display:flex;gap:28px;border-top:1px solid rgba(255,255,255,.18);padding-top:20px;margin-bottom:22px}
  .sol-feat .stats li{list-style:none;font-size:12.5px;color:#fff;font-family:var(--mono);letter-spacing:.04em}
  .sol-feat .stats b{display:block;font-size:21px;font-weight:700;color:#fff;letter-spacing:-.01em;margin-top:4px;line-height:1.1}
  .sol-feat .more{display:inline-flex;align-items:center;gap:6px;font-size:14px;font-weight:600;color:#fff}
  .sol-feat .more em{transition:transform .18s;font-style:normal}
  .sol-feat:hover .more em{transform:translateX(4px)}
  .sol-feat::after{content:"";position:absolute;right:-50px;bottom:-60px;width:200px;height:200px;border-radius:50%;background:rgba(255,255,255,.07);pointer-events:none}
  .sol-feat::before{content:"";position:absolute;left:34px;top:108px;width:20px;height:2px;background:rgba(255,255,255,.5)}

  .sol-card{position:relative;overflow:hidden;background:var(--bg);border:1px solid var(--border);border-radius:var(--r-md);padding:24px 22px;display:flex;flex-direction:column;transition:all .18s;min-height:180px}
  .sol-card:hover{border-color:var(--primary);box-shadow:0 8px 24px rgba(1,77,255,.08)}
  .sol-card .ico{width:38px;height:38px;border-radius:8px;background:var(--primary-light);color:var(--primary);display:grid;place-items:center;margin-bottom:14px;flex:0 0 auto}
  .sol-card h3{font-size:16.5px;font-weight:600;margin-bottom:8px}
  .sol-card p{font-size:13.5px;color:var(--text-2);line-height:1.7;flex:1}
  .sol-card .more{font-size:12.5px;font-weight:600;color:var(--primary);margin-top:14px;display:inline-flex;align-items:center;gap:4px;opacity:0;transform:translateY(3px);transition:all .18s}
  .sol-card:hover .more{opacity:1;transform:translateY(0)}

  /* ============ 数据（深色） ============ */
  .data{background:var(--dark);color:#fff;padding:112px 0;position:relative;overflow:hidden}
  .data::before{content:"";position:absolute;top:-200px;right:-200px;width:500px;height:500px;border-radius:50%;background:radial-gradient(circle,rgba(1,77,255,.18) 0%,transparent 60%);pointer-events:none}
  .data .sec-head{border-color:rgba(255,255,255,.12)}
  .data .sec-head h2{color:#fff}
  .data .sec-head .right{color:rgba(255,255,255,.5);font-family:var(--mono);font-size:12px}
  .data-grid{display:grid;grid-template-columns:repeat(4,1fr);border:1px solid rgba(255,255,255,.14);border-radius:8px;overflow:hidden;position:relative;z-index:1}
  .stat{padding:38px 32px;border-left:1px solid rgba(255,255,255,.12)}
  .stat:first-child{border-left:none}
  .stat .num{font-family:var(--mono);font-size:48px;font-weight:700;letter-spacing:-.02em;line-height:1}
  .stat .num .unit{font-size:19px;color:#6FA8FF;margin-left:3px}
  .stat .lbl{margin-top:14px;font-size:13.5px;color:rgba(255,255,255,.55)}

  /* ============ 案例 ============ */
  .cases-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
  /* v1.0.79：【清理遗留干扰】原首页旧版案例卡片的 .case-card / .thumb / .body / .tag / h3 /
     .case-stats 规则全部删除 —— 首页 flt/cases 区块早已复用 template-parts/content/case-card.php，
     卡片样式统一由 case.css 提供。这批未声明属性（display:grid / place-items / border-bottom）
     在 case.css 重写 .thumb 时未被覆盖，长期"偷偷生效"，是 v1.0.76 胶囊缝隙、v1.0.79 移动端
     封面显示异常等一系列问题的共同根因。 */


  /* ============ 客户评价（加装饰大引号） ============ */
  .testi{background:var(--bg-2)}
  .testi-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
  .t-card{border:1px solid var(--border);border-radius:var(--r-md);background:var(--bg);padding:28px;display:flex;flex-direction:column;position:relative}
  .t-card .quote{position:absolute;top:22px;right:24px;color:var(--primary);opacity:.14;width:28px;height:28px}
  .t-card .stars{color:#B45309;font-size:13px;letter-spacing:2px;margin-bottom:14px}
  .t-card p{font-size:15px;line-height:1.8;margin-bottom:22px;flex:1;color:var(--text)}
  .t-card .who{display:flex;align-items:center;gap:12px;padding-top:18px;border-top:1px solid var(--divider)}
  /* v0.8.0：圆框头像（Boss 验收反馈）。flex:0 0 auto 防窄屏下姓名过长把头像压成椭圆 */
  .t-card .ava{width:40px;height:40px;border-radius:50%;flex:0 0 auto;background:var(--primary-light);color:var(--primary);display:grid;place-items:center;font-weight:700;font-size:14px}
  .t-card .who b{font-size:14px;display:block;font-weight:600}
  .t-card .who span{font-size:12.5px;color:var(--text-3)}

  /* ============ 资讯 ============ */
  .blog-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
  .blog-card{border:1px solid var(--border);border-radius:var(--r-md);overflow:hidden;transition:all .18s;background:var(--bg);display:flex;flex-direction:column}
  .blog-card:hover{transform:translateY(-4px);box-shadow:0 12px 28px rgba(1,77,255,.1);border-color:var(--primary)}
  .blog-card .thumb{height:140px;background:var(--bg-2);display:grid;place-items:center;border-bottom:1px solid var(--divider)}
  .blog-card .body{padding:18px;flex:1;display:flex;flex-direction:column}
  .blog-card .cat{display:inline-block;font-family:var(--mono);font-size:11px;letter-spacing:.06em;color:var(--primary);background:var(--primary-soft);border-radius:4px;padding:4px 10px;font-weight:600;align-self:flex-start}
  .blog-card h3{font-size:16.5px;font-weight:600;margin:12px 0 auto;line-height:1.5}
  .blog-card .sum{font-size:13px;line-height:1.65;color:var(--text-2);margin-top:8px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .blog-card .meta{display:flex;justify-content:space-between;align-items:center;margin-top:16px}
  .blog-card .author{display:flex;align-items:center;gap:8px;min-width:0}
  .blog-card .author .ava{width:26px;height:26px;border-radius:50%;background:var(--primary-light);color:var(--primary);display:grid;place-items:center;font-family:var(--mono);font-size:11px;font-weight:700;flex:0 0 auto}
  .blog-card .author b{font-size:13px;color:var(--text);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .blog-card .time{font-family:var(--mono);font-size:12px;color:var(--text-3);letter-spacing:.04em;flex:0 0 auto}

  /* ============ 整卡可点（产品 / 案例 / 文章三类列表卡通用） ============
     标题包真 <a>（SEO 锚文本 = 品名 / 键盘可达 / 无 JS 也能进），整卡点击由 JS 委托。
     不用 CSS 拉伸链接（stretched-link）：它的 ::after 遮罩会挡住型号与价格的文本选择，
     B2B 场景用户要复制 LT-RFID-200 这类型号，不能牺牲。 */
  .prod-card,.case-card,.blog-card{cursor:pointer}
  a.card-link{color:inherit;text-decoration:none}
  .prod-card:hover a.card-link,.case-card:hover a.card-link,.blog-card:hover a.card-link{color:var(--primary)}
  a.card-link:focus-visible{outline:none}
  .prod-card:has(a.card-link:focus-visible),.case-card:has(a.card-link:focus-visible),.blog-card:has(a.card-link:focus-visible){outline:2px solid var(--primary);outline-offset:2px}

  /* ============ CTA（居中单列，去装饰，简单就好） ============ */
  /* ⚠️ 转化区样式必须以转化区根类（section.cta / .flt-sec.cta）限定，严禁写裸 .cta：
     产品详情页报价面板的按钮容器（.quote .cta）与吸顶条的询盘按钮
     （a.btn.btn-sm.cta）也带 class="cta"，会被裸选择器染成 --primary
     大蓝块并被 padding:88px 0 撑爆（demo 里底部转化区走 .cta-band，无此冲突）。 */
  section.cta,.flt-sec.cta{background:var(--primary);padding:88px 0;color:#fff;text-align:center}
  .cta-inner{max-width:600px;margin:0 auto}
  section.cta h2,.flt-sec.cta h2{font-size:34px;font-weight:700;letter-spacing:-.015em;margin-bottom:14px}
  section.cta p,.flt-sec.cta p{color:rgba(255,255,255,.85);font-size:16px;margin-bottom:32px;line-height:1.75}
  section.cta .btn-white,.flt-sec.cta .btn-white{background:#fff;color:var(--primary);padding:14px 40px;font-size:15px}
  section.cta .btn-white:hover,.flt-sec.cta .btn-white:hover{background:#fff;filter:brightness(.97)}

  /* ============ FOOTER（v0.3.9：左品牌 / 中导航 / 右联系 三栏） ============ */
  footer{background:var(--bg-2);padding:68px 0 24px}/* v1.0.166：底部 40→24（Boss 定 ✓）—— 页脚末行现在是版权行 ✓，40px 显空 ✓ */
  /* 三栏配比：品牌列要放 logo + 简介 + 图标组，联系列要放联系方式 + 2 个二维码，
     都比纯链接列宽；中间 2fr 给导航，导航内部再自己分 1–3 列（见 .foot-nav）。
     align-items:start：三栏高度不等时各自顶部对齐，不要让短列被拉伸。 */
  /* ⚠️ v1.0.298：中栏配比 2fr → **2.6fr** ✗（Boss 2026-09-22 ✓）
     原因 ✓：页脚导航现在**最多 4 列** ✓ ⇒ 2fr 时中栏只剩约 530px ✗
       ⇒ 4 × 130 + 3 × 28 = 604px **装不下** ✗ ⇒ auto-fit 会自动掉回 3 列 ✗✓
     ⇒ 2.6fr（约占 56% ≈ 645px ✓）刚好容得下 4 列 ✓
     ⚠️ 只有 3 列的站点：中栏变宽 ✓ 三列等宽铺开 ✓ 视觉无副作用 ✓ */
  .foot-grid{display:grid;grid-template-columns:1fr 2.6fr 1fr;gap:36px;align-items:start}
  .foot-grid h4{font-family:var(--mono);font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--text-3);margin-bottom:18px}
  .foot-grid a{display:block;font-size:14px;color:var(--text-2);margin-bottom:12px;transition:color .15s}
  .foot-grid a:hover{color:var(--primary)}
  .foot-brand p{font-size:14px;color:var(--text-2);margin:14px 0 22px;max-width:280px;line-height:1.75}

  /* 中栏导航：最多 3 列，实际列数由后台挂了几个菜单决定。
     用 auto-fit + minmax 而不是写死 repeat(3)：只挂 1 个菜单时不会空出两列。 */
  .foot-nav{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:28px}
  .foot-menu{min-width:0}
  /* v1.0.298：列标题里的链接（标题项 URL 填了真实地址时才出现 ✓）
     ⚠️ 必须覆盖 `.foot-grid a` 的 `display:block;font-size:14px;margin-bottom:12px` ✗
        —— 那是给**链接列**用的 ✓ 套到标题上会撑成一个大链接块 ✗ 且字号/颜色都不对 ✗ */
  .foot-t a{display:inline;margin:0;font-size:inherit;color:inherit;letter-spacing:inherit;font-weight:inherit}
  .foot-t a:hover{color:var(--primary)}
  .foot-menu .foot-menu-list a{margin-bottom:10px}
  /* 平铺列（.foot-menu-flat，没有列标题）：
     只有当它与分组列并存时才需要下移，去对齐有标题那一列的链接基线
     （37px ≈ .foot-t 的行高 18.7 + margin-bottom 18）。
     纯平铺模式（它是唯一一列）时不下移，否则整块会莫名下沉。
     :only-child 正好区分这两种情况，不用再加 class。 */
  .foot-menu-flat:not(:only-child){padding-top:37px}

  /* 右栏：联系信息 */
  .foot-contact .contact-list{list-style:none;margin:0 0 22px;padding:0}
  .foot-contact .contact-list li{display:flex;align-items:flex-start;gap:9px;font-size:14px;color:var(--text-2);line-height:1.7;margin-bottom:10px}
  .foot-contact .contact-list li:last-child{margin-bottom:0}
  .foot-contact .contact-list svg{width:16px;height:16px;flex:0 0 auto;margin-top:4px;color:var(--text-3)}
  /* 覆盖 .foot-grid a 的 display:block + margin-bottom（那是给导航链接列的） */
  .foot-contact .contact-list a{display:inline;margin-bottom:0;color:var(--text-2)}
  .foot-contact .contact-list a:hover{color:var(--primary)}

  /* 右栏：二维码平铺。标签由后台填，不限平台（海外客户可能是 WhatsApp / LINE）。 */
  .qr-group{display:flex;gap:14px;flex-wrap:wrap}
  .qr{display:flex;flex-direction:column;align-items:center;gap:7px}
  .qr img{width:92px;height:92px;border:1px solid var(--border);border-radius:7px;background:#fff;padding:4px;display:block}
  .qr span{font-size:11.5px;color:var(--text-3);text-align:center;line-height:1.4}

  /* 社交图标组：海外平台走链接（<a>），国内平台走二维码浮层（<button class="social-qr">）。
     .social-qr 用 <button>：没有 href 的锚点语义不对，键盘也不可聚焦。 */
  .socials{display:flex;gap:10px;flex-wrap:wrap}
  .socials a,.socials .social-qr{width:36px;height:36px;border-radius:7px;border:1px solid var(--border);display:grid;place-items:center;text-align:center;color:var(--text-2);background:transparent;transition:all .15s;cursor:pointer;padding:0;font-family:inherit}
  .socials a:hover,.socials .social-qr:hover{background:var(--primary);color:#fff;border-color:var(--primary)}
  .socials a svg,.socials .social-qr>svg{width:17px;height:17px;display:block;margin:auto}
  .socials .social-qr{position:relative}
  /* 国内平台二维码浮层（微信 / 百家号 / 小红书 / 视频号）：**默认隐藏**。
     触发方式（v0.5.11 微调）：
     - 桌面：CSS :hover 直接显示，移开自动关
     - 移动：JS click toggle 切显隐
     - 键盘 Tab：CSS :focus-visible 触发（无障碍要求）
     浮层向下弹出（v0.5.11 按 Boss 要求从上方改到下方）；去掉 × 关闭按钮——纯 hover/click 进出。
     z-index:25 避免被相邻兄弟 button 遮挡。 */
  .qr-pop{position:absolute;top:calc(100% + 10px);left:50%;transform:translateX(-50%) translateY(-4px);z-index:25;
    background:#fff;border:1px solid var(--border);border-radius:8px;padding:10px;box-shadow:0 14px 32px rgba(16,24,40,.16);
    display:flex;flex-direction:column;align-items:center;gap:6px;min-width:140px;
    opacity:0;visibility:hidden;pointer-events:none;transition:opacity .18s,transform .18s,visibility .18s}
  /* 桌面 hover 直接触发；移动设备 hover 状态存在但鼠标无法离开，靠 JS click toggle 关闭。
     :focus-visible 保留：键盘 Tab 也能展开（无障碍要求）。
     不用 @media (hover:hover) 包裹——某些国产浏览器对 (hover:hover) 检测失败
     会让 hover 规则完全不触发（v0.5.4 之前的 bug）。所有设备都响应 hover， */
  .socials .social-qr:hover .qr-pop,
  .socials .social-qr:focus-visible .qr-pop{opacity:1;visibility:visible;pointer-events:auto;transform:translateX(-50%) translateY(0)}
  /* JS 加 .is-shown 类来强制展开（触摸设备点击 toggle 后保持）。
     这里不写 @media (hover:none)，让 JS 类在两种设备下都能工作。 */
  .qr-pop.is-shown{opacity:1;visibility:visible;pointer-events:auto;transform:translateX(-50%) translateY(0)}
  .qr-pop img{width:120px;height:120px;display:block;border-radius:4px}
  /* 浮层标题：v0.5.12 重新启用，可通过 Customizer 文本字段自定义。位于 QR 上方，flex column + gap 已自动留出 6px 间距。
     v0.5.16：Boss 要求前端 hover 文案（如「百家号」）隐藏，仅保留二维码。按钮本身 aria-label 仍带平台名，无障碍不受影响。 */
  .qr-pop .qr-title{display:none}
  /* 页脚导航列 <li> 去掉默认列表样式（WP 菜单输出的 ul/li） */
  .foot-menu-list{list-style:none;margin:0;padding:0}
  .foot-menu-list li{margin:0}
  /* 列内分组小标题：菜单里某个顶级项**有子项**时，该项渲染成小标题而不是链接
     （子项才是这一组真正的链接）。没子项的顶级项照常是普通链接。 */
  .foot-menu-group{font-size:11.5px;font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--text-3);margin-top:14px;padding-top:2px}
  .foot-menu-group:first-child{margin-top:0}

  /* ============ 页脚友情链接（v1.0.166 ✓） ============
     位置：.foot-grid（三栏导航）与 .foot-bottom（版权行）之间 ✓ —— Boss 指定位置 ✓。
     数据源：WordPress 原生「链接」（见 inc/friend-links.php ✓）。
     排版：标题 + 链接**同行起排、自动换行** ✓（不用横向滚动 ✓ 页脚不需要横滑手势 ✓）。
     ⚠️ **三把钥匙**：flex-wrap:wrap ✓ + min-width:0 ✓ + max-width:100% ✓ ——
        缺任一把，窄屏下容器会被 nowrap 内容撑破 body ⇒ 整页横滑 + 右侧白边 ✗
        （v1.0.166 修的 .flt-pills 正是同一个坑 ✗ 详见 pills.css ✓）。 */
  .foot-links{display:flex;align-items:baseline;flex-wrap:wrap;gap:8px 22px;margin-top:48px;padding-top:22px;border-top:1px solid var(--divider);min-width:0;max-width:100%}
  .foot-links-t{flex:0 0 auto;font-family:var(--mono);font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--text-3)}
  .foot-links-list{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px 18px;list-style:none;margin:0;padding:0;min-width:0;max-width:100%}
  .foot-links-list li{margin:0}
  .foot-links-list a{display:inline-block;font-size:13px;color:var(--text-3);text-decoration:none;transition:color .15s}
  .foot-links-list a:hover{color:var(--primary)}
  /* padding-right:112px = 永久让出右下角悬浮客服组件位（不上组件时可置 0）
     字体用正文而非 mono：这是法律文本不是数据标签；且 mono 字族无中文字形，
     「© 2026 LiteTrade」+「深圳市联贸科技有限公司」会变成半 mono 半黑体的混排 */
  .foot-bottom{border-top:1px solid var(--divider);margin-top:28px;padding-top:22px;display:flex;justify-content:space-between;font-family:var(--font);font-size:12px;color:var(--text-3);gap:16px;flex-wrap:wrap}/* v1.0.166：上间距 48→28（Boss 定 ✓）—— 上方是友情链接块 ✓，两块各留 48 会过空 ✓ */
  /* 底部法律链接（隐私政策 / 服务条款 / 网站地图）：横向平铺在版权行右侧。
     list-style / margin 必须归零——WP 菜单输出的 ul 自带项目符号与外边距。
     链接样式在这里覆盖全局 a，避免继承成 14px 蓝色正文链接。 */
  /* 底部版权区左右两块（v0.5.4 拆为两个独立配置区）
     .foot-bottom-left：公司授权信息（版权/备案号/地址）多行文本，wpautop 自动 <p>
     .foot-bottom-right：法律链接（v1.0.301 起 = 「页脚设置」字段「底部版权区（右侧）· 法律链接」✓；
        v1.0.302 起**不再**走 wp_nav_menu('footer-legal') ✗ 那个位置已删 ✓
        ⚠️ DOM 保持 nav.foot-legal > ul.foot-legal-list ✓ ⇒ 下方规则**继续有效** ✓）
     .foot-bottom 自身 flex space-between 自动让两块左右分布 */
  /* 防御性归零：footer 版权区不继承任何加粗（正文/链接/段落全 normal）。
     v0.5.4 拆为独立配置后，用户在 Customizer 填的 <a> / <strong> 在某些
     WP Customizer 预览样式下会被默认加粗渲染，前端要明确压住。 */
  .foot-bottom-left,
  .foot-bottom-left p,
  .foot-bottom-left a,
  .foot-bottom-left strong{font-weight:400}
  /* v0.5.17：备案号等链接用默认文本色，不染主题色 */
  .foot-bottom-left a{color:inherit}
  .foot-bottom-left{font-size:12px;color:var(--text-3);line-height:1.7}
  .foot-bottom-left p{margin:0 0 4px}
  .foot-bottom-left p:last-child{margin-bottom:0}
  .foot-bottom-right{display:flex;align-items:flex-end}
  /* footer 自定义 logo 图（v0.5.4）—— 取代默认 LT 文字徽章
     footer-brand 里的 <a.logo> 内含 <img class="flt-footer-logo"> */
  .flt-footer-logo{max-height:40px;width:auto;display:block}
  .foot-legal-list{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:18px}
  .foot-legal-list li{margin:0}
  .foot-legal-list a{display:inline-block;margin-bottom:0;font-size:12px;color:var(--text-3);font-family:var(--font)}
  .foot-legal-list a:hover{color:var(--primary)}

  /* ============ 滚动显现（data-reveal 由 JS 添加：JS 失效时内容不会被隐藏） ============ */
  [data-reveal]{opacity:0;transform:translateY(10px);transition:opacity .5s ease-out,transform .5s ease-out;will-change:opacity,transform}
  [data-reveal].rv-in{opacity:1;transform:none}
  @media(prefers-reduced-motion:reduce){[data-reveal]{opacity:1;transform:none;transition:none}}

  /* ============ 响应式 ============ */
  @media(max-width:1023px){
    .nav-phone,.lang-dd{display:none}
    /* v1.0.82：汉堡三条线右对齐 —— ≤767 时 .burger 被撑到 min-width:32px，而线条 span 固定宽 20px，
       column flex 下默认靠左 → 视觉上与右侧 20px 内边距不齐。align-items:flex-end 让线条贴右。 */
    .burger{display:flex;align-items:flex-end}
    .nav-bar{gap:16px}
    /* v1.0.66：移动端取消 .nav-right 的 36px 右外边距（桌面 margin:0 36px 0 auto），
       避免与 .nav-bar 的 20px padding 叠加导致右侧留白过宽；仅移动端生效 */
    .nav-right{margin-right:0}
    /* 移动端抽屉导航：复用桌面 .menu/.mega 同一套 DOM，不做第二份内容，避免双份维护 */
    .menu{display:none;position:absolute;top:64px;left:0;right:0;z-index:250;background:#fff;border-bottom:1px solid var(--border);box-shadow:0 20px 40px rgba(16,24,40,.12);flex-direction:column;align-items:stretch;gap:0;padding:4px 40px 18px;max-height:calc(100vh - 64px);overflow-y:auto}
    .menu.open{display:flex}
    .menu-item{display:block;border-bottom:1px solid var(--divider)}
    .menu-item:last-child{border-bottom:none}
    .menu-link{display:flex;width:100%;justify-content:space-between;padding:15px 0;font-size:16px;color:var(--text)}
    .menu-link::after{display:none}
    .menu-item:hover .mega{display:none}   /* 移动端只认点击，屏蔽 hover 展开（iOS 点按会触发 hover） */
    .mega{position:static;display:none;border:none;box-shadow:none;background:transparent;padding:2px 0 14px}
    .menu-item.open .mega{display:block}
    .mega-inner{grid-template-columns:1fr;gap:18px;padding:0}
    .mega-cols{grid-template-columns:1fr;gap:16px}
    .mega-col a{font-size:14px;padding:7px 0}
    .mega-help{background:transparent}
    /* v1.0.66：恢复顶部 22px（v1.0.60 的 `padding:0 20px` 简写把桌面 padding-top:22px 覆盖归零，版权贴到上方容器）。
       ⚠️ v1.0.167 修 ✗：本块是 **≤1023**（含平板档 ✓），此处**不能再给左右 20px** ✗ ——
          平板档（768~1023）的 `footer .wrap` 自带 64px ✓ ⇒ 叠加后版权行缩进 **84px** ✗
          而三栏导航是 **64px** ✗（实测确认 ✓）⇒ 版权比导航多缩 20px，不齐 ✗。
          ⇒ 左右 20px 只在 **≤767**（该档 `footer .wrap` padding 为 0 ✓）补 ✓，见下方移动块 ✓。 */
    .foot-bottom{padding-top:22px}
    /* v1.0.166：友情链接在窄屏收紧间距 ✓
       ⚠️ v1.0.168 修正 ✗：本块是 **≤1023**（**含平板档 768~1023** ✓，见下方 `.foot-grid` 注释 ✓），
          此处**绝不能加左右 20px** ✗ —— 平板档 `footer .wrap` 自带 64px ✓，
          叠加后内容变 **84px** ✗ 而三栏导航是 **64px** ✗ ⇒ 实测不齐 ✓（Boss 复验抓出 ✓）。
          ⇒ **左右 20px 只写在 ≤767 块** ✓（见下方「页脚窄屏对齐」段 ✓，那里 .wrap 为 0 ✓）。 */
    .foot-links{margin-top:32px;gap:8px 16px}
    .foot-links-list{gap:8px 14px}
    /* 页脚：三栏塌成单列堆叠，导航内部保留 2 列（平板上 2 列仍可读）。
       ≤767 再由后面的规则降为 1 列。 */
    .foot-grid{grid-template-columns:1fr;gap:40px}
    .foot-nav{grid-template-columns:repeat(2,1fr)}
    /* ---- 移动端 hero：高度改由内容驱动（v0.3.7） ----
       桌面用 height:calc(100vh - 90px) 锁死首屏高度 + justify-content:center 垂直居中，
       内容装得下时上下留白均匀，视觉没问题。
       但 ≤1023 单列后（kicker / h1 / sub / 双 CTA / 数据条 / 图 全部竖排），
       内容实际比 hero 还高，居中会让 .wrap 向上溢出，被 .hero{overflow:hidden} 切掉顶部
       ——kicker 落点约在 viewport y=40，正好压在 y 0..64 的固定导航底下，
       这就是 Boss 截图里「导航文字与 hero 文字叠加」的根因。
       改法：hero 不再锁死高度（height:auto，min-height 仅作视觉下限保底），
       wrap 从顶部开始，顶部留白上提到 .hero 自身（nav 64 + 24 呼吸 = 88）。
       代价：移动端首屏不再 100% 满屏，trust 随之下移——已知取舍，Boss 已确认。 */
    .hero{height:auto;min-height:calc(100vh - 90px);justify-content:flex-start;padding-top:88px}
    /* 登录态兜底：上面 .hero 是单类选择器，会被 .admin-bar .hero（双类）盖掉 height，
       这里必须同特异性再写一次，否则登录态下移动端修复失效。 */
    .admin-bar .hero{height:auto;min-height:calc(100vh - 90px - var(--wp-admin--admin-bar--height,32px))}
    .hero .wrap{gap:32px;padding-top:0;padding-bottom:40px}
    .hero-grid{grid-template-columns:1fr;gap:44px}
    .hero-bg{width:100%;opacity:.08;-webkit-mask-image:linear-gradient(180deg,transparent 0%,#000 60%);mask-image:linear-gradient(180deg,transparent 0%,#000 60%)}
    .hero-figure{height:320px}
    .hero-data{column-gap:24px}
    .hero h1{font-size:36px}
    .prod-grid{grid-template-columns:repeat(2,1fr)}
    /* 案例卡 3 列在 768–1023 区间会挤压（v0.3.8）
       此区间容器宽 = 100% - 128px ≈ 640–896，3 列每列仅 190–280px，
       h3 标题被迫在很窄的宽度内换行挤压（Boss 768 视口截图实测：标题断成碎行）。
       改 2 列后每列 310–438px，标题一行半内可读。≤767 由后面的规则再降为 1 列。 */
    .cases-grid{grid-template-columns:repeat(2,1fr)}
    .solutions-grid{grid-template-columns:repeat(2,1fr);grid-auto-rows:auto}
    .sol-feat{grid-column:span 2;grid-row:span 1;min-height:auto}
  }
  /* 短屏自适应：保证 logo 墙不被挤出首屏（笔记本 768/900 高度档位） */
  @media(min-width:1024px) and (max-height:900px){
    .hero .wrap{padding-top:76px;padding-bottom:36px;gap:28px}
    .hero h1{font-size:42px;margin:14px 0 16px}
    .hero .sub{margin-bottom:26px}
    /* 不再覆盖 margin-top：数据条用主规则的 auto 推到左列底部 */
    .hero-data{padding-top:24px;row-gap:14px}
    .hero-figure{height:400px}
  }
  @media(min-width:1024px) and (max-height:760px){
    .hero .wrap{padding-top:64px;padding-bottom:28px;gap:22px}
    .hero h1{font-size:36px;margin:12px 0 14px}
    .hero .sub{font-size:15.5px;margin-bottom:20px}
    .hero-data{padding-top:20px;row-gap:12px}
    .hero-figure{height:330px}
  }
  @media(min-width:1024px) and (max-height:680px){
    .hero .wrap{padding-top:52px;padding-bottom:20px;gap:18px}
    .hero h1{font-size:32px;margin:10px 0 12px}
    .hero .sub{font-size:15px;margin-bottom:16px}
    .hero-data{padding-top:16px;row-gap:10px}
    .hero-figure{height:280px}
  }
  /* 窄屏桌面（1024–1279）：mega 三栏收窄，导航列降为 2×2 防挤压 */
  @media(min-width:1024px) and (max-width:1279px){
    .mega-inner{grid-template-columns:210px 1fr 210px;gap:18px;padding:24px 20px}
    .mega-cols{grid-template-columns:repeat(2,1fr);gap:14px 20px}
    .mega-info{padding:18px}
    .mega-info p{margin-bottom:12px}
    /* 页脚：1280 以下三栏会挤压——容器仅 896–1151，中间导航每列不足 140px。
       改 2 栏：品牌与联系并排，导航整行下移后平铺 3 列（宽度反而更宽）。 */
    .foot-grid{grid-template-columns:1fr 1fr}
    /* v1.0.298：`repeat(3,1fr)` 写死 3 列 ✗ ⇒ 4 列时会掉到第二行 ✗
       改 auto-fit ✓ ⇒ 有第 4 列时**一行 4 个** ✓ 只有 3 列时**一行 3 个** ✓ 自适应 ✓ */
    .foot-nav{grid-column:1 / -1;grid-template-columns:repeat(auto-fit,minmax(120px,1fr))}
  }
  @media(max-width:767px){
    .wrap{padding:0 20px;max-width:100%}
    .nav-bar{padding:0 20px;gap:0}
    .menu{padding-left:20px;padding-right:20px}
    /* v1.0.59：移动端 .foot-grid 加 padding 0 20px（与 .wrap / .nav-bar 一致） */
    .foot-grid{padding:0 20px}
    /* ---- v1.0.168：页脚窄屏对齐（Boss 截图 + 实测 ✓）--------------------------------
       本档（≤767）页脚 `footer .wrap` 的左右 padding 实测为 **0** ✗（与正文区 .wrap 不同 ✓）
       ⇒ 主题规矩 = 页脚各块**自己补 20px** ✓（`.foot-grid` 上行 ✓ / `.foot-bottom` 下行 ✓ 都补了 ✓）。
       `.foot-links`（v1.0.166 新增）与 `.foot-bottom` 在本档也必须补 ✓，
       否则「友情链接」标题**顶到屏幕左缘** ✗（实测 `.foot-links-t` left=0 ✗ vs 三栏 20 ✓）。
       ⚠️ **只能写在本档** ✗ —— 平板档（768~1023）`.wrap` 自带 64px ✓，
          补了会变 84px 与导航（64px）不齐 ✗（v1.0.167 误放上文 ≤1023 块即此错 ✗，本版已迁 ✓）。 */
    .foot-bottom{padding-left:20px;padding-right:20px}
    .foot-links{padding:20px 20px 0}
    section{padding:72px 0}
    /* v1.0.114：移动端同步收口（首页除外）—— 否则基础层 `section + section{padding-top:104px}`
       会因选择器权重更高而绕过本块的 `section{padding:72px 0}`，移动端第二个 section 仍是 104。 */
    body:not(.home) section{padding:48px 0}
    body:not(.home) section + section{padding-top:48px}
    .hero h1{font-size:32px}
    .hero .sub{font-size:15.5px}
    .hero-figure{height:240px}
    .trust .wrap{flex-direction:column;align-items:flex-start;gap:14px;padding-top:18px;padding-bottom:18px}
    .trust .wrap .marquee{width:100%}
    .mq-group{gap:48px;padding-right:48px}
    .marquee span{font-size:14px}
    .sec-head{flex-direction:column;align-items:flex-start;gap:10px}
    .sec-head h2{font-size:26px}
    .sec-head .right{text-align:left}
    /* ---- 产品分类 tab：分类多时改横向滑动（v0.3.7） ----
       原 flex-wrap:wrap 在 ≤767 下 5 个分类会折成 2 行，白占一整行版面。
       改单行横向滚动：负 margin + 等量 padding 让滚动区铺满屏幕边缘，
       视觉上仍保留 20px 内边距；scroll-snap 让手指滑动后自动对齐到某个分类。
       桌面端（≥768）保持 wrap 不变——分类少时换行更直观，不引入横向滚动条。 */
    .products .filters{flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scroll-snap-type:x proximity;scrollbar-width:none;margin-left:-20px;margin-right:-20px;padding-left:24px;padding-right:24px;padding-bottom:6px;scroll-padding-left:24px}
    .products .filters::-webkit-scrollbar{display:none}
    .products .filters .filter{flex:0 0 auto;white-space:nowrap;scroll-snap-align:start}
    /* 左右切换箭头（v0.3.8）
       两端内边距 20 → 24：Boss 反馈滑动菜单左端贴边线太紧，留出呼吸。
       箭头绝对定位在滚动区两端，仅在「该方向还能滚」时显示（JS 切 .is-hidden），
       到头即隐，避免常驻遮挡分类文字。半透明白底 + 轻阴影保证压在内容上仍可辨。 */
    .filters-wrap{position:relative}
    .filters-nav{position:absolute;top:calc(50% - 3px);transform:translateY(-50%);z-index:2;width:30px;height:30px;border-radius:50%;border:1px solid var(--border);background:rgba(255,255,255,.94);box-shadow:0 2px 8px rgba(16,24,40,.10);display:grid;place-items:center;cursor:pointer;padding:0;transition:opacity .18s,visibility .18s,border-color .15s}
    .filters-nav svg{width:13px;height:13px;color:var(--text-2);transition:color .15s}
    .filters-nav.prev{left:-4px}
    .filters-nav.next{right:-4px}
    .filters-nav.is-hidden{opacity:0;visibility:hidden;pointer-events:none}
    .filters-nav:hover{border-color:var(--primary)}
    .filters-nav:hover svg{color:var(--primary)}
    .values-grid,.testi-grid,.blog-grid,.cases-grid{grid-template-columns:1fr}
    .prod-grid{grid-template-columns:1fr 1fr;gap:12px}
    .solutions-grid{grid-template-columns:1fr}
    .sol-feat{grid-column:span 1}
    .data-grid{grid-template-columns:repeat(2,1fr)}
    .stat{border-top:1px solid rgba(255,255,255,.12);padding:28px 22px}
    .stat:nth-child(-n+2){border-top:none}
    .stat .num{font-size:38px}
    section.cta h2,.flt-sec.cta h2{font-size:26px}
    /* 页脚：全单列。
       旧的 .foot-grid{grid-template-columns:1fr 1fr} + .foot-brand{grid-column:1/-1}
       是 5 栏时代的降级写法，三栏布局后不再适用，直接塌成 1 列。
       二维码组本身是 flex，会自然并排——这里只把图片尺寸收小一点。 */
    .foot-grid{grid-template-columns:1fr;gap:32px}
    .foot-nav{grid-template-columns:1fr}
    .qr img{width:84px;height:84px}
  }

  /* ===== v1.0.83 列表卡封面统一规则：产品卡 / 案例卡 / 博客卡 =====
     目标：无论上传图片的原始尺寸如何，前端封面高度完全一致（三类卡片同比例）。
     做法：容器 aspect-ratio（比例来自 :root --cover-ratio，改一处三类同步）+ overflow:hidden；
          图片 width/height 100% + object-fit:cover（等比裁切、不变形、居中）。
     ⚠️ 两个历史坑（勿回退）：
       ① 容器禁止再声明固定 height —— v1.0.66 踩过：固定 140px + 16/9 会让「宽度被比例反推」
          （width = height × ratio）→ 封面莫名变窄。故统一 height:auto/min-height:0，
          并清掉博客卡旧 height:200px 与案例卡 case.css 的 min-height:140px。
       ② v1.0.73 曾判断「flex 子项上 aspect-ratio 不产生高度」—— 属误判（真因是 .card-link 的
          align-items:center 让宽度收缩为内容宽，v1.0.81 已修为 stretch）。宽度确定后 aspect-ratio 可安全工作。
     选择器精确到"封面图本身"，不用宽泛后代：
       - 产品卡图在 <a> 内 → .art > a > img
       - 博客卡 / 案例卡图是直接子元素 → .thumb > img
       - 案例卡内部还有客户 logo 图（.thumb > .cover-logo > img，有独立规则），
         「> img」写法天然避开它，避免被强制 absolute 破坏徽标布局。 */
  .prod-card .art,
  .blog-card .thumb,
  .case-card .thumb{height:auto;min-height:0;aspect-ratio:var(--cover-ratio);position:relative;overflow:hidden;display:block}
  /* v1.0.84：产品卡改用专用比例 4/3（主体式商品图；案例 / 博客保持 16/9 场景式横图）。
     写在统一组之后 —— 同特异性 (0,2,0)，后者胜出。容器其余属性继续由上一组承担。 */
  .prod-card .art{aspect-ratio:var(--cover-ratio-product)}
  .prod-card .art > a > img,
  .blog-card .thumb > img,
  .case-card .thumb > img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;display:block}
  .prod-card .art > a > img{transition:transform .3s ease}
  .prod-card:hover .art > a > img{transform:scale(1.04)}
  @media(prefers-reduced-motion:reduce){.prod-card .art > a > img{transition:none!important}}

  /* ===== v24 移动端菜单做减法：去掉推荐区(.mega-help) 与 信息区(.mega-info) =====
     这两块是桌面三栏布局的填充物，进单列后变成拦在跳转路径上的广告位。
     移动端只保留分级菜单（分组标签 + 品名 + 规格副文本），与桌面共用同一套 DOM。 */
  @media(max-width:1023px){
    .mega-help,.mega-info{display:none!important}
    /* v0.5.18：移动端 mega 单列后仍占整宽，子项会被拉得很散（视觉上「RFID 标签」/「超高频标签」/「2.4G 标签」等横跨整宽）——
       收窄内层容器到 90% 并水平居中，让层级标题与品名自然堆成左对齐列表 */
    .mega-inner{gap:0;max-width:90%;margin:0 auto}
    .mega{padding:2px 0 10px}
    .mega-cols{gap:14px}
    .mega-col a{padding:9px 0}
    /* v0.5.18：mega 列内品名后的 .sub 描述（如「UHF标签」「2.4G」）在移动端不需要显示（屏幕窄、列表已是单列，描述冗余） */
    .mega-col a .sub{display:none}
    /* v0.5.18：iOS 点击 <a> 会留下粘性 :hover，让 .menu-item:hover .chev{rotate:180} 卡在展开方向，
       再次点击同项时 chev 无法复位。移动端只认 .open 决定方向，:hover 不旋转 */
    .menu-item:hover .chev{transform:none}
    .menu-item.open .chev{transform:rotate(180deg)}
    /* v0.5.18：默认 -webkit-tap-highlight-color 是浅蓝，移动端导航区域全局去掉点击闪现高亮 */
    .menu,.menu a,.menu button{-webkit-tap-highlight-color:transparent}
    /* v0.5.19：移动端 dropdown 默认隐藏，与 mega 同套逻辑（.menu-item.open > .dropdown{display:block} 全局规则 line 88 接管）——
       原 v0.5.14 设的 `display:block` 让所有 dropdown 在移动端永远展开，
       JS 切 .open 只翻转 chev 不影响可见性，用户点 chev「收回」无反应。
       这里把默认态改回 display:none，配合 .open 切换即可像 mega 一样单击展开/二次单击收起。
       另外显式禁用 :hover 显示 dropdown，绕开 iOS 粘性 :hover 把 dropdown 卡在显示状态 */
    /* v0.5.20：去掉 v0.5.19 的 !important —— iOS 粘性 :hover 时 !important 把 .open 也压死。
       改回源序后置覆盖：同特异性下规则出现先后决定胜负（与 mega line 464~466 同套写法）。 */
    .dropdown{position:static;box-shadow:none;border:none;padding:0 0 0 16px;min-width:0;max-width:none;display:none}
    .menu-item:hover .dropdown{display:none}
    .menu-item.open .dropdown{display:block}
    .dropdown a{padding:9px 0}
    /* v0.5.15：子级 flyout 在抽屉里同样改静态内联，按层级左缩进展开（不浮出） */
    .sub-menu{position:static;box-shadow:none;border:none;padding:0 0 0 16px;min-width:0;max-width:none;display:block}
    .chev-fly{transform:rotate(90deg)}
  }

  /* ===== v24 小屏产品卡切单列：≤480px 时 2 列只有 167px 宽，缩略图 111px 高——太小 =====
     单列后 390 宽机型缩略图 350×233；481–767 保持 2 列（卡片 210–350px 宽，可接受） */
  @media(max-width:480px){
    .prod-grid{grid-template-columns:1fr;gap:14px}
  }

  /* ==========================================================================
     M0 修正 1：标题层级降级后的样式继承
     --------------------------------------------------------------------------
     首页 v2b 的 mega menu 与页脚使用 h4/h5，源码位置在 h1 之前，
     屏幕阅读器与 SEO 检查工具判定为层级越级。M0 已把这些元素改成
     p.mega-h / p.mega-col-t / p.foot-t，此处补回原样式。
     保留旧的 h4/h5 选择器，是为了兼容客户已有的自定义内容。
     ========================================================================== */
  .mega-info h4,
  .mega-help h4,
  .mega-h{font-size:15.5px;font-weight:600;color:var(--text);margin:0 0 8px;line-height:1.4}

  .mega-col h5,
  .mega-col-t{font-family:var(--mono);font-size:10.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--text-3);margin-bottom:10px}

  .foot-grid h4,
  .foot-t{font-family:var(--mono);font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--text-3);margin-bottom:18px}

  .foot-menu-list{list-style:none;margin:0;padding:0}
  .foot-menu-list li{margin:0}

  /* ==========================================================================
     M0 修正 2：移动端触控目标尺寸
     --------------------------------------------------------------------------
     首页 v2b 在 390px 视口下有 43 处触控目标小于 32px：
     logo 28px、汉堡 20×16px、卡片标题 22px、「询盘 →」22px、CTA 21px。
     依据 WCAG 2.5.8 与移动端实操，交互元素最小可点区域定为 32px。
     只补最小尺寸与对齐方式，不动字号、配色与视觉层级。
     ========================================================================== */
  @media(max-width:767px){
    .logo{min-height:32px;display:inline-flex;align-items:center}
    .burger{min-width:32px;min-height:32px}
    .menu-link{min-height:32px;display:flex;align-items:center}
    .nav-cta{min-height:36px;display:inline-flex;align-items:center}
    .lang-btn{min-height:32px}
    .filter{min-height:32px;display:inline-flex;align-items:center}
    /* v1.0.81：【限定作用域】原裸 .card-link 会命中案例卡片的整卡链接容器
       （案例卡 <a class="card-link"> 包住整个卡片），其 align-items:center 会让
       .thumb/.body 水平居中收缩（thumb 宽度塌陷 → 封面不可见、body 错位）。
       该规则本意只是给产品/博客卡的标题文字链接撑触控高度 → 收窄到卡片内部链接。 */
    .prod-card .card-link,.blog-card .card-link{min-height:32px;display:inline-flex;align-items:center}
    .prod-card .row .link{min-height:32px;display:inline-flex;align-items:center}
    .btn{min-height:40px;display:inline-flex;align-items:center;justify-content:center}
    .foot-grid a{min-height:32px;display:flex;align-items:center;margin-bottom:6px}
    .mega-col a{min-height:32px;display:flex;align-items:center}
  }

  /* ==========================================================================
     M0 修正 3：首屏三变体（industrial / photo-card / photo-full）
     --------------------------------------------------------------------------
     三套的左侧文案（眉标 / 主标题 / 副文案 / 双 CTA / 数据条）完全共用，
     差异只在「右侧视觉区」与「是否压深色蒙版」，所以这里只写差异部分。

     版式类名由 flt_hero_layout_class() 输出到 <section class="hero"> 上。
     ========================================================================== */

  /* --- 变体 B：照片卡片 -----------------------------------------------------
     右侧换成实拍照片，蓝图网格与线稿插画都要让位，否则会压在图上面 */
  .hero-layout-photo-card .hero-figure{background:var(--dark);border-color:transparent}
  .hero-layout-photo-card .hero-figure .photo{display:none}
  .hero-layout-photo-card .hero-figure .scene{display:none}
  .hero-layout-photo-card .hero-figure img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1}
  .hero-card-badge{position:absolute;left:16px;bottom:16px;z-index:2;display:flex;gap:20px;
    background:rgba(15,23,42,.72);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
    border:1px solid rgba(255,255,255,.14);border-radius:8px;padding:12px 18px}
  .hero-card-badge .b{display:flex;flex-direction:column;gap:2px}
  .hero-card-badge .b b{font-family:var(--mono);font-size:17px;font-weight:700;color:#fff;line-height:1.2}
  .hero-card-badge .b span{font-size:11.5px;color:rgba(255,255,255,.66);letter-spacing:.04em}
  /* 占位图状态（没绑定图片）下浮标依然要压得住，此时底图是浅灰 SVG */
  .hero-layout-photo-card .hero-figure img.flt-ph{background:#1F2937;object-fit:contain;padding:32px}

  /* --- 变体 C：通栏大图 -----------------------------------------------------
     全站唯一的深色首屏：整块反色 + 斜向渐变蒙版保证左侧文字区对比度 */
  .hero-layout-photo-full{background:var(--dark);min-height:calc(100vh - 65px)}
  .hero-layout-photo-full .hero-bg-full{position:absolute;inset:0;z-index:0;overflow:hidden}
  .hero-layout-photo-full .hero-bg-full img{width:100%;height:100%;object-fit:cover;object-position:center}
  /* 100° 斜向、左重右轻：左侧是文字落点，必须压得够深；右侧留给照片主体 */
  .hero-layout-photo-full::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
    background:linear-gradient(100deg,rgba(15,23,42,.92) 0%,rgba(15,23,42,.76) 46%,rgba(15,23,42,.44) 100%)}
  /* .hero::before 的蓝图网格压在照片上会变成脏噪点，深色首屏一律关掉 */
  .hero-layout-photo-full::before{display:none}
  .hero-layout-photo-full .hero-bg{display:none}
  .hero-layout-photo-full .wrap{position:relative;z-index:2;padding-top:132px;padding-bottom:72px}
  .hero-layout-photo-full .hero-grid{grid-template-columns:minmax(0,1fr);max-width:820px}
  .hero-layout-photo-full .kicker{color:#8FB4FF}
  .hero-layout-photo-full .kicker::before{background:#8FB4FF;box-shadow:0 0 0 4px rgba(143,180,255,.20)}
  .hero-layout-photo-full .kicker .en{color:rgba(255,255,255,.55)}
  .hero-layout-photo-full h1{color:#fff}
  .hero-layout-photo-full h1 .accent{color:#8FB4FF}
  .hero-layout-photo-full .sub{color:rgba(255,255,255,.82);max-width:560px}
  .hero-layout-photo-full .btn-ghost{background:rgba(255,255,255,.10);color:#fff;border-color:rgba(255,255,255,.34)}
  .hero-layout-photo-full .btn-ghost:hover{background:rgba(255,255,255,.18);border-color:#fff;color:#fff}
  .hero-layout-photo-full .hero-data{border-top-color:rgba(255,255,255,.18);margin-top:44px;padding-top:32px}
  .hero-layout-photo-full .hero-data b{color:#fff}
  .hero-layout-photo-full .hero-data b i{color:#8FB4FF}
  .hero-layout-photo-full .hero-data span{color:rgba(255,255,255,.66)}
  .hero-layout-photo-full .hero-data .m::before{background:#8FB4FF}
  .hero-layout-photo-full .hero-right{display:none}

  /* 深色首屏下的固定导航反色：导航初始态透明，不反色就会深字压深图彻底消失 */
  .has-hero-dark .nav:not(.nav-solid) .logo,
  .has-hero-dark .nav:not(.nav-solid) .menu-link,
  .has-hero-dark .nav:not(.nav-solid) .nav-phone,
  .has-hero-dark .nav:not(.nav-solid) .nav-phone a,
  .has-hero-dark .nav:not(.nav-solid) .lang-dd .lang-btn{color:#fff;border-color:rgba(255,255,255,.28)}
  .has-hero-dark .nav:not(.nav-solid) .logo .mark{border-color:rgba(255,255,255,.70);color:#fff}
  .has-hero-dark .nav:not(.nav-solid) .menu-link:hover,
  .has-hero-dark .nav:not(.nav-solid) .menu-item.open .menu-link{color:#8FB4FF}
  .has-hero-dark .nav:not(.nav-solid) .menu-link::after{background:#8FB4FF}
  .has-hero-dark .nav:not(.nav-solid) .burger span{background:#fff}
  .has-hero-dark .nav:not(.nav-solid) .nav-cta{background:#fff;color:var(--dark)}
  .has-hero-dark .nav:not(.nav-solid) .nav-cta:hover{background:#8FB4FF;color:var(--dark)}

  /* 窄屏：斜向渐变在小屏上会压不住整片文字区，改成纵向渐变压满 */
  @media(max-width:1023px){
    .hero-layout-photo-full::after{background:linear-gradient(180deg,rgba(15,23,42,.88) 0%,rgba(15,23,42,.78) 100%)}
    .hero-layout-photo-full .wrap{padding-top:104px;padding-bottom:52px}
    .hero-card-badge{left:12px;bottom:12px;gap:14px;padding:10px 14px}
    .hero-card-badge .b b{font-size:15px}
  }

  /* --- 样板内的核心区块收敛到主题观感 -------------------------------------
     样板只能用核心区块（core/button、core/heading 等），它们的默认字号、
     圆角、内边距和主题不统一，这里统一收一遍。 */
  .hero .wp-block-buttons{gap:14px;flex-wrap:wrap}
  .hero .wp-block-button__link{border-radius:5px;padding:13px 28px;font-size:15px;font-weight:600;line-height:1.2}
  .hero .wp-block-button.is-style-outline .wp-block-button__link{background:transparent;border:1px solid var(--border);color:var(--text)}
  .hero-layout-photo-full .wp-block-button.is-style-outline .wp-block-button__link{background:rgba(255,255,255,.10);border-color:rgba(255,255,255,.34);color:#fff}
  .hero .wp-block-columns{margin-bottom:0}
  .hero .hero-figure .wp-block-image{margin:0;position:absolute;inset:0;height:100%}
  .hero-layout-photo-card .hero-figure .wp-block-image img{width:100%;height:100%;object-fit:cover}
  /* cover 当通栏大图用时的层级：蒙版走 .hero-layout-photo-full::after（z-index:1），
     所以内层容器必须压到 z-index:2，否则文字会被蒙版整片盖住 */
  .hero-layout-photo-full .wp-block-cover__inner-container{position:relative;z-index:2;max-width:100%;padding:0}
  .hero-layout-photo-full .wp-block-heading{color:#fff}

  /* --- v0.6.0 区块化兼容层（P2：首屏） -------------------------------------
     首页区块改用核心块输出后，核心块的类名与骨架版式不同，这里做映射。

     三条必须记住的事实：
       1. 只并列选择器，不重写已有规则——骨架版式（PHP）与区块版式共用同一套视觉，
          区块化过渡期内两者会并存，改旧规则会让其中一方失真。
       2. Gutenberg 富文本会把 <b>/<i> 规范化成 <strong>/<em>，裸 <span> 会被剥离，
          所以数据条与图注改用独立段落 + 类名，CSS 这边两条选择器并列兼容。
       3. theme.json 的 blockGap 会给 .is-layout-flow 的子元素加 margin-block-start，
          在 grid 容器里会叠加成额外行距，必须显式归零（骨架版式没有这类，不受影响）。 */

  /* flow 布局的自动间距归零：主题自己控制节奏，核心块不要插手 */
  .hero .is-layout-flow>*{margin-block-start:0}

  /* ── 间距还原（v0.6.3）───────────────────────────────────────────
     归零规则是 (0,2,0)，会把下面这几个 (0,1,0) 的 margin-top 一起吃掉，
     必须紧跟在归零规则之后、用 (0,3,0) 写回来。顺序不能调换。

     其中 .hero-data 这条是「首屏分割线压到按钮」的直接根因：
     数据条靠 margin-top:auto 沉到左列底部、与右侧图对齐（见 line 171）。
     auto 一旦被清成 0，数据条就会贴在按钮下面，它的 border-top
     正好落在按钮底边上，看起来就是「分割线和按钮重合」。 */
  .hero .is-layout-flow>h1{margin-top:20px}
  .hero .is-layout-flow>.hero-data{margin-top:auto}
  .hero .is-layout-flow>.fig-cap{margin-top:12px}
  .hero .is-layout-flow>p.label{margin-top:4px}

  /* 首屏网格：core/group 表达两列，双类选择器（0,2,0）压住核心块样式。
     v0.8.0 修复：必须限定 ≥1024 —— 本条是文件末尾的 (0,2,0)，原先不限媒体时
     会把 ≤1023 的单列规则（line 501，(0,1,0)）按特异性+源顺序双杀，
     移动端被压成 180px/111px 两列，图片挤在标题旁、下方留大片死区（Boss 实测截图）。
     包进媒体查询后，≤1023 自然回落到单列，图片沉到内容下方。 */
  @media(min-width:1024px){
    .hero .hero-grid{display:grid;grid-template-columns:1.02fr .98fr;gap:56px;align-items:stretch}
  }
  .hero .hero-left{display:flex;flex-direction:column}
  .hero .hero-right{position:relative}

  /* 首屏按钮：核心块按钮映射到主题 .btn-primary / .btn-ghost 观感。
     注意主按钮是深字压橙（白字压 #FF6A00 对比度仅 2.87，不达 WCAG AA） */
  .hero-cta .wp-block-button:first-child .wp-block-button__link{background:var(--accent);color:#0F172A;border:1px solid transparent}
  .hero-cta .wp-block-button:first-child .wp-block-button__link:hover{filter:brightness(1.06)}
  .hero-cta .wp-block-button.is-style-outline .wp-block-button__link{background:var(--bg);color:var(--text);border-color:var(--border)}
  .hero-cta .wp-block-button.is-style-outline .wp-block-button__link:hover{border-color:var(--primary);color:var(--primary)}

  /* 数据条：<b>/<i> 与 <strong>/<em> 并列，说明文字走 .label 段落 */
  .hero-data b,.hero-data p strong{display:block;font-size:22px;font-weight:700;letter-spacing:-.01em;font-family:var(--mono);color:var(--text);line-height:1.2}
  .hero-data b i,.hero-data p em{font-style:normal;font-size:13px;color:var(--primary);margin-left:3px;font-weight:600}
  .hero-data span,.hero-data p.label{font-size:13.5px;color:var(--text-2);margin-top:4px;display:block}
  .hero-data .m p,.fig-cap p{margin:0}

  /* 图注：两个段落左右分列（骨架版式是 span，同一条规则兼顾） */
  .fig-cap p{font-family:var(--mono);font-size:11px;color:var(--text-3);letter-spacing:.04em}

  /* --- v0.6.1 区块化兼容层（P3：首屏之后的六个首页区块） -------------------
     trust / values / solutions / data / testimonials / cta 改用核心块输出后，
     与骨架版式（template-parts/home/*.php）的差异在这里收敛。

     沿用 P2 那一段的三条事实：
       1. 只并列选择器，不重写已有规则——骨架版式与区块版式在过渡期并存，
          改旧规则会让其中一方失真。P5 删掉 PHP 模板后这一段要整体复查。
       2. Gutenberg 富文本把 <b>/<i> 规范化成 <strong>/<em>，裸 <span> 会被
          剥离，所以序号 / 单位 / 署名全部拆成独立段落 + 类名。
       3. theme.json 的 blockGap（16px）会给 .is-layout-flow 的直接子元素加
          margin-block-start，在 grid 容器里会叠加成额外行距，必须归零。

     ⚠️ 归零规则的代价（改这块之前必读）：
       归零用 .flt-sec .is-layout-flow>*（0,2,0），会连带吃掉主题自己写的一批
       margin-top——它们只有 (0,1,1) 或 (0,2,0)，压不住归零规则。所以紧跟在
       归零规则后面的那一组「间距还原」必须保留，且不能移到归零规则之前。
       以后新增区块若需要 margin-top，记得来这里补一条，否则会静默失效。 */

  /* ── flow 自动间距归零：主题自己控制节奏，核心块不要插手 ────────────── */
  .flt-sec .is-layout-flow>*{margin-block-start:0}

  /* ── section 的上下留白映射到区块 ──────────────────────────────────
     骨架版式靠元素选择器 section{padding:104px 0}；区块版式是 div，
     拿不到。.data / .cta / .trust 的规则自带 padding，不需要补。 */
  .values,.solutions,.testi{padding:104px 0}

  /* ── 间距还原：被归零规则吃掉的，按 main.css 原值写回 ──────────────── */
  .flt-sec .value h3{margin:14px 0 8px}
  .flt-sec .certs{margin-top:30px}
  .flt-sec .all-link{margin-top:44px}
  .flt-sec .sol-feat h3{margin:18px 0 12px}
  .flt-sec .sol-card .more{margin-top:14px}
  .flt-sec .stat .lbl{margin-top:14px}
  .flt-sec .lead-col .lead-2{margin:8px 0 0}

  /* ── 信任条 ──────────────────────────────────────────────────────── */
  /* 品牌名：骨架版式是 <span>，区块版式是 <p>（裸 span 会被富文本剥离） */
  .marquee span,.marquee p{font-family:var(--mono);font-size:17px;font-weight:700;letter-spacing:.06em;color:#6B7280;flex:0 0 auto;transition:color .2s;cursor:default}

  /* ── v1.0.192：跑马灯支持**图片 logo** ✓（Boss：「品牌名应该能传 logo 图，而不只是文字」✓）──
     沿用归档页「客户 Logo 墙」的 B2B 惯例 ✓：**灰度 + 半透明**，悬停恢复彩色 ✓
     （与 `.case-logo-wall .logo-wall-item img` 同一套观感 ✓ 客户心智一致 ✓）
     尺寸：高度 26px ✓（与文字行高协调 ✓）宽自适应 ✓ 等比不拉伸 ✓ */
  .marquee img{height:26px;width:auto;max-width:none;display:block;flex:0 0 auto;
    filter:grayscale(1);opacity:.72;transition:filter .2s,opacity .2s}
  .marquee img:hover{filter:none;opacity:1}
  @media(max-width:767px){ .marquee img{height:22px} }
  .marquee span:hover,.marquee p:hover{color:var(--text)}
  /* 数据背书的 <b> 在编辑器里会存成 <strong>，两条并列 */
  .lead b,.lead strong{color:var(--text);font-weight:700}
  /* 轨道动画只在 .is-looping 上跑（该类由 main.js 克隆完第二组后添加）。
     把 animation 从 .marquee-track 挪到这里的理由见 line 189 的注释。 */
  .marquee-track.is-looping{animation:scroll 38s linear infinite}

  /* ══ v1.0.189：`flt/hero-full` 首屏整体性 + logo 条两端对齐（Boss 定稿 ✓）══════
     【Boss 原话 ✓】
       ①「他是**全局性**的，可以在**任意页面**中组装，都是 **100% 的首屏显示**」✓
       ②「内容区是 **max-width:var(--max)**」✓
     ⇒ 因此本段所有规则**只跟着本区块的布局类 `.hero-layout-industrial`** 走 ✓
        （在任意页面插入本块都成立 ✓）；**不修改全局 `.hero` / `.trust`** ✗

     ── 三个问题与修法（对照截图 ✓）────────────────────────────────────
     ① **整块正好一屏** ✓（原来能露出下一屏 ✗）
        根因：`.hero{height:calc(100vh - 90px)}` ✗ —— 那 **90px 是留给"logo 条在 hero 外面"
        的旧场景**（main.css 原注释："trust 底部会被顶出视口 / 90 应改成 112" ✓
        证明它算的就是 trust 的高度 ✓）。现在 logo 条**已在 hero 内部** ✓
        ⇒ 再减 90px 就凭空多出 90px 空白 ⇒ 露出下一屏 ✗
        改：`min-height:100vh`（+ `100svh` 修正移动端动态工具栏 ✓）✓ **不再减** ✓
     ② **正文偏上** ✗ → 应在**自身容器（logo 条以上的空间）里垂直居中** ✓
        根因：上一版只用 `margin-bottom:auto` ✗ ⇒ 剩余空间被吸走 ⇒ 正文被顶到最上 ✗
        改：`margin:auto 0` ✓ ⇒ 上下同时吸 ⇒ **真居中** ✓
     ③ **logo 条贴 hero 底部** ✓：`margin-top:auto` ✓
     ④ **logo 条两端对齐 + 宽度 = 内容区** ✓（原来是通栏出血 ✗）
        根因：嵌套的 `.wrap` 被 `.hero .wrap{flex-direction:column}` 命中 ✗
        （与 `.trust .wrap` **特异性相同、源码靠后者胜** ✗）⇒ 被压成上下堆叠 + 居中 ✗
        改：用**更高的特异性**给出**行布局** ✓（左 `.lead-col` 固定 ✓ + 右 `.marquee` 占满 ✓
        + `justify-content:space-between` ✓），宽度取 **`max-width:var(--max,1200px)`** ✓
        （`--max` 缺失时回落 1200 ✓ 不会退化成全宽 ✗）
     ── 响应式 ────────────────────────────────────────────────────────
       ≤767px：条内改回**竖排堆叠** ✓（与主题移动端一致 ✓）其余规则不动 ✓ */
  /* v1.0.190 修正（Boss 实测 ✓）：
     · 内容区**必须保持 `margin:0 auto`** ✓ —— 上一版写 `margin:auto 0`（左右为 0 ✗）
       ⇒ **水平居中丢了** ✗（截图：内容贴左边 ✗）。改 **`margin:auto`** ✓：上下 auto = 垂直居中 ✓
       左右 auto = 水平居中 ✓（与全局 `.wrap{margin:0 auto}` 行为一致 ✓）
     · logo 条**底部被遮** ✗ ⇒ hero 加 **`padding-bottom:24px`** 留出呼吸位 ✓
       （仍视觉贴底 ✓ 但不再顶到视口最下沿被系统任务栏/浏览器工具条压住 ✓）
     · `max-width` **去掉 1200 回退** ✗ —— 实际 `--max` = **1400** ✓
       回退 1200 会让 logo 条**比内容区窄** ✗ ⇒ 统一用 **`var(--max)`** ✓ 与内容区**同口径** ✓ */
  /* v1.0.191（Boss 追加 ✓）：
     · **标题行距收紧** ✓ —— `.hero h1{line-height:1.22}` 那套**只认 h1** ✗，
       本块默认输出 h2 ✗ ⇒ 会退回全局 heading 行高（偏宽 ✗ 截图实证 ✓）
       ⇒ 由本块自己对 **h1 / h2 / div / span 一律**给出设计稿参数 ✓（字号 48 ✓ 行高 1.12 ✓）
       后台可用「标题样式」面板覆盖字号与行高 ✓（行内样式优先 ✓）
     · **去掉条下外缝** ✗ —— 上一版 hero 的 `padding-bottom:24px` 会露出**背景缝隙** ✗
       ⇒ 改 `padding-bottom:0` ✓，把呼吸位放进**条子自己**（同色 ⇒ 看不到缝 ✓） */
  /* ⭐ v1.0.195 **结构性修正**（Boss 实测"首屏显示不全、要滚动才看全" ✗；Boss 指路看原代码 ✓）
     原文（main.css L175）：`.hero{height:calc(100vh - 90px);min-height:calc(100vh - 90px)}`
       ⇒ **减掉头部预留 90px** ✗ 不是 100vh ✗
     原文（main.css L233）：`.trust{…;min-height:88px}` ⇒ 信任条是 hero 的【**兄弟**】✓
       ⇒ 原文总高 = (100vh − 90) + 88 + 2 = **正好 100vh** ✓✓ ⇒ 一屏显示全 ✓
     我 v1.0.187 把条子放进 hero 内部 ✗ ⇒ 只能 `min-height:100vh` ✗ ⇒ **溢出 ≈90px** ✗
       ⇒ 条子下缘出视口 ✗ ⇒ **必须滚动才看全** ✓✓ **这就是真根因** ✓
     ⇒ 本版：条子移出 hero ✓（见 blocks/hero-full/render.php ✓）+ 高度回归原文算法 ✓
     ⇒ **不再靠 padding 凑数值** ✗（v1.0.192~194 那几组 padding 已全部撤销 ✓）
     · `100svh` 保留 ✓（移动端动态工具栏更准 ✓ 老浏览器回落 `100vh` ✓）*/
  .hero.hero-layout-industrial{
    /* ⭐ v1.0.196：**安全边并入高度算式** ✓ —— 这才是 Boss 说的"调整 hero 与底部条子的距离" ✓
       （**不是**在条子里塞 padding ✗ —— 那只会把条子撑厚 ✗ 观感更差 ✗）

       原算式 = `100vh - 90px` ✓（90 = 条子高 ✓ 主题原注释 L169 亲口说明 ✓）
       ⇒ 条子底边**正好压在视口最底沿** ✗
       ⇒ 而真实环境里：**浏览器工具条 / Windows 任务栏（全屏时悬浮）约 40px** ✗ 会盖住它 ✗
       ⇒ 表现：首屏看**不全** ✗、滚一下才出来 ✓（Boss 反复实测 ✓）

       ⇒ 修法 ✓：把安全边**减进 hero 高度** ⇒ hero 变矮 ⇒ **条子整体上移** ✓✓
         `100vh - 90px - 40px` ✓ ⇒ 条子底边距视口底 **40px** ✓ ⇒ 稳定可见 ✓
       ⇒ 想再调：只改 `--flt-hf-safe` 一个数 ✓（32 紧 / 40 稳妥 / 56 更宽松 ✓）
       ⇒ 移动端另有 `svh` 版本 ✓（避开地址栏伸缩 ✗ 更准 ✓）*/
    height:auto;              /* ★ 必须覆盖线上原文 height:calc(100vh - 90px) ✗ 否则与 min-height 打架 ✗ */
    /* ⭐ v1.0.201：**动态安全边** —— `--flt-hf-safe` 由本区块内联 JS 实测写入 ✓
       （Boss 实测：PC 全屏时 Windows 任务栏、移动端底部 home 条 **会覆盖**条子 ✗
         ⇒ 而 CSS 的 `vh`/`svh` **感知不到它们** ✗ 因为它们只是"盖在视口上" ✗
         ⇒ 只能由 JS 量出来 ✓ ⇒ hero **缩掉被遮的那部分高度** ⇒ 条子上移 ✓✓
         被缩掉的那段本来就在遮挡区里 ⇒ **看不见** ✗ ⇒ 无副作用 ✓）
       JS 取不到时（未执行/被拦）⇒ `0px` ✓ ⇒ 退化成原来的 `100vh` 行为 ✓ 不会坏 ✗ */
    /* ⭐ v1.0.203：hero **不再缩** ✗ —— 恢复整屏 ✓
       （202 的 `calc(100vh - safe)` 会把 hero 拉矮 ⇒ 条子下方**露出空白** ✗
         ⇒ 正是 Boss 说的"没贴到视口底部" ✗ ✓）
       改为：**hero 保持 100vh（背景铺满到视口底 ✓）+ 由条子的下内边距承担避让** ✓
         ⇒ 见下方 `.flt-sec.trust` 的 `padding-bottom` ✓ —— 内容上移、背景仍铺底 ✓ 两全 ✓ */
    /* ⭐⭐ v1.0.207：**本块所有可调数值集中在此** ✓（Boss 偏好「数值类问题单点可调」✓）
       —— 各响应式档位从此**只改变量值** ✓ 不再把同一属性重复写 5~6 遍 ✗
          （v1.0.206 及以前的写法：`hero-figure` 高度被赋值 5 次 ✗ / 数据条 5 次 ✗ /
            标题 4 次 ✗ ⇒ 后续每次微调都要 6 处一起改 ✗ 极易漏改 ✗  ——— 本轮 Boss 已确认去重 ✓）
       · `--hf-fig-h`   右侧示意图高度 ✓（PC 基准 560 ✓）
       · `--hf-gap`     内容区纵向间距 ✓（= 主题原值 40 ✓ 显式接管以便分档 ✓）
       · `--hf-pad-top` 内容区上内边距 ✓（让开固定导航 64px + 呼吸 8px ✓）
       · `--hf-data-pt` 数据条上内边距 ✓ ／ `--hf-data-row` 数据条行距 ✓
       · `--hf-fill`    封面图填充方式 ✓（cover 撑满 ✓ / contain 完整 ✓ 见下方 img 规则 ✓）
       ⚠️ 全部限定在 `.hero-layout-industrial` 作用域 ✓ ⇒ 其它 hero 变体与样板**不受影响** ✓*/
    --hf-fig-h:560px;
    --hf-gap:40px;
    --hf-pad-top:72px;
    --hf-data-pt:24px;
    --hf-data-row:20px;
    min-height:100vh;
    min-height:100svh;         /* 移动端地址栏伸缩更准 ✓ */
    /* ⭐ v1.0.207 **去重**：原来的 `display:flex` + `flex-direction:column` 与主题
       `.hero{display:flex;flex-direction:column;justify-content:center}`（L175 ✓）**值完全相同** ✗
       ⇒ 纯冗余 ✓ 删掉零影响 ✓（`justify-content` 仍由主题给 ✓）*/
    padding-bottom:0}

  /* ⭐⭐ v1.0.208 **登录态（admin bar）补偿** ✓✓ —— Boss 2026-09-17 报「底部 logo 条下方被遮挡」✗ 的**真根因** ✓
     真机复现（`tools/visual/measure-hero.js` · FLT_ADMIN=1 ✓）✗：
       PC 全档（1920/1440/1536×700/1024×768）⇒ 条子底边溢出视口 **32px** ✗
       ≤782px（768/390）⇒ 溢出 **46px** ✗
       —— 两个数字**恰好等于 WP 管理工具条高度** ✓（内核给 `html` 加 `margin-top:32px|46px` ✓
          ⇒ **整块被下推** ⇒ 条子底部被推出视口 ⇒ 看起来"被遮挡/被切" ✓）
     为什么以前没暴露 ✗：主题的老 hero 自带补偿 ✓
       （`.admin-bar .hero{height:calc(100vh - 90px - var(--wp-admin--admin-bar--height,32px))}` · L180 ✓）
       而本块是 **v1.0.187 新结构** ✓ 只写了 `min-height:100vh|100svh` ✗ ⇒ **没扣这 32/46** ✗
       ⇒ 只有"**登录后台再看首页**"才会遇到 ✗ ⇒ 最容易被漏测的场景 ✗（本轮就漏了 ✗ 已登记纪律 ✓）
     修 ✓：与主题同款口径，按 `--wp-admin--admin-bar--height`（内核提供 ✓ 自动随断点切换 32/46 ✓）扣减 ✓
     ⚠️ 特异性 (0,3,0) > `.hero.hero-layout-industrial`(0,2,0) ✓ ⇒ 一条即可覆盖所有分档 ✓
        （移动端那档在下方媒体查询里另有同款 ✓ 因为它的算式多了 `+56px` ✓）*/
  .admin-bar .hero.hero-layout-industrial{
    min-height:calc(100vh - var(--wp-admin--admin-bar--height,32px));
    min-height:calc(100svh - var(--wp-admin--admin-bar--height,32px));
  }

  /* ⭐ v1.0.197 **真凶修正**：hero 与条子之间的 **16px WP 区块间距** ✗
     —— 真机实测（Chromium/Edge · 1920×1080 ✓）：
          hero 底边 990 ✓（= 100vh−90 ✓ 算式本来就对 ✓）
          条子顶边 **1006** ✗ ←★ 中间多出 **16px** ✗（WP 的 `--wp--style--block-gap` ✓
                                          给相邻同层区块的 `margin-block-start` ✓）
          条子底边 **1096** ✗ ⇒ **超出视口 16px** ✗ ⇒ 条子下缘出界 ⇒ 必须滚一点才看全 ✓✓
       ⇒ 就是这 16px 害的 ✗（`1436×700` 实测溢出 22px ✓ 同一根因 ✓）
       ⇒ 修：**清零相邻间距** ✓ ⇒ 总高 = (100vh−90) + 90 = **正好 100vh** ✓✓
          ⇒ 一屏显示全 ✓✓ 且**不会露出下一区块** ✓（若留安全边 >0，条子下方就会露出下一层 ✗）
       ⚠️ 如果你的运行环境底部确实有工具条悬浮遮挡（如全屏时任务栏 ✓）⇒
          把上面的 `--flt-hf-safe` 调到 **40px** 即可 ✓（1 行 ✓ 但代价是条子下方露出约 40px 下一区块 ✓）*/
  /* v1.0.199：条子在 hero 内 ⇒ **`flex:0 0 auto`** 让它不参与撑开 ✓ 并由上面内容区的 `flex:1` 顶到 hero 底 ✓
     （`margin-top:0` 保留作保险 ✓：hero 是 flex 容器 ⇒ WP 的相邻块 `margin-block-start` 已失效 ✓
       即便命中也是 0 ✓ 不会把条子顶出去 ✓）*/
  .hero.hero-layout-industrial > .flt-sec.trust{flex:0 0 auto;margin-top:0}
  /* v1.0.199：内容区**撑开** ✓（把条子顶到 hero 底 ✓）
     + **内部垂直居中** ✓ —— Boss 反馈"中间留白太多、空白都堆在下面" ✗
       根因：内容贴顶（`justify-content:flex-start` 来自主题 `.hero .wrap`）✗ ⇒ 剩余空间全落底部 ✗
       修：`justify-content:center` ✓ ⇒ 空白**上下均分** ✓ ⇒ 观感立即平衡 ✓
       （一屏高度固定 ⇒ 空白不可能消失 ✓ 但分布均匀后就"看不出多" ✓ 与 Boss 草图一致 ✓）
     ⚠️ `padding-top:88px` 保留 ✓（让开 fixed 导航 64px ✓；它使中心略偏下 ~44px ✓ 视觉上可忽略 ✓）*/
  .hero.hero-layout-industrial > .wrap{
    flex:1 1 auto;margin:0 auto;
    padding-top:var(--hf-pad-top);   /* v1.0.207：分档只改这个变量 ✓ */
    gap:var(--hf-gap);               /* v1.0.207：同上 ✓ */
    /* ⭐⭐ v1.0.209：**`safe center`** ✓✓ —— 内容超出时**贴顶**，而不是向上溢出 ✗
       为什么需要 ✓：`center` 在"内容比容器高"时会**两头溢出** ⇒ 顶部那段直接钻到
         **固定导航下面** ✗（Boss 的阔屏手机截图：标题被 Logo/导航压住 ✗✓）
       `safe center` = "能居中就居中（✓ 保持现有观感 ✓）、放不下就退化成贴顶（✓ 绝不越界 ✓）"
       ⚠️ 前一行 `center` 保留 ✓ ⇒ 老浏览器不认识 `safe` 时该声明被丢弃 ✓ 仍按上一条居中 ✓
         （最差也只是回到旧行为，不会更糟 ✓）*/
    justify-content:center;
    justify-content:safe center;
  }
  /* v1.0.192：呼吸位 10 → **36px** ✓（Boss 实测"仍被遮住" ✗）
     · 量级依据 ✓：浏览器工具条 / 系统任务栏约 **40px** ✗ ⇒ 10px 根本不够 ✓
     · 仍写在**条子内部**（同色 ✓）⇒ **不会出现缝隙** ✓（v1.0.191 已解决缝隙 ✗ 本版只加大数值 ✓）
     · 想再调：改这一个数即可 ✓（24 偏紧 / 36 稳妥 / 48 更宽松 ✓）
     v1.0.193 修正（Boss 实测 ✓）：**上窄下高** ✗ —— 上一版只给了 `padding-bottom:36px` ✗
       ⇒ 条内内容**偏上** ✗，视觉重心不在中间 ✗（滚动后尤其明显 ✓ Boss 截图 ✓）。
       修：**上下都给** ✓，且**下略大于上** ✓ —— `padding-top:20px` / `padding-bottom:28px` ✓
       ⇒ 视觉基本居中 ✓，同时**保住底部安全位** ✓（28px 仍能挡常见工具条 ✓）。
       ⚠️ 若两者冲突（既想完全等距、又要绝对防遮 ✗）⇒ **优先防遮** ✓：把这两个数一起调大即可 ✓

     v1.0.194 修正（Boss 复测 ✓ PC 端"初始没显示全、滚动后正常" ✗）：
       根因 ✓：`min-height:100vh` ⇒ hero 底边 = **视口最底沿** ✗
              ⇒ 条子下半段落在**系统任务栏 / 窗口边缘之下** ✗（滚动后浏览器重算可视区 ⇒ 又"正常"了 ✓）
       修 ✓：**把条子内容整体上移** ✓ —— 底部安全位 28 → **44px** ✓（上移 16px ✓）
              + 顶部 20 → **30px** ✓（重心仍偏上 ✓ 不显得"下方宽" ✗）
       做法要点 ✓：`padding` 加在**条子自己身上**（同色 ✓ 无背景缝 ✗），
                  而不是加在 hero 上 ✗（v1.0.190 的教训：会露缝 ✗） */
  /* v1.0.195：本条**已删除** ✗ —— 原文里信任条与 hero 是**兄弟**关系 ✓
     ⇒ 不需要 `margin-top:auto` 贴底 ✗、也不需要任何 padding 呼吸位 ✗
     ⇒ 条子高度由自身 `.trust .wrap{min-height:88px;padding:16px 0}` 决定 ✓（原文值 ✓ 已生效 ✓）*/

  /* 标题（任意标签 ✓）：直接对齐设计稿；行内样式（后台可调 ✓）优先于本规则 ✓ */
  .hero.hero-layout-industrial .hero-left > h1,
  .hero.hero-layout-industrial .hero-left > h2,
  .hero.hero-layout-industrial .hero-left > h3,
  .hero.hero-layout-industrial .hero-left > div,
  .hero.hero-layout-industrial .hero-left > span{
    font-size:48px;line-height:1.12;font-weight:700;letter-spacing:-.015em;
    margin:20px 0 20px;text-wrap:balance;
  }
  .hero.hero-layout-industrial > .flt-sec.trust .wrap{
    display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:48px;
    width:100%;max-width:var(--max);margin-left:auto;margin-right:auto;
    /* ⭐⭐ v1.0.200 关键修复：**复位条子的内边距与间距** ✗✗
       真凶（真机测量确诊 ✓ paddingTop 实测 76px / 64px ✗ 数字与主题规则逐一对上 ✓）：
         主题原有矮屏档用的是**后代选择器** ✗ ——
           `@media(min-width:1024px) and (max-height:900px){ .hero .wrap{padding-top:76px;…} }`   ← L612
           `@media(min-width:1024px) and (max-height:760px){ .hero .wrap{padding-top:64px;…} }`   ← L620
         ⇒ 条子**移进 hero 后**，它的 `.wrap` 也成了 `.hero .wrap` 的后代 ✗ ⇒ **被误伤** ✗
         ⇒ 条子内边距暴涨 ⇒ 高度从 88px 虚高到 **165 / 145px** ✗
         ⇒ 连带 `min-height:88px` 被 padding 顶开 ⇒ **hero 总高溢出 14px** ✗（1536×700 ✓）
       ⇒ 本条特异性 **(0,4,0)** ✓ 高于 `.hero .wrap`(0,2,0) ✓ 且媒体查询不提升特异性 ✓
         ⇒ 一条即可**全档复位** ✓（移动端另有 10px 的那条 ✓ 各自独立 ✓）*/
    /* ⭐ v1.0.207：**安全边改为"对称增量"** ✓（Boss 2026-09-17 拍板 ✓）
       真机实测（线上 v1.0.206 · 2026-09-17）✗：
         条高 127px · 内容上留白 17 / 下留白 57 ⇒ **不对称 +40** ✗
       根因 ✗：`padding-top:16` + `padding-bottom:16+safe(40)` —— 安全边**只加在下侧** ✗
         ⇒ 未滚动时因下 40px 落在遮挡区而"看似居中" ✓；
            一旦滚动，下 56px 裸露 ⇒ 条子"虚高"、内容偏上、底边框离内容很远 ✗
            （Boss 原话：「并不是真正的正常高度」「边距要一体 ✗」）
       修 ✓：padding **归零** ⇒ 由 `min-height` 承担安全边 ⇒ 内容由 `align-items:center`
            **永远垂直居中** ✓ ⇒ 无论有无遮挡，滚动前后观感**完全一致** ✓✓
       ⇒ 无遮挡环境条高 = 88 + 上下边框 2 = **90px**（= 主题原文的 90 ✓ 回到"正常高度" ✓）
       ⇒ 单点可调：只改 `--flt-hf-safe` 一个数 ✓（见 render.php 的 JS ✓）*/
    min-height:calc(88px + var(--flt-hf-safe,0px));
    padding-top:0;
    padding-bottom:0;
  }
  .hero.hero-layout-industrial > .flt-sec.trust .lead-col{flex:0 0 auto;max-width:360px}
  .hero.hero-layout-industrial > .flt-sec.trust .marquee{flex:1 1 auto;min-width:0}

  /* ── v1.0.200 **布局精修**（Boss 认可 v1.0.199 布局后 ✓ 在同布局上优化 ✓）──────────
     目的 ✓：把"一屏里的空白"尽量**让内容吃掉** ✓ ⇒ 既不满溢、也不显空 ✓
     ① **示意图更高** ✓（500 → 560 ✓）⇒ 内容整体"占满"更多 ✓ 视觉更完整 ✓
        （只在本块作用域 ✓ 不动全局 `.hero-figure` ✗ 别的 hero 变体不受影响 ✓）
     ② **数据条留白微调** ✓（上 30→24 ✓ 行距 18→20 ✓）⇒ 更贴合设计稿的呼吸节奏 ✓ */
  .hero.hero-layout-industrial .hero-figure{height:var(--hf-fig-h)}   /* v1.0.207：分档只改变量 ✓ */

  /* ⭐ v1.0.202：**修右侧图片变形** ✗（Boss 截图实证 ✓）
    根因 ✓：`main.css L184` 给 `.hero-figure .scene{width:100%;height:100%}` ✗
       —— 而 `.scene` 此处是一个 **`<img>`**（render.php L253 ✓ 上传封面图 ✓）
       ⇒ 没有 `object-fit` ✗ ⇒ 图片被**按容器拉伸** ⇒ **变形** ✗✓
       （`object-fit:cover` 主题只写在 **photo-card 变体** 上 ✓ L842 ✗ —— 本块用的是`
         industrial 变体 ✓ 所以漏了 ✗）
    修 ✓：本块作用域内补 `object-fit` ✓ ⇒ **永不变形** ✓（见下）*/
  /* ⭐ v1.0.203：曾改 `contain` ✓ —— 当时是**水印图**：宽版 logo 用 `cover` 会被裁得难看 ✓
     ⭐ v1.0.207：**改回 `cover`** ✓（Boss 2026-09-17 换成实拍照片后 ✓）
    ── 真机实测（2026-09-17 · 五档 ✓）支持这一决定 ✓：
       容器比例在各档差得极远 ✗：1920 ⇒ **1.12** ／ 1440 ⇒ 1.24 ／ 1536×700 ⇒ **1.96**
                                  768 ⇒ **1.03** ／ 390 ⇒ **1.94**
       ⇒ 图片（无论 3:2 还是 1.15:1）用 `contain` **永远不可能各档都撑满** ✗：
         一张 3:2 图在 1920 档 ⇒ 上下各留 **71px**（撑满度仅 **74.2%** ✗ 就是 Boss 圈的红框 ✓）
         换成 1.15:1 ⇒ 1920 档好了（留 8px ✓）但 1536×700 档**更空**（左右各 130px ✗）
                       与 390 档也**更空**（左右各 71px ✗）⇒ **按下葫芦浮起瓢** ✗
       ⇒ 正解 = `cover`（等价于照片类 hero 的行业标准做法 ✓）：
           **五档全部 100% 撑满** ✓ · **永不变形** ✓（`cover` 只裁不拉伸 ✓）
           裁切量实测 3%~25%（最大在 1920 档：左右各裁 12.5% ✓ 居中的仓库主图完全不受影响 ✓）
    ⇒ 结论：**不需要单独出 1.15:1 的图** ✓（Boss 现在这张 3:2 照片直接撑满 ✓）
    ⚠️ 若将来换回**带文字/水印的图** ✗ ⇒ 把下面 `var(--hf-fill,cover)` 的默认值改回 `contain`
       一个词即可 ✓（或在页面级给它一个 `--hf-fill:contain` ✓ 覆盖即可 ✓ ⇒ 单点开关 ✓）*/
  .hero.hero-layout-industrial .hero-figure{background:#EDF3FE}
  .hero.hero-layout-industrial .hero-figure img.scene{
    width:100%;height:100%;object-fit:var(--hf-fill,cover);object-position:center;
  }
  .hero.hero-layout-industrial .hero-data{padding-top:var(--hf-data-pt);row-gap:var(--hf-data-row)}

  /* ── v1.0.193 响应式修正（Boss 移动端实测 ✓ 三条一起 ✓）───────────────
     问题 1 · **H1 过大** ✗（截图：标题占 3 行 ✓）
       根因：上面那条标题规则 **没有媒体查询** ✗ ⇒ 移动端也吃 **48px** ✗
             且特异性(0,3,0) **高于**主题原规则 `.hero h1{font-size:36px}`(0,2,0) ✗ ⇒ 原降级**全失效** ✗
       修：本块**自己按主题原有档位**补降级 ✓（≤1023 ⇒ **36** ✓ / ≤767 ⇒ **30** ✓）
     问题 2 · **顶部留白过多** ✗（截图：导航下有一大块空白 ✓）
       根因：`.hero-layout-industrial > .wrap{padding-top:88px}`(0,3,0)
             压过主题移动端 `.hero .wrap{padding-top:0}`(0,2,0) ✗
       修：**搬用主题原值** ✓（Boss 指定 ✓）：gap:32px / padding-top:0 / padding-bottom:40px ✓
     问题 3 · **条内被改成竖排堆叠** ✗（我 v1.0.189 干的 ✗ 与桌面不一致 ✗）
       修：移动端也 **左文字 + 右滚动、两端对齐** ✓（Boss 指定 ✓）⇒ 只**收窄间距** ✓ 不改结构 ✓
     ⚠️ 保留项：`min-height:100vh`（整块一屏 ✓）、条子贴底 `margin-top:auto` ✓ 均不动 ✓ */
  @media(max-width:1023px){
    /* v1.0.195：移动端 hero 上留 **64px = 固定头部高度** ✓（`.nav-bar{height:64px}` ✓）
       ⇒ 内容不被 fixed 头部压住 ✓，又比原文的 88px 更省 ✓（Boss 反馈"留白过多" ✓）
       而内容区自身 `padding-top:0` ✓（Boss 指定 ✓ 继承原首页移动端写法 ✓）*/
    /* v1.0.209：`--hf-pad-top` 从 0 → **8px** ✓ —— 本档 hero 自带 `padding-top:64px`（= 导航高 ✓）
       ⇒ 这里再给 8px 才等于"导航下留 8px 呼吸"✓（原来 0 ⇒ 内容顶边**正好压在导航底边** ✗
         一旦内容略高、或被 `center` 向上溢出，就直接钻到导航下面 ✗）*/
    .hero.hero-layout-industrial{--hf-gap:32px;--hf-pad-top:8px;padding-top:64px}
    .hero.hero-layout-industrial > .wrap{margin:0 auto;padding-bottom:40px}
    /* ⭐ v1.0.194（Boss 要求 ✓）：**移动端去掉内容区 max-width** ✓
       （原来继承桌面 `.wrap{max-width:var(--max)}` ✗ ⇒ 窄屏下与条子满宽不一致 ✗ Boss 截图实证 ✓） */
    .hero.hero-layout-industrial > .flt-sec.trust .wrap{max-width:none}
    /* ⭐ v1.0.194：标题字号必须用 **`!important`** 压 ✗ ——
       因为渲染出的标题带**行内样式** `<h1 style="font-size:48px">` ✗
       （来自区块属性 ✓ 后台「标题样式」面板可改 ✓ 但**行内优先级最高** ✗ ⇒ 普通 CSS 压不过 ✗
       Boss 截图 DOM 实证 ✓）。⇒ 仅移动端硬压 ✓；PC 仍走行内值（后台可调 ✓）✓ */
    .hero.hero-layout-industrial .hero-left > h1,
    .hero.hero-layout-industrial .hero-left > h2,
    .hero.hero-layout-industrial .hero-left > h3,
    .hero.hero-layout-industrial .hero-left > div,
    .hero.hero-layout-industrial .hero-left > span{font-size:36px!important;margin:14px 0 16px}
  }

  /* ⭐ v1.0.207：**平板档（768~1023）单独收 figure** ✓ —— 真机实测（2026-09-17）✗：
       768×1024 ⇒ hero 高 **1300px** ✗（视口 1024）⇒ 条子落在视口外 **276px** ✗
       ⇒ 平板竖屏"一整屏显示全"直接失效 ✗（Boss 最看重的那条 ✗）
     根因 ✗：本档沿用了**桌面 figure 560px** ✗ —— 而平板是**单列**布局 ⇒ 列宽仅 574
       且图下面还有数据条 ⇒ 1 屏塞不下 ✗（并不需要 560 那么高 ✓）
     修 ✓：本档 figure 收到 **300px** ✓（配合条子瘦身 37px ✓）⇒ 实测回到一屏内 ✓
     ⚠️ 只影响 768~1023 ✓（≥1024 与 ≤767 各有自己的档位 ✓ 互不干扰 ✓）*/
  @media(min-width:768px) and (max-width:1023px){
    .hero.hero-layout-industrial{--hf-fig-h:300px}
    /* v1.0.208：登录态再收 40px ✓（真机复现：本档 + admin bar ⇒ 条子溢出 **35px** ✗）*/
    .admin-bar .hero.hero-layout-industrial{--hf-fig-h:250px}
  }

  /* ⭐⭐ v1.0.209：**"平板宽度 + 矮高度"也要降级** ✓✓（Boss 阔屏手机 1116×660 类 ✓）
     真机实测（线上 v1.0.208）✗：这类尺寸此前**吃不到任何短屏降级** ✗ ——
       三个短屏档都写了 `min-width:1024px and (max-height:…` ✗
       ⇒ 而 1116vp 宽的设备（官方归 **lg** ✓）在浏览器里就是"**≥1024 宽**"吗？
         不一定 ✗：**横屏/折叠展开但被浏览器 UI 挤掉高度**时，宽度可能落在 768~1023 ✗
         ⇒ 内容比可用高度高 ⇒ `justify-content:center` 把顶部**顶到固定导航下面** ✗（Boss 截图实证 ✓）
     修 ✓：本档补一套压缩（figure 260 ✓ + 标题 32px ✓ + 间距收窄 ✓）✓
     ⚠️ 与官方断点的差异说明 ✓：鸿蒙栅格用 **sm 320 / md 600 / lg 840 / xl 1440**（宽度 ✓）；
        本站主题用 **767 / 1024** ✓ —— 不强行改断点（改动面太大 ✗），而是**按"高度"补降级** ✓
        ⇒ 效果等价："**任何宽度下，只要高度不够，就压缩内容**" ✓（更稳 ✓）*/
  @media(min-width:768px) and (max-width:1023px) and (max-height:900px){
    .hero.hero-layout-industrial{--hf-fig-h:260px;--hf-gap:20px;--hf-data-pt:14px;--hf-data-row:12px}
    .hero.hero-layout-industrial .sub{margin-bottom:12px}
    .hero.hero-layout-industrial .hero-left > h1,
    .hero.hero-layout-industrial .hero-left > h2,
    .hero.hero-layout-industrial .hero-left > h3,
    .hero.hero-layout-industrial .hero-left > div,
    .hero.hero-layout-industrial .hero-left > span{font-size:32px!important;margin:10px 0 12px}
  }

  @media(max-width:767px){
    /* 小屏再收一档 ✓ —— v1.0.194：**继承主题原值 30px** ✓（Boss 明确要求 ✓）
       同样用 `!important` ✓（压掉行内 48px ✗ 见上方说明 ✓）*/
    .hero.hero-layout-industrial .hero-left > h1,
    .hero.hero-layout-industrial .hero-left > h2,
    .hero.hero-layout-industrial .hero-left > h3,
    .hero.hero-layout-industrial .hero-left > div,
    .hero.hero-layout-industrial .hero-left > span{font-size:30px!important;line-height:1.18;margin:12px 0 14px}

    /* 条内：**保持左右两端对齐** ✓（撤销 v1.0.189 的竖排 ✗）+ 满宽 ✓ + 呼吸位按比例收窄 ✓ */
    /* v1.0.195：条内 padding 呼吸位**已删除** ✗（回归原文 `.trust .wrap{padding:16px 0}` ✓）*/
    .hero.hero-layout-industrial > .flt-sec.trust .wrap{flex-direction:row;align-items:center;gap:16px;max-width:none}
    .hero.hero-layout-industrial > .flt-sec.trust .lead-col{flex:0 0 auto;max-width:40%}
    .hero.hero-layout-industrial > .flt-sec.trust .marquee{width:auto;flex:1 1 auto;min-width:0}

    /* ══ v1.0.205 移动端三项修正（Boss 实测 ✓ 三张红框截图 ✓）══════════════
       ① **顶部留白过多** ✗（截图 ✓ 导航下一条空白 ✓）
          根因 ✓：本块给了 `padding-top:64px` ✓ 为避开 `.nav{position:fixed}`（L37 ✓）——
             而移动端导航实高约 **56px** ✗ ⇒ 多出约 8px + 导航自身白底 ⇒ 观感是"一大块空白" ✗
          修 ✓：**负 margin 上移 + 同值 padding** ⇒
             `margin-top:-56px` 把 hero 拉到页面最顶 ✓ ⇒ **浅蓝背景铺到 y=0** ✓（不再有白带 ✗）
             `padding-top:56px` 保证内容仍从导航下沿开始 ✓（**不被固定导航压** ✓）
          为什么不用"直接减小 padding" ✗：导航是 **fixed** ✗ ⇒ padding 一旦 < 56px ⇒ 内容被压 ✗
       ② **中间 gap 过多** ✗（截图 ✓ 数据条与示意图之间一大段空 ✓）
          根因 ✓：主题移动端档 `.hero-grid{gap:44px}`（L596 ✓）—— 本块没覆盖 ✗
          修 ✓：覆盖为 **18px** ✓（本块特异性 (0,3,0) > (0,1,0) ✓ 稳胜 ✓）
       ③ **条子仍被遮** ✗（截图 ✓ 底部文字被切 ✓）
          根因 ✓：移动端底部遮挡更大（手机 home 条 ≈34px ✓ + 部分浏览器底栏 ✓）
             ⇒ 40px 兜底**不够** ✗
          修 ✓：移动端单独把兜底提到 **56px** ✓（`max(实测, 56)` ✓ ⇒ 实测更大时优先用实测 ✓）*/
    /* ⚠️ 负 margin 必须**配高度补偿** ✗ —— 否则整块上移 56px ⇒ 底部反而空出 56px ✗
       （真机实测：hero.top=-56 ✓ 但 bottom=788 ✗ = 视口 844 − 56 ✗）
       ⇒ `min-height: calc(100vh|100svh + 56px)` ✓ ⇒ 底边回到视口底 ✓✓ */
    .hero.hero-layout-industrial{
      margin-top:-56px;
      padding-top:56px;
      min-height:calc(100vh + 56px);
      min-height:calc(100svh + 56px);
    }
    /* ⭐ v1.0.208：移动端登录态同款补偿 ✓（真机复现：溢出 **46px** = 移动端 admin bar 高度 ✗）
       算式 = 上面那档 `+56px` ✓ 再扣掉 admin bar ✓（≤782px 时内核把该变量置为 46px ✓）*/
    .admin-bar .hero.hero-layout-industrial{
      min-height:calc(100vh + 56px - var(--wp-admin--admin-bar--height,46px));
      min-height:calc(100svh + 56px - var(--wp-admin--admin-bar--height,46px));
    }
    /* ⭐⭐ v1.0.209 **修好一条"从来没生效"的规则** ✗→✓（Boss 指路 ✓ 与我实测吻合 ✓）
       真机实测（线上 v1.0.208 · 390×844）：`.hero-grid` 的实际 gap 仍是 **44px** ✗（= 主题移动端档 ✓）
       根因 ✗：v1.0.205 写的是 `.hero.hero-layout-industrial > .hero-grid`（**子选择器** ✗）——
         而 DOM 里 `.hero-grid` 是 **`.wrap` 的子元素** ✗（`hero > .wrap > .hero-grid` ✓ 见 render.php L189 ✓）
         ⇒ 该规则**一条都没命中过** ✗ ⇒ 两个内容块之间一直空着 44px ✗
       ⇒ 改**后代选择器** ✓（本块特异性 (0,3,0) > 主题 `.hero-grid`(0,1,0) ✓ 稳胜 ✓）
       ⇒ 这 26px（44→18）就是 Boss 说的"把 gap 调小补偿给图片高度" ✓✓ */
    .hero.hero-layout-industrial .hero-grid{gap:18px}

    /* ⭐ v1.0.197：移动端**紧凑化** ✓ —— 目标"移动端也一整屏显示全"（Boss 要求 ✓）
       真机实测（390×844 ✓）：可用高度 754 ✓（= 100svh − 90 ✓）但内容高 **852** ✗ ⇒ 溢出 ~98px ✗
       ⇒ 压缩以下**不影响观感**的间距 ✓（标题字号不动 ✓ 你已确认 30px ✓）*/
    /* ⭐ v1.0.209：**移动端顶部让位改成"结构性"** ✓（不再靠"居中余量"碰运气 ✗）
       实测（v1.0.208 · 390×844）：内容块顶边 **78** vs 导航底 **64** ⇒ 只剩 **14px** ✗ 太悬 ✗
         ⇒ 于是 v1.0.208 只能把登录态的图压到 **110px** 去"挤"出余量 ✗
           ⇒ 副作用正是 Boss 报的「**主体内容区太矮、下方留白过多**」✗✓
       修 ✓：`--hf-pad-top: 72px`（= 导航 64 ✓ + 呼吸 8 ✓）⇒ 顶部间隙**由 padding 保证** ✓
         ⇒ 内容区不必再压 ✗ ⇒ 图片回到 **180px** ✓（与未登录一致 ✓）
       ⚠️ 72 这个数是"单点可调"✓（`--hf-pad-top` ✓ 见块根变量表 ✓）*/
    .hero.hero-layout-industrial{--hf-gap:14px;--hf-fig-h:180px;--hf-pad-top:72px;--hf-data-pt:14px;--hf-data-row:0px}
    /* v1.0.209：登录态只做**轻度**压缩 ✓（-20px ✓ 因为 admin bar 吃掉 46px 高度 ✓
       而不再是 208 的 -70px ✗ —— 那时顶部间隙没保证，只能靠压图 ✗）*/
    .admin-bar .hero.hero-layout-industrial{--hf-fig-h:160px}
    .hero.hero-layout-industrial > .wrap{padding-bottom:0}
    .hero.hero-layout-industrial .hero-cta{margin-bottom:14px}
    .hero.hero-layout-industrial .sub{font-size:14.5px;line-height:1.6;margin-bottom:14px}

    /* ── v1.0.200 移动端**重排**（Boss：移动端也适配下 ✓）──────────────────────────
       目标 ✓：**仍是一屏** ✓（Boss 要求 ✓）但排布更合理 ✓，不再靠"把图压成 160px"硬塞 ✗
       ① **数据条 2×2 → 四列一行** ✓ ⇒ 省约 24px ✓（把空间让给示意图 ✓）
          · label 折行两行 → 字号与行距收紧 ✓ 仍清晰 ✓
          · 左侧竖线（`::before`）同步改小 ✓ 对齐数字 ✓
       ② **示意图 160 → 180px** ✓ ⇒ 比例更正常 ✓
       ③ 简介下边距 12 → 14px ✓（呼吸更自然 ✓）*/
    .hero.hero-layout-industrial .hero-data{grid-template-columns:repeat(4,1fr);column-gap:6px}
    .hero.hero-layout-industrial .hero-data .m{padding-left:9px}
    .hero.hero-layout-industrial .hero-data .m::before{width:2px;height:14px;top:6px}
    .hero.hero-layout-industrial .hero-data b{font-size:16px}
    .hero.hero-layout-industrial .hero-data b i{font-size:10px;margin-left:1px}
    .hero.hero-layout-industrial .hero-data span{font-size:10.5px;margin-top:2px;line-height:1.35}

    /* v1.0.198：条子也要**瘦** ✓ —— 真机量得移动端条高 **116px** ✗（占掉一屏 1/7 ✗）
       ⇒ 压到 ≈88px ✓（与原文 `min-height:88px` 对齐 ✓）：行高与字号收一档 + 间距收窄 ✓
       ⭐ v1.0.207：**与 PC 统一为同一套公式** ✓（Boss：「上下不统一不协调」✗）
         · 旧写法 ✗：`min-height:auto;padding:10px 0` **＋**外层 `.flt-sec.trust{padding-bottom:16+max(safe,56)}`
           ⇒ 实测条高 **153px** ✗ · 上留白 11 / 下留白 **83** ⇒ 不对称 **+72** ✗（就是你看到的"下方留白过多"✗）
         · 新写法 ✓：安全的**两侧对称增量** + 移动端用**标准安全区** `env(safe-area-inset-bottom)`
           （iOS home 条 ≈34px ✓；Android/Windows = 0 ✓）⇒ 不再硬编码 56px ✗
           ⇒ 无 home 条环境条高 = 80 + 双边框 = **82px** ✓（一屏因此多出 71px 空间 ✓）*/
    .hero.hero-layout-industrial > .flt-sec.trust .wrap{
      min-height:calc(80px + max(var(--flt-hf-safe,0px), env(safe-area-inset-bottom,0px)));
      padding-top:0;
      padding-bottom:0;
      gap:12px;
    }
    .hero.hero-layout-industrial > .flt-sec.trust .lead{font-size:12.5px;line-height:1.5}
    .hero.hero-layout-industrial > .flt-sec.trust .lead-2{font-size:10.5px;margin-top:4px}
  }

  /* v1.0.198：**矮屏 / 中等宽降级** ✓
     真机实测 1536×700 ⇒ hero 内容 616 > 可用 610 ✗ ⇒ 溢出 6px（条子下缘出界 ✗）。
     根因：主题原本那套 `@media(min-width:1024px) and (max-height:900px){.hero .wrap{…}}`
           降级**特异性比我低** ✗（0,3,0 vs 0,2,0 ✗）⇒ 被我 `.wrap{margin:auto;padding-top:88px}` 压掉 ✗
     ⇒ 本块自己补一份同款降级 ✓（照主题原值 ✓ 只调本块 ✓）*/
  @media(min-width:1024px) and (max-height:900px){
    .hero.hero-layout-industrial{
      --hf-pad-top:60px;--hf-gap:28px;--hf-fig-h:470px;--hf-data-pt:20px;--hf-data-row:16px;
    }
    /* ⭐⭐ v1.0.208 **恢复主题的"矮屏标题降级"** ✓✓（这才是这几个档位真正的空间杠杆 ✓）
       真机实测（1536×700 / 1536×620 / 1024×768）✗：
         —— 撑开整块高度的**不是右侧图**，而是**左栏文案**（标题 48px×2 行 + 简介 + CTA + 数据条）✗
         ⇒ 收图片没用 ✗（实测：图片 470→260 后溢出量几乎不变 ✗）
       根因 ✗：主题本来就有一套矮屏降级 ✓
         `@media(min-width:1024px) and (max-height:900px){ .hero h1{font-size:42px;margin:14px 0 16px} }`（L613 ✓）
         `…(max-height:760px){36px;12px 0 14px}`（L621 ✓）／`…(max-height:680px){32px;10px 0 12px}`（L628 ✓）
         —— 但本块的 `.hero.hero-layout-industrial .hero-left > h*`(0,3,0) **特异性更高** ✗
            ⇒ 把这三档降级**整片压掉** ✗ ⇒ 矮屏仍吃 48px 大标题 ⇒ 一屏必然塞不下 ✗✓
       ⇒ 修 ✓：本块按**主题原值**补齐同样三档 ✓（`!important` 用于压掉区块属性产生的**行内**字号 ✓
          与移动端那两条同款做法 ✓ 见 ≤1023 / ≤767 的说明 ✓）*/
    .hero.hero-layout-industrial .hero-left > h1,
    .hero.hero-layout-industrial .hero-left > h2,
    .hero.hero-layout-industrial .hero-left > h3,
    .hero.hero-layout-industrial .hero-left > div,
    .hero.hero-layout-industrial .hero-left > span{font-size:42px!important;margin:14px 0 16px}
  }

  @media(min-width:1024px) and (max-height:760px){
    /* ⭐ v1.0.207 数值修正（真机实测 1536×700 驱动 ✓）：
       ① 顶部让位 52 → **64px** ✗：实测首行内容顶边 52 ⇒ 净间隙 **−12px** ✗（被固定导航压住 ✗）
          ⇒ 补到 64 ⇒ 实测回到 **+10px** ✓
       ② figure 320 → **300px** ✓：换出 20px 给上面的让位 ✓（保证整块仍 = 一屏 ✓）
       ③ 顺带：条子瘦身 37px（见 `.flt-sec.trust .wrap` 的 min-height ✓）⇒ 本档从"溢出 1px"变富余 ✓*/
    .hero.hero-layout-industrial{
      --hf-pad-top:64px;--hf-gap:22px;--hf-fig-h:300px;--hf-data-pt:16px;--hf-data-row:14px;
    }
    /* v1.0.208：与主题同款矮屏标题降级（见上档说明 ✓）—— 本档 48 → **36px** ✓ */
    .hero.hero-layout-industrial .hero-left > h1,
    .hero.hero-layout-industrial .hero-left > h2,
    .hero.hero-layout-industrial .hero-left > h3,
    .hero.hero-layout-industrial .hero-left > div,
    .hero.hero-layout-industrial .hero-left > span{font-size:36px!important;margin:12px 0 14px}
    /* v1.0.206：矮屏再收简介下边距 ✓ —— 条子因"避让兜底"变高 40px 后 ✗
       本档实测溢出 5px ✓ ⇒ 收 `.sub` 的 margin（默认 36px ✓）⇒ 省 20px ✓ 富余 ✓ */
    .hero.hero-layout-industrial .sub{margin-bottom:16px}
  }

  @media(min-width:1024px) and (max-height:680px){
    /* ⭐ v1.0.208：本档**原就溢出** ✗（真机实测 1536×620 ⇒ 溢出 **30px** ✗ 首行还被导航压 20px ✗）
       —— 是历史遗留（v1.0.206 及以前同样溢出 ✓ 只是此前没测过这个档 ✓）
       修 ✓：让位 44 → **36px** ＋ figure 300 → **260px** ⇒ 省 48px ⇒ 实测落到一屏内 ✓*/
    /* ⚠️ v1.0.208 修正 ✗→✓：上一稿把让位压到 36px **是错的** ✗ ——
       `--hf-pad-top` 必须 ≥ **64px（固定导航高度 ✓）** 才能保证"内容不被导航压" ✓
       （否则一旦余量不足以把内容居中下去 ⇒ 首行就钻到导航下面 ✗ 实测 −8px ✗）*/
    .hero.hero-layout-industrial{--hf-pad-top:64px;--hf-gap:18px;--hf-fig-h:260px}
    /* v1.0.208 登录态（少 32px 高度）⇒ 再收**左栏文案** ✓（实测本档的瓶颈是左栏，不是图片 ✗）*/
    .admin-bar .hero.hero-layout-industrial{--hf-data-pt:10px;--hf-fig-h:200px}
    .admin-bar .hero.hero-layout-industrial .sub{margin-bottom:12px}
    .admin-bar .hero.hero-layout-industrial .hero-left > h1,
    .admin-bar .hero.hero-layout-industrial .hero-left > h2,
    .admin-bar .hero.hero-layout-industrial .hero-left > h3,
    .admin-bar .hero.hero-layout-industrial .hero-left > div,
    .admin-bar .hero.hero-layout-industrial .hero-left > span{font-size:28px!important;margin:8px 0 10px}
    /* v1.0.208：与主题同款矮屏标题降级（见上档说明 ✓）—— 本档 48 → **32px** ✓ */
    .hero.hero-layout-industrial .hero-left > h1,
    .hero.hero-layout-industrial .hero-left > h2,
    .hero.hero-layout-industrial .hero-left > h3,
    .hero.hero-layout-industrial .hero-left > div,
    .hero.hero-layout-industrial .hero-left > span{font-size:32px!important;margin:10px 0 12px}
    .hero.hero-layout-industrial .sub{margin-bottom:20px}
  }

  /* ── 解决方案 ────────────────────────────────────────────────────── */
  /* 主推卡的三个统计数字：骨架版式是 <li>盘点提速<b>85%</b></li>，
     区块版式是 <p>盘点提速<strong>85%</strong></p>——刻意不用 core/list，
     因为它的 className 落点顺序在各 WP 版本间不一致，会被判区块内容无效。 */
  .sol-feat .stats li,.sol-feat .stats p{font-size:12.5px;color:#fff;font-family:var(--mono);letter-spacing:.04em}
  .sol-feat .stats li b,.sol-feat .stats p strong{display:block;font-size:21px;font-weight:700;color:#fff;letter-spacing:-.01em;margin-top:4px;line-height:1.1}
  /* 链接回到「整卡一个 a」的观感：颜色继承、去下划线、箭头与文字留间距 */
  .flt-sec .sol-card h3 a{color:inherit;text-decoration:none}
  .flt-sec .sol-feat .more a{display:inline-flex;align-items:center;gap:6px;color:inherit;text-decoration:none}
  .flt-sec .sol-card .more a{display:inline-flex;align-items:center;gap:4px;color:inherit;text-decoration:none}
  /* .more 默认 opacity:0（hover 才浮出），键盘 Tab 进去时也必须看得见 */
  .flt-sec .sol-card .more:focus-within{opacity:1;transform:translateY(0)}

  /* ── 数据（深色） ────────────────────────────────────────────────── */
  /* 单位：骨架版式是 .unit 的 span，区块版式是 <em>。
     数字与单位分列后，main.js 的计数器只重写 <strong>，单位不会被抹掉。 */
  .stat .num .unit,.stat .num em{font-style:normal;font-size:19px;color:#6FA8FF;margin-left:3px}

  /* ── 客户评价 ────────────────────────────────────────────────────── */
  /* 署名：骨架版式是 <b>姓名</b><span>职务</span>，区块版式拆成 p.name/p.title */
  .t-card .who b,.flt-sec .t-card .who .name{font-size:14px;display:block;font-weight:600}
  .t-card .who span,.flt-sec .t-card .who .title{font-size:12.5px;color:var(--text-3)}
  .flt-sec .t-card .who .name,.flt-sec .t-card .who .title{margin:0}
  .flt-sec .t-card .who .ava{font-weight:700;margin-bottom:0;font-size:14px}
  .flt-sec .who-txt{min-width:0}

  /* ── 转化 CTA ────────────────────────────────────────────────────── */
  /* core/button 的 className 落在外层 <div class="wp-block-button">，
     样式加不到里面的 <a> 上，所以直接按 .cta 作用域写死白底主按钮
     （等价于骨架版式的 .btn.btn-white，值逐条对齐）。

     这里必须是 .flt-sec.cta（复合，无空格），不能写 .flt-sec .cta：
     区块版式的通栏是 <div class="flt-sec cta">，两个类在同一个元素上；
     带空格的后代选择器要求 .cta 在 .flt-sec 里面，永远命中不了，
     按钮会跌回 WP 全局样式的深灰底。其余区块（.values/.sol-feat/.stat…）
     的类名在子元素上，才用得了一起写成后代。 */
  .flt-sec.cta .wp-block-buttons{justify-content:center;gap:0}
  .flt-sec.cta .wp-block-button .wp-block-button__link{background:#fff;color:var(--primary);padding:14px 40px;font-size:15px;font-weight:600;border-radius:5px;border:1px solid #fff;line-height:1.2}
  .flt-sec.cta .wp-block-button .wp-block-button__link:hover{background:#fff;filter:brightness(.97)}

  /* ── 窄屏：补齐骨架版式靠 section{} 获得的降级 ─────────────────────── */
  @media(max-width:767px){
    .values,.solutions,.testi{padding:72px 0}
    .marquee p{font-size:14px}
  }

  /* --- v0.7.0 区块库（P4 打样）------------------------------------------
     flt/product-grid 产品展示。卡片本体 .prod-card 一行不写——
     直接复用 /products/ 归档页那套（见 template-parts/content/product-card.php），
     这里只管三件本区块自己的事：区块间距、列数参数化、两个样式变体。

     列数参数化用内联的 --flt-cols（render.php 按 attribute 输出），
     断点里直接改写 grid-template-columns 覆盖它——媒体查询能压过内联变量
     的使用处，但压不过内联变量本身，所以断点必须写在这里，不能只写默认值。 */
  .flt-products{padding:104px 0}
  .flt-products .prod-grid{grid-template-columns:repeat(var(--flt-cols,3),1fr)}
  .flt-products .all-link{margin-top:44px;text-align:center}
  .flt-products .all-link a{font-size:14px;font-weight:600;color:var(--primary)}
  .flt-products .all-link a em{font-style:normal;margin-left:4px}
  .flt-products .all-link a:hover{color:var(--primary-hover)}

  /* 空状态：只有有编辑权限的人看得见，访客端区块整体塌为 0 高 */
  .flt-products .flt-empty-note{margin:0;padding:40px;border:1px dashed var(--border);border-radius:8px;color:var(--text-3);font-size:14px;text-align:center}

  /* 变体：紧凑列表——图变小、内边距收紧，适合塞在两栏布局的半边 */
  .flt-products.is-style-compact .prod-card .art{height:110px}
  .flt-products.is-style-compact .prod-card .body{padding:14px}
  .flt-products.is-style-compact .prod-card h3{font-size:15px;margin:4px 0}
  .flt-products.is-style-compact .prod-card .spec{margin-bottom:8px}
  .flt-products.is-style-compact .prod-grid{gap:14px}

  @media(max-width:1023px){
    .flt-products .prod-grid{grid-template-columns:repeat(2,1fr)}
  }
  @media(max-width:640px){
    .flt-products{padding:72px 0}
    .flt-products .prod-grid{grid-template-columns:1fr 1fr;gap:12px}
  }
  /* ============ v0.8.0 自建区块库：案例展示 / 文章列表 ============
     与 .flt-products 同一写法：区块容器只管布局与区块头，
     卡片标记复用既有样式（.case-card / .blog-card），不重写。 */
  .flt-cases{padding:104px 0}
  .flt-cases .cases-grid{grid-template-columns:repeat(var(--flt-cols,3),1fr)}
  .flt-posts{padding:104px 0}
  .flt-posts .blog-grid{grid-template-columns:repeat(var(--flt-cols,3),1fr)}
  /* 案例卡客户名一行：v0.8.0 抽共享模板时补齐——CSS 原来只定义了 .tag/h3，
     .spec 一直是裸的，靠 body 默认样式撑着。margin-top:auto 让它沉底对齐。 */
  .case-card .spec{font-size:13px;color:var(--text-2);margin-top:auto;padding-top:14px}
  .case-card h3{margin-top:10px}
  /* 查看全部链接与空态提示：三个区块共用同一观感（.flt-products 已有同款） */
  .flt-cases .all-link,.flt-posts .all-link{margin-top:44px;text-align:center}
  .flt-cases .all-link a,.flt-posts .all-link a{font-size:14px;font-weight:600;color:var(--primary)}
  .flt-cases .all-link a em,.flt-posts .all-link a em{font-style:normal;margin-left:4px}
  .flt-cases .all-link a:hover,.flt-posts .all-link a:hover{color:var(--primary-hover)}
  .flt-cases .flt-empty-note,.flt-posts .flt-empty-note{margin:0;padding:40px;border:1px dashed var(--border);border-radius:8px;color:var(--text-3);font-size:14px;text-align:center}
  /* 响应式必须带区块前缀（0,2,0）：
     全局的 .cases-grid/.blog-grid 降列规则是 (0,1,0)，
     会被上面的 .flt-cases .cases-grid（0,2,0，且在文件更后面）压死——
     与 v0.8.0 首屏 hero 网格被兼容层压死是同一类 bug，别再犯。 */
  @media(max-width:1023px){
    .flt-cases .cases-grid,.flt-posts .blog-grid{grid-template-columns:repeat(2,1fr)}
  }
  @media(max-width:767px){
    .flt-cases{padding:72px 0}
    .flt-posts{padding:72px 0}
    .flt-cases .cases-grid,.flt-posts .blog-grid{grid-template-columns:1fr}
  }

  /* ============ v1.0.0 博客列表页（archive.php） ============ */
  /* 所有规则都作用域在 .flt-archive-posts 下，避免污染 v0.8.0 区块库 .flt-posts 与首页 .blog-card */
  .flt-archive-posts{padding:0 0 80px;background:var(--bg)}
  .flt-archive-posts .ach-hero{padding:88px 0 48px;border-bottom:1px solid var(--divider)}
  .flt-archive-posts .ach-hero .wrap,.flt-archive-posts .ach-grid.wrap{padding-left:0;padding-right:0}
  .flt-archive-posts .ach-hero .kicker{display:inline-flex;font-family:var(--mono);font-size:12px;letter-spacing:.12em;color:var(--primary);background:var(--primary-soft);border-radius:4px;padding:5px 14px;font-weight:600;text-transform:uppercase;margin-bottom:24px}
  .flt-archive-posts .ach-hero .kicker .en{font-family:var(--mono);letter-spacing:.08em;color:var(--primary);opacity:.85;text-transform:none}
  .flt-archive-posts .ach-hero h1{font-size:48px;font-weight:700;letter-spacing:-.02em;line-height:1.15;margin:0 0 22px;max-width:780px}
  .flt-archive-posts .ach-hero h1 .accent{color:var(--primary)}
  .flt-archive-posts .ach-hero .sub{font-size:16.5px;line-height:1.75;color:var(--text-2);max-width:680px;margin:0 0 28px}
  .flt-archive-posts .ach-hero .meta-row{font-family:var(--mono);font-size:13px;letter-spacing:.04em;color:var(--text-3)}
  .flt-archive-posts .ach-tabs{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:24px 0;margin-bottom:36px}
  .flt-archive-posts .ach-tabs-cats{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex:1;min-width:0}
  .flt-archive-posts .ach-tabs .all-label{font-family:var(--mono);font-size:11px;letter-spacing:.12em;color:var(--text-3);text-transform:uppercase;margin-right:8px;flex:0 0 auto}
  .flt-archive-posts .ach-tabs .tab{font-size:14px;padding:8px 14px;border-radius:6px;color:var(--text-2);transition:all .15s;flex:0 0 auto;text-decoration:none;font-weight:500;white-space:nowrap}
  .flt-archive-posts .ach-tabs .tab:hover{color:var(--primary);background:var(--primary-soft)}
  .flt-archive-posts .ach-tabs .tab.on{color:#fff;background:var(--primary);font-weight:600}
  .flt-archive-posts .ach-tabs .tab .count{font-family:var(--mono);font-size:11px;opacity:.7;margin-left:6px}
  .flt-archive-posts .ach-tabs-spacer{display:none}
  .flt-archive-posts .ach-tabs-sort{flex:0 0 auto}
  /* v1.0.90：列表页通用搜索框组件（博客归档 tabs 行 / 案例归档 tools 行共用）
     —— header 的 .nav-search 自带尺寸，此组件用于列表页，宽度由外层容器控制。 */
  .flt-searchbox{display:flex;align-items:center;border:1px solid var(--border);border-radius:999px;background:var(--bg);overflow:hidden}
  .flt-searchbox:focus-within{border-color:var(--primary)}
  .flt-searchbox .ps-input{flex:1;min-width:0;border:0;background:transparent;font-family:var(--font);font-size:13.5px;color:var(--text);padding:9px 14px;min-height:38px;outline:none}
  .flt-searchbox .ps-input::placeholder{color:var(--text-2)}
  .flt-searchbox .ps-btn{border:0;background:transparent;color:var(--text-2);display:grid;place-items:center;width:40px;min-height:38px;cursor:pointer;padding:0}
  .flt-searchbox .ps-btn svg{width:17px;height:17px}
  .flt-searchbox .ps-btn:hover{color:var(--primary)}
  .flt-archive-posts .ach-tabs-search{flex:0 0 auto;width:240px}
  .flt-archive-posts .sort-select{appearance:none;-webkit-appearance:none;border:1px solid var(--border);border-radius:6px;background:var(--bg) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%239CA3AF' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") no-repeat right 10px center;padding:8px 30px 8px 12px;font-family:var(--mono);font-size:12px;color:var(--text-2);cursor:pointer;transition:border-color .15s}
  .flt-archive-posts .sort-select:hover{border-color:var(--primary)}
  .flt-archive-posts .ach-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;padding-bottom:48px}
  /* v1.0.83：archive 下 blog-card 缩略图不再单独写死 16/9 —— 统一继承全局 --cover-ratio。
     原 v0.9.0 的 16/9 与全局值恰好相同，删除后视觉不变；但可避免以后调整全局比例时此处不同步
     （该选择器特异性更高，会压过全局规则成为"隐形覆盖源"）。 */
  .flt-archive-posts .blog-card h3{font-size:18px;line-height:1.45}

  /* ============ v1.0.0 博客详情页（single.php） ============ */
  /* 所有规则作用域在 .flt-single-post 下 */
  .flt-single-post{padding:64px 0 0;background:var(--bg)}
  /* 面包屑 */
  .flt-single-post .bsv-crumbs{font-size:13px;color:var(--text-3);padding:24px 0 18px}
  .flt-single-post .bsv-crumbs-wrap,.flt-single-post .bsv-head.wrap{padding-left:0;padding-right:0}
  .flt-single-post .bsv-crumbs a{color:var(--text-3);text-decoration:none}
  .flt-single-post .bsv-crumbs a:hover{color:var(--primary)}
  .flt-single-post .bsv-crumbs .sep{margin:0 8px;color:var(--divider)}
  .flt-single-post .bsv-crumbs .here{color:var(--text-2)}
  /* 标题块 */
  .flt-single-post .bsv-head{display:flex;justify-content:space-between;align-items:flex-start;gap:24px;padding:0 0 36px;border-bottom:1px solid var(--divider)}
  .flt-single-post .bsv-head-main{flex:1;min-width:0}
  .flt-single-post .bsv-back-to-list{display:inline-flex;align-items:center;gap:6px;margin-top:8px;padding:8px 14px;border-radius:6px;background:var(--primary);color:#fff;font-size:13px;font-weight:600;text-decoration:none;transition:all .15s;flex:0 0 auto}
  .flt-single-post .bsv-back-to-list:hover{background:var(--primary-hover);color:#fff}
  .flt-single-post .bsv-back-to-list svg{width:16px;height:16px;flex-shrink:0}
  .flt-single-post .bsv-cat{display:inline-block;font-family:var(--mono);font-size:11px;letter-spacing:.08em;color:var(--primary);background:var(--primary-soft);border-radius:4px;padding:5px 12px;font-weight:600;text-transform:uppercase;margin-bottom:18px}
  .flt-single-post .bsv-title{font-size:38px;font-weight:700;letter-spacing:-.015em;line-height:1.3;margin:0 0 22px;max-width:880px}
  .flt-single-post .bsv-meta{display:flex;align-items:center;flex-wrap:wrap;gap:14px;font-size:14px;color:var(--text-2)}
  .flt-single-post .bsv-meta .who{display:flex;align-items:center;gap:10px}
  .flt-single-post .bsv-meta .who .ava{width:36px;height:36px;border-radius:50%;background:var(--primary-light);color:var(--primary);display:grid;place-items:center;font-family:var(--mono);font-size:13px;font-weight:700;flex:0 0 auto}
  /* v1.0.142：`.ava` 现在可能是**真实头像图片**（自托管，Boss 拍板 ⓐ）——
     无头像时仍是"首字徽章"（同一 class，样式天然兼容 ✓）。
     这里只需：裁掉溢出 + 让 <img> 铺满圆形（object-fit:cover 防变形 ✓）。 */
  .flt-single-post .bsv-meta .who .ava,
  .blog-card .author .ava{overflow:hidden}
  .flt-single-post .bsv-meta .who .ava .ava-img,
  .blog-card .author .ava .ava-img{width:100%;height:100%;object-fit:cover;display:block;border-radius:50%}
  .flt-single-post .bsv-meta .who b{font-weight:600;color:var(--text);display:block;font-size:14px}
  .flt-single-post .bsv-meta .who em{font-style:normal;font-size:12.5px;color:var(--text-3);display:block}
  .flt-single-post .bsv-meta .sep{color:var(--divider)}
  .flt-single-post .bsv-meta .item{display:inline-flex;align-items:center;gap:6px}
  .flt-single-post .bsv-meta .item svg{width:14px;height:14px;color:var(--text-3)}
  /* 三栏 shell：左 160 分享 / 中 minmax(0,1fr) 正文（限 760）/ 右 240 目录 */
  .flt-single-post .bsv-shell{display:grid;grid-template-columns:160px minmax(0,1fr) 240px;gap:48px;max-width:var(--max);margin:48px auto 0;padding:0 32px;align-items:start}
  /* 左：分享 sticky */
  .flt-single-post .bsv-share{position:sticky;top:110px;display:flex;flex-direction:column;align-items:center;gap:8px;padding-top:10px}
  .flt-single-post .bsv-share .btn{width:44px;height:44px;border:1px solid var(--border);border-radius:8px;background:var(--bg);display:grid;place-items:center;color:var(--text-2);cursor:pointer;transition:all .15s;padding:0;position:relative;font-family:inherit}
  .flt-single-post .bsv-share .btn:hover{border-color:var(--primary);color:var(--primary)}
  .flt-single-post .bsv-share .btn svg{width:18px;height:18px}
  .flt-single-post .bsv-share .btn.like{color:var(--primary);border-color:var(--primary-soft)}
  /* 86 赞 badge：右上角小红圆点 */
  .flt-single-post .bsv-share .btn .badge{position:absolute;top:-6px;right:-6px;min-width:21px;height:14px;padding:0 4px;border-radius:7px;background:var(--primary);color:#fff;font-family:var(--mono);font-size:10px;font-weight:700;display:grid;place-items:center;line-height:1}
  .flt-single-post .bsv-share .likes-num{font-family:var(--mono);font-size:11px;color:var(--primary);font-weight:600;margin-top:-2px}
  .flt-single-post .bsv-share .divider{width:24px;height:1px;background:var(--divider);margin:6px 0}
  .flt-single-post .bsv-share .lbl{font-family:var(--mono);font-size:11px;letter-spacing:.08em;color:var(--text-3);text-transform:uppercase;margin-bottom:2px}
  /* v1.0.4：点赞态（JS 加 .liked / .busy） */
  .flt-single-post .bsv-share .btn.like.liked{background:var(--primary-soft);border-color:var(--primary)}
  .flt-single-post .bsv-share .btn.like.liked svg{fill:var(--primary)}
  .flt-single-post .bsv-share .btn.like.busy{opacity:.6;cursor:default}
  /* v1.0.4：复制链接成功反馈（main.js 加 data-copied） */
  .flt-single-post .bsv-share .btn[data-copied]{border-color:var(--primary);color:var(--primary)}
  /* v1.0.4：微信二维码浮层（hover/点击/focus 展开，默认隐藏，向右弹出）
     二维码由本地 vendor qrcode.min.js 生成（文章 URL），不走任何第三方接口。 */
  .flt-single-post .bsv-share .wx-qr{position:relative}
  .flt-single-post .bsv-share .wx-qr .bsv-qr-pop{position:absolute;top:50%;left:calc(100% + 12px);z-index:25;min-width:176px;padding:12px;
    background:#fff;border:1px solid var(--border);border-radius:10px;box-shadow:0 14px 32px rgba(16,24,40,.16);
    display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center;
    opacity:0;visibility:hidden;pointer-events:none;transform:translateY(-50%) translateX(-8px);
    transition:opacity .18s ease,transform .18s ease,visibility .18s ease}
  .flt-single-post .bsv-share .wx-qr:hover .bsv-qr-pop,
  .flt-single-post .bsv-share .wx-qr:focus-visible .bsv-qr-pop,
  .flt-single-post .bsv-share .wx-qr.is-qr-open .bsv-qr-pop{opacity:1;visibility:visible;transform:translateY(-50%) translateX(0)}
  .flt-single-post .bsv-share .wx-qr .qr-tip-top{display:block;font-family:var(--mono);font-size:11px;letter-spacing:.06em;color:var(--text-3);line-height:1.5}
  .flt-single-post .bsv-share .wx-qr .qr-canvas{display:grid;place-items:center;width:128px;height:128px;background:#fff;border:1px solid var(--divider);border-radius:6px;padding:4px}
  .flt-single-post .bsv-share .wx-qr .qr-canvas svg{width:100%;height:100%;display:block}
  /* 中：正文 */
  .flt-single-post .bsv-content{min-width:0;max-width:760px;margin:0 auto;width:100%}
  .flt-single-post .bsv-prose{font-size:16px;line-height:1.85;color:var(--text)}
  /* v1.0.65 边界纪律（方案 B）：正文排版规则统一用「> 直接子选择器」——
     只作用于正文里直接写的原生内容；区块内容（flt/hero|cta|section|metrics）都包在区块容器内、
     非 .bsv-prose 的直接子元素 → 永不命中，解决此前后代写法因特异性 (0,2,1) 高于
     .flt-cta p (0,1,1) 而给区块内 p「补位」margin 的问题（互不污染）。
     兼容 WP 原生 Group / Column 包裹（原生段落常被包一层 div，否则会漏掉）。 */
  .flt-single-post .bsv-prose > p,
  .flt-single-post .bsv-prose .wp-block-group > p,
  .flt-single-post .bsv-prose .wp-block-column > p{margin:0 0 22px}
  /* H2/H3 段头（v1.0.0 patch1：去掉 §N / 0N 自动编号，按 Boss 要求移除） */
  .flt-single-post .bsv-prose > h2,
  .flt-single-post .bsv-prose .wp-block-group > h2{position:relative;margin:48px 0 20px;font-size:24px;font-weight:700;letter-spacing:-.01em;line-height:1.4;scroll-margin-top:96px}
  .flt-single-post .bsv-prose > h3,
  .flt-single-post .bsv-prose .wp-block-group > h3{margin:32px 0 14px;font-size:18px;font-weight:600;line-height:1.5;scroll-margin-top:96px}
  /* 正文内 blockquote / 列表 / 代码 / 表格 / lead / kpi */
  .flt-single-post .bsv-prose > blockquote{border-left:3px solid var(--primary);background:var(--primary-soft);padding:18px 22px;margin:24px 0;border-radius:0 8px 8px 0}
  .flt-single-post .bsv-prose > blockquote > p{margin:0 0 8px;color:var(--text)}
  .flt-single-post .bsv-prose > blockquote cite{font-style:normal;font-size:13px;color:var(--text-3)}
  .flt-single-post .bsv-prose > ul,.flt-single-post .bsv-prose > ol,
  .flt-single-post .bsv-prose .wp-block-group > ul,.flt-single-post .bsv-prose .wp-block-group > ol{margin:0 0 22px;padding-left:24px}
  .flt-single-post .bsv-prose > ul > li,.flt-single-post .bsv-prose > ol > li{margin-bottom:8px}
  .flt-single-post .bsv-prose > p code{font-family:var(--mono);font-size:14px;background:var(--bg-2);padding:2px 6px;border-radius:4px}
  .flt-single-post .bsv-prose > table{width:100%;border-collapse:collapse;margin:24px 0;font-size:14px}
  .flt-single-post .bsv-prose > table th,.flt-single-post .bsv-prose > table td{padding:10px 14px;border:1px solid var(--divider);text-align:left}
  .flt-single-post .bsv-prose > table th{background:var(--bg-2);font-weight:600;color:var(--text)}
  .flt-single-post .bsv-prose .lead{font-size:18px;color:var(--text-2);line-height:1.75;margin-bottom:32px;font-weight:500}
  .flt-single-post .bsv-prose .kpi{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin:28px 0;padding:24px;background:var(--bg-2);border-radius:8px}
  .flt-single-post .bsv-prose .kpi > div{text-align:center}
  .flt-single-post .bsv-prose .kpi .num{font-family:var(--mono);font-size:28px;font-weight:700;color:var(--primary);line-height:1.1}
  .flt-single-post .bsv-prose .kpi .lbl{font-size:12.5px;color:var(--text-3);margin-top:6px}
  /* v1.0.65：【修 page.php 原生编辑器内容间距失效 · 与案例详情同因，影响面更大】
     全局 reset `*{margin:0;padding:0}` 归零所有 p/h2 外边距，而 `.entry-content`
     （page.php line 41，所有普通页面 + 静态首页的正文容器）全主题零排版规则 →
     关于我们 / 联系我们 / 隐私政策 / 首页等用编辑器写原生段落或标题时，间距全部失效、挤成一坨。
     边界纪律（方案 B）：用「> 直接子选择器」只作用于正文里直接写的原生内容；
     区块内容（flt/hero|cta|section|metrics）包在区块容器内、非直接子元素 → 永不命中，互不污染。
     兼容 WP 原生 Group / Column 包裹（原生段落常被包一层 div，否则会漏掉）。
     规格参照 .bsv-prose。 */
  /* v1.0.119【边界修正 · 一次"全局样式污染"的根因，影响面最大的一条】
     v1.0.65 这里写的是 `.entry-content .wp-block-group > p`（**后代**选择器），
     但我们的区块模式**本身就是 .wp-block-group**（flt-sec / hero / cta / certs…），
     后果：**每一个版式段落**（资质徽章、图注、CTA 文案、卡内说明）都被加上
     22px 下边距 —— 表现为徽章行掉行留白、图注左右错位、区块底部多出空白带
     （Boss 在首页 / 移动端 / 底部 CTA 三处实测复现）。
     当时的注释假设「区块内容包在区块容器内 → 永不命中」，该假设**不成立**。

     修正：只作用于 `.entry-content` 的**直接子** group / column（原生段落被
     包一层的形态，v1.0.65 的真实目标）；我们区块模式的段落都嵌在 .wrap /
     区块容器里（≥2 层），自然排除，交回给各区块自己的版式规则
     （上面骨架段 + 文件末尾兼容层）。

     ⚠️ 纪律：以后新增「正文段落样式」一律用**直接子**选择器（>），
        不要用后代选择器（空格）——否则会再次污染所有区块模式。 */
  .entry-content > p,
  .entry-content > .wp-block-group > p,
  .entry-content > .wp-block-column > p{margin:0 0 22px;line-height:1.85}
  .entry-content > p:last-child,
  .entry-content > .wp-block-group > p:last-child{margin-bottom:0}
  .entry-content > h2,
  .entry-content > .wp-block-group > h2{font-size:24px;font-weight:700;letter-spacing:-.01em;line-height:1.4;margin:44px 0 18px}
  .entry-content > h2:first-child{margin-top:0}
  .entry-content > h3,
  .entry-content > .wp-block-group > h3{font-size:18px;font-weight:600;line-height:1.5;margin:32px 0 14px}
  .entry-content > h4,
  .entry-content > .wp-block-group > h4{font-size:16px;font-weight:600;margin:24px 0 12px}
  .entry-content > ul,.entry-content > ol,
  .entry-content > .wp-block-group > ul,.entry-content > .wp-block-group > ol{margin:0 0 22px;padding-left:24px}
  .entry-content > ul > li,.entry-content > ol > li{margin-bottom:8px}
  .entry-content > p a{text-decoration:underline;text-underline-offset:3px}
  .entry-content > img{max-width:100%;height:auto}
  .entry-content > blockquote{border-left:3px solid var(--primary);background:var(--primary-soft);padding:18px 22px;margin:24px 0}
  .entry-content > blockquote > p{margin:0 0 8px}
  .entry-content > blockquote > p:last-child{margin-bottom:0}
  .entry-content > table{width:100%;border-collapse:collapse;margin:24px 0;font-size:14px}
  .entry-content > table th,.entry-content > table td{padding:10px 14px;border:1px solid var(--divider);text-align:left}
  .entry-content > table th{background:var(--bg-2);font-weight:600}

  /* 上一篇/下一篇 + 标签 */
  /* 上一篇/下一篇：全局化，供任意 CPT 复用（案例详情等），blog 仍在 .flt-single-post 下 */
  .bsv-prev-next{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin:40px 0 24px;padding-top:32px;border-top:1px solid var(--divider)}
  .bsv-pn{display:block;padding:18px 20px;border:1px solid var(--border);border-radius:8px;text-decoration:none;color:var(--text-2);transition:all .15s}
  .bsv-pn:hover{border-color:var(--primary);background:var(--primary-soft)}
  .bsv-pn .lbl{display:inline-flex;align-items:center;gap:4px;font-family:var(--mono);font-size:11px;letter-spacing:.08em;color:var(--text-3);text-transform:uppercase;margin-bottom:8px;white-space:nowrap}
  .bsv-pn .lbl svg{width:14px;height:14px;flex-shrink:0}
  .bsv-pn.next{text-align:right}
  .bsv-pn.next .lbl{flex-direction:row-reverse}
  .bsv-pn h4{font-size:15px;font-weight:600;line-height:1.5;color:var(--text);margin:0}

  /* ============ 通用横向分享（任意 CPT 按需 get_template_part 调用；blog 仍用左侧竖向 bsv-share） ============ */
  .share-h{display:flex;align-items:center;gap:16px}
  .share-h-label{font-family:var(--mono);font-size:12px;letter-spacing:.08em;color:var(--text-3);text-transform:uppercase;font-weight:600}
  .share-h-actions{display:flex;align-items:center;gap:10px}
  .share-btn{position:relative;width:40px;height:40px;border-radius:999px;border:1px solid var(--border);background:#fff;color:var(--text-2);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:all .15s;padding:0}
  .share-btn:hover{border-color:var(--primary);color:var(--primary)}
  .share-btn svg{width:20px;height:20px;display:block}
  .share-btn .share-qr-pop{position:absolute;bottom:calc(100% + 12px);left:50%;z-index:25;min-width:176px;padding:12px;background:#fff;border:1px solid var(--divider);border-radius:10px;box-shadow:0 12px 32px -12px rgba(15,23,42,.25);opacity:0;visibility:hidden;transform:translateX(-50%) translateY(8px);transition:all .18s ease;text-align:center}
  .share-btn:hover .share-qr-pop,.share-btn:focus-visible .share-qr-pop,.share-btn.is-qr-open .share-qr-pop{opacity:1;visibility:visible;transform:translateX(-50%) translateY(0)}
  .share-btn .qr-tip-top{display:block;font-family:var(--mono);font-size:11px;letter-spacing:.06em;color:var(--text-3);line-height:1.5;margin-bottom:6px}
  .share-btn .qr-canvas{display:grid;place-items:center;width:128px;height:128px;background:#fff;border:1px solid var(--divider);border-radius:6px;padding:4px;margin:0 auto}
  .share-btn .qr-canvas svg{width:100%;height:100%}
  .share-btn .qr-err{font-size:12px;color:var(--text-3)}
  .flt-single-post .bsv-tags{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:18px 0;border-top:1px solid var(--divider);border-bottom:1px solid var(--divider)}
  .flt-single-post .bsv-tags .lbl{font-family:var(--mono);font-size:11px;letter-spacing:.08em;color:var(--text-3);text-transform:uppercase;margin-right:6px}
  .flt-single-post .bsv-tags a{display:inline-block;font-size:13px;padding:5px 12px;border:1px solid var(--border);border-radius:5px;color:var(--text-2);text-decoration:none;transition:all .15s}
  .flt-single-post .bsv-tags a:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}
  /* 右：目录 sticky（v1.0.0 patch1：去掉 01. 前缀，加滚动跟随高亮竖线 + 当前章节文字高亮） */
  .flt-single-post .bsv-toc{position:sticky;top:110px;font-size:13px;line-height:1.7;padding:0 0 0 14px}
  .flt-single-post .bsv-toc .lbl{display:block;font-family:var(--mono);font-size:11px;letter-spacing:.12em;color:var(--text-3);text-transform:uppercase;margin-bottom:14px;padding-left:4px}
  .flt-single-post .bsv-toc ol{list-style:none;margin:0;padding:0;position:relative}
  /* 灰底线：所有章节位置的总高 */
  .flt-single-post .bsv-toc ol::before{content:"";position:absolute;left:0;top:6px;bottom:6px;width:2px;background:var(--divider);border-radius:1px}
  /* 高亮竖线（滚动跟随）：JS 动态改 height 表示当前进度 */
  .flt-single-post .bsv-toc .toc-progress{position:absolute;left:0;top:6px;width:2px;height:0;background:var(--primary);border-radius:1px;transition:height .15s linear;pointer-events:none;z-index:1}
  .flt-single-post .bsv-toc li{margin-bottom:8px;position:relative}
  .flt-single-post .bsv-toc a{display:block;color:var(--text-3);text-decoration:none;padding:6px 0 6px 18px;position:relative;transition:color .15s;line-height:1.5}
  .flt-single-post .bsv-toc a:hover{color:var(--primary)}
  .flt-single-post .bsv-toc li.on > a{color:var(--primary);font-weight:600}
  .flt-single-post .bsv-toc .empty{color:var(--text-3);font-size:12px;padding:4px 0}
  /* TOC 嵌套：H3 子条目挂在最近 H2 <li> 内 */
  .flt-single-post .bsv-toc ol li ul{margin:6px 0 8px 0;padding:0 0 0 18px;border-left:none}
  .flt-single-post .bsv-toc ol li ul li{margin-bottom:0}
  .flt-single-post .bsv-toc ol li ul li a{padding:5px 0 5px 0;font-size:12.5px}
  .flt-single-post .bsv-toc ol li ul li.on > a{color:var(--primary);font-weight:600}
  /* 相关文章 */
  .flt-single-post .bsv-related{padding:64px 0;border-top:1px solid var(--divider);background:var(--bg-2);margin-top:48px}
  .flt-single-post .bsv-related-inner{max-width:1280px;margin:0 auto;padding:0 32px}
  .flt-single-post .bsv-related .sec-head h2{font-size:28px;font-weight:700;letter-spacing:-.015em;margin:0 0 6px}
  .flt-single-post .bsv-related .sec-head h2 .accent{color:var(--primary)}
  .flt-single-post .bsv-related .sec-head .sub{font-family:var(--mono);font-size:12px;letter-spacing:.06em;color:var(--text-3)}
  .flt-single-post .bsv-related .grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:28px}
  /* CTA */
  .flt-single-post .bsv-cta{background:var(--primary);padding:80px 0;color:#fff;text-align:center}
  .flt-single-post .bsv-cta-inner{max-width:720px;margin:0 auto;padding:0 32px}
  .flt-single-post .bsv-cta .kicker{display:block;font-family:var(--mono);font-size:12px;letter-spacing:.08em;color:rgba(255,255,255,.85);margin-bottom:18px;text-transform:uppercase}
  .flt-single-post .bsv-cta h2{font-size:34px;font-weight:700;letter-spacing:-.015em;margin:0 0 18px;line-height:1.3}
  .flt-single-post .bsv-cta p{color:rgba(255,255,255,.85);font-size:16px;line-height:1.75;margin-bottom:32px}
  .flt-single-post .bsv-cta .btn{display:inline-flex;align-items:center;gap:8px;background:#fff;color:var(--primary);padding:14px 32px;border-radius:8px;font-size:15px;font-weight:600;text-decoration:none;transition:filter .15s}
  .flt-single-post .bsv-cta .btn:hover{filter:brightness(.95)}
  .flt-single-post .bsv-cta .small{font-family:var(--mono);font-size:12px;color:rgba(255,255,255,.7);margin-top:24px}

  /* ============ v1.0.0 响应式 ============ */
  @media(max-width:1100px){
    .flt-single-post .bsv-shell{grid-template-columns:1fr;gap:32px;max-width:760px;padding:0 24px;margin-top:36px}
    .flt-single-post .bsv-back-to-list{display:none}
    /* 移动端：分享栏降为水平横排 sticky 改为 static，并放到正文底部 */
    .flt-single-post .bsv-share{position:static;flex-direction:row;flex-wrap:wrap;justify-content:center;padding:14px;margin-top:32px;background:var(--bg-2);border-radius:8px}
    .flt-single-post .bsv-share .likes-num{margin:0 0 0 4px;display:inline-block;align-self:center}
    /* v1.0.4：横排分享栏里微信二维码浮层改为向下弹出（hover 无意义，点击 toggle .is-qr-open） */
    .flt-single-post .bsv-share .wx-qr .bsv-qr-pop{top:calc(100% + 12px);left:50%;right:auto;transform:translateX(-50%) translateY(-8px)}
    .flt-single-post .bsv-share .wx-qr:hover .bsv-qr-pop,
    .flt-single-post .bsv-share .wx-qr:focus-visible .bsv-qr-pop,
    .flt-single-post .bsv-share .wx-qr.is-qr-open .bsv-qr-pop{transform:translateX(-50%) translateY(0)}
    .flt-single-post .bsv-share .divider{display:none}
    .flt-single-post .bsv-share .lbl{display:none}
    /* v1.0.5：移动端 hero 加 padding，避免贴边（.wrap 选择器需覆盖全局 wrap padding:0） */
    .flt-single-post .bsv-crumbs-wrap.wrap,
    .flt-single-post .bsv-head.wrap{padding-left:24px;padding-right:24px}
    /* 平板及以下：目录上移到顶部（sticky → static + 卡片样式） */
    .flt-single-post .bsv-toc{position:static;order:-1;border:1px solid var(--border);border-radius:8px;padding:16px 20px}
    /* v1.0.13：平板及以下，归档 hero / 网格 / tabs 补水平内边距，避免贴边。
       ≤767px 有更小的 20px 覆盖（见下方 max-width:767px 块）。 */
    .flt-archive-posts .ach-hero .wrap,
    .flt-archive-posts .ach-grid.wrap{padding-left:24px;padding-right:24px}
    .flt-archive-posts .ach-tabs{padding-left:24px;padding-right:24px}
  }
  @media(max-width:767px){
    .flt-archive-posts{padding-bottom:56px}
    .flt-archive-posts .ach-hero{padding:56px 0 36px}
    .flt-archive-posts .ach-hero .wrap{padding-top:20px;padding-left:20px;padding-right:20px}
    .flt-archive-posts .ach-hero h1{font-size:32px}
    .flt-archive-posts .ach-hero .sub{font-size:15px}
    .flt-archive-posts .ach-tabs{padding:14px 20px;margin-bottom:24px;margin-left:0;margin-right:0;gap:12px}
    .flt-archive-posts .ach-tabs-cats{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:2px}
    .flt-archive-posts .ach-tabs-cats::-webkit-scrollbar{display:none}
    .flt-archive-posts .ach-grid{grid-template-columns:1fr}
    .flt-archive-posts .ach-grid.wrap{padding-left:20px;padding-right:20px}
    .flt-single-post .bsv-head{padding-bottom:24px}
    .flt-single-post .bsv-title{font-size:26px}
    .flt-single-post .bsv-meta{gap:10px;font-size:13px}
    .flt-single-post .bsv-meta .item-views{display:none}
    .flt-single-post .bsv-prose{font-size:15.5px}
    .flt-single-post .bsv-prose h2{font-size:21px;margin:36px 0 16px}
    .flt-single-post .bsv-prose h3{font-size:17px}
    .flt-single-post .bsv-prose .kpi{grid-template-columns:1fr;gap:12px;padding:18px}
    .bsv-prev-next{grid-template-columns:1fr}
    .flt-single-post .bsv-related .grid{grid-template-columns:1fr}
    .flt-single-post .bsv-cta{padding:56px 0}
    .flt-single-post .bsv-cta h2{font-size:24px}
    /* v1.0.5：相关文章 grid 顶部间距收紧 */
    .flt-single-post .bsv-related .grid{margin-top:20px}
  }

/* ==========================================================================
   v1.0.91 站内搜索框下拉面板（.flt-sp）
   --------------------------------------------------------------------------
   由 assets/js/search.js 在每个搜索表单**之后**注入 —— 表单自身 overflow:hidden
   （圆角裁切），面板挂进表单内会被裁掉；宿主（表单父级）由 JS 设为 position:relative，
   面板的 top / left / width 按表单实际位置内联设置（header 的宿主比表单高，
   用 CSS 的 100% 会偏低）。
   覆盖范围：header（.nav-search）/ 产品列表（.pl-search）/ 案例归档（.case-search）/
            博客归档（.flt-searchbox）/ 搜索结果页（.s-search）。
   ========================================================================== */
.flt-sp{
  position:absolute;z-index:60;max-height:min(60vh,420px);overflow-y:auto;overscroll-behavior:contain;
  background:var(--bg);border:1px solid var(--border);border-radius:14px;
  box-shadow:0 18px 44px rgba(15,23,42,.14);
  padding:8px;text-align:left;
}
.flt-sp[hidden]{display:none}

/* 空词提交提示（仅「点了搜索但没输词」时出现） */
.flt-sp-tip{
  display:flex;align-items:center;gap:8px;padding:9px 11px;border-radius:9px;
  background:#FFF3EA;color:var(--accent-deep);font-size:12.5px;line-height:1.5;
}
.flt-sp-tip.is-muted{background:transparent;color:var(--text-2);padding:10px 11px}

/* v1.0.92（E-b）：分类页的搜索范围提示（如「在“仓储物流”内搜索」）—— 面板最上方一行。
   只在页面内的列表搜索框显示（header 搜索框不带范围），用于说明当前搜索语境。 */
.flt-sp-scope{
  display:flex;align-items:center;gap:8px;
  padding:8px 11px;margin-bottom:2px;
  border-bottom:1px solid var(--divider);
  font-size:12.5px;color:var(--text-2);
}
.flt-sp-scope::before{
  content:"";flex:0 0 auto;width:6px;height:6px;border-radius:50%;background:var(--primary);
}

.flt-sp-sec + .flt-sp-sec{margin-top:6px;padding-top:6px;border-top:1px solid var(--divider)}
.flt-sp-h{
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:6px 11px;font-family:var(--mono);font-size:10.5px;font-weight:600;
  letter-spacing:.12em;text-transform:uppercase;color:var(--text-3);
}
.flt-sp-clear{
  border:0;background:transparent;color:var(--text-3);cursor:pointer;padding:2px 4px;
  font-family:var(--mono);font-size:10.5px;letter-spacing:.04em;text-transform:none;
}
.flt-sp-clear:hover{color:var(--primary)}

.flt-sp-row{display:flex;align-items:center;gap:4px;border-radius:9px}
.flt-sp-row.on,
.flt-sp-row:hover{background:var(--primary-soft)}
.flt-sp-word{
  flex:1;min-width:0;display:flex;align-items:center;gap:9px;
  border:0;background:transparent;cursor:pointer;text-align:left;
  padding:9px 11px;font-family:var(--font);font-size:13.5px;color:var(--text);
}
.flt-sp-row.on .flt-sp-word,
.flt-sp-row:hover .flt-sp-word{color:var(--primary)}
.flt-sp-ico{flex:0 0 auto;width:6px;height:6px;border-radius:2px;background:var(--border)}
.flt-sp-row.on .flt-sp-ico,
.flt-sp-row:hover .flt-sp-ico{background:var(--primary)}
.flt-sp-txt{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.flt-sp-hot{
  flex:0 0 auto;font-family:var(--mono);font-size:9.5px;font-weight:700;letter-spacing:.06em;
  color:#fff;background:var(--accent);border-radius:4px;padding:1px 5px;line-height:1.7;
}
.flt-sp-del{
  flex:0 0 auto;width:26px;height:26px;margin-right:7px;border:0;border-radius:7px;
  background:transparent;color:var(--text-3);cursor:pointer;font-size:15px;line-height:1;padding:0;
}
.flt-sp-del:hover{background:var(--bg-2);color:var(--text)}

.flt-sp-foot{margin-top:6px;padding-top:6px;border-top:1px solid var(--divider)}
.flt-sp-all{
  width:100%;border:0;border-radius:9px;background:transparent;cursor:pointer;text-align:left;
  padding:9px 11px;font-family:var(--font);font-size:13px;color:var(--primary);
}
.flt-sp-all:hover{background:var(--primary-soft)}

/* 空词提交的输入框反馈（文字提示在面板顶部，这里只做轻微抖动） */
.ps-input.is-invalid{animation:flt-sp-shake .32s ease}
@keyframes flt-sp-shake{
  0%,100%{transform:translateX(0)}
  25%{transform:translateX(-3px)}
  75%{transform:translateX(3px)}
}
@media(prefers-reduced-motion:reduce){
  .ps-input.is-invalid{animation:none}
}

/* 移动端：面板宽度跟随表单（列表页搜索框已撑满容器），限制最大高度 */
@media(max-width:767px){
  .flt-sp{max-height:56vh;border-radius:12px}
}

/* ============================================================================
   页面模板 .flt-page（v1.0.111）
   ----------------------------------------------------------------------------
   背景（Boss 实测复现）：主题此前**完全没有** .flt-page / .entry-header /
   .entry-title 的任何样式 —— 普通页面（关于 / 联系 / 隐私 …）的内容从 y=0 开始，
   正好被 64px 高的固定导航（.nav{position:fixed;height:64px}）压住，
   页面标题与 Logo/导航重叠（用区块库组装 /contact/ 页面时最明显）。

   处理：
     · 非首页的普通页面给足导航安全距离（88px = 导航 64px + 24px 呼吸），
       并在标题与正文之间留出间距；
     · 静态首页（body.home）保持 0 顶部留白 —— 它的首屏是 Hero 区块，本该贴着
       页面上沿（顶部导航在该处是透明的），额外留白反而会撑开首屏。

   配套：page.php 新增「是否输出标题」开关（首页恒不输出；另提供
   page-blocks.php「区块组装页（隐藏标题）」模板供个性化的区块页面选用）。
   ============================================================================ */

.flt-page { padding: 88px 0 96px; }
/* v1.0.115【方案 A】隐藏标题的页面与首页**同等对待**：顶部留白归零 →
   首屏的 Hero / 全宽区块能贴到页面上沿、与透明导航共用背景。
   （类由 inc/page-options.php 的 flt_page_options_body_class() 添加；底部留白保留 —— 页面总得有底。） */
body.home .flt-page,
body.flt-page--no-title .flt-page { padding-top: 0; }
/* v1.0.119：**底部**同理 —— 首页 / 隐藏标题页的最后一屏通常是通栏 CTA（.flt-sec.cta），
   它自带 padding；页容器再留 96px，就会在「蓝色 CTA 带」与页脚之间露出一条白带
   （Boss 实测：底部 CTA 应与页脚无缝衔接）。
   Boss 拍板（2026-09-13）：隐藏标题页**一并应用**（与 padding-top 的处理保持一致）。
   代价与对策：若某页末屏不是通栏区块（而是普通文本 / 卡片收尾），底部会显得偏紧 ——
   给该页末尾补一个全宽区块或 spacer 即可，不为个别页面破坏一致性。 */
body.home .flt-page,
body.flt-page--no-title .flt-page { padding-bottom: 0; }

.flt-page .entry-header { margin-bottom: 28px; }
.flt-page .entry-title {
  font-size: clamp(26px, 3.2vw, 42px);
  font-weight: 700;
  letter-spacing: -.02em;
  line-height: 1.2;
  margin: 0;
}

@media (max-width: 767px) {
  .flt-page { padding: 78px 0 72px; }
  .flt-page .entry-header { margin-bottom: 20px; }
}

/* ============================================================================
   页面**内容宽度两档**（v1.0.120 引入 · v1.0.121 调整）
   ----------------------------------------------------------------------------
   背景：`page.php` 的 `.entry-content` 此前**没有任何宽度容器** ⇒ 原生正文
   100% 贴到视口边缘（/privacy-policy/ 实测），而标题用的却是 `.wrap`(1400px)
   ⇒ 同一页面出现两套宽度、标题与正文左边缘不齐。

   两档（编辑器侧栏「页面配置 → 内容宽度」；body class 由 inc/page-options.php 输出）：
     · 常规 contained（默认）：内容跑在主题**全局容器**内（与 .wrap 同规格，
       左右有安全边距、不贴边）—— **正文、标题、区块共用这一列**。
     · 全宽 full：**不输出任何宽度规则**，宽度完全交给区块库（区块自带 .wrap）
       —— 落地页 / 首屏 Hero / 通栏 CTA 用这一档（首页与勾了「隐藏标题」的页面走这里）。

   v1.0.121【Boss 决策】：**取消 760px 阅读列** —— v1.0.120 曾把常规档的正文段落
   再收窄到 760px，Boss 实测后要求「直接与原始内容容器宽度一致」⇒ 删除那组
   `max-width:760px` 规则，正文与容器同宽。
   （如将来某页需要阅读列，建议按「第三档」实现，不要改这里 —— 保持两档语义干净。）

   纪律：宽度只由 `.entry-content` 这一层容器决定，**不要再对子元素下宽度限制**，
   否则又会出现「标题 / 正文 / 区块三套宽度」的老问题。 */
body.flt-page--contained .flt-page .entry-content {
  max-width: var(--max);
  margin-inline: auto;
  padding-inline: 0; /* v1.0.122：与页脚对齐（桌面靠 --max 的 64px 安全边兜底，不贴边） */
}
@media (max-width: 767px) {
  /* 与 .wrap 的移动端内边距一致（移动端必须保留，否则真贴边） */
  body.flt-page--contained .flt-page .entry-content { padding-inline: 20px; }
}

/* ============================================================================
   v1.0.122【Boss 决策 · 方案 A1】：**页面级内容与页脚对齐（贴边设计）**
   ----------------------------------------------------------------------------
   问题（Boss 实测截图）：全局 `.wrap{padding:0 32px}`，而页脚是 `footer .wrap{padding:0}`
   ⇒ 内容比页脚左右各窄 32px，视觉上「上部窄、底部宽」✗。
   主题历史上已在两处**逐页打补丁**：case.css v1.0.64（案例归档/详情）、
   search.css v1.0.111（搜索结果页）。本段把这件事**统一收敛到一处** ——
   以后新增页面模板只改这里，不再逐页修。

   规则：
     · **桌面（≥768px）**：下列页面级容器左右 padding 归 0 ⇒ 与页脚严格对齐 ✓
       安全性：桌面靠 `--max:min(1400px, 100% - 128px)` 提供**左右各 64px 安全边**
       （主题变量注释：悬浮客服 56–64px，不会压住正文），归 0 不会贴边 ✓。
     · **移动（≤767px）**：保留全局 `.wrap{padding:0 20px}` —— 移动端 `.wrap` 是
       `max-width:100%`，没有 128px 兜底，归 0 会真的贴边 ✗（case.css v1.0.63 教训）
       ⇒ 本段**只写在 ≥768 媒体查询里** ✓。

   已自行对齐、无需列入的（保持其模块内的既有设计）：
     `.flt-search`（v1.0.111 ✓）、`.flt-archive-case` / `.flt-single-case`（v1.0.64 ✓）、
     `.flt-archive-posts`（桌面 0 ✓；其 ≤1023 的 24px 是 v1.0.13 特意加的平板内边距 ✓）。

   ⚠️ 新增页面模板：把它的根类加进下面列表即可（这是唯一入口）。 */
@media (min-width: 768px) {
  .flt-page .entry-header.wrap,
  .flt-page .entry-content,
  .flt-index > .wrap,
  .flt-404 > .wrap,
  .flt-inquiry .wrap,
  .flt-compare .wrap,
  .flt-product-list .wrap,
  .flt-pdetail .wrap,
  .flt-single-post .bsv-shell { padding-left: 0; padding-right: 0; }
}

  /* ============ 图文左右（flt/image-text · v1.0.214） ==========================
     Boss 需求（2026-09-17 ✓）：区块库要有一套「通用核心模块」✓ 本块是第 1 个试点 ✓
     控件口径 = **B 档：内容全自由 + 样式只给档位** ✓（详见 blocks/image-text/render.php ✓）
     ⚠️ 下面类名与 blocks/image-text/editor.js 的 modClasses() **必须逐字一致** ✗
        （改一处必须同步另一处 ✓ 否则编辑器预览与前台不一致 ✗）
     ⚠️ 颜色一律走主题令牌 ✓ 本段不新增任何色值 ✗（保证全站调性统一 ✓）*/
  .flt-it{padding:104px 0}
  .flt-it__grid{display:grid;grid-template-columns:1.05fr 1fr;gap:56px;align-items:center}
  /* 图右：只换列序 ✓ 不改列宽公式 ✓（否则两档观感不一致 ✗）*/
  .flt-it--media-right .flt-it__grid{grid-template-columns:1fr 1.05fr}
  .flt-it--media-right .flt-it__media{order:2}
  .flt-it--media-right .flt-it__body{order:1}

  .flt-it__media{margin:0;position:relative;overflow:hidden;border-radius:var(--r-md);background:var(--primary-soft)}
  .flt-it__media img{display:block;width:100%;height:100%;object-fit:cover}
  /* 比例档位 ✓（占位块吃同一比例 ✓ ⇒ 换图前后不跳版 ✓）*/
  .flt-it--ratio-wide .flt-it__media{aspect-ratio:16/9}
  .flt-it--ratio-standard .flt-it__media{aspect-ratio:4/3}
  .flt-it--ratio-square .flt-it__media{aspect-ratio:1/1}
  /* 未选图时的占位：斜纹 ✓（明确"这里要放图" ✓ 不留白块 ✗）*/
  .flt-it__ph{display:block;width:100%;height:100%;background:repeating-linear-gradient(45deg,var(--bg-2) 0 12px,#EDF1F7 12px 24px)}

  .flt-it__body{min-width:0}
  .flt-it__eyebrow{margin:0 0 14px}
  .flt-it__title{font-size:34px;font-weight:700;letter-spacing:-.015em;line-height:1.3;margin:0 0 18px;text-wrap:balance}
  .flt-it__lede{color:var(--text-2);font-size:16px;line-height:1.8}
  .flt-it__lede p+p{margin-top:14px}
  .flt-it__lede a{text-decoration:underline;text-underline-offset:3px}

  /* ── 要点列表 ⭐ v1.0.215 纪律修复（Boss 2026-09-17 拍板 ✓）────────────────
     「**不要自行随便画** ✗ 需要**保持全局统一标识** ✓」
     ⇒ 图标改为**主题图标库**（IconPark `check-one` ✓ 见 render.php 的 flt_icon('ok',18) ✓）
     ✗ 已删除原先手绘的"圆底 + 边框对勾"（::before/::after ✗）—— 那属于"自造图标"✗
     ⇒ 想换样式 = 换 render.php 里的图标名 ✓（一处生效全站 ✓）*/
  .flt-it__list{list-style:none;margin:24px 0 0;display:grid;gap:12px}
  .flt-it__list li{display:flex;align-items:flex-start;gap:10px;font-size:15px;line-height:1.7;color:var(--text)}
  .flt-it__ico{color:var(--primary);margin-top:3px}
  .flt-it__txt{min-width:0}

  .flt-it__cta{margin:32px 0 0}

  /* ── 底色档位 ✓（全部走令牌 ✓）── */
  .flt-it--surface-tint{background:var(--bg-2)}
  .flt-it--surface-dark{background:var(--dark);color:#fff}
  .flt-it--surface-dark .flt-it__title{color:#fff}
  .flt-it--surface-dark .flt-it__lede,
  .flt-it--surface-dark .flt-it__list li{color:rgba(255,255,255,.82)}
  .flt-it--surface-dark .flt-it__eyebrow{color:#7FB2FF}
  .flt-it--surface-dark .flt-it__ico{color:#7FB2FF}

  /* ── 上下留白档位 ✓ ── */
  .flt-it--density-compact{padding:64px 0}
  .flt-it--density-relaxed{padding:128px 0}

  /* ── 编辑器专属：要点行操作按钮排一行 ✓（只影响后台画布 ✓ 前台不加载 ✗）── */
  .editor-styles-wrapper .flt-it__list li{flex-wrap:wrap;align-items:center;gap:6px}
  .editor-styles-wrapper .flt-it__ops{display:inline-flex;gap:4px}

  /* ── 响应式 ── */
  @media(max-width:1023px){
    .flt-it__grid{grid-template-columns:1fr;gap:32px}
    /* 窄屏统一「图在上」✓（左右交错在手机上反而难读 ✗）*/
    .flt-it--media-right .flt-it__media{order:0}
    .flt-it--media-right .flt-it__body{order:0}
  }
  @media(max-width:767px){
    .flt-it,.flt-it--density-relaxed{padding:72px 0}
    .flt-it--density-compact{padding:48px 0}
    .flt-it__grid{gap:24px}
    .flt-it__title{font-size:26px}
    .flt-it__list{margin-top:18px}
    .flt-it__cta{margin-top:24px}
  }

  /* ============ 客户评价（flt/reviews · v1.0.216）===============================
     Boss 需求（2026-09-17 ✓）：评价 = **文本型内容** ✓ **直接动态化** ✓ **不做打分体系** ✗
     复用现有「客户评价」段 ✓（`.testi / .testi-grid / .t-card / .quote / .stars / .who / .ava` ✓
       见本文件「客户评价（加装饰大引号）」段 ✓）
       ⇒ 与 `patterns/sections/testimonials.php` **同源** ✓ ⇒ **视觉零变化** ✓
     本段只补 4 件事 ✓ 其余一律不动 ✗：
       ① 列数档位 ✓  ② 底色档位（含深色 ✓）  ③ 五星由 ★ 文本改为**图标库的 star** ✓
       ④ 头像图（传了头像就用图 ✓ 没传仍走首字母 ✓）
     ⚠️ 五星颜色走新令牌 `--star` ✓（不再散写色值 ✗ 见 :root ✓）*/
  .flt-rv--cols-2 .testi-grid{grid-template-columns:repeat(2,1fr)}
  .flt-rv--cols-1 .testi-grid{grid-template-columns:1fr}

  /* 五星（⭐ 纪律：图标一律来自图标库 ✓ 不用 ★ 字符 ✗ 不手画 ✗）*/
  .flt-rv .t-card .stars{display:flex;align-items:center;gap:2px;color:var(--star);letter-spacing:0;margin-bottom:14px}
  .flt-rv .t-card .stars .flt-icon{flex:0 0 auto}
  .flt-rv .t-card .quote{pointer-events:none}

  /* 引语与署名（覆盖 `.t-card p` 的 22px 下边距 ✓ 避免署名被顶开 ✗）*/
  .flt-rv .t-card .flt-rv__text{margin-bottom:22px}
  .flt-rv .t-card .who-txt{min-width:0}
  .flt-rv .t-card .who-txt .name{font-size:14px;font-weight:600;margin:0;color:var(--text)}
  .flt-rv .t-card .who-txt .title{font-size:12.5px;color:var(--text-3);margin:2px 0 0}

  /* 头像图（40×40 圆 ✓ 与首字母版同尺寸 ✓ 换用不跳版 ✓）*/
  .flt-rv .t-card img.ava{object-fit:cover;background:var(--bg-2)}

  /* 底色档位（默认 tint = 现有 `.testi` 的底色 ✓ 故只补 plain / dark ✓）*/
  .flt-rv--surface-plain{background:var(--bg)}
  .flt-rv--surface-dark{background:var(--dark)}
  .flt-rv--surface-dark .sec-head h2{color:#fff}
  .flt-rv--surface-dark .sec-head .right{color:rgba(255,255,255,.55)}
  .flt-rv--surface-dark .t-card{background:#141C2E;border-color:rgba(255,255,255,.12)}
  .flt-rv--surface-dark .t-card .flt-rv__text{color:rgba(255,255,255,.85)}
  .flt-rv--surface-dark .t-card .who{border-top-color:rgba(255,255,255,.12)}
  .flt-rv--surface-dark .t-card .who-txt .name{color:#fff}
  .flt-rv--surface-dark .t-card .who-txt .title{color:rgba(255,255,255,.6)}

  /* 留白档位（基准 104px 来自既有 `.values,.solutions,.testi` ✓ 这里只加/减 ✓）*/
  .flt-rv--density-compact{padding:64px 0}
  .flt-rv--density-relaxed{padding:128px 0}

  /* 编辑器专属：条目操作按钮排一行 ✓（只影响后台画布 ✓ 前台不加载 ✗）*/
  .editor-styles-wrapper .flt-rv__ops{display:flex;align-items:center;gap:4px;margin-top:10px}

  @media(max-width:1023px){
    .flt-rv .testi-grid{grid-template-columns:repeat(2,1fr)}
    .flt-rv--cols-1 .testi-grid{grid-template-columns:1fr}
  }
  @media(max-width:767px){
    .flt-rv,.flt-rv--density-relaxed{padding:72px 0}
    .flt-rv--density-compact{padding:48px 0}
    .flt-rv .testi-grid,.flt-rv--cols-2 .testi-grid{grid-template-columns:1fr}
  }

  /* ============ 常见问题（flt/faq · v1.0.218）=================================
     原生 `<details>/<summary>` ✓ ⇒ **零 JS** ✓ 键盘与读屏**原生可用** ✓（无障碍最稳 ✓）
     图标纪律 ✓：展开箭头 = 主题图标库 `chevron-down` ✓（IconPark ✓ 不手画 ✗）
     ⚠️ 展开态只靠 CSS 旋转 ✓ 不改 DOM ✗ ⇒ 服务端输出始终一致 ✓ 无 hydration 问题 ✓ */
  .flt-faq{padding:104px 0}
  .flt-faq__list{max-width:900px;display:grid;gap:12px}
  .flt-faq__item{border:1px solid var(--border);border-radius:var(--r-md);background:var(--bg);overflow:hidden}
  .flt-faq__q{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 24px;font-size:16.5px;font-weight:600;line-height:1.5;color:var(--text);cursor:pointer;list-style:none;transition:color .15s}
  .flt-faq__q::-webkit-details-marker{display:none}
  .flt-faq__q:hover{color:var(--primary)}
  .flt-faq__ind{display:inline-flex;align-items:center;flex:0 0 auto;color:var(--text-3);transition:transform .2s ease,color .2s ease}
  .flt-faq__item[open] .flt-faq__q{color:var(--primary)}
  .flt-faq__item[open] .flt-faq__ind{transform:rotate(180deg);color:var(--primary)}
  .flt-faq__a{padding:0 24px 22px;color:var(--text-2);font-size:15px;line-height:1.8}
  .flt-faq__a p+p{margin-top:12px}
  /* 底色档位 ✓（默认 plain = 白底，与卡片同色 ✓）*/
  .flt-faq--surface-tint{background:var(--bg-2)}
  /* 留白档位 ✓ */
  .flt-faq--density-compact{padding:64px 0}
  .flt-faq--density-relaxed{padding:128px 0}

  /* 编辑器专属（只影响后台画布 ✓ 前台不加载 ✗）*/
  .editor-styles-wrapper .flt-faq__item{background:var(--bg)}
  .editor-styles-wrapper .flt-faq__ops{display:flex;align-items:center;gap:4px;margin:0 24px 16px}

  /* ============ 内容轮播（flt/carousel · v1.0.220）=============================
     参数 = 参考站 **真机实测** ✓（waffo.ai/zh/about · 见 blocks/carousel/render.php 头部 ✓）：
       · 指示线 **1px** ✓ 当前 **48** / 其余 **24** ✓ 间距 **12** ✓ `500ms ease-out` ✓
       · 计数 **12px** ✓ 两位补零 `01 / 04` ✓
       · 箭头 **20×20** ✓（库里的 chevron ✓ **stroke 4** 等效 24 网格 2px ✓）间距 **40** ✓ 右对齐 ✓
       · 大数字 **68px / 300** ✓ 标题 **24px / 600** ✓ 描述 **15px / 300** ✓
     ⚠️ 宽度用我方 `--max`（1440 下 1312 ✓）**不照抄参考站的 1280** ✗
     ⚠️ **无 JS 降级** ✓：PHP 输出 `.flt-nojs` ⇒ 幻灯片**纵向堆叠**、控制条隐藏 ✓ 内容照样完整 ✓ */
  .flt-cr{padding:104px 0}
  .flt-cr__slide{display:none;grid-template-columns:1.05fr 1fr;gap:56px;align-items:center;animation:fltCrIn .5s ease-out both}
  .flt-cr__slide.is-on{display:grid}
  @keyframes fltCrIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
  @media(prefers-reduced-motion:reduce){.flt-cr__slide{animation:none}}
  /* ⭐ v1.0.221：**删掉 `.flt-nojs` 方案** ✗ —— 它让首屏"先堆叠再跳回" ⇒ Boss 看到"刷新闪现"✗
     ⇒ 无 JS 降级样式改放 `<noscript>` ✓（PHP 输出 ✓ 见 inc/assets.php ✓）
     ⇒ 有 JS 时**首帧就是终态** ✓ 零闪现 ✓ */

  .flt-cr__media{margin:0;position:relative;overflow:hidden;border-radius:var(--r-md);background:var(--primary-soft)}
  .flt-cr__media img{display:block;width:100%;height:100%;object-fit:cover}
  .flt-cr--ratio-standard .flt-cr__media{aspect-ratio:4/3}
  .flt-cr--ratio-wide .flt-cr__media{aspect-ratio:16/9}
  .flt-cr--ratio-square .flt-cr__media{aspect-ratio:1/1}
  .flt-cr__ph{display:block;width:100%;height:100%;background:repeating-linear-gradient(45deg,var(--bg-2) 0 12px,#EDF1F7 12px 24px)}

  .flt-cr__body{min-width:0}
  /* ⭐ v1.0.221：大数字与标题 **同一行** ✓（对齐参考站 demo ✓ Boss 截图对比 ✓）
     旧写法 ✗：数字独占一行、标题在下一行 ⇒ 观感与参考站差得远 ✗ */
  .flt-cr__head{display:flex;align-items:baseline;gap:16px;margin-bottom:12px}
  .flt-cr__num{font-size:68px;font-weight:300;line-height:1;letter-spacing:-.02em;color:var(--primary);opacity:.14}
  .flt-cr__title{font-size:24px;font-weight:600;letter-spacing:-.01em;margin:0;color:var(--text);text-wrap:balance}
  .flt-cr__desc{font-size:15px;font-weight:300;line-height:1.8;color:var(--text-2);max-width:520px}

  /* ── 控制条 ✓ ── */
  .flt-cr__bar{display:flex;align-items:center;gap:24px;margin-top:40px}
  .flt-cr__dashes{display:flex;align-items:center;gap:12px;color:var(--text-3)}
  /* ⚠️⭐ v1.0.222 **可见性修复**（Boss：「这个进度条缺乏动效」✗ —— 运行期实测证明**它在动** ✓
     `dash#1 fill=27→33→40→46px → 切 dash#2` ✓ 见 tools/visual/probe-carousel-live.js ✓）
     为什么"看不见" ✗：
       ① `opacity` 加在**整条 dash** 上 ✗ ⇒ **父级透明度无法被子级还原** ✗
          ⇒ 里面的蓝色填充也被压到 30% ✗
       ② 填充色用了 `currentColor` = **灰** ✗ ⇒ **灰填灰** ⇒ 1px 细线上几乎不可见 ✗
     修 ✓：① 透明度改为**写进各自的 background 色值**（不用元素 opacity ✓）
           ② 填充改为**实色主色**（蓝 ✓ 一眼可见 ✓）
           ③ 线高 1px → **2px** ✓（1px 在高分屏上太细 ✗ 但保持纤细感 ✓）*/
  .flt-cr__dash{position:relative;display:block;width:24px;height:2px;padding:0;border:0;background:var(--border);cursor:pointer;transition:all .5s ease-out;overflow:hidden}
  .flt-cr__dash.is-on{background:var(--divider)}
  /* ⭐ v1.0.221 **自动进度条** ✓（Boss：「缺乏自动进度条显示」✗）
     ⚠️⚠️ v1.0.230 **改为"由同一个计时器驱动"** ✗✗（Boss 三次实证后定案 ✓）
       历史 ✗：v1.0.221~229 用的是 **CSS 动画**（`animation:fltCrFill` ✓ 靠 `.is-paused` 暂停 ✓）
         ⇒ 与 JS 计时器是**两套时钟** ✗ ⇒ 必然出现两种症状（Boss 先后都遇到了 ✓）：
           ① 动画先跑完 ⇒ 「进度条满了却不动」✗（226 及以前 ✓）
           ② 续播时归零重跑 ⇒ 「跑一半又从头开始」✗（227~229 ✓）
       定案 ✓：**进度 = 计时器的剩余比例** ✓（`assets/js/carousel.js` 每帧写 `transform:scaleX()` ✓）
         ⇒ 与"什么时候切张"**同一个事实源** ✓ ⇒ **不可能再不同步** ✓✓
         ⇒ 暂停时计时器不计 ⇒ 进度条**自然冻结** ✓（不需要任何 CSS 暂停规则 ✓）
     ⚠️ 因此这里**不再有 animation / keyframes** ✗ —— 若将来有人"顺手"把它改回动画 ✗，
        本 bug 会**原样复发** ✗（改前请先读 `carousel.js` 的 start/stop 说明 ✓）
     · 只在**自动播放已开启**时显示 ✓（`[data-autoplay="6"/"8"]` ✓）⇒ 关闭时不误导 ✓ */
  .flt-cr__fill{position:absolute;left:0;top:0;height:100%;width:100%;background:var(--primary);transform:scaleX(0);transform-origin:left center;display:none;will-change:transform}
  .flt-cr[data-autoplay="6"] .flt-cr__dash.is-on .flt-cr__fill,
  .flt-cr[data-autoplay="8"] .flt-cr__dash.is-on .flt-cr__fill{display:block}
  .flt-cr__dash.is-on{width:48px}
  .flt-cr__dash:hover{background:var(--text-3)}
  .flt-cr__dash:focus-visible{outline:2px solid var(--primary);outline-offset:3px}
  .flt-cr__count{margin:0;font-size:12px;color:var(--text-3);letter-spacing:.04em;font-variant-numeric:tabular-nums}
  .flt-cr__count .sep{margin:0 4px}
  .flt-cr__arrows{display:flex;align-items:center;gap:20px;margin-left:auto}
  .flt-cr__arrow{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:0;background:none;color:var(--text-3);cursor:pointer;transition:color .15s}
  .flt-cr__arrow:hover{color:var(--primary)}
  .flt-cr__arrow:focus-visible{outline:2px solid var(--primary);outline-offset:2px;border-radius:4px}

  /* ── 底色档位 ✓ ── */
  .flt-cr--surface-tint{background:var(--bg-2)}
  .flt-cr--surface-dark{background:var(--dark);color:#fff}
  .flt-cr--surface-dark .flt-cr__num{color:#fff;opacity:.10}
  .flt-cr--surface-dark .flt-cr__title{color:#fff}
  .flt-cr--surface-dark .flt-cr__desc{color:rgba(255,255,255,.72)}
  .flt-cr--surface-dark .flt-cr__dashes,
  .flt-cr--surface-dark .flt-cr__count,
  .flt-cr--surface-dark .flt-cr__arrow{color:rgba(255,255,255,.55)}
  /* 深色底：指示线的"轨道"与"填充"也要换色 ✓（否则浅灰轨道在深底上看不见 ✗）*/
  .flt-cr--surface-dark .flt-cr__dash{background:rgba(255,255,255,.24)}
  .flt-cr--surface-dark .flt-cr__dash.is-on{background:rgba(255,255,255,.32)}
  .flt-cr--surface-dark .flt-cr__dash:hover{background:rgba(255,255,255,.6)}
  .flt-cr--surface-dark .flt-cr__fill{background:#7FB2FF}
  .flt-cr--surface-dark .flt-cr__arrow:hover{color:#fff}

  /* ── 留白档位 ✓ ── */
  .flt-cr--density-compact{padding:64px 0}
  .flt-cr--density-relaxed{padding:128px 0}

  /* ── 编辑器专属：条目管理行 ✓（只影响后台 ✓ 前台不加载 ✗）── */
  .editor-styles-wrapper .flt-cr__items{display:grid;gap:8px;margin-top:28px}
  /* ⭐ v1.0.235：条目改**两层** ✓（内容行 `.flt-cr__row` ＋ 媒体行 `.flt-cr__irow` ✓）
     ⚠️ 新字段**一律另起一行** ✗ —— 往四列网格里硬塞 ⇒ 版式炸 ✗（v1.0.223 已踩过 ✓）
     ⚠️ 旧的"四列网格"规则**原样搬到 `.flt-cr__row`** ✓ ⇒ 原有观感零变化 ✓ */
  /* ⚠️⭐ v1.0.242：**长文本不再撑爆画布** ✓（Boss 2026-09-18 截图实证 ✗）
     根因 ✗：原来是 `align-items:center` ＋ 文本**无限高** ✗ ⇒ 标题/描述一长 ⇒
       ① 内容行被撑高 ② **左侧「01」被挤到"中间偏下"** ✗（截图里正是这样 ✓）
     ✅ 修法（**不动结构** ✓ 后面的"侧栏编辑"改造照常做 ✓ 不会返工 ✗）：
       ① 行内**顶部对齐** ✓ ⇒ 序号 / 标题 / 操作按钮**永远贴顶** ✓
       ② 标题**最多 2 行**、描述**最多 3 行** ✓（超出**截断** ✗ —— Boss 选的口径 ✓
          画布只负责"看" ✓ 全文到侧栏改 ✓）
       ③ CTA 两框**等宽平分** ✓ ／ 操作区**不换行** ✓ */
  .editor-styles-wrapper .flt-cr__item{display:flex;flex-direction:column;gap:8px;padding:10px 12px;border:1px solid var(--border);border-radius:8px;background:var(--bg)}
  .editor-styles-wrapper .flt-cr__row{display:grid;grid-template-columns:34px minmax(110px,.8fr) minmax(0,1.6fr) auto;align-items:flex-start;gap:10px}
  .editor-styles-wrapper .flt-cr__ititle{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .editor-styles-wrapper .flt-cr__idesc{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
  .editor-styles-wrapper .flt-cr__idx{padding-top:2px}
  .editor-styles-wrapper .flt-cr__icta .components-base-control{flex:1 1 0;min-width:0;margin-bottom:0}
  .editor-styles-wrapper .flt-cr__ops{white-space:nowrap}
  /* ⚠️⭐ v1.0.244：**画布"媒体行"的 3 条死规则已删除** ✗（Boss：「删除 不要仅关闭」✓）
     删的是：`.flt-cr__irow`（媒体行容器 ✓）`.flt-cr__itype`（类型下拉宽 ✓）`.flt-cr__ivideo`（视频地址宽 ✓）
     为什么可删 ✓：v1.0.243 已把**画布里的媒体行整体删除** ✗ ⇒ 这三个类名**再也不会出现** ✓
     ⇒ 分栏相关规则**一行未动** ✓（本段只影响后台画布 ✓ 前台不加载 ✗）*/
  .editor-styles-wrapper .flt-icon-fallback{font-size:16px;line-height:1;opacity:.85}
  .editor-styles-wrapper .flt-cr__idx{font-family:var(--mono);font-size:12px;color:var(--text-3)}
  .editor-styles-wrapper .flt-cr__ititle{font-weight:600;font-size:14px}
  .editor-styles-wrapper .flt-cr__idesc{font-size:12.5px;color:var(--text-2)}
  .editor-styles-wrapper .flt-cr__ops{display:inline-flex;align-items:center;gap:6px}
  /* ⭐ v1.0.221：显示已选图片文件名 ✓（悬停看完整 URL ✓ 见 editor.js 的 title ✓）*/
  .editor-styles-wrapper .flt-cr__ifile{font-size:11px;color:var(--text-3);max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .editor-styles-wrapper .flt-cr__arrow{pointer-events:none}
  /* ⚠️⭐ v1.0.242：**横幅画布的一整组覆盖规则已删除** ✗（Boss：「删除 不要仅关闭」✓）
     删的是 v1.0.237 为"横幅画布"加的白系→深色覆盖（9 条 ✓）＋ 画布的进度填充兜底（1 条 ✓）
     ⇒ 这些选择器全都带 `.flt-cr--layout-overlay` ✓ 而该类**永不输出** ✗ ⇒ 本来就不生效 ✓
     ⇒ 删掉后：**画布与前台行为完全不变** ✓（分栏那套控制条样式本来就在 ✓ 未动 ✓）*/

  @media(max-width:1023px){
    .flt-cr__slide{grid-template-columns:1fr;gap:28px}
    .flt-cr__num{font-size:52px}
  }
  @media(max-width:767px){
    .flt-cr,.flt-cr--density-relaxed{padding:72px 0}
    .flt-cr--density-compact{padding:48px 0}
    .flt-cr__bar{gap:16px;margin-top:28px}
    .flt-cr__num{font-size:44px}
    .flt-cr__title{font-size:20px}
    .editor-styles-wrapper .flt-cr__item{grid-template-columns:28px minmax(0,1fr) auto}
  }

  @media(max-width:767px){
    .flt-faq,.flt-faq--density-relaxed{padding:72px 0}
    .flt-faq--density-compact{padding:48px 0}
    .flt-faq__q{padding:16px 18px;font-size:15.5px}
    .flt-faq__a{padding:0 18px 18px}
    .editor-styles-wrapper .flt-faq__ops{margin:0 18px 14px}
  }

  /* ============ Tab 分组（flt/tabs ＋ flt/tab-panel · v1.0.255） =================
     Boss 方案（2026-09-18 ✓）：「**嵌套容器** ＋ 后台拖现有区块组装」✓ ⇒ 父块 ＋ 面板子块 ✓
     切换 = **纯 CSS，零 JS** ✓：
       radio(隐藏 ✓) ＋ label(标签 ✓) ＋ `.flt-tabs__panels`(面板容器 ✓) **三者兄弟** ✓
       显示 = `.flt-tabs__radio:nth-of-type(N):checked ~ .flt-tabs__panels > .flt-tab-panel:nth-child(N)` ✓
     ⚠️ 为什么用 `:nth-of-type(N)` 而不是 id ✗：id 每实例都不同（服务端 `wp_unique_id` ✓）✗
       ⇒ CSS 里写不出具体 id ✓ ⇒ 用**序号对位** ✓（标签顺序 ＝ 面板顺序 ✓ 天然一致 ✓）
     ⚠️ 因此这里要写 **1~12 号**的对位规则 ✓（12 = 上限 ✓ 再多也能显示第一屏 ✗ 见下说明 ✓）
     ⚠️ 标签样式**沿用 pills / 归档页 .tab 的既有观感** ✓（圆角 6px ✓ 选中主色底白字 ✓）不新造 ✗
     ⚠️ 面板框 = 白底 ＋ 1px 描边 ＋ 圆角 ✓ 与全站卡片同口径 ✓ */
  .flt-tabs{padding:104px 0}
  .flt-tabs__inner{display:flex;flex-wrap:wrap;align-items:flex-start;gap:6px}
  .flt-tabs__radio{position:absolute;opacity:0;pointer-events:none}
  .flt-tabs__tab{flex:0 0 auto;font-size:14px;font-weight:500;line-height:1.2;color:var(--text-2);padding:10px 16px;border-radius:6px;cursor:pointer;white-space:nowrap;transition:all .15s}
  .flt-tabs__tab:hover{color:var(--primary);background:var(--primary-soft)}
  .flt-tabs__radio:checked + .flt-tabs__tab{color:#fff;background:var(--primary);font-weight:600}
  .flt-tabs__radio:focus-visible + .flt-tabs__tab{outline:2px solid var(--primary);outline-offset:2px}
  .flt-tabs__panels{flex:0 0 100%;width:100%;margin-top:18px}
  .flt-tab-panel{display:none;border:1px solid var(--border);border-radius:var(--r-md);padding:26px;background:var(--bg)}
  .flt-tabs__radio:nth-of-type(1):checked  ~ .flt-tabs__panels > .flt-tab-panel:nth-child(1),
  .flt-tabs__radio:nth-of-type(2):checked  ~ .flt-tabs__panels > .flt-tab-panel:nth-child(2),
  .flt-tabs__radio:nth-of-type(3):checked  ~ .flt-tabs__panels > .flt-tab-panel:nth-child(3),
  .flt-tabs__radio:nth-of-type(4):checked  ~ .flt-tabs__panels > .flt-tab-panel:nth-child(4),
  .flt-tabs__radio:nth-of-type(5):checked  ~ .flt-tabs__panels > .flt-tab-panel:nth-child(5),
  .flt-tabs__radio:nth-of-type(6):checked  ~ .flt-tabs__panels > .flt-tab-panel:nth-child(6),
  .flt-tabs__radio:nth-of-type(7):checked  ~ .flt-tabs__panels > .flt-tab-panel:nth-child(7),
  .flt-tabs__radio:nth-of-type(8):checked  ~ .flt-tabs__panels > .flt-tab-panel:nth-child(8),
  .flt-tabs__radio:nth-of-type(9):checked  ~ .flt-tabs__panels > .flt-tab-panel:nth-child(9),
  .flt-tabs__radio:nth-of-type(10):checked ~ .flt-tabs__panels > .flt-tab-panel:nth-child(10),
  .flt-tabs__radio:nth-of-type(11):checked ~ .flt-tabs__panels > .flt-tab-panel:nth-child(11),
  .flt-tabs__radio:nth-of-type(12):checked ~ .flt-tabs__panels > .flt-tab-panel:nth-child(12){display:block}

  /* ── 标签位置档位②：**左侧竖排** ✓（Boss 要求 ✓）──
     ⚠️ 用 grid：标签固定第 1 列 ✓ 面板固定第 2 列 ✓（radio 是 absolute ⇒ 不占格 ✓ 不影响对位 ✓）*/
  .flt-tabs--pos-left .flt-tabs__inner{display:grid;grid-template-columns:230px minmax(0,1fr);gap:6px 14px}
  .flt-tabs--pos-left .flt-tabs__tab{grid-column:1;display:block;text-align:left;border-left:3px solid transparent}
  .flt-tabs--pos-left .flt-tabs__radio:checked + .flt-tabs__tab{background:var(--primary-soft);color:var(--primary);border-left-color:var(--primary);font-weight:600}
  .flt-tabs--pos-left .flt-tabs__panels{grid-column:2;grid-row:1 / span 12;margin-top:0;width:auto}

  @media(max-width:1023px){
    .flt-tabs--pos-left .flt-tabs__inner{grid-template-columns:190px minmax(0,1fr)}
  }
  @media(max-width:767px){
    .flt-tabs,.flt-tabs--pos-left{padding:72px 0}
    /* 手机：左竖排**自动变回顶部横排** ✓（230px 竖排会把内容挤没 ✗）*/
    .flt-tabs--pos-left .flt-tabs__inner{display:flex;flex-wrap:wrap;gap:6px}
    .flt-tabs--pos-left .flt-tabs__tab{border-left:0}
    .flt-tabs--pos-left .flt-tabs__radio:checked + .flt-tabs__tab{background:var(--primary);color:#fff}
    .flt-tabs--pos-left .flt-tabs__panels{margin-top:18px;width:100%}
    .flt-tab-panel{padding:18px}
  }

  /* ⚠️⚠️⚠️ v1.0.256 **关键修复：画布里必须显示"全部面板"** ✗✗
     Boss 实证（255 版 ✓）三条反馈，**同一个根因** ✓：
       `.flt-tab-panel{display:none}` 是**前台**的"只显示当前面板"规则 ✗
       但 CSS **不分前后台** ⇒ 它在**编辑器画布**里同样生效 ✓ ⇒ 后果：
         ① 非当前面板 `display:none` ⇒ **选不中** ⇒ 改不了标签名 ✗ 也删不掉 ✗
         ② **看不见的盒子接不住拖拽** ✗ ⇒ 下载中心等区块**拖不进面板** ✗
     ✅ 正解 ✓（只改画布 ✓ 前台规则一个字不动 ✓）：
       · 画布内**全部面板展开显示** ✓（虚线框 ✓ 一眼看出"这是编辑态的分组框"✓）
       · 每个面板自带一行灰字（**它的标签名** ✓ 见 tab-panel/editor.js ✓）⇒ 面板多了也分得清 ✓
       ⚠️ 代价 ✗：画布里**不能再"点标签切着看"** ✗ —— 因为"切换＝隐藏其它面板"✗
         而隐藏＝不能编辑 ✗ ⇒ **编辑能力优先** ✓（这正是 WP 自家 tab 类区块的做法 ✓）
         想看切换后的样子 ⇒ **预览前台** ✓（前台是真正的"只显示当前"✓）*/
  /* ⚠️⚠️⚠️ v1.0.257 **真根因（第二条）** ✗✗：**画布与前台 DOM 不同** ✓
     前台 ✓：`$content` **直接**塞进 `.flt-tabs__panels` ⇒ `>` 直接子代**能**匹配 ✓
     画布 ✗：`InnerBlocks` 会**多包两层** ✓
       `.flt-tabs__panels > .block-editor-inner-blocks > .block-editor-block-list__layout > section.flt-tab-panel`
       ⇒ 我上一条写的是 `> .flt-tab-panel`（**直接子代** ✗）⇒ **匹配不到** ✗
       ⇒ 面板**依旧 display:none** ✗ ⇒ 依然"选不中／改不了／删不掉／拖不进"✗✓
     ✅ 正解 ✓：**画布规则一律用"后代选择器"（去掉 `>`）** ✓ —— 前台规则保留 `>` ✓
        （前台结构简单可控 ✓ 且 `nth-child` 对位也依赖它 ✓）
     📌 教训 ✓：**凡是"画布与前台共用一套 CSS"的组件** ⇒
        · 前台用 `>` ✗ ／ 画布**必须放宽成后代** ✓（或反过来用 `:where()` 降权重 ✓）
        · 这次两次踩坑（一是 `display:none` 误用 ✗ 二是 `>` 匹配不到 ✗）都在同一个组件上 ✓
        ⇒ 已记入 `docs/区块开发纪律.md` 的"画布/前台差异"条目 ✓ */
  /* ⚠️⭐ v1.0.262：**画布改为"一个标签 ↔ 一个面板"** ✓（Boss 要求 ✓）
     ⇒ 放弃 v1.0.256 的"全部展开"✗（那是为了"能选中才没被隐藏"✗）
     现在 ✓：编辑器里 radio 是**受控**的（点标签即切 ✓ 见 editor.js ✓）
       ⇒ 所以**沿用前台的 `:checked` 显示逻辑就够** ✓ 而且**画布与前台完全是同一套观感** ✓✓
     ⚠️ 必须用**后代选择器**（不能 `>` ✗）—— 画布里 `InnerBlocks` 会多包两层 ✗
       （`.flt-tabs__panels > .block-editor-inner-blocks > … > section.flt-tab-panel` ✓
        v1.0.257 就是踩了这个 ✗）
     ⚠️ 面板加**虚线框** ✓ ⇒ 一眼看出"这是编辑态的面板容器"✓ 与前台实体白底框区分 ✓ */
  .editor-styles-wrapper .flt-tabs__panels .flt-tab-panel{display:none;border-style:dashed}
  .editor-styles-wrapper .flt-tabs__radio:nth-of-type(1):checked  ~ .flt-tabs__panels .flt-tab-panel:nth-child(1),
  .editor-styles-wrapper .flt-tabs__radio:nth-of-type(2):checked  ~ .flt-tabs__panels .flt-tab-panel:nth-child(2),
  .editor-styles-wrapper .flt-tabs__radio:nth-of-type(3):checked  ~ .flt-tabs__panels .flt-tab-panel:nth-child(3),
  .editor-styles-wrapper .flt-tabs__radio:nth-of-type(4):checked  ~ .flt-tabs__panels .flt-tab-panel:nth-child(4),
  .editor-styles-wrapper .flt-tabs__radio:nth-of-type(5):checked  ~ .flt-tabs__panels .flt-tab-panel:nth-child(5),
  .editor-styles-wrapper .flt-tabs__radio:nth-of-type(6):checked  ~ .flt-tabs__panels .flt-tab-panel:nth-child(6),
  .editor-styles-wrapper .flt-tabs__radio:nth-of-type(7):checked  ~ .flt-tabs__panels .flt-tab-panel:nth-child(7),
  .editor-styles-wrapper .flt-tabs__radio:nth-of-type(8):checked  ~ .flt-tabs__panels .flt-tab-panel:nth-child(8),
  .editor-styles-wrapper .flt-tabs__radio:nth-of-type(9):checked  ~ .flt-tabs__panels .flt-tab-panel:nth-child(9),
  .editor-styles-wrapper .flt-tabs__radio:nth-of-type(10):checked ~ .flt-tabs__panels .flt-tab-panel:nth-child(10),
  .editor-styles-wrapper .flt-tabs__radio:nth-of-type(11):checked ~ .flt-tabs__panels .flt-tab-panel:nth-child(11),
  .editor-styles-wrapper .flt-tabs__radio:nth-of-type(12):checked ~ .flt-tabs__panels .flt-tab-panel:nth-child(12){display:block}
  .editor-styles-wrapper .flt-tab-panel__hint{color:var(--text-3)}
  /* 画布里的"添加一个标签面板"按钮 ✓ 与其它块的加条按钮同一观感 ✓（复用 .flt-add-btn ✓）*/
  .editor-styles-wrapper .flt-tabs__panels .flt-add-btn{margin-top:14px}
  /* ⭐ v1.0.261：**画布标签条上的 ✕ 样式** ✓（Boss：默认小按钮太丑 ✗）
     与下载中心那颗 ✕ 同一规格 ✓（28×28 ✓ 圆角 ✓ 悬停主题红 ✓）⇒ 全站一致 ✓ */
  .editor-styles-wrapper .flt-tabs__del{width:26px;height:26px;padding:0;margin-left:2px;border:1px solid var(--border);border-radius:var(--r-md,8px);background:var(--bg);color:var(--text-3);font-size:13px;line-height:1;cursor:pointer;flex:0 0 auto}
  .editor-styles-wrapper .flt-tabs__del:hover{border-color:#D63638;color:#D63638}
  .editor-styles-wrapper .flt-tabs__del:focus-visible{outline:2px solid #D63638;outline-offset:2px}
  /* 画布里"可编辑的标签文字"给一点提示 ✓（悬停浅底 ✓ 与真标签同观感 ✓）*/
  .editor-styles-wrapper .flt-tabs__tab.is-editing{cursor:text}
  .editor-styles-wrapper .flt-tabs__tab.is-editing:hover{background:var(--primary-soft);color:var(--primary)}

  /* ============ Logo 滚动带（flt/logo-marquee · v1.0.264） ==========================
     ⭐ **复用主题跑马灯模块** ✓（`.marquee > .marquee-track > .mq-group` ✓ 见上方 247~261 行 ✓
        以及 main.js 第 114~122 行的克隆/启动逻辑 ✓）⇒ 本文件只补"磁贴 / 反向 / 渐隐 / 速度" ✓
     ⚠️⚠️ **铁律** ✓：间距必须 **gap == padding-right** ✓（见 248~250 行那段血泪注释 ✗
        不等 ⇒ 每圈回跳 `gap/2` ⇒ "抖动顿感" ✗）
        ⇒ 本块把 `.mq-group` 的 gap/padding **归零** ✓，改由 `.flt-lmq__run` 承担（14px/14px ✓）
        ⇒ 跨 run 的间距也正好 14px ✓ 无缝 ✓
     ⚠️ 动画只认 `.marquee-track.is-looping` ✓（前台由 main.js 加 ✓；编辑器画布由我加 ✓）*/
  .flt-lmq{padding:104px 0}
  .flt-lmq--density-compact{padding:64px 0}
  .flt-lmq--density-relaxed{padding:128px 0}
  .flt-lmq--surface-tint{background:var(--bg-2)}
  .flt-lmq--surface-dark{background:var(--dark);color:#fff}
  /* ⚠️⚠️ v1.0.265 **溢出修复**（Boss 2026-09-19 实测三处：**前台 / 后台画布 / 手机** 全溢出 ✗）
     真因 ✓：`.flt-lmq__band` 原为 `display:grid` ＋ **隐式列 `auto`** ✗ ——
       `auto` 列按**子项最大内容宽**定宽 ✗，而里面 `.marquee-track` 是 `width:max-content` ✗
       ⇒ 整列被撑成"轨道那么宽" ✗ ⇒ `.marquee` 自身宽度 = 内容宽 ✗
       ⇒ 它的 `overflow:hidden` **没有东西可裁** ✗ ⇒ 直接溢出内容区 ✓
       （后台画布里出现横向滚动条 ✓ 手机同现象 ✓ 都是这一条 ✓）
     ✅ 修法 ✓：列宽改 `minmax(0,1fr)` ✓ ⇒ 列宽**锁死在容器宽** ✓ ⇒ `overflow:hidden` 这才真正生效 ✓
       ＋ `min-width:0` 双保险 ✓（flex/grid 子项"被内容撑开"的经典坑 ✗）*/
  .flt-lmq__band{margin-top:34px;display:grid;grid-template-columns:minmax(0,1fr);gap:16px}
  .flt-lmq__row{min-width:0;overflow:hidden}
  .flt-lmq .marquee{overflow:hidden;min-width:0;max-width:100%}
  .flt-lmq .mq-group{gap:0;padding-right:0}
  .flt-lmq__run{display:flex;gap:14px;padding-right:14px;flex:0 0 auto}
  /* 第二行反向 ✓（waffo 那种"上下两行对开"的观感 ✓ 只需一条 `animation-direction` ✓）*/
  .flt-lmq__row--rev .marquee-track.is-looping{animation-direction:reverse}
  /* 两端渐隐 ✓（`mask-image` ✓ 主题 hero 已用过同一招 ✓ 不额外加 DOM ✓）*/
  .flt-lmq--fade-y .flt-lmq__row{
    -webkit-mask-image:linear-gradient(90deg,transparent 0,#000 8%,#000 92%,transparent 100%);
    mask-image:linear-gradient(90deg,transparent 0,#000 8%,#000 92%,transparent 100%)}
  .flt-lmq--speed-slow .marquee-track.is-looping{animation-duration:60s}
  .flt-lmq--speed-mid .marquee-track.is-looping{animation-duration:38s}
  .flt-lmq--speed-fast .marquee-track.is-looping{animation-duration:22s}
  .flt-lmq__tile{display:flex;align-items:center;justify-content:center;flex:0 0 auto;
    width:190px;height:92px;padding:16px;text-decoration:none;
    border:1px solid var(--border);border-radius:14px;background:var(--bg)}
  .flt-lmq__tile img{max-width:100%;max-height:46px;width:auto;height:auto;object-fit:contain}
  .flt-lmq--surface-dark .flt-lmq__tile{background:rgba(255,255,255,.045);border-color:rgba(255,255,255,.09)}
  .flt-lmq--plain .flt-lmq__tile{border:0;background:transparent;width:170px;height:72px}
  .flt-lmq--gray .flt-lmq__tile img{filter:grayscale(1);opacity:.72;transition:filter .2s,opacity .2s}
  .flt-lmq__tile:hover img{filter:none;opacity:1}
  /* ♿ 减少动态 ⇒ **停住并排成可读列表** ✓（不是"坏掉" ✗）：只留**一份**真内容 ✓
     —— 为防露空而重复的第 2 份起全部隐藏 ✓（`.flt-lmq__run:nth-child(n+2)` ✓）*/
  @media(prefers-reduced-motion:reduce){
    .flt-lmq .marquee{overflow:visible}
    .flt-lmq .marquee-track{flex-wrap:wrap;width:auto;justify-content:center}
    .flt-lmq .mq-group{flex-wrap:wrap;justify-content:center;flex:1 1 100%}
    .flt-lmq__run{flex-wrap:wrap;justify-content:center;padding-right:0}
    .flt-lmq__run:nth-child(n+2){display:none}
    .flt-lmq .mq-group + .mq-group{display:none}
  }
  /* 手机 ✓：**保留两行**（第二行是内容的一半 ✗ 藏掉等于丢内容 ✓），只把磁贴缩小 ✓ */
  @media(max-width:767px){
    .flt-lmq{padding:72px 0}
    .flt-lmq__tile{width:150px;height:76px;padding:12px}
    .flt-lmq__tile img{max-height:36px}
  }

  /* ⭐ v1.0.264：**画布条目操作按钮**（统一件 ✓ 后续对比/步骤/Logo墙共用 ✓）
     位置：条目右上角 ✓ 固定不动 ✓（不受长文本/多列影响 ✗）
     ⚠️ 只作用于编辑器 ✓（`.editor-styles-wrapper` 前缀 ✓ 前台不出现 ✗）*/
  .editor-styles-wrapper .flt-cvops{position:absolute;top:6px;right:6px;z-index:3;display:flex;gap:4px;opacity:.85}
  .editor-styles-wrapper .flt-cvops:hover{opacity:1}
  .editor-styles-wrapper .flt-cvops .components-button{min-width:24px;height:24px;padding:0 6px;line-height:1;
    background:var(--bg);border:1px solid var(--border);border-radius:6px}
  .editor-styles-wrapper .flt-cvops .components-button:hover{border-color:var(--primary);color:var(--primary)}
  .editor-styles-wrapper .flt-lmq__tile{position:relative}
  .editor-styles-wrapper .flt-lgw__item{position:relative}
  /* v1.0.266：步骤流程 / 对比两卡的画布条目也要能"右上角挂 ✕" ⇒ 同样给定位 ✓
     ⚠️ 只作用于编辑器 ✓（前台不加 position ✗ 免得影响现有层叠关系 ✓）
     📌 对比的 ✕ 按钮随 **v1.0.267 的 2~4 栏**一起上 ✓（现在固定两栏 ⇒ 删到只剩 1 栏
        前台就不输出了 ✗ 所以此刻给"删除"没有意义 ✓）*/
  .editor-styles-wrapper .flt-steps__item{position:relative}
  .editor-styles-wrapper .flt-cmp__col{position:relative}

  /* ============ 四个"零件"区块（v1.0.263 · 步骤流程 / Logo墙 / 对比两卡 / 视频） =========
     ⚠️ 放 main.css（**常加载** ✓）—— 放条件加载文件 ⇒ 编辑器画布掉样式 ✗（纪律 4 ✓）
     ⚠️ 四块共用 `flt-sec` 家族 ✓ 与全站区块同一套留白/底色档位 ✓ 不新造令牌 ✗ */
  .flt-steps,.flt-lgw,.flt-cmp,.flt-vid{padding:104px 0}
  .flt-steps--density-compact,.flt-lgw--density-compact,.flt-cmp--density-compact,.flt-vid--density-compact{padding:64px 0}
  .flt-steps--density-relaxed,.flt-lgw--density-relaxed,.flt-cmp--density-relaxed,.flt-vid--density-relaxed{padding:128px 0}
  .flt-steps--surface-tint,.flt-lgw--surface-tint,.flt-cmp--surface-tint,.flt-vid--surface-tint{background:var(--bg-2)}
  .flt-steps--surface-dark,.flt-lgw--surface-dark,.flt-cmp--surface-dark,.flt-vid--surface-dark{background:var(--dark);color:#fff}

  /* ── 步骤流程 ✓（`auto-fit` ⇒ 2~6 步都能自适应 ✗ 不必为每种步数写规则 ✓）── */
  .flt-steps__list{list-style:none;margin:0;padding:0;display:grid;gap:24px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}
  .flt-steps--layout-column .flt-steps__list{grid-template-columns:minmax(0,1fr)}
  .flt-steps__item{border-top:2px solid var(--primary);padding-top:14px}
  .flt-steps--layout-column .flt-steps__item{border-top:0;border-left:2px solid var(--primary);padding:0 0 0 18px}
  .flt-steps__mark{display:block;font-family:var(--mono);font-size:13px;font-weight:700;letter-spacing:.04em;color:var(--primary);margin-bottom:8px}
  .flt-steps__title{display:block;font-size:16px;font-weight:600;line-height:1.5;color:var(--text);margin-bottom:6px}
  .flt-steps__desc{display:block;font-size:14px;line-height:1.7;color:var(--text-2)}
  .flt-steps--surface-dark .flt-steps__title{color:#fff}
  .flt-steps--surface-dark .flt-steps__desc{color:rgba(255,255,255,.72)}

  /* ── Logo·认证墙 ✓（`object-fit:contain` ⇒ 任何比例的 Logo 都不变形 ✓）── */
  .flt-lgw__list{list-style:none;margin:0;padding:0;display:grid;gap:16px}
  .flt-lgw--cols-3 .flt-lgw__list{grid-template-columns:repeat(3,minmax(0,1fr))}
  .flt-lgw--cols-4 .flt-lgw__list{grid-template-columns:repeat(4,minmax(0,1fr))}
  .flt-lgw--cols-5 .flt-lgw__list{grid-template-columns:repeat(5,minmax(0,1fr))}
  .flt-lgw--cols-6 .flt-lgw__list{grid-template-columns:repeat(6,minmax(0,1fr))}
  .flt-lgw__box{display:flex;align-items:center;justify-content:center;min-height:88px;padding:18px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--bg);text-decoration:none}
  .flt-lgw__box img{max-width:100%;max-height:52px;width:auto;height:auto;object-fit:contain}
  .flt-lgw--label-y .flt-lgw__box{flex-direction:column;gap:10px}
  .flt-lgw__lab{font-size:12.5px;color:var(--text-3);text-align:center}
  .flt-lgw__ph{font-size:12.5px;color:var(--text-3)}
  .flt-lgw--gray .flt-lgw__box img{filter:grayscale(1);opacity:.72;transition:filter .2s,opacity .2s}
  .flt-lgw__box:hover img{filter:none;opacity:1}
  .flt-lgw--surface-dark .flt-lgw__box{background:#0F1B2D;border-color:rgba(255,255,255,.12)}

  /* ── 对比 ✓（v1.0.267：**2~4 栏** ＋ **卡片 / 表格** 两档 ✓
     卡片：要点前缀用 `::before` ⇒ 不依赖图标字体 ✓ 永不空框 ✓
     表格：`✓ / ✗ / -` 由 PHP 转成 `.flt-cmp__yes/no/dash` ✓（只在**整格恰好等于**记号时才转 ✗
       免得把"X 型号"这种正常文本误判 ✗）── */
  .flt-cmp__grid{display:grid;gap:20px}
  .flt-cmp--cols-2 .flt-cmp__grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .flt-cmp--cols-3 .flt-cmp__grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .flt-cmp--cols-4 .flt-cmp__grid{grid-template-columns:repeat(4,minmax(0,1fr))}
  .flt-cmp__col{border:1px solid var(--border);border-radius:var(--r-md);padding:24px;background:var(--bg)}
  .flt-cmp__col.is-hi{border-color:var(--primary);box-shadow:inset 0 0 0 1px var(--primary)}
  .flt-cmp__title{margin:0 0 14px;font-size:18px;line-height:1.4;color:var(--text)}
  .flt-cmp__points{list-style:none;margin:0;padding:0;color:var(--text-2);font-size:14.5px;line-height:1.75}
  .flt-cmp__points li{position:relative;padding-left:22px;margin-bottom:8px}
  .flt-cmp__points li:before{content:"✓";position:absolute;left:0;top:0;color:var(--primary);font-weight:700}
  .flt-cmp__act{margin:18px 0 0}
  .flt-cmp__foot{margin:16px 0 0;font-size:12.5px;color:var(--text-3)}
  .flt-cmp--surface-dark .flt-cmp__col{background:#0F1B2D;border-color:rgba(255,255,255,.12)}
  .flt-cmp--surface-dark .flt-cmp__title{color:#fff}
  .flt-cmp--surface-dark .flt-cmp__points{color:rgba(255,255,255,.75)}

  /* 表格档 ✓（Excel 风 ✓）—— ⚠️ 窄屏不硬缩 ✗ 而是**容器内横滑** ✓（内容不糊 ✓ 页面不破 ✓）*/
  .flt-cmp__tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
  .flt-cmp__table{width:100%;min-width:520px;border-collapse:separate;border-spacing:0;font-size:14.5px;
    background:var(--bg);border:1px solid var(--border);border-radius:var(--r-md);overflow:hidden}
  .flt-cmp__table th,.flt-cmp__table td{padding:13px 16px;text-align:left;vertical-align:middle;
    border-bottom:1px solid var(--border)}
  .flt-cmp__table tbody tr:last-child th,.flt-cmp__table tbody tr:last-child td{border-bottom:0}
  .flt-cmp__table thead th{background:var(--bg-2);font-size:15px;font-weight:700;color:var(--text)}
  /* ⚠️ v1.0.270：**把"维度列"与"方案列"从视觉上隔开** ✓（Boss：「第一列的首页单元格与现在的
     第一栏首个单元格**隔开**」✗ ＋ 「Q4 同意」✓）
     ⇒ 做法 ✓：左上角格 ＋ 每一行的维度名，**统一加深底色 ＋ 右侧 2px 竖线** ✓
       ⇒ 一眼看出"左边这一列是**行轴**"✓ 不再和"方案列"混 ✓
     ⚠️ 只加 `border-right` ✗ 不用伪元素 —— 表格 `border-collapse:separate` ✓ 不会画重 ✓ */
  .flt-cmp__trow{font-weight:600;color:var(--text-2);background:var(--bg-2);white-space:nowrap;
    border-right:2px solid var(--border)}
  .flt-cmp__tcell{color:var(--text)}
  .flt-cmp__tcorner{width:150px;background:var(--bg-2);border-right:2px solid var(--border)}

  /* ⭐ v1.0.270：**分组标题行** ✓（Boss：「成本这类…这个总的标题是采用**浅灰色**标识的，
     但它的**分栏是不需填写内容**的」✓）
     · 整行**跨满所有列** ✓（PHP 给 `colspan = 栏数 + 1` ✓）
     · **浅灰**（`--bg-2` ✓）＋ 无分隔线 ✗ ⇒ 与数据行一眼分开 ✓
     · `position:relative` 只为**画布那枚 ✕** 就位 ✓（前台没有它 ✓）*/
  .flt-cmp__tgroup th,.flt-cmp__tgrouplab{background:var(--bg-2);color:var(--text-2);
    font-weight:600;font-size:13.5px;letter-spacing:.02em;text-align:left}
  .flt-cmp--surface-dark .flt-cmp__tgroup th,.flt-cmp--surface-dark .flt-cmp__tgrouplab{color:rgba(255,255,255,.75)}
  /* ⚠️ v1.0.268：**表格高亮列要"看得见"** ✓（Boss：「excel 风需要有高亮色」✗
     上一版只给了 8% 淡染 ⇒ 在浅色表格里**几乎看不出来** ✗ ⇒ 加重 ✓）+ 表头用主色 ✓
     · 兜底先用 `--bg-2` ✓；支持 `color-mix` 的浏览器叠主色淡染 ✓（渐进增强 ✓）*/
  .flt-cmp__tcol.is-hi,.flt-cmp__tcell.is-hi{background:var(--bg-2)}
  .flt-cmp__tcol.is-hi{color:var(--primary);box-shadow:inset 0 3px 0 var(--primary)}
  @supports (background:color-mix(in srgb,red 5%,transparent)){
    .flt-cmp--table .flt-cmp__tcol.is-hi,
    .flt-cmp--table .flt-cmp__tcell.is-hi{background:color-mix(in srgb,var(--primary) 14%,var(--bg))}
    .flt-cmp--table .flt-cmp__tcol.is-hi{box-shadow:inset 0 3px 0 var(--primary)}
  }
  /* 高亮列在表格里的"左右描边"✓ —— 让整列像一个整体 ✓（Excel 里选中列的感觉 ✓）*/
  .flt-cmp__tcol.is-hi{position:relative}
  .flt-cmp__tcell.is-hi{font-weight:600}
  .flt-cmp__yes{color:var(--primary);font-weight:700}
  .flt-cmp__no{color:var(--text-3);font-weight:700}
  .flt-cmp__dash{color:var(--text-3)}
  .flt-cmp__none{display:inline-block;width:12px;height:1px}
  .flt-cmp--surface-dark .flt-cmp__table,.flt-cmp--surface-dark .flt-cmp__table thead th,
  .flt-cmp--surface-dark .flt-cmp__trow,.flt-cmp--surface-dark .flt-cmp__tcorner{background:#0F1B2D;border-color:rgba(255,255,255,.12)}
  .flt-cmp--surface-dark .flt-cmp__table{color:#fff}
  .flt-cmp--surface-dark .flt-cmp__trow{color:rgba(255,255,255,.75)}

  /* ⚠️⚠️ v1.0.270 **#1「拖拽后画布变小、刷新即恢复」的两层保险** ✓
     Boss 的情形 ✓：既不是"拖拽预览缩放"✗ 也不是"一直小"✗，而是**拖拽后变小 / 刷新恢复** ✓
       ⇒ 属于**编辑器重渲染之后的"一次性布局计算"**问题 ✓
     我判断的可能路径 ✓（与纪律 11 同源）：表格外面那层 `overflow-x:auto` ＋ 表格 `min-width:520px` ✗
       ⇒ 重渲染的那一帧，父链还没定宽 ⇒ 容器可能**改按内容宽（≈520px）计算** ✗ ⇒ 看着"缩小了"✓
     ✅ 保险一 ✓：**画布内把宽度钉死在父级**（`width:100%` ＋ 取消 `min-width` ✓）
       —— 画布本来就不需要横滑 ✓ 横滑那个规则是**为前台窄屏**准备的 ✓ 所以画布里拿掉**零影响** ✓
     ✅ 保险二 ✓：`min-width:0` ⇒ 父链不会因为子项而撑开/回缩 ✓ */
  .editor-styles-wrapper .flt-cmp__tablewrap{width:100%;max-width:100%;min-width:0}
  .editor-styles-wrapper .flt-cmp__table{width:100%;min-width:0;max-width:100%}
  .editor-styles-wrapper .flt-cmp__grid{width:100%;min-width:0}
  .editor-styles-wrapper .flt-cmp{min-width:0}
  /* 画布里"表格行的删除键"要有位置 ✓（只在编辑器生效 ✓ 前台没有这个单元格 ✓）*/
  .editor-styles-wrapper .flt-cmp__tops{position:relative;width:44px}
  /* 分组行里那枚 ✕ 也要位置 ✓ */
  .editor-styles-wrapper .flt-cmp__tgrouplab{position:relative}
  /* v1.0.269：画布上的"+添加"快捷按钮 ✓（只在编辑器 ✓ 前台没有 ✓）*/
  .editor-styles-wrapper .flt-cmp__addbtns{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
  .editor-styles-wrapper .flt-cmp__addbtns .components-button{font-size:12px}
  /* 画布里 RichText 的占位提示要浅一点 ✓ —— 与真内容区分开 ✓（前台不受影响 ✗）*/
  .editor-styles-wrapper .flt-cmp__table [data-rich-text-placeholder]{color:var(--text-3);font-style:normal}
  .editor-styles-wrapper .flt-cmp__grid [data-rich-text-placeholder]{color:var(--text-3)}
  /* ⚠️⚠️ v1.0.268：**画布里第三方视频改占位卡** ✓（原来是"嵌 iframe ＋ 说明条" ✗
     ⇒ Boss 仍看到红色报错块 ✗ ⇒ 说明条治标不治本 ✓）
     ⇒ 现在画布**根本不嵌** iframe ✓ ⇒ 报错**从源头消失** ✓（前台照旧真嵌入 ✓）
     · 有封面就用封面打底 ✓（弱网/画布都好看 ✓）；没封面用深底 ✓
     · 居中一条"平台标识 ＋ 说明" ✓ —— 运营一眼知道"这里前台会播" ✓ */
  .flt-vid__ext{position:relative;display:grid;place-items:center;width:100%;height:100%;
    background:var(--dark);overflow:hidden}
  .flt-vid__extimg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.5}
  .flt-vid__extbox{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;gap:8px;
    max-width:78%;text-align:center}
  .flt-vid__exttag{display:inline-block;padding:3px 10px;border-radius:999px;background:rgba(255,255,255,.16);
    color:#fff;font-size:12px;font-weight:700;letter-spacing:.04em}
  .flt-vid__exttx{color:rgba(255,255,255,.86);font-size:12.5px;line-height:1.6}

  /* ── 视频 ✓（比例用 `aspect-ratio` ⇒ 手机不变形 ✓）── */
  .flt-vid__frame{margin:0;position:relative;border-radius:var(--r-md);overflow:hidden;background:var(--dark)}
  .flt-vid--ratio-16-9 .flt-vid__frame{aspect-ratio:16/9}
  .flt-vid--ratio-4-3 .flt-vid__frame{aspect-ratio:4/3}
  .flt-vid--ratio-1-1 .flt-vid__frame{aspect-ratio:1/1}
  .flt-vid__el,.flt-vid__embed{display:block;width:100%;height:100%;border:0;object-fit:cover}
  .flt-vid__ph{display:grid;place-items:center;height:100%;padding:24px;text-align:center;color:rgba(255,255,255,.72);font-size:14px}
  .flt-vid__cap{margin:10px 0 0;font-size:12.5px;color:var(--text-3)}

  @media(max-width:767px){
    .flt-steps,.flt-lgw,.flt-cmp,.flt-vid,.flt-steps--density-relaxed,.flt-lgw--density-relaxed,.flt-cmp--density-relaxed,.flt-vid--density-relaxed{padding:72px 0}
    .flt-steps--layout-row .flt-steps__list,
    .flt-cmp__grid,
    .flt-cmp--cols-2 .flt-cmp__grid,
    .flt-cmp--cols-3 .flt-cmp__grid,
    .flt-cmp--cols-4 .flt-cmp__grid{grid-template-columns:minmax(0,1fr)}
    /* 手机：Logo 墙一律 **2 列** ✓（4~6 列在手机上会小到看不清 ✗）*/
    .flt-lgw--cols-3 .flt-lgw__list,.flt-lgw--cols-4 .flt-lgw__list,.flt-lgw--cols-5 .flt-lgw__list,.flt-lgw--cols-6 .flt-lgw__list{grid-template-columns:repeat(2,minmax(0,1fr))}
    .flt-cmp__col{padding:18px}
  }

  /* ============ 下载中心（flt/downloads · v1.0.247） ============================
     Boss 需求（2026-09-18 ✓）：资料下载区 ✓ 两种布局都给 ✓ 分组 ✓ 类型＋大小＋下载按钮 ✓
     ⚠️ 样式**必须放 main.css（常加载 ✓）** ✗ —— 放条件加载文件 ⇒ 编辑器画布掉样式 ✗（纪律 4 ✓）
     ⚠️ 零 JS ✓：全部靠 `.flt-dl__list` 的布局 ＋ `<a download>` ✓
     ⚠️ 分两套：`--layout-list`（默认 ✓ 一行一条 ✓）／`--layout-grid`（卡片 ✓ 2/3/4 列 ✓）
        两套**共用**同一份标记 ✓ ⇒ 只靠外层类切换 ✓（改版式不会错位 ✓）*/
  .flt-dl{padding:104px 0}
  .flt-dl--density-compact{padding:64px 0}
  .flt-dl--density-relaxed{padding:128px 0}
  .flt-dl--surface-tint{background:var(--bg-2)}
  .flt-dl--surface-dark{background:var(--dark);color:#fff}

  .flt-dl__group{margin:36px 0 16px;font-size:18px;font-weight:600;letter-spacing:-.01em;color:var(--text)}
  .flt-dl__group:first-of-type{margin-top:28px}
  .flt-dl--surface-dark .flt-dl__group{color:#fff}

  .flt-dl__list{list-style:none;margin:0;padding:0}
  .flt-dl__item{display:flex;align-items:center;gap:18px;padding:18px 22px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--bg)}
  .flt-dl--surface-dark .flt-dl__item{background:#0F1B2D;border-color:rgba(255,255,255,.12)}
  .flt-dl__item + .flt-dl__item{margin-top:12px}

  /* 类型徽标 ✓（PDF / DOC / ZIP … ✓ 只用文字 ✓ 不依赖任何图标文件 ✓ 永不空框 ✓）*/
  .flt-dl__ext{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;min-width:52px;height:52px;padding:0 8px;border-radius:var(--r-md,8px);background:var(--primary-light);color:var(--primary);font-family:var(--mono);font-size:12px;font-weight:700;letter-spacing:.02em}
  .flt-dl--surface-dark .flt-dl__ext{background:rgba(143,180,255,.14);color:#8FB4FF}
  .flt-dl__text{flex:1 1 auto;min-width:0}
  .flt-dl__title{margin:0;font-size:16px;font-weight:600;line-height:1.5;color:var(--text)}
  .flt-dl__desc{margin:6px 0 0;font-size:14px;line-height:1.7;color:var(--text-2)}
  .flt-dl__meta{margin:8px 0 0;font-size:12.5px;color:var(--text-3)}
  .flt-dl__meta .flt-dl__size{font-family:var(--mono)}
  .flt-dl--surface-dark .flt-dl__title{color:#fff}
  .flt-dl--surface-dark .flt-dl__desc{color:rgba(255,255,255,.70)}
  .flt-dl--surface-dark .flt-dl__meta{color:rgba(255,255,255,.55)}
  .flt-dl__act{flex:0 0 auto}
  .flt-dl__btn{white-space:nowrap}
  .flt-dl__empty{margin:0;padding:22px;border:1px dashed var(--border);border-radius:var(--r-md);color:var(--text-3);font-size:14px;text-align:center}

  /* ⚠️⭐ v1.0.250：**画布里的"删除本条"按钮** ✓（Boss：「最好能有可以直接进行删除的」✗）
     · 只出现在**后台画布** ✓（前台由 `.flt-dl__act` 里的按钮承担 ✓ 不会渲染 `button.flt-dl__x` ✗）
     · 与"下载"按钮**并排** ✓ 圆角方形 ✓ 悬停转**主题红**（`isDestructive` 的既有语义 ✓ 不新造色 ✗）
     · 点它**不会**触发选区块/选文字 ✓（`preventDefault + stopPropagation` ✓ 见 editor.js ✓）*/
  .editor-styles-wrapper .flt-dl__act{display:inline-flex;align-items:center;gap:8px}
  /* ⚠️⚠️ v1.0.254：**✕ 按钮的圆角修好** ✗（Boss：「把这个添加一个圆角」✓）
     病根 ✓：旧写法是 `border-radius:var(--r-sm,r-sm)` ✗ ——
       CSS 的 `var()` 兜底值必须是**合法值** ✗，而 `r-sm` 既不是长度也不是关键字 ✓
       ⇒ 一旦 `--r-sm` 在画布上下文中**取不到** ⇒ 整条声明**被判无效** ⇒ 回退成 **0（方角）** ✗✓
     ✅ 正解 ✓：直接用**确定存在**的令牌 `--r-md`（条目卡片用的就是它 ✓ 已实证生效 ✓）
       ＋ 保留一个**合法**兜底 `8px` ✓ ⇒ 双重保险 ✓ 不会再"静默变方角" ✗
     ⚠️ 同段里的 `.flt-dl__ext` 也写过 `var(--r-sm,r-sm)` ✗ ⇒ 一并改成同一写法 ✓（同病同修 ✓）*/
  .editor-styles-wrapper .flt-dl__x{width:28px;height:28px;padding:0;border:1px solid var(--border);border-radius:var(--r-md,8px);background:var(--bg);color:var(--text-3);font-size:13px;line-height:1;cursor:pointer}
  .editor-styles-wrapper .flt-dl__x:hover{border-color:#D63638;color:#D63638}
  .editor-styles-wrapper .flt-dl__x:focus-visible{outline:2px solid #D63638;outline-offset:2px}
  /* 画布：元信息行里的文件名**等宽字体** ✓ 一眼看清 ✓ 且**允许换行不撑破** ✗ */
  .editor-styles-wrapper .flt-dl__size{font-family:var(--mono);word-break:break-all}

  /* ── 列表行（默认 ✓）：一行一条 ✓ 分隔线式观感 ✓ ── */
  .flt-dl--layout-list .flt-dl__list{display:block}

  /* ── 卡片网格 ✓（2 / 3 / 4 列 ✓）：同一份标记 ⇒ 只改排列 ✓ ── */
  .flt-dl--layout-grid .flt-dl__list{display:grid;gap:20px}
  .flt-dl--layout-grid.flt-dl--cols-2 .flt-dl__list{grid-template-columns:repeat(2,minmax(0,1fr))}
  .flt-dl--layout-grid.flt-dl--cols-3 .flt-dl__list{grid-template-columns:repeat(3,minmax(0,1fr))}
  .flt-dl--layout-grid.flt-dl--cols-4 .flt-dl__list{grid-template-columns:repeat(4,minmax(0,1fr))}
  .flt-dl--layout-grid .flt-dl__item{flex-direction:column;align-items:flex-start;gap:14px;height:100%}
  .flt-dl--layout-grid .flt-dl__item + .flt-dl__item{margin-top:0}
  .flt-dl--layout-grid .flt-dl__act{margin-top:auto;width:100%}
  .flt-dl--layout-grid .flt-dl__btn{display:block;width:100%;text-align:center}

  /* ── 响应式 ✓ ── */
  @media(max-width:1023px){
    /* 平板：四列太窄 ⇒ 收到 2 列 ✓（三列保留 ✓）*/
    .flt-dl--layout-grid.flt-dl--cols-4 .flt-dl__list{grid-template-columns:repeat(2,minmax(0,1fr))}
  }
  @media(max-width:767px){
    .flt-dl,.flt-dl--density-relaxed{padding:72px 0}
    .flt-dl--density-compact{padding:48px 0}
    /* 手机：网格一律 1 列 ✓ */
    .flt-dl--layout-grid .flt-dl__list{grid-template-columns:minmax(0,1fr)}
    /* 列表行：徽标＋文字一行，按钮**整行可点** ✓（手机点得准 ✓）*/
    .flt-dl__item{flex-wrap:wrap;gap:12px;padding:16px}
    .flt-dl__title{font-size:15px}
    .flt-dl__act{width:100%}
    .flt-dl__btn{display:block;width:100%;text-align:center}
  }

  /* ============ v1.0.246：**「整幅叠加（横幅）」样式段已整体删除** ✗ ==================
     Boss：「删除 不要仅关闭」✓ ⇒ 这一段（原本 ~110 行 ✓ 全部带 `--layout-overlay` 前缀 ✓）已删净 ✓
     为什么可整段删 ✓：`render.php` / `editor.js` **都不再输出这些类名** ✗（v1.0.239 / v1.0.245 ✓）
       ⇒ 这些规则**永远不会命中** ✓（不是"可能不命中"✓ 是**结构上不可能** ✓）
     删了哪些 ✓：舞台固定高 / slide 绝对铺满 / 高度三档 / `.flt-cr__bg` 图与占位 / `.flt-cr__veil` 遮罩三档 /
       `.flt-cr__overlay` + `.flt-cr__otext/otitle/odesc` 文案层 / 响应式两段 ✓
     ⚠️ **分栏样式一行未动** ✓（分栏的规则都不带此前缀 ✓ 且本段之外 ✓）
     ⚠️ 要重启横幅 ⇒ 从 `dist/funion-litetrade-v1.0.240.zip` 取原版 ✓（工作存档 ✓ 零重写 ✓）*/

  /* ⚠️⭐ v1.0.246：**横幅的「通栏档位」与「图上控制条」两段样式已删除** ✗
     删了 ✓：`--bleed-full` 的负外边距通栏（含 v1.0.237 修的 `overflow-x:clip` 横向滚动条保险 ✓）／
       `--bleed-full` 的文案对齐四条 / `--layout-overlay` 的根定位 + `padding` 归零 / 图上控制条白系一组 ✓
     为什么可删 ✓：这些**全部挂在 `--layout-overlay / --bleed-full / --h-screen / --ov-*` 上** ✗
       而 `render.php`（v1.0.239 ✓）与 `editor.js`（v1.0.245 ✓）**都不再输出这些类名** ✓
       ⇒ 永不命中 ✓ ⇒ 删掉对**前台与画布都零影响** ✓
     ⚠️ **分栏版式的控制条没有受影响** ✓（它在图下方、用基类样式 ✓ 本段删除不涉及 ✓）
     ⚠️ 若要重启横幅 ⇒ 从 `dist/funion-litetrade-v1.0.240.zip` 取原版 ✓（存档 ✓）*/
  /* ⚠️⚠️ v1.0.271：**横幅（整幅叠加）样式"真删"收尾** ✗（Boss 2026-09-20：「1+2」✓）
     本轮删掉的正是最后一批"**结构上永不命中**"的规则 ✗（共 6 组 ✗）：
       · 图上控制条白系一组（`--layout-overlay` 的 `__bar/__dash/__fill/__count/__arrow` ✓ ＋ 其 ≤767 ✓）
       · 满屏档高度算法（`--h-screen` 的 `100svh` ＋ admin-bar 32/46 扣减 ✓）
         ⚠️ 含 v1.0.236 那套"白边 64px"的定位结论 ✗ —— **完整分析仍在台账与纪律里** ✓ 没丢 ✓
       · 根节点 margin 归零（`--layout-overlay{margin-bottom:0;margin-top:0}` ✓）
       · **画布里**"控制条移到图下方"那条（`.editor-styles-wrapper .flt-cr--layout-overlay .flt-cr__bar` ✓
         —— 它当初是为**画布横幅**改的 ✗ 横幅没了 ⇒ 它也就没对象了 ✓）
       · `--bleed-full` 的两条画布覆盖 ✓
       · 满屏首屏档最后两条（`padding-top:0` ✓ ＋ ≤767 `--flt-cr-cap:58px` ✓ ＋ 画布 620px 预览 ✓）
     判据 ✓：这些**全部**挂在 `--layout-overlay / --bleed-full / --h-screen / --ov-*` 上 ✗
       而 `render.php`（v1.0.239 ✓）与 `editor.js`（v1.0.245 ✓）都**不再输出这些类名** ✓
       ⇒ **结构上不可能命中** ✓（不是"可能不命中"✓）⇒ 删掉对前台与画布**零影响** ✓
     ✅ **保留** ✓：`.flt-cr__media iframe / video`（**分栏版式在用** ✓ 见下一段 ✓）
     ⚠️ 要重启横幅 ⇒ 从 `dist/funion-litetrade-v1.0.240.zip` 取原版 ✓（工作存档 ✓ 零重写 ✓）*/

  /* ── v1.0.234 ③ **视频媒体** ✓（Boss 拍板 4 点：自托管 mp4 ✓ 静音自动循环 ✓ 可混排 ✓
       移动端只显示封面图 ✓）─────────────────────────────────────────────────────
     ⚠️ 视频是**幻灯片的一种媒体类型** ✓ 不是新块 ✗ 也不改引擎 ✓ ⇒ 与图片**同一处背景层** ✓
     · ⚠️ v1.0.271：`.flt-cr__bgvideo`（**横幅专属** ✗）＋ `.flt-cr__bgframe`（横幅里的第三方 iframe ✗）
       已随横幅删除 ✓ ⇒ 现在**只剩分栏这一处** ✓（下两条 ✓）
     · `object-fit:cover` ✓ 与图片同裁切口径 ✓（否则视频会变形 ✗）
     · 无 JS ⇒ 只有 poster（封面图）✓ ⇒ **画面不空** ✓（视频本身需要 JS 起播 ✓ 已记档 ✓）*/
  .flt-cr__media iframe{display:block;width:100%;height:100%;border:0}
  .flt-cr__media video{display:block;width:100%;height:100%;object-fit:cover}

  /* ⚠️ v1.0.232：**视差样式整段已删除** ✗（Boss：「把滚动视差的相关功能全部删除，
     这个功能等后面再详细对需求，现在先不在这个阶段处理，避免出错」✓）
     ⇒ 一并删除的还有：`assets/js/parallax.js` ✓ `inc/assets.php` 的入队 ✓ 区块属性 `parallax` ✓
       `flt-cr--parallax-*` 类 ✓ `data-flt-px` 钩子 ✓ 编辑器下拉 ✓ ⇒ **回到没有视差的干净状态** ✓
     ⇒ 将来复活 ⇒ **先与 Boss 对齐需求**（强度 / 范围 / 节奏 ✓）再重建 ✓ 不凭记忆恢复 ✗
     📌 记档（真机量测得到的教训 ✓ 免得下次重复踩 ✗）：
        · CSS 原生 `animation-timeline: view()` 在**裁剪容器**（`overflow:hidden` ✓ 本身就是
          scroll container ✗）里**永不推进** ✗ ⇒ 实测 transform 恒为 `-0.13%` ✓
        · 我们最终用的是 **JS 写 `--flt-px`** ✓（rAF ＋ 仅可见区块 ✓）⇒ 实测位移正常 ✓ */
