/*
Theme Name:   GeneratePress Child - Tian Shun Ad
Description:  Tian Shun Advertising child theme for GeneratePress. Compatible with GeneratePress free + GenerateBlocks free.
Version:      1.0.2
Template:     generatepress
*/

/* ==========================================================================
   1. Brand Tokens & Base Reset
   ========================================================================== */
:root {
    --ts-primary: #0B1F3A;
    --ts-primary-light: #0E2A4F;     /* 墨蓝提亮一档：深色按钮 hover 底色（白字 14.3:1） */
    --ts-accent: #F26B21;
    --ts-accent-dark: #E0631A;
    --ts-accent-text: #C2410C;         /* 橙系强调字色：hover 链接、导航当前项 */
    --ts-accent-dark-rgb: 224, 99, 26; /* 深橙 rgb 拆分：供 rgba(var(--ts-accent-dark-rgb), a) 使用 */
    --ts-radius: 8px;
    --ts-radius-lg: 12px;         /* 媒体卡片大圆角：Bento Grid 等大尺寸卡片 */
    --ts-container: 1280px;
    --ts-muted: #6B7280;
    --ts-text-soft: #4B5563;           /* 次级正文灰：浅灰底/白底均过 AA（原裸 #4B5563 全部收敛至此） */
    --ts-line: #E5E7EB;
    --ts-primary-rgb: 11, 31, 58;
    --ts-accent-rgb: 242, 107, 33;
    --ts-bg-soft: #F4F5F7;             /* 浅灰交替底色 */
    --ts-bg-alt: #F8F9FA;              /* 更浅浅灰底 */
    --z-float: 10;                     /* 悬浮层：盾、页脚 */
    --text-main: #1a1a1a;
    --ts-body: #1F2937;               /* v7 导航正文色 */
    --ts-surface: #F9FAFB;               /* v7 浅灰底 */
    --ts-pure: #FFFFFF;              /* v7 纯白快捷 */
    --ts-status-open: #22C55E;       /* 联系页营业状态指示灯 */
    --ts-status-open-rgb: 34, 197, 94;
    --ts-dot-far: #FDBA74;           /* 联系页地图远郊点 */
    --ts-dot-far-rgb: 253, 186, 116; /* 同上 rgb 拆分：供 rgba(var(--ts-dot-far-rgb), a) 使用 */
    --ts-gutter: 24px;               /* 全站统一水平内边距。版心、面包屑、区块内容同源 ——
                                        三者都用它，左边缘才会严格对齐（旧版面包屑写死 860px 是错位根因） */
    --ts-muted-soft: #9CA3AF;        /* 次级灰：面包屑分隔符等装饰性元素专用 */
}

html { scroll-behavior: smooth; scrollbar-gutter: stable; }
/* 锚点定位：避开吸顶导航（topbar 36 + header 约72 ≈ 108px，120px 留余量） */
:target,
[id] {
    scroll-margin-top: 120px;
}
html, body { margin: 0; padding: 0; width: 100%; overflow-x: clip; }
@media (prefers-reduced-motion: reduce) {
    html { scroll-behavior: auto; }
}
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "PingFang SC", "Noto Sans SC", "Microsoft YaHei", "HarmonyOS Sans SC", sans-serif; line-height: 1.7; color: var(--text-main); background-color: #ffffff; display: flex; flex-direction: column; min-height: 100vh; }
body.admin-bar { min-height: calc(100vh - 32px); }
/* WordPress admin-bar 高度：桌面 32px，782px 以下触屏版 46px */
@media (max-width: 782px) {
    body.admin-bar { min-height: calc(100vh - 46px); }
}
.site { flex: 1; width: 100%; display: flex; flex-direction: column; }
.site-content { flex: 1; width: 100%; }

/* ==========================================================================
   3. Mobile Article Overflow Protection
   ========================================================================== */
@media (max-width: 767px) {
    body.single .site-content,
    body.single #content,
    body.single .entry-content,
    body.single .gb-container {
        max-width: 100vw; width: 100%; box-sizing: border-box; overflow-x: clip;
    }
    body.single .entry-content p,
    body.single .entry-content h2,
    body.single .entry-content h3,
    body.single .entry-content li {
        overflow-wrap: anywhere;
    }
}

/* ==========================================================================
   4. Footer & Homepage Full-Width
   ========================================================================== */
body .site-footer, body footer { width: 100%; max-width: 100%; margin: 0; padding: 0; position: relative; z-index: var(--z-float); }
body .site-footer > .gb-container, body footer > .gb-container { width: 100%; max-width: 100%; margin-left: 0; margin-right: 0; border-radius: 0; }
body .site-footer > .gb-container > .gb-inside-container { width: 100%; max-width: var(--ts-container); margin-left: auto; margin-right: auto; padding-left: 20px; padding-right: 20px; }
body .site-footer p:last-child, body .site-footer .gb-element:last-child { margin-bottom: 0; padding-bottom: 0; }
/* 首页内容区在 GP 3.x 下的全宽修正（勿删）：
   GP 3.x 的 .site-content 直接子元素就是 .content-area（旧版是 .grid-container），
   旧 hack 的 left:50% 会把它推到右半边（实测 left=392px，内容整体偏右）。
   这里统一重置定位/边距，宽度交给下方 .home .content-area 的 max-width:100%;
   html/body 已有 overflow-x: clip（第 35 行）吸收左侧 -8px 的滚动条偏移，不出横向滚动条 */
body.home.no-sidebar .site-content > *:first-child {
    width: 100%;
    max-width: 100%;
    position: static;
    left: auto;
    right: auto;
    margin-left: 0;
    margin-right: 0;
    padding: 0;
}

/* 首页 .grid-container 不再全宽（方案 A）：GP 的 .inside-header 也带 grid-container 类，
   这条全宽规则会把导航栏一起拉宽，导致首页 LOGO 贴最左、与联系页面不一致。
   导航栏宽度交给 var(--ts-container)（即后台外观设置的容器宽度），与全站一致。
   首屏出血改由下方 .home .site-content > .grid-container / .content-area 承接，
   它们只作用于内容区，不碰导航栏。 */

/* ==========================================================================
    5. Typography & UI Polish
    ========================================================================== */
#content .entry-content h2, #content .entry-content h3 { border: none; background: none; padding: 0; margin-left: 0; position: relative; text-wrap: balance; }
/* 文章正文标题层级基准（single 页无 .ts-* 类覆盖的区域）：clamp 响应式，
   与首页区块标题同一套字号思想；真相源唯一（style.css），不在后台排版里重复配置。
   限定 body.single：避免 #content 这类 ID 前缀（1-0-1）盖掉首页 .ts-hero__title 的 clamp 字号 */
body.single .entry-content h1 { font-size: clamp(1.6rem, 4vw, 2.1rem); font-weight: 700; line-height: 1.3; }
body.single .entry-content h2 { font-size: clamp(1.35rem, 3vw, 1.7rem); font-weight: 700; line-height: 1.35; }
body.single .entry-content h3 { font-size: clamp(1.15rem, 2.4vw, 1.35rem); font-weight: 600; line-height: 1.4; }
body.single .entry-content h4, body.single .entry-content h5, body.single .entry-content h6 { font-size: clamp(1.05rem, 2vw, 1.2rem); font-weight: 600; line-height: 1.45; }
/* 表单控件字号兜底：iOS Safari 聚焦时输入框字号 <16px 会自动放大整个页面，统一 16px 防误缩放 */
body input, body select, body textarea { font-size: 16px; }
/* 区块标题统一断行均衡（S1–S15 各 .ts-*__heading） */
.ts-case__heading, .ts-event__heading,
.ts-faq__heading, .ts-flow__heading, .ts-mkt__heading { text-wrap: balance; }
#content .entry-content h2::before, #content .entry-content h2::after, #content .entry-content h3::before, #content .entry-content h3::after { display: none; }
.gb-button:not(.has-text-color) { color: #ffffff; background-color: var(--ts-primary); }
.gb-button, .wp-block-button__link { border-radius: 999px; text-decoration: none; transition: 0.3s; }
@media (hover: hover) {
    .gb-button:hover, .wp-block-button__link:hover { transform: translateY(-2px); }
}
body.single .entry-content img, body.single .gb-container img { height: auto; max-width: 100%; object-fit: initial; }

/* ==========================================================================
   6. Rank Math Breadcrumb（全站统一 V2.0 · 与内容区严格对齐）
   ==========================================================================
   【宽度真相源】--ts-container（1280） + --ts-gutter（24），
     与 .ts-section__inner、联系页 .ts-container 完全同源。
     旧版把面包屑写死 max-width:860px，而内容区是 1280px ——
     在 1440 视口下文字左边缘相差约 183px，这就是"面包屑与下方内容不对齐"的根因。
     本版起，面包屑与内容区共用同一组宽度令牌，任何视口下左边缘都重合。
   【视觉】去掉浅灰底盒子 + 描边 + 圆角，改为无底色漂浮文字：
     少一个容器层级，页面更干净；分隔符由文字「›」换成 CSS 细箭头，
     在不同字号/字体下都不会位移。 */
.breadcrumb-container {
    width: 100%;
    max-width: var(--ts-container);
    margin: 0 auto;
    padding: clamp(12px, 1.4vw, 18px) var(--ts-gutter);
    background: transparent;
    border: none;
    border-radius: 0;
    box-sizing: border-box;
}

/* 面包屑文字行：兼容 Rank Math 两种输出（<p> 形式 与 <ol>/<li> 形式） */
nav.rank-math-breadcrumb,
.rank-math-breadcrumb ol,
.breadcrumb-container .rank-math-breadcrumb p {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 2px;
    margin: 0;
    padding: 0;
    list-style: none;
    font-size: 13px;
    line-height: 1.5;
    color: var(--ts-muted);
}

.rank-math-breadcrumb li {
    display: inline-flex;
    align-items: center;
    color: var(--ts-muted);
    white-space: nowrap;
}

/* 可点层级：片状圆角 hover，不做下划线（中文下划线易显脏，且会撑动行高） */
.rank-math-breadcrumb a {
    color: var(--ts-muted);
    text-decoration: none;
    padding: 3px 8px;
    margin: 0 -4px;
    border-radius: 6px;
    transition: color 0.2s ease, background-color 0.2s ease;
}
@media (hover: hover) {
    .rank-math-breadcrumb a:hover {
        color: var(--ts-accent-text);
        background: rgba(var(--ts-accent-rgb), 0.08);
    }
}
.rank-math-breadcrumb a:focus-visible {
    outline: 2px solid var(--ts-accent);
    outline-offset: 1px;
}

/* 分隔符：隐藏原字符（font-size:0 + 透明），统一渲染 CSS 细箭头 */
.rank-math-breadcrumb .separator {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 16px;
    height: 16px;
    font-size: 0;
    color: transparent;
    flex: none;
}
.rank-math-breadcrumb .separator::after,
.rank-math-breadcrumb li:not(:last-child)::after {
    content: "";
    width: 5px;
    height: 5px;
    border-top: 1.5px solid var(--ts-muted-soft);
    border-right: 1.5px solid var(--ts-muted-soft);
    transform: rotate(45deg);
    flex: none;
}
.rank-math-breadcrumb li:not(:last-child)::after {
    margin: 0 10px 0 7px;
}

/* 当前页：不可点，字重与颜色各升一档，形成明确的"你在哪"落点 */
.rank-math-breadcrumb .last {
    color: var(--ts-primary);
    font-weight: 600;
    padding: 3px 8px;
}

/* 窄屏：字号与内边距各收一档；长路径靠 flex-wrap 自然换行，不溢出、不横滚 */
@media (max-width: 767px) {
    .breadcrumb-container {
        padding: 10px var(--ts-gutter);
    }
    nav.rank-math-breadcrumb,
    .rank-math-breadcrumb ol,
    .breadcrumb-container .rank-math-breadcrumb p {
        font-size: 12.5px;
    }
    .rank-math-breadcrumb a {
        padding: 3px 5px;
        margin: 0 -3px;
    }
    .rank-math-breadcrumb .last {
        padding: 3px 5px;
    }
}

/* ==========================================================================
   6b. 面包屑（2026-09-24 四修）：白名单 6 页统一「深色首屏内 + 浅色字」
   --------------------------------------------------------------------------
   与广告设计页模块自带的 ts-ad-crumb 同构（首页 / 中间分类 / 当前页）。
   三修时结构已统一为三级斜杠，但输出位置在 <main> 里、深色首屏之外 ——
   落在白色条上显示浅灰字，客户截图对比后要求改成「首屏内部、浅色字」。
   现由 tianshun_inject_breadcrumbs_into_hero() 经 the_content 注入首屏内部
   （注入点与锚点策略见 functions.php 同段注释），本段只负责浅色配色与
   首屏内定位。文章详情页仍走 Rank Math 原生（上方 6a 段样式）。
   ========================================================================== */
.ts-crumb {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
    font-size: 13px;
    line-height: 1.5;
    color: rgba(255, 255, 255, 0.62);
}
.ts-crumb a {
    color: rgba(255, 255, 255, 0.62);
    text-decoration: none;
}
@media (hover: hover) {
    .ts-crumb a:hover {
        color: #ffffff;
    }
}
.ts-crumb a:focus-visible {
    outline: 2px solid var(--ts-accent);
    outline-offset: 1px;
}
/* 分隔符：文字斜杠，弱化为次级白（与设计页 ts-ad-crumb__sep 同一档色） */
.ts-crumb__sep {
    color: rgba(255, 255, 255, 0.28);
    flex: none;
}
/* 链接触控区纵向撑开（与 6a 段同思路）：padding 撑开、负 margin 抵消 */
.ts-crumb a {
    padding: 11px 0;
    margin: -11px 0;
}
/* 当前页：不可点，纯白加半粗，形成明确的「你在哪」落点 */
.ts-crumb__cur {
    color: #ffffff;
    font-weight: 600;
}

/* 首屏内部定位（白名单 6 页）：首屏自身已有上下留白，面包屑不再叠加内边距，
   只与下方首屏内容拉开 20px —— 与设计页 .ts-ad-crumb 的 margin-bottom 同值。
   注：价格指南 / 常见问题 / 联系我们三页首屏 padding-top 为 0，面包屑会贴顶，
      故补 28px；广告制作（104px）/ 门头招牌（80px）/ 关于天舜（118px）三页
      首屏自带顶部留白，无需再补。 */
.tsap-hero > .breadcrumb-container,
.tssg-hero > .breadcrumb-container,
.ts-pg-hero > .breadcrumb-container,
.ts-fq-hero > .breadcrumb-container,
.ts-cx-hero > .breadcrumb-container {
    position: relative;
    z-index: 2;
    padding-top: 0;
    padding-bottom: 0;
    margin-bottom: 20px;
}
/* 关于天舜：面包屑插在 tsab-hero__inner 内，而该容器已自带 24px 左右内边距，
   故这里不再叠加，否则面包屑会比下方标题右移 24px（实测 311 vs 287）。 */
.tsab-hero__inner > .breadcrumb-container {
    position: relative;
    z-index: 2;
    padding: 0;
    margin-bottom: 20px;
}

/* 联系我们：面包屑同样改插到内容列 ts-cx-hero-main 内（2026-09-25 修）。
   原先插在 <section class="ts-cx-hero"> 开始标签后，即首屏最顶部；
   而该 hero 内容垂直居中，面包屑与下方「Contact · 联系我们」之间空出一大片，
   客户截图反馈「不好看」。与关于天舜同构：容器自带内边距，此处只留标题间距。 */
.ts-cx-hero-main > .breadcrumb-container {
    position: relative;
    z-index: 2;
    padding: 0;
    margin-bottom: 20px;
}

/* 常见问题 / 价格指南：面包屑同样从「首屏最顶部」移到「眉标正上方」（2026-09-25 二修）。
   FAQ 页内容列是无类名的裸 <div>，故用后代选择器；价格指南插在 ts-pg-hero__main 内。
   与关于天舜 / 联系我们同构：容器自带内边距，此处只留与下方眉标的间距。 */
.ts-fq-hero__inner > div > .breadcrumb-container,
.ts-pg-hero__main > .breadcrumb-container {
    position: relative;
    z-index: 2;
    padding: 0;
    margin-bottom: 20px;
}
.ts-pg-hero > .breadcrumb-container,
.ts-fq-hero > .breadcrumb-container,
.ts-cx-hero > .breadcrumb-container {
    padding-top: 28px;
}

@media (max-width: 767px) {
    .ts-crumb {
        font-size: 12.5px;
    }
    .tsap-hero > .breadcrumb-container,
    .tssg-hero > .breadcrumb-container,
    .ts-pg-hero > .breadcrumb-container,
    .ts-fq-hero > .breadcrumb-container,
    .ts-cx-hero > .breadcrumb-container {
        padding: 0 var(--ts-gutter);
        margin-bottom: 16px;
    }
    .tsab-hero__inner > .breadcrumb-container {
        padding: 0;
        margin-bottom: 16px;
    }
    .ts-pg-hero > .breadcrumb-container,
    .ts-fq-hero > .breadcrumb-container,
    .ts-cx-hero > .breadcrumb-container {
        padding-top: 22px;
    }
}

/* ==========================================================================
   7. Misc
   ========================================================================== */
blockquote { border-left: 4px solid var(--ts-accent); background: #f9f9f9; padding: 20px 30px; margin: 30px 0; font-style: italic; border-radius: 0 var(--ts-radius) var(--ts-radius) 0; }

@media print { header, footer, .sidebar, .gb-button, .breadcrumb-container { display: none; } }

/* 404 page: remove blog column pollution */
body.error404 .site-main .generate-columns-container { display: block; margin: 0; }
body.error404 .site-main .generate-columns { width: 100%; padding: 0; float: none; }

/* ==========================================================================
   S1 Hero V3.4
   ========================================================================== */
/* ===== S1 首屏主视觉 ===== */

/* 品牌色变量已在本文件顶部 :root 中定义（--ts-primary / --ts-accent / --ts-accent-dark /
   --ts-accent-text / --ts-radius / --ts-container 等）。各区块只负责 var() 引用，不重复定义。
   铁律：品牌色令牌只在本文件 :root 出现一次，其他地方一律 var()，再出现十六进制品牌色值就是 bug。 */

/* 外层全宽：掰开 GeneratePress 外层包裹的宽度限制和内边距
   这些规则作用于整个首页全部区块，保留它们让 .ts-hero 能出血到视口两边。
   内层版心由 .ts-section__inner / .ts-hero__inner 各自管理，不依赖 GP 默认限宽。
   注意：别删这几条——一删首屏就缩回 1200px 居中，不出血了。 */
.home .site-content,
.home .inside-article,
.home .entry-content {
    padding: 0;
    max-width: 100%;
    margin: 0;
    background: transparent;
}

.home #primary {
    float: none;
    width: 100%;
    padding: 0;
    margin: 0;
}

/* 内容区外层全宽：只作用于 .site-content 及其直接子 .grid-container，
   不碰导航栏（导航栏在 .site-header 下，与 .site-content 同级）。
   去 !important，改用 html body.home 高特异性覆盖 GP 父主题默认值 */
html body.home .site-content {
    max-width: 100%;
    width: 100%;
    margin-left: 0;
    margin-right: 0;
}
html body.home .site-content > .grid-container {
    max-width: 100%;
    padding: 0;
    margin-left: 0;
    margin-right: 0;
}

/* GB 容器兜底：若 GenerateBlocks 插入了限宽 .gb-container，一并掰开 */
html body.home .gb-container,
html body.home .gb-inside-container {
    max-width: 100%;
    padding-left: 0;
    padding-right: 0;
}

/* GeneratePress 3.x 内容区包装器：GP 默认给 .content-area 一个 max-width（容器宽度设置），
   会把首屏整块内容缩在中间/偏右。必须一并掰开（此前教程只掰了 site-content/entry-content，
   漏掉了这一层——这正是首屏只占右边、左侧大片空白的原因）。 */
html body.home .content-area {
    max-width: 100%;
    width: 100%;
    margin-left: 0;
    margin-right: 0;
}

/* 首屏隐藏页面标题包装器（前置 B 的 PHP 已从源码删除 H1，这里隐藏空壳）——
   待核验：上线前 curl 首页 | grep -o '<h1[^>]*>' 确认唯一 H1 是 .ts-hero__title */
.home .entry-header {
    display: none;
}

/* 全站共用版心（S1-S15 每块内容容器加 class="ts-section__inner"，版心自动对齐） */
.ts-section__inner {
    max-width: var(--ts-container);
    margin: 0 auto;
    padding: 0 var(--ts-gutter);
    box-sizing: border-box;
}

/* 首屏容器 + 素色底 fallback */
.ts-hero {
    position: relative;
    margin: 0;
    /* ★ 2026-10-12：曾一度改为按底图比例 calc((100vw - sbw)/1.778)（首屏 = 图高，
       图完整零裁切），但 1891 视口下首屏涨到 1055px —— 老周反馈「高度太高」。
       现回到 82vh（视口高驱动）：首屏 738px。代价是底图上下被裁约 30%
       （1.778:1 的图塞不进 2.54:1 的容器，两者只能选一个）。
       若要兼得，需换一张比例 ≥2.5:1 的横构图底图。 */
    /* ★ 2026-10-12 统一方案：全站首屏容器比例统一为 2.5:1（原 82vh 视口高驱动） */
    min-height: calc((100vw - var(--ts-sbw, 0px)) / 2.5);
    display: flex;
    align-items: center;
    overflow: hidden;
    background-color: var(--ts-primary);
    isolation: isolate;
    /* 突破父容器限宽：GP #page.grid-container 把内容区锁在版心内，
       用 100vw + 负 margin 让 ts-hero 单独铺满视口，内容区保持版心居中 */
    width: calc(100vw - var(--ts-sbw, 0px));
    margin-left: calc((100% - (100vw - var(--ts-sbw, 0px))) / 2);
    margin-right: calc((100% - (100vw - var(--ts-sbw, 0px))) / 2);
}

@media (max-width: 1180px) {
    .ts-hero {
        align-items: flex-start;
        padding-top: 72px;
        min-height: calc((100vw - var(--ts-sbw, 0px)) / 2.5);
    }
}

/* 左侧 4 色标渐变遮罩（左暗右亮，文字侧够暗，图片侧透出） */
.ts-hero::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 1;
    /* color-mix 降级：旧浏览器用 rgba（#0B1F3A = 11,31,58），新浏览器用 color-mix */
    /* ★ 2026-10-12（老周「怎么左边的房子没显示出来呢」）：
       0.52/0.44/0.30/0.16 → 0.15/0.13/0.09/0.06。
       底图稿左侧中位亮度仅 30/255（极暗的夜景建筑），再叠 0.52 墨蓝后
       建筑轮廓被完全压掉（实测左侧 R 标准差 18.7 = 近乎平坦）。
       减弱后同一区域 R 标准差 18.7 → 31.6，楼房轮廓与窗格重新显现；
       白字对比 10.1:1 → 6.8:1，仍高出 WCAG AA（4.5:1）约 50%。 */
    background: linear-gradient(
        100deg,
        rgba(var(--ts-primary-rgb), 0.52) 0%,
        rgba(var(--ts-primary-rgb), 0.44) 30%,
        rgba(var(--ts-primary-rgb), 0.30) 65%,
        rgba(var(--ts-primary-rgb), 0.16) 100%
    );
    background: linear-gradient(
        100deg,
        color-mix(in srgb, var(--ts-primary) 52%, transparent) 0%,
        color-mix(in srgb, var(--ts-primary) 44%, transparent) 30%,
        color-mix(in srgb, var(--ts-primary) 30%, transparent) 65%,
        color-mix(in srgb, var(--ts-primary) 16%, transparent) 100%
    );
    pointer-events: none;
}

/* 底部深色渐变（Phase 1 同色叠同色零效果；Phase 2 有图时底部压深略有作用。
   可选清理：Phase 2 补图后实测，如无明显效果可整段删除——连带清掉 z-index 和说明。
   color-mix 降级同 ::before */
.ts-hero::after {
    content: "";
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    height: 80px;
    z-index: 1;
    background: linear-gradient(
        to bottom,
        transparent 0%,
        rgba(var(--ts-primary-rgb), 0.9) 100%
    );
    background: linear-gradient(
        to bottom,
        transparent 0%,
        color-mix(in srgb, var(--ts-primary) 90%, transparent) 100%
    );
    pointer-events: none;
}

/* Phase 2: 真实 <img> 背景图层（Phase 1 不需要，CSS 先放着不影响） */
.ts-hero__media {
    position: absolute;
    inset: 0;
    z-index: 0;
}

.ts-hero__img {
    width: 100%;
    /* 2026-10-12：首屏高度回到 82vh 后，这里也回到 cover 满铺
       （高度驱动型首屏下 height:auto 会让图矮于容器、底部露底色）。
       brightness 0.72（原 0.55）—— 底图是夜景，中位亮度仅 9~14%，
       0.55 再压 45% 后左侧暗部几乎与遮罩同色，看起来像一块纯色背景。
       ★ 2026-10-12 老周要求提亮：0.72 → 0.85（客户 2560×1024 新稿换图后）。
       实测（1891 视口）左侧背景中位亮度 1.1%→1.3%、白字 CR 11.4→10.1:1（仍远超 4.5:1）。 */
    height: 100%;
    object-fit: cover;
    object-position: center right;
    filter: brightness(0.72);
}

/* 内容层（在遮罩之上），版心与 .ts-section__inner 同一规格，纵向 padding 单独覆盖 */
.ts-hero__inner {
    position: relative;
    z-index: 2;
    width: 100%;
    max-width: var(--ts-container);
    margin: 0 auto;
    padding: clamp(64px, 8vw, 96px) 48px;
    box-sizing: border-box;
}

/* H1 标题 */
.ts-hero__title {
    color: #FFFFFF;
    font-size: clamp(26px, 4vw, 46px);
    font-weight: 700;
    line-height: 1.3;
    letter-spacing: -0.01em;
    text-wrap: balance;
    margin: 0 0 24px 0;
    max-width: 820px;
}

/* 副标题 */
/* AI 答案段：前置实体定义，提升 GEO 引用率 */
.ts-hero__answer {
    color: rgba(255, 255, 255, 0.88);
    font-size: clamp(14px, 1.5vw, 16px);
    font-weight: 400;
    line-height: 1.55;
    margin: 0 0 16px 0;
    max-width: 560px;
}

.ts-hero__subtitle {
    color: rgba(255, 255, 255, 0.82);
    font-size: clamp(13px, 1.3vw, 15px);
    font-weight: 400;
    line-height: 1.6;
    margin: 0 0 28px 0;
    max-width: 560px;
}

/* 按钮组 */
.ts-hero__actions {
    display: flex;
    flex-wrap: wrap;
    gap: 16px;
    align-items: center;
    margin-bottom: 40px;
}

/* 主按钮 - 电话咨询（实心，锁定橙，墨蓝字过 WCAG AA） */
a.ts-btn-call {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 14px 30px;
    font-size: 16px;
    font-weight: 700;
    text-decoration: none;
    background: var(--ts-accent);
    color: var(--ts-primary);
    border: 2px solid var(--ts-accent);
    border-radius: var(--ts-radius);
    box-shadow: 0 8px 24px rgba(var(--ts-accent-rgb), 0.3); /* 降级：不支持 color-mix 的浏览器 */
    box-shadow: 0 8px 24px color-mix(in srgb, var(--ts-accent) 30%, transparent);
    transition: background-color 0.25s ease, border-color 0.25s ease, transform 0.25s ease, box-shadow 0.25s ease;
}

a.ts-btn-call:hover,
a.ts-btn-call:focus-visible {
    background: var(--ts-accent-dark);
    border-color: var(--ts-accent-dark);
    color: #FFFFFF;
    transform: translateY(-2px);
    box-shadow: 0 12px 28px rgba(var(--ts-accent-rgb), 0.4); /* 降级：不支持 color-mix 的浏览器 */
    box-shadow: 0 12px 28px color-mix(in srgb, var(--ts-accent) 40%, transparent);
}

/* 次按钮 - 看实拍案例（Ghost Button，Phase 1 不渲染，CSS 保留供 Phase 2 使用） */
a.ts-btn-cases {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 14px 30px;
    font-size: 16px;
    font-weight: 600;
    text-decoration: none;
    background: transparent;
    color: #FFFFFF;
    border: 2px solid rgba(255, 255, 255, 0.55);
    border-radius: var(--ts-radius);
    transition: background-color 0.25s ease, border-color 0.25s ease, transform 0.25s ease;
}

a.ts-btn-cases:hover,
a.ts-btn-cases:focus-visible {
    background: rgba(255, 255, 255, 0.1);
    border-color: #FFFFFF;
    color: #FFFFFF;
    transform: translateY(-2px);
}

/* 按钮键盘焦点 */
a.ts-btn-call:focus-visible,
a.ts-btn-cases:focus-visible {
    /* color-mix 降级 */
    outline: 3px solid rgba(var(--ts-accent-rgb), 0.5);
    outline: 3px solid color-mix(in srgb, var(--ts-accent) 50%, transparent);
    outline-offset: 3px;
}

/* 按钮内 SVG 图标 */
.ts-hero__actions svg {
    flex-shrink: 0;
}

/* 信任角标组 */
.ts-hero__trust {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    align-items: center;
}

/* 首屏承诺条（2026-09-23）：复用信任徽标样式，与下方资质徽标留 12px 组内间距，
   与按钮组的 40px 间距保持原节奏。文案仅前置站内已有口径，不加码。 */
.ts-hero__promises {
    margin: 0 0 12px 0;
}

/* 玻璃拟态角标（统一 8px 圆角） */
.ts-hero__badge {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 14px;
    font-size: 13px;
    font-weight: 500;
    color: rgba(255, 255, 255, 0.85);
    background: rgba(255, 255, 255, 0.08);
    border: 1px solid rgba(255, 255, 255, 0.22);
    border-radius: var(--ts-radius);
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    text-decoration: none;
    transition: border-color 0.2s ease, background-color 0.2s ease;
}

/* 角标橙色圆点 */
.ts-hero__badge::before {
    content: "";
    display: inline-block;
    width: 6px;
    height: 6px;
    background: var(--ts-accent);
    border-radius: 50%;
    flex-shrink: 0;
}

/* 角标内 SVG */
.ts-hero__badge svg {
    flex-shrink: 0;
}

/* 审核人姓名（2026-09-23 加）：徽标文字本身是 85% 白（11.7:1），
   名字若用橙 #F26B21（深底 5.43:1）反而比周围暗、看着像被弱化。
   故用纯白加粗（16.52:1），在深墨蓝首屏上自然跳出来，强化"有真人负责"的信号。 */
.ts-hero__badge .ts-hero__reviewer {
    color: #FFFFFF;
    font-weight: 700;
}

/* 可点击角标悬停（仅指针设备，避免触屏 sticky hover） */
@media (hover: hover) {
    a.ts-hero__badge--link:hover {
        border-color: var(--ts-accent);
        background: color-mix(in srgb, var(--ts-accent) 12%, transparent);
        color: #FFFFFF;
    }
}

/* 键盘焦点：所有输入方式始终生效 */
a.ts-hero__badge--link:focus-visible {
    border-color: var(--ts-accent);
    background: color-mix(in srgb, var(--ts-accent) 12%, transparent);
    color: #FFFFFF;
    /* color-mix 降级 */
    outline: 3px solid rgba(var(--ts-accent-rgb), 0.5);
    outline: 3px solid color-mix(in srgb, var(--ts-accent) 50%, transparent);
    outline-offset: 3px;
}

/* Phase 2: AI 场景示意标记（已隐藏，用户反馈太丑） */
.ts-hero__ai-note {
    display: none;
}

.nav-float-right #site-navigation,
.nav-float-right .main-navigation {
    margin-left: 0;
}

/* ===== 移动端（767px 以下，与全站三档断点对齐）===== */
@media (max-width: 767px) {
    .ts-hero {
        min-height: calc((100vw - var(--ts-sbw, 0px)) / 2.5);
    }

    .ts-hero__inner {
        padding: 56px 18px;
    }

    .ts-hero__actions {
        flex-direction: column;
        align-items: stretch;
        gap: 12px;
    }

    a.ts-btn-call,
    a.ts-btn-cases {
        width: 100%;
        justify-content: center;
    }

    .ts-hero__trust {
        gap: 8px;
    }

    .ts-hero__badge {
        font-size: 12px;
        padding: 5px 10px;
    }
}

/* ===== 中等屏幕（768px - 1180px）===== */
@media (min-width: 768px) and (max-width: 1180px) {
    .ts-hero__inner {
        padding: 72px 20px;
    }
}

/* ===== 减少动画（用户系统设置了减少动画时生效）===== */
@media (prefers-reduced-motion: reduce) {
    a.ts-btn-call,
    a.ts-btn-cases,
    a.ts-hero__badge--link {
        transition: none;
    }

    a.ts-btn-call:hover,
    a.ts-btn-cases:hover,
    a.ts-hero__badge--link:hover {
        transform: none;
    }
}

/* ==========================================================================
   S2 Facts V2.0
   ========================================================================== */
/* ===== S2 关键事实条 V2.0 ===== */

/* 外层 section：白底全宽出血，和 S1 Hero 同手法 */
/* margin-top 制造 S1 与 S2 之间的呼吸间距；padding 让卡片在白色区域内自然展示 */
.ts-facts {
    background: #FFFFFF;
    padding: 40px 0 40px;
    margin-top: 32px;
    position: relative;
    z-index: 3;
    width: calc(100vw - var(--ts-sbw, 0px));
    margin-left: calc((100% - (100vw - var(--ts-sbw, 0px))) / 2);
    margin-right: calc((100% - (100vw - var(--ts-sbw, 0px))) / 2);
}

/* 2026-09-23 新增：信任条区块主标题（原为 ts-visually-hidden 仅供读屏）。
   改为可见小标题的**真实动机**：信任信息（工商可查/业绩/场地/报价保修）显性化对客户更有说服力，
   而不是"躲避隐藏文本判罚"——视觉隐藏是 WCAG 标准无障碍写法（clip:rect+1px，非 display:none），
   搜索引擎可正常读取，不存在作弊问题。此处只是把该说的话让客户也看得见。
   样式：中等字重 + 主色，与下方极小的 eyebrow(13px) 形成层次，不喧宾夺主。
   ---------------------------------------------------------------
   ★ 2026-09-23 修复「标题不居中」（老周截图反馈，偏左约 80px）：
   根因：父级 .ts-facts 用 100vw + 负 margin 全宽出血（宽 1440），
         子元素 max-width:1280 + margin:0 auto 本应得到 ml/mr = 80/80 而居中。
         但 L111 主题规则 `#content .entry-content h2, ... h3 { margin-left: 0 }`
         特异性 (1,2,1) 高于本类名 (0,1,0)，把 margin-left 强制压成 0，
         导致 auto 只在右侧生效 → mr 变 160px → 标题整体左移 80px。
         实测：卡片中心 712.5 / 标题中心 632.5，偏差 -80.0px（1440 视口）。
         手机端（<768px）父级无负 margin，故不显现。
   修法：选择器加 `#content .entry-content` 前缀提升特异性到 (1,3,1)，压过 L111，
         并把 margin-left/right 分开写为 auto，确保两侧都参与分配。
         与 L1056「.ts-svc-card__title position: static」同一套解法（R148 同类坑）。
   实测（修复后）：1440 卡片中心 712.5 / 标题中心 712.5，偏差 0.0px；
         1025 / 768 / 390 全部 0.0px；横向无溢出。 */
#content .entry-content .ts-facts__title {
    box-sizing: border-box;
    max-width: var(--ts-container);
    margin-left: auto;
    margin-right: auto;
    margin-top: 0;
    margin-bottom: 18px;
    font-size: 20px;
    line-height: 1.4;
    font-weight: 700;
    color: var(--ts-primary);
    text-align: center;
}

/* 卡片本体：白底 + 边框 + 阴影，版心 1280px 居中 */
.ts-facts__card {
    box-sizing: border-box;
    max-width: var(--ts-container);
    margin: 0 auto;
    padding: 28px 40px 40px;
    background: #FFFFFF;
    border: 1px solid var(--ts-line);
    border-radius: var(--ts-radius);
    box-shadow: 0 12px 32px -8px rgba(var(--ts-primary-rgb), 0.10);
}

/* 头部行：eyebrow + 信用代码，底部发丝线分隔 */
.ts-facts__head {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 16px;
    flex-wrap: wrap;
    padding-bottom: 20px;
    margin-bottom: 32px;
    border-bottom: 1px solid var(--ts-line);
}

/* eyebrow：橙点 + 文字 */
.ts-facts__eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    margin: 0;
    font-size: 13px;
    font-weight: 600;
    letter-spacing: 0.08em;
    color: var(--ts-primary);
}

.ts-facts__eyebrow::before {
    content: "";
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--ts-accent);
}

/* 信用代码 */
.ts-facts__credit {
    margin: 0;
    font-size: 13px;
    color: var(--ts-muted);
    font-variant-numeric: tabular-nums;
    user-select: all;
}

/* "公开可查"查证链接：指向国家企业信用信息公示系统 */
.ts-facts__verify {
    color: var(--ts-accent-text);
    text-decoration: underline;
    text-underline-offset: 3px;
}

@media (hover: hover) {
    .ts-facts__verify:hover {
        color: var(--ts-primary);
    }
}

/* 四列网格 */
.ts-facts__grid {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    margin: 0;
}

/* 每格 */
.ts-facts__cell {
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding: 4px 28px;
}

/* 左分隔线：仅桌面四列布局 */
@media (min-width: 1025px) {
    /* 2026-09-23（风险 8 配套）：S2 改为信任条后，四格的值都变成 12–20 字的长句，
       原左右各 28px 内边距把 4 列每列压到 243px 可用宽，长句贴边折行显得拥挤。
       此处仅把本区块的横向内边距收到 24px（与同区块历史上 --addr 那格用过的值一致），
       可用宽提到 251px，配合上方 .ts-facts__value 的缩字规则，长句折行更从容。
       分隔线位置不受影响（padding 变化不移动 border）。 */
    .ts-facts__cell {
        padding: 4px 24px;
    }

    .ts-facts__cell + .ts-facts__cell {
        border-left: 1px solid var(--ts-line);
    }
}

/* 两列布局统一十字分隔（平板 768-1024 + 手机 <=767） */
@media (max-width: 1024px) {
    .ts-facts__cell:nth-child(odd) {
        border-right: 1px solid var(--ts-line);
    }

    .ts-facts__cell:nth-child(-n+2) {
        border-bottom: 1px solid var(--ts-line);
    }
}

/* 橙色短横线：用 ::before 伪元素，避免 <span> 在 <dl><div> 上下文中违反 HTML 规范 */
.ts-facts__cell::before {
    content: "";
    order: 1;
    width: 28px;
    height: 3px;
    margin-bottom: 6px;
    background: var(--ts-accent);
    border-radius: 2px;
    transition: width 0.25s ease;
}

@media (hover: hover) {
    .ts-facts__cell:hover::before {
        width: 48px;
    }
}

/* 事实大字（dd，视觉排第二） */
.ts-facts__value {
    order: 2;
    margin: 0;
    margin-inline-start: 0;
    color: var(--ts-primary);
    font-size: clamp(19px, 2vw, 22px);
    font-weight: 700;
    line-height: 1.3;
    letter-spacing: 0.01em;
}

/* 标签小字（dt，视觉排第三） */
.ts-facts__label {
    order: 3;
    margin: 0;
    font-weight: 400;
    color: var(--ts-muted);
    font-size: 14px;
    line-height: 1.6;
}

/* 悬停背景微染（仅在支持 hover 的设备生效，避免触屏 sticky） */
@media (hover: hover) {
    .ts-facts__cell:hover {
        background: rgba(var(--ts-accent-rgb), 0.03);
        background: color-mix(in srgb, var(--ts-accent) 3%, transparent);
    }
}

/* 无障碍：屏幕阅读器专用隐藏文字 */
.ts-visually-hidden {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* ===== 平板（768px - 1024px）：2x2 ===== */
@media (min-width: 768px) and (max-width: 1024px) {
    .ts-facts__card {
        padding: 24px 24px 32px;
    }

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

    .ts-facts__cell {
        padding: 4px 20px;
    }
}

/* ===== 手机（767px 以下）：2x2 小字 ===== */
@media (max-width: 767px) {
    .ts-facts {
        padding: 48px 0 56px;
        margin-top: 0;
        /* 手机端负 margin 崩坏防护：禁止负 margin 超出视口 */
        margin-left: 0;
        margin-right: 0;
        width: 100%;
    }

    .ts-facts__card {
        padding: 20px 20px 28px;
    }

    .ts-facts__head {
        padding-bottom: 14px;
        margin-bottom: 24px;
    }

    .ts-facts__credit {
        font-size: 12px;
    }

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

    .ts-facts__cell {
        padding: 18px 16px;
    }

    .ts-facts__value {
        font-size: 17px;
    }

    .ts-facts__label {
        font-size: 13px;
    }
}

/* ===== 减少动画 ===== */
@media (prefers-reduced-motion: reduce) {
    .ts-facts__cell::before {
        transition: none;
    }
}

/* ==========================================================================
   S3 Ad Production V1.1
   ========================================================================== */
/* ===== S3/S4/S5 通用服务区卡片系统 V1.1 ===== */

.ts-s3 {
    background: #FFFFFF;
    padding: 40px 0 40px;
    width: calc(100vw - var(--ts-sbw, 0px));
    margin-left: calc((100% - (100vw - var(--ts-sbw, 0px))) / 2);
    margin-right: calc((100% - (100vw - var(--ts-sbw, 0px))) / 2);
}

.ts-s3__inner {
    max-width: var(--ts-container, 1280px);
    margin: 0 auto;
}

/* 头部 */
.ts-s3__head {
    text-align: center;
    margin-bottom: 48px;
}

.ts-s3__eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    margin: 0 0 12px;
    font-size: 13px;
    font-weight: 600;
    letter-spacing: 0.08em;
    color: var(--ts-primary, #0B1F3A);
}

.ts-s3__eyebrow::before {
    content: "";
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--ts-accent, #F26B21);
}

.ts-s3__title {
    margin: 0;
    font-size: clamp(24px, 3vw, 32px);
    font-weight: 700;
    color: var(--ts-primary, #0B1F3A);
    line-height: 1.3;
}

/* AI 摘录位：与 .ts-s3__head 内的居中风格保持一致（2026-09-22 实测补） */
/* 2026-09-23 改：原文案在 1280 版心下横跨整屏、单行拉到 1200+px，读起来很散。
   此处加阅读宽度上限并居中，把这段副标题归到标题下方的舒适行宽内。
   数值取 62 个中文字符宽 ≈ 820px 上限（16px 字号下约 51 字/行），
   正文段落常规行宽区间（45~75 字符），既不满屏也不至于折成碎行。
   margin-inline:auto 保证窄屏（<820px）时自动退化为满宽+居中，不影响手机。 */
.ts-s3__sub {
    text-align: center;
    max-width: 820px;
    margin-inline: auto;
}

/* 四列网格 */
.ts-s3__grid {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 28px;
}

/* 卡片：flex 布局保证等高，CTA 沉底 */
.ts-svc-card {
    position: relative;
    display: flex;
    flex-direction: column;
    background: #FFFFFF;
    border: 1px solid var(--ts-line, #E5E7EB);
    border-radius: var(--ts-radius, 8px);
    overflow: hidden;
    transition: box-shadow 0.25s ease, transform 0.25s ease, border-color 0.25s ease;
}

/* 整卡可点击：标题链接的 ::after 铺满卡片 */
.ts-svc-card__title a::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 1;
}

/* ★ 2026-09-22 修复：上面这条「整卡可点击」此前是失效的。
   根因：L111 的 #content .entry-content h2, #content .entry-content h3 { position: relative; }
   把标题 h3.ts-svc-card__title 变成了定位祖先，而 h3 才是 ::after 最近的定位祖先，
   于是 inset:0 解析为「标题行」(126x20) 而非「整张卡片」(156x217) —— 实测覆盖率仅 0.07，
   卡片 90% 以上的区域点不到，只有标题那一行文字能点。
   修法：把标题复位为 static，让 ::after 的包含块回落到 .ts-svc-card（已是 position:relative），
   从而真正铺满整卡。点击区从 126x20 提升到 156x217（手机）/ 299x302（桌面）。
   选择器必须带 #content .entry-content 前缀：L111 那条特异性是 (1,1,1)，
   单写 .ts-svc-card__title (0,1,0) 按源码顺序也压不过（R148 同类坑）。
   h2/h3 的伪元素已被 L124 全部 display:none，故复位为 static 不影响任何装饰。 */
#content .entry-content .ts-svc-card__title {
    position: static;
}

/* 键盘焦点环（所有设备，含触摸 tap 聚焦） */
.ts-svc-card:focus-within {
    outline: 3px solid rgba(var(--ts-accent-rgb, 242, 107, 33), 0.55);
    outline: 3px solid color-mix(in srgb, var(--ts-accent, #F26B21) 55%, transparent);
    outline-offset: 2px;
}

/* 图片位 */
.ts-svc-card__media {
    aspect-ratio: 16/9;
    background: var(--ts-primary, #0B1F3A);
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
}

/* Phase 2 安全网：媒体位有 img 时 SVG 自动隐藏 */
.ts-svc-card__media:has(img) svg {
    display: none;
}

.ts-svc-card__icon {
    width: 48px;
    height: 48px;
    color: rgba(255, 255, 255, 0.65);
}

/* 实拍照片 */
.ts-svc-card__media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform 0.35s ease;
}

/* 卡片正文：flex 撑满，CTA 沉底 */
.ts-svc-card__body {
    display: flex;
    flex-direction: column;
    flex: 1;
    padding: 24px;
    text-align: center;
}

.ts-svc-card__title {
    margin: 0 0 6px;
    font-size: 16px;
    font-weight: 700;
    line-height: 1.4;
}

.ts-svc-card__title a {
    color: var(--ts-primary, #0B1F3A);
    text-decoration: none;
}

.ts-svc-card__desc {
    margin: 0;
    font-size: 13px;
    color: var(--ts-muted, #6B7280);
    line-height: 1.6;
}

/* "了解详情" CTA：沉到卡片底部 */
.ts-svc-card__more {
    margin-top: auto;
    padding-top: 14px;
    display: inline-flex;
    align-self: center;
    align-items: center;
    gap: 4px;
    font-size: 13px;
    font-weight: 600;
    color: var(--ts-muted, #6B7280);
    transition: color 0.25s ease;
}

.ts-svc-card__more::after {
    content: "\2192";
    transition: transform 0.25s ease;
}

/* 尾部链接 */
.ts-s3__more {
    text-align: center;
    margin-top: 40px;
}

.ts-s3__more a {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 12px 28px;
    font-size: 15px;
    font-weight: 600;
    color: var(--ts-primary, #0B1F3A);
    text-decoration: none;
    border: 1px solid var(--ts-line, #E5E7EB);
    border-radius: var(--ts-radius, 8px);
    transition: border-color 0.25s ease, color 0.25s ease;
}

.ts-s3__more a::after {
    content: "\203A";
    margin-left: 4px;
    transition: margin-left 0.25s ease;
}

/* 指针设备悬停效果（触摸设备不触发，避免 sticky hover） */
@media (hover: hover) {
    .ts-svc-card:hover {
        transform: translateY(-4px);
        box-shadow: 0 12px 32px -8px rgba(var(--ts-primary-rgb, 11, 31, 58), 0.12);
        border-color: rgba(var(--ts-accent-rgb, 242, 107, 33), 0.3);
        border-color: color-mix(in srgb, var(--ts-accent, #F26B21) 30%, transparent);
    }

    .ts-svc-card:hover .ts-svc-card__title a {
        color: var(--ts-accent-dark, #E0631A);
    }

    .ts-svc-card:hover .ts-svc-card__media img {
        transform: scale(1.04);
    }

    .ts-svc-card:hover .ts-svc-card__more {
        color: var(--ts-accent, #F26B21);
    }

    .ts-svc-card:hover .ts-svc-card__more::after {
        transform: translateX(3px);
    }

    .ts-s3__more a:hover {
        border-color: var(--ts-accent, #F26B21);
        color: var(--ts-accent-dark, #E0631A);
    }

    .ts-s3__more a:hover::after {
        margin-left: 8px;
    }
}

/* 平板（768px - 1024px）：2x4 */
@media (min-width: 768px) and (max-width: 1024px) {
    .ts-s3__grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

/* 手机（767px 以下）：2x4 小字 */
@media (max-width: 767px) {
    .ts-s3 {
        padding: 40px 16px 56px;
    }

    .ts-s3__head {
        margin-bottom: 32px;
    }

    .ts-s3__grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 16px;
    }

    .ts-svc-card__body {
        padding: 14px;
    }

    .ts-svc-card__title {
        font-size: 14px;
    }

    .ts-svc-card__desc {
        font-size: 12px;
    }

    .ts-svc-card__icon {
        width: 28px;
        height: 28px;
    }

    .ts-s3__more {
        margin-top: 28px;
    }

    .ts-s3__more a {
        padding: 10px 20px;
        font-size: 14px;
    }
}

/* 减少动画 */
@media (prefers-reduced-motion: reduce) {
    .ts-svc-card,
    .ts-svc-card__media img,
    .ts-svc-card__more::after,
    .ts-s3__more a,
    .ts-s3__more a::after {
        transition: none;
    }

    .ts-svc-card:hover {
        transform: none;
    }

    .ts-svc-card:hover .ts-svc-card__media img {
        transform: none;
    }
}

/* ==========================================================================
   S4 Ad Design V2.0
   ========================================================================== */
/* ===== S4 广告设计服务区 V2.0（白底，复用 S3 卡片 CSS） ===== */

.ts-s4 {
    background: #FFFFFF;
    padding: 40px 0 80px;
    width: calc(100vw - var(--ts-sbw, 0px));
    margin-left: calc((100% - (100vw - var(--ts-sbw, 0px))) / 2);
    margin-right: calc((100% - (100vw - var(--ts-sbw, 0px))) / 2);
}

.ts-s4__inner {
    max-width: var(--ts-container, 1280px);
    margin: 0 auto;
}

/* 头部 */
.ts-s4__head {
    text-align: center;
    margin-bottom: 48px;
}

.ts-s4__eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    margin: 0 0 12px;
    font-size: 13px;
    font-weight: 600;
    letter-spacing: 0.08em;
    color: var(--ts-primary, #0B1F3A);
}

.ts-s4__eyebrow::before {
    content: "";
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--ts-accent, #F26B21);
}

.ts-s4__title {
    margin: 0;
    font-size: clamp(24px, 3vw, 32px);
    font-weight: 700;
    color: var(--ts-primary, #0B1F3A);
    line-height: 1.3;
}

/* 导语（AI 摘录位）：头部标题下方、网格上方，限宽居中，对齐站内 __sub 节奏 */
.ts-s4__sub {
    max-width: 720px;
    margin: 14px auto 40px;
    font-size: clamp(15px, 1.5vw, 17px);
    line-height: 1.7;
    color: var(--ts-text-soft, #4B5563);
}

/* 四列网格（6 卡 = 2x4，末行左对齐） */
.ts-s4__grid {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 28px;
}

/* 平板（768px - 1024px）：2x3 */
@media (min-width: 768px) and (max-width: 1024px) {
    .ts-s4__grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

/* 尾部链接 */
.ts-s4__more {
    text-align: center;
    margin-top: 40px;
}

.ts-s4__more a {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 12px 28px;
    font-size: 15px;
    font-weight: 600;
    color: var(--ts-primary, #0B1F3A);
    text-decoration: none;
    border: 1px solid var(--ts-line, #E5E7EB);
    border-radius: var(--ts-radius, 8px);
    transition: border-color 0.25s ease, color 0.25s ease;
}

.ts-s4__more a::after {
    content: "\203A";
    margin-left: 4px;
    transition: margin-left 0.25s ease;
}

/* 指针设备：尾部按钮 hover（文字色 --ts-accent-text 过 AA，禁用 accent-dark） */
@media (hover: hover) {
    .ts-s4__more a:hover {
        border-color: var(--ts-accent, #F26B21);
        color: var(--ts-accent-text, #C2410C);
    }

    .ts-s4__more a:hover::after {
        margin-left: 8px;
    }
}

/* 手机（767px 以下） */
@media (max-width: 767px) {
    .ts-s4 {
        padding: 40px 16px 56px;
    }

    .ts-s4__head {
        margin-bottom: 32px;
    }

    .ts-s4__grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 16px;
    }

    .ts-s4__more {
        margin-top: 28px;
    }

    .ts-s4__more a {
        padding: 10px 20px;
        font-size: 14px;
    }
}

/* 减少动画 */
@media (prefers-reduced-motion: reduce) {
    .ts-s4__more a,
    .ts-s4__more a::after {
        transition: none;
    }
}

/* ==========================================================================
   S5 Event Planning V3.0
   ========================================================================== */
/* ===== S5 活动策划服务区 V4.1 —— 白底 + 橙色生长条，间距对齐 S3/S4 ===== */

.ts-event {
    background: #FFFFFF;
    padding: 0 0 clamp(28px, 3.5vw, 40px);
    position: relative;
    overflow: hidden;
}

.ts-event__inner {
    max-width: var(--ts-container, 1280px);
    margin: 0 auto;
    padding: 0 24px;
    box-sizing: border-box;
}

/* 等宽双栏 */
.ts-event__layout {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 48px;
    /* 两栏等高（默认 stretch），左栏 CTA 用 margin-top:auto 沉到底部与右栏最末卡对齐 */
}

/* 左栏：顶部与右栏对齐，自然滚动（不吸顶，避免与右栏错位） */
.ts-event__left {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    text-align: left;
    padding-top: 8px;
    height: 100%;
}

/* eyebrow：与 S4 一致 */
.ts-event__eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-size: 13px;
    font-weight: 600;
    letter-spacing: 0.08em;
    color: var(--ts-primary, #0B1F3A);
    margin-bottom: 16px;
}

.ts-event__eyebrow::before {
    content: "";
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--ts-accent, #F26B21);
}

/* H2 */
.ts-event__heading {
    font-size: clamp(24px, 3vw, 32px);
    font-weight: 700;
    color: var(--ts-primary, #0B1F3A);
    margin: 0 0 16px 0;
    letter-spacing: -0.02em;
    line-height: 1.3;
}

/* 副标题 */
.ts-event__sub {
    font-size: clamp(15px, 1.5vw, 17px);
    color: var(--ts-text-soft, #4B5563);
    line-height: 1.7;
    margin: 0 0 32px 0;
    max-width: 480px;
}

/* CTA 容器：margin-top:auto 让 CTA 沉到左栏底部，与右栏最末一张卡对齐 */
.ts-event__cta {
    display: flex;
    align-items: center;
    justify-content: flex-start;
    gap: 24px;
    flex-wrap: wrap;
    margin-top: auto;
}

/* 胶囊按钮：橙色实心（和 S3/S4 底部链接风格呼应但更强） */
.ts-event__more {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 14px 32px;
    font-size: 16px;
    font-weight: 700;
    color: #FFFFFF;
    background: linear-gradient(135deg, var(--ts-accent), var(--ts-accent-dark));
    border: none;
    border-radius: 999px;
    text-decoration: none;
    box-shadow: 0 8px 24px -6px rgba(var(--ts-accent-rgb), 0.5);
    transition: transform 0.3s ease, box-shadow 0.3s ease, filter 0.3s ease;
}

/* 电话直拨 */
.ts-event__tel {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-size: 17px;
    font-weight: 800;
    color: var(--ts-accent-text, #C2410C);
    text-decoration: none;
    letter-spacing: 0.02em;
}

.ts-event__tel svg {
    color: var(--ts-accent, #F26B21);
}

/* 信任标签：白底上的浅灰标签 */
.ts-event__tags {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-bottom: 36px;
}
.ts-event__tags span {
    font-size: 13px;
    color: var(--ts-text-soft, #4B5563);
    background: var(--ts-bg-alt, #F8F9FA);
    border: 1px solid var(--ts-line, #E5E7EB);
    padding: 7px 16px;
    border-radius: 999px;
    font-weight: 600;
    letter-spacing: 0.02em;
}

/* 右栏服务列表：2列网格（5卡=2×2+1，最后一张居中） */
.ts-event__list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px;
}

.ts-event__list li:last-child {
    grid-column: 1 / -1;
}

/* 单张卡片：恢复舒适尺寸，现代化质感 */
.ts-event__card {
    position: relative;
    display: flex;
    align-items: center;
    gap: 16px;
    background: #FFFFFF;
    border: 1px solid var(--ts-line, #E5E7EB);
    border-radius: var(--ts-radius, 8px);
    padding: 20px 24px;
    text-decoration: none;
    overflow: hidden;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
    transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.25s ease;
    height: 100%;
    box-sizing: border-box;
}

/* 左侧橙色生长条 */
.ts-event__card::before {
    content: "";
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 5px;
    background: linear-gradient(180deg, var(--ts-accent), var(--ts-accent-dark));
    transform: scaleY(0);
    transition: transform 0.3s ease;
}

/* 图标：橙色描边图标（和 S3/S4 卡片标题色呼应） */
.ts-event__icon {
    flex-shrink: 0;
    width: 36px;
    height: 36px;
    padding: 8px;
    box-sizing: border-box;
    color: var(--ts-accent, #F26B21);
}

.ts-event__icon svg {
    width: 100%;
    height: 100%;
    stroke-width: 1.8;
}

/* 卡片正文 */
.ts-event__body {
    flex: 1;
    min-width: 0;
}

.ts-event__title {
    font-size: 16px;
    font-weight: 700;
    color: var(--ts-primary, #0B1F3A);
    margin: 0 0 2px 0;
}

.ts-event__desc {
    font-size: 13px;
    color: var(--ts-text-soft, #4B5563);
    margin: 0;
}

/* 编号：白卡上的橙色胶囊 */
.ts-event__index {
    position: absolute;
    top: 12px;
    right: 14px;
    font-size: 11px;
    font-weight: 800;
    color: #FFFFFF;
    background: var(--ts-accent, #F26B21);
    padding: 3px 10px;
    border-radius: 20px;
    letter-spacing: 0;
}

/* 箭头：灰色 */
.ts-event__arrow {
    flex-shrink: 0;
    color: var(--ts-muted, #6B7280);
    transition: transform 0.3s ease, color 0.3s ease;
}

/* 键盘焦点 */
.ts-event__more:focus-visible,
.ts-event__tel:focus-visible,
.ts-event__card:focus-visible {
    outline: 3px solid var(--ts-accent, #F26B21);
    outline-offset: 2px;
}

/* 指针设备：悬停效果 */
@media (hover: hover) {
    a.ts-event__more:hover {
        transform: translateY(-2px);
        filter: brightness(1.06);
        box-shadow: 0 14px 32px -8px rgba(var(--ts-accent-rgb), 0.6);
        color: var(--ts-pure);
    }

    .ts-event__card:hover {
        transform: translateY(-4px);
        box-shadow: 0 16px 40px -8px rgba(11, 31, 58, 0.35);
    }

    .ts-event__card:hover::before {
        transform: scaleY(1);
    }

    .ts-event__card:hover .ts-event__arrow {
        transform: translateX(4px);
        color: var(--ts-accent, #F26B21);
    }

    .ts-event__tel:hover {
        color: var(--ts-accent, #F26B21);
    }
}

/* 平板（<=1024px）：堆叠布局 */
@media (max-width: 1024px) {
    .ts-event__layout {
        grid-template-columns: 1fr;
        gap: 48px;
    }

    .ts-event__left {
        padding-top: 0;
    }

    .ts-event__sub {
        max-width: 600px;
    }
}

/* 手机（<=767px）：紧凑化 */
@media (max-width: 767px) {
    .ts-event__list {
        grid-template-columns: minmax(0, 1fr);
        gap: 12px;
    }

    .ts-event__list li:last-child {
        grid-column: auto;
    }

    .ts-event__card {
        padding: 18px 20px;
        gap: 14px;
    }

    .ts-event__icon {
        width: 38px;
        height: 38px;
        padding: 8px;
    }

    .ts-event__index {
        display: none;
    }

    .ts-event__title {
        font-size: 16px;
    }

    .ts-event__desc {
        font-size: 13px;
    }

    .ts-event__more {
        padding: 12px 24px;
        font-size: 15px;
    }
}

/* 减少动画 */
@media (prefers-reduced-motion: reduce) {
    .ts-event__card,
    .ts-event__card::before,
    .ts-event__arrow,
    .ts-event__more {
        transition: none;
    }

    .ts-event__card:hover {
        transform: none;
    }
}

/* ==========================================================================
   S6 Marketing V2.0
   ========================================================================== */
/* ===== S6 营销策划横幅条 V5.0 —— 白底卡片 CTA，现代极简 ===== */

.ts-mkt {
    background: transparent;
    padding: clamp(24px, 3vw, 36px) 0;
    position: relative;
}

.ts-mkt::before,
.ts-mkt::after {
    content: none;
}

.ts-mkt__inner {
    max-width: var(--ts-container, 1280px);
    margin: 0 auto;
    padding: clamp(28px, 4vw, 44px) clamp(24px, 3vw, 40px);
    box-sizing: border-box;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: clamp(24px, 4vw, 48px);
    position: relative;
    background: #FFFFFF;
    border-radius: var(--ts-radius, 8px);
    border-left: 4px solid var(--ts-accent, #F26B21);
    box-shadow: 0 1px 3px rgba(11, 31, 58, 0.06), 0 8px 24px rgba(11, 31, 58, 0.08);
}

.ts-mkt__content {
    flex: 1;
    min-width: 0;
}

.ts-mkt__eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    /* 2026-09-23 无障碍修正（风险 9）：原 12px + --ts-accent(#F26B21) 白底对比度仅 3.04:1，未达 AA 的 4.5:1。
       改为 --ts-accent-text(#C2410C) 白底 5.18:1 达标；字号 12→12.5px（保持原设计档位，仅保证 ≥12px）。
       注意：装饰短横线(.ts-mkt__eyebrow::before 等)与图标仍用原橙 --ts-accent，只改文字。 */
    font-size: 12.5px;
    font-weight: 700;
    letter-spacing: 0.14em;
    color: var(--ts-accent-text, #C2410C);
    margin-bottom: 10px;
    text-transform: uppercase;
}

.ts-mkt__eyebrow::before {
    content: "";
    width: 20px;
    height: 3px;
    background: var(--ts-accent, #F26B21);
    border-radius: 2px;
}

.ts-mkt__heading {
    font-size: clamp(26px, 3.2vw, 38px);
    font-weight: 800;
    color: var(--ts-primary, #0B1F3A);
    margin: 0 0 10px 0;
    letter-spacing: -0.02em;
    line-height: 1.2;
}

.ts-mkt__desc {
    font-size: clamp(15px, 1.5vw, 17px);
    color: var(--ts-text-soft, #4B5563);
    line-height: 1.7;
    margin: 0;
    max-width: 520px;
}

.ts-mkt__actions {
    display: flex;
    gap: 12px;
    flex-shrink: 0;
    flex-wrap: wrap;
}

.ts-mkt__btn {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 14px 28px;
    font-size: 15px;
    font-weight: 600;
    text-decoration: none;
    border-radius: 999px;
    transition: all 0.3s ease;
    white-space: nowrap;
}

.ts-mkt__btn--solid {
    background: var(--ts-accent, #F26B21);
    color: #FFFFFF;
    border: 2px solid var(--ts-accent, #F26B21);
    box-shadow: 0 4px 14px rgba(242, 107, 33, 0.25);
}

.ts-mkt__btn--ghost {
    background: transparent;
    color: var(--ts-primary, #0B1F3A);
    border: 2px solid var(--ts-line, #E5E7EB);
}

.ts-mkt__btn svg {
    transition: transform 0.3s ease;
    flex-shrink: 0;
}

@media (hover: hover) {
    .ts-mkt__btn--solid:hover {
        background: var(--ts-accent-dark, #E0631A);
        border-color: var(--ts-accent-dark, #E0631A);
        box-shadow: 0 6px 20px rgba(242, 107, 33, 0.35);
        transform: translateY(-2px);
    }

    .ts-mkt__btn--ghost:hover {
        background: var(--ts-primary, #0B1F3A);
        border-color: var(--ts-primary, #0B1F3A);
        color: #FFFFFF;
        transform: translateY(-2px);
    }

    .ts-mkt__btn:hover svg {
        transform: translateX(4px);
    }
}

.ts-mkt__btn:focus-visible {
    outline: 3px solid var(--ts-accent, #F26B21);
    outline-offset: 4px;
}

.ts-mkt__btn:active {
    transform: translateY(0);
}

@media (max-width: 1024px) {
    .ts-mkt__inner {
        flex-direction: column;
        align-items: flex-start;
        gap: 24px;
        padding: clamp(24px, 4vw, 36px);
    }

    .ts-mkt__desc {
        max-width: 100%;
    }
}

@media (max-width: 767px) {
    .ts-mkt__inner {
        margin-left: 16px;
        margin-right: 16px;
    }

    .ts-mkt__actions {
        flex-direction: column;
        width: 100%;
    }

    .ts-mkt__btn {
        justify-content: center;
        width: 100%;
    }
}

@media (prefers-reduced-motion: reduce) {
    .ts-mkt__btn,
    .ts-mkt__btn svg {
        transition: none;
    }

    .ts-mkt__btn:hover svg {
        transform: none;
    }
}


/* ==========================================================================
   S8 Case Wall V5.0 - Compact Bento Grid
   Smaller tiles, tighter spacing, lighter visual weight. All 6 cards equal.
   ========================================================================== */

.ts-case {
    background: transparent;
    padding: clamp(32px, 4vw, 48px) 0 clamp(24px, 3vw, 40px);
    position: relative;
}

.ts-case__inner {
    max-width: var(--ts-container, 1280px);
    margin: 0 auto;
    padding: 0 24px;
    box-sizing: border-box;
}

/* Section header */
.ts-case__header {
    text-align: center;
    margin-bottom: clamp(32px, 4vw, 48px);
    max-width: 960px;
    margin-left: auto;
    margin-right: auto;
}

.ts-case__eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-size: 12px;
    font-weight: 700;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: #FFFFFF;
    margin-bottom: 16px;
    padding: 7px 18px;
    background: var(--ts-primary, #0B1F3A);
    border-radius: 999px;
}

.ts-case__eyebrow::before {
    content: "";
    width: 5px;
    height: 5px;
    border-radius: 50%;
    background: var(--ts-accent, #F26B21);
    flex-shrink: 0;
}

.ts-case__heading {
    font-size: clamp(28px, 3.5vw, 42px);
    font-weight: 800;
    color: var(--ts-primary, #0B1F3A);
    margin: 0 0 14px 0;
    letter-spacing: -0.03em;
    line-height: 1.15;
}

.ts-case__desc {
    font-size: clamp(15px, 1.5vw, 17px);
    color: var(--ts-text-soft, #4B5563);
    line-height: 1.7;
    margin: 0;
}

/* Bento Grid — 3 cols x 2 rows, all tiles equal, compact */
.ts-case__grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    grid-template-rows: repeat(2, clamp(140px, 14vw, 180px));
    gap: 16px;
}

/* Card — compact floating tile */
.ts-case__item {
    position: relative;
    display: block;
    text-decoration: none;
    overflow: hidden;
    border-radius: var(--ts-radius-lg, 12px);
    background: var(--ts-primary, #0B1F3A);
    border: 1px solid rgba(var(--ts-primary-rgb, 11, 31, 58), 0.08);
    box-shadow: 0 4px 20px rgba(var(--ts-primary-rgb, 11, 31, 58), 0.08);
    transition: box-shadow 0.45s cubic-bezier(0.25, 0.8, 0.4, 1),
                transform 0.45s cubic-bezier(0.25, 0.8, 0.4, 1);
}

/* All tiles equal — no featured special sizing */
.ts-case__item--featured {
    grid-column: span 1;
    grid-row: span 1;
}

/* Phase 1 cover card: gradient + subtle dot grid */
.ts-case__item:not(:has(.ts-case__img)) {
    background: linear-gradient(135deg, #142850 0%, var(--ts-primary, #0B1F3A) 55%, #091632 100%);
}

.ts-case__item:not(:has(.ts-case__img))::before {
    content: "";
    position: absolute;
    inset: 0;
    background-image:
        radial-gradient(circle at 30% 20%, rgba(255, 255, 255, 0.08) 0%, transparent 50%),
        radial-gradient(rgba(255, 255, 255, 0.04) 1px, transparent 1px);
    background-size: 100% 100%, 28px 28px;
    pointer-events: none;
    z-index: 0;
}

/* Type-word cover — compact size */
.ts-case__placeholder {
    position: absolute;
    inset: 0;
    z-index: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    color: rgba(255, 255, 255, 0.88);
    font-size: clamp(18px, 2.2vw, 26px);
    font-weight: 700;
    letter-spacing: 0.12em;
}

/* No featured size difference */
.ts-case__item--featured .ts-case__placeholder {
    font-size: clamp(18px, 2.2vw, 26px);
}

.ts-case__item:has(.ts-case__img) .ts-case__placeholder {
    display: none;
}

.ts-case__img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    z-index: 1;
    filter: saturate(1.06) brightness(1.06);
    transition: transform 0.65s cubic-bezier(0.25, 0.8, 0.4, 1);
}

/* Bottom gradient overlay — compact padding */
.ts-case__overlay {
    position: absolute;
    inset: 0;
    z-index: 2;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    align-items: flex-start;
    padding: 20px;
    background: linear-gradient(
        to top,
        rgba(var(--ts-primary-rgb, 11, 31, 58), 0.92) 0%,
        rgba(var(--ts-primary-rgb, 11, 31, 58), 0.66) 24%,
        rgba(var(--ts-primary-rgb, 11, 31, 58), 0.20) 52%,
        transparent 72%
    );
}

/* Equal overlay padding */
.ts-case__item--featured .ts-case__overlay {
    padding: 20px;
}

/* Category tag — compact */
.ts-case__tag {
    display: inline-flex;
    align-items: center;
    padding: 4px 12px;
    background: var(--ts-accent, #F26B21);
    color: #FFFFFF;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.04em;
    border-radius: 999px;
    margin-bottom: 8px;
    box-shadow: 0 2px 8px rgba(var(--ts-accent-rgb, 242, 107, 33), 0.30);
}

/* Equal tag size */
.ts-case__item--featured .ts-case__tag {
    font-size: 11px;
    padding: 4px 12px;
}

.ts-case__overlay h3 {
    font-size: clamp(15px, 1.5vw, 18px);
    font-weight: 700;
    color: #FFFFFF;
    margin: 0 0 4px 0;
    line-height: 1.3;
    text-shadow: 0 1px 4px rgba(var(--ts-primary-rgb, 11, 31, 58), 0.35);
}

/* Equal heading size */
.ts-case__item--featured .ts-case__overlay h3 {
    font-size: clamp(15px, 1.5vw, 18px);
    margin-bottom: 4px;
}

.ts-case__location {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 12px;
    color: rgba(255, 255, 255, 0.78);
}

.ts-case__location::before {
    content: "";
    width: 4px;
    height: 4px;
    border-radius: 50%;
    background: var(--ts-accent, #F26B21);
    flex-shrink: 0;
}

/* Hover */
@media (hover: hover) {
    .ts-case__item:hover {
        transform: translateY(-8px);
        box-shadow: 0 32px 64px -16px rgba(var(--ts-primary-rgb, 11, 31, 58), 0.18);
        border-color: rgba(var(--ts-primary-rgb, 11, 31, 58), 0.14);
    }

    .ts-case__item:hover .ts-case__img {
        transform: scale(1.08);
    }

    .ts-case__item:not(:has(.ts-case__img)):hover {
        background: linear-gradient(135deg, #1a3470 0%, #0d2647 55%, #0a1a3a 100%);
    }

    .ts-case__item:not(:has(.ts-case__img)):hover::before {
        background-image:
            radial-gradient(circle at 30% 20%, rgba(255, 255, 255, 0.14) 0%, transparent 50%),
            radial-gradient(rgba(255, 255, 255, 0.06) 1px, transparent 1px);
        background-size: 100% 100%, 28px 28px;
    }
}

.ts-case__item:focus-visible {
    outline: 3px solid var(--ts-accent-dark, #E0631A);
    outline-offset: 4px;
}

/* CTA */
.ts-case__footer {
    text-align: center;
    margin-top: clamp(32px, 4vw, 48px);
}

.ts-case__more {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 14px 32px;
    background: var(--ts-accent, #F26B21);
    color: #FFFFFF;
    font-size: 15px;
    font-weight: 700;
    text-decoration: none;
    border-radius: 999px;
    transition: background 0.3s ease, transform 0.3s ease, box-shadow 0.3s ease;
    box-shadow: 0 4px 16px rgba(var(--ts-accent-rgb, 242, 107, 33), 0.25);
}

.ts-case__more:hover {
    background: var(--ts-accent-dark, #E0631A);
    transform: translateY(-2px);
    box-shadow: 0 6px 24px rgba(var(--ts-accent-dark-rgb, 224, 99, 26), 0.30);
}

.ts-case__more:focus-visible {
    outline: 3px solid var(--ts-accent-dark, #E0631A);
    outline-offset: 4px;
}

.ts-case__more svg {
    transition: transform 0.3s ease;
}

.ts-case__more:hover svg {
    transform: translateX(4px);
}

/* Tablet */
@media (max-width: 1024px) {
    .ts-case__grid {
        grid-template-columns: repeat(2, 1fr);
        grid-template-rows: repeat(3, clamp(140px, 14vw, 180px));
    }

    .ts-case__item--featured {
        grid-column: span 1;
        grid-row: span 1;
    }
}

/* Mobile */
@media (max-width: 767px) {
    .ts-case__grid {
        grid-template-columns: 1fr;
        grid-template-rows: none;
    }

    .ts-case__item,
    .ts-case__item--featured {
        grid-column: span 1;
        grid-row: span 1;
        height: 200px;
    }

    .ts-case__overlay {
        padding: 18px;
    }
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
    .ts-case__item,
    .ts-case__img,
    .ts-case__more,
    .ts-case__more svg {
        transition: none;
    }

    .ts-case__item:hover {
        transform: none;
    }

    .ts-case__item:hover .ts-case__img {
        transform: none;
    }

    .ts-case__more:hover {
        transform: none;
    }

    .ts-case__more:hover svg {
        transform: none;
    }
}


/* ==========================================================================
   S10 Service Flow V2.0
   ========================================================================== */
/* ===== S10 服务流程 V2.0 ===== */

.ts-flow {
    /* 2026-09-23 改：去掉浅灰底，改透明，与页面整体背景（白）融合。
       原因：首页 S7b 位置上下都是白底区块（S7 案例墙、S7c 价格速查表 padding-top 32~48px），
       原浅灰底 + 上下各 56~96px 内边距会在中间多出一道 28~48px 的灰带，视觉上像"贴上去的另一块"。
       去掉背景后白卡片本身失去对照，故卡片侧改用 --ts-line 描边 + 更明显的投影来托底。

       【2026-09-23 19:40 再收紧：对齐全站区块的内边距规范】
       上一轮我把本区块内边距定为 clamp(40px,4.6vw,64px)（桌面取到 64px），
       但全站区块实测的主流值是「上 48 / 下 40」：
         .ts-case 48/40、.ts-price 48/40、.ts-s3 40/40、.ts-facts 40/40、.ts-mkt 36/36
       64px 是全站最大的一档，导致两处过渡带明显偏大（老周 19:37 截图指出）：
         ① S7 案例墙「查看全部案例」按钮底 → 本区块 eyebrow 文字顶：桌面 202px
         ② 本区块 CTA 按钮底 → S7c 价格速查 eyebrow 文字顶：桌面 122px
       现改齐为与 .ts-case / .ts-price 完全相同的一行（复用既有数值，未新增自定义值）：
             padding: clamp(32px, 4vw, 48px) 0 clamp(24px, 3vw, 40px);
       只动上下内边距，左右仍由 .ts-flow__inner 的 padding: 0 24px 负责（未改）。 */
    background: transparent;
    padding: clamp(32px, 4vw, 48px) 0 clamp(24px, 3vw, 40px);
}

.ts-flow__inner {
    max-width: var(--ts-container);
    margin: 0 auto;
    padding: 0 24px;
    box-sizing: border-box;
}

/* 头部居中 */
.ts-flow__head {
    text-align: center;
    margin-bottom: clamp(28px, 3.4vw, 44px);
}

/* eyebrow 双线 */
.ts-flow__eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    font-size: 13px;
    font-weight: 700;
    letter-spacing: 0.12em;
    color: var(--ts-primary);
    margin-bottom: 12px;
}
.ts-flow__eyebrow::before,
.ts-flow__eyebrow::after {
    content: "";
    width: 24px;
    height: 2px;
    background: var(--ts-accent); /* 图形色：eyebrow 装饰短横线 */
    flex-shrink: 0;
}

.ts-flow__heading {
    font-size: clamp(24px, 3vw, 36px);
    font-weight: 800;
    color: var(--ts-primary);
    margin: 0 0 12px 0;
    letter-spacing: -0.02em;
    line-height: 1.25;
}

.ts-flow__sub {
    font-size: clamp(15px, 1.5vw, 17px);
    /* 比 --ts-muted #6B7280 深，压浅灰底 #F4F5F7 过 AA（#6B7280 仅 4.42:1） */
    color: var(--ts-text-soft);
    line-height: 1.7;
    margin: 0;
}

/* 步骤容器 */
.ts-flow__steps {
    list-style: none;
    padding: 0;
    margin: 0;
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: clamp(16px, 2vw, 28px);
    position: relative;
}

/* 桌面连接线（穿过图标圆中心）
   2026-09-23：去背景后虚线仍只在卡片之间的间隙里可见（图标圆 80px 白底 + 2px 描边遮住段内部分），
   视觉与原先一致；虚线透明度由 .3 提到 .4，补偿失去浅灰底后的对比损失。 */
@media (min-width: 1025px) {
    .ts-flow__steps::before {
        content: "";
        position: absolute;
        top: 40px;
        left: 12.5%;
        right: 12.5%;
        height: 2px;
        background: repeating-linear-gradient(
            90deg,
            rgba(var(--ts-accent-dark-rgb), 0.4) 0,
            rgba(var(--ts-accent-dark-rgb), 0.4) 6px,
            transparent 6px,
            transparent 12px
        );
        z-index: 0;
    }
}

/* 单步卡片 —— 原靠浅灰底把白卡片托出来，2026-09-23 去背景后改由「描边更深 + 常驻轻投影」托底，
   保证在白底上仍是可辨识的一张卡，而不是几块飘着的白。 */
.ts-flow__step {
    text-align: center;
    position: relative;
    z-index: 1;
    padding: clamp(20px, 2vw, 32px) clamp(12px, 1.5vw, 20px);
    border: 1px solid #DDE1E7;
    border-radius: var(--ts-radius);
    background: #FFFFFF;
    box-shadow: 0 2px 10px rgba(var(--ts-primary-rgb), 0.06);
    transition: border-color 0.25s ease, box-shadow 0.25s ease, transform 0.25s ease;
}
@media (hover: hover) {
    .ts-flow__step:hover {
        border-color: rgba(var(--ts-accent-dark-rgb), 0.4);
        box-shadow: 0 8px 24px rgba(var(--ts-primary-rgb), 0.13);
        transform: translateY(-4px);
    }
}

/* 图标圆 */
.ts-flow__icon {
    width: 80px;
    height: 80px;
    margin: 0 auto 20px;
    border-radius: 50%;
    background: #FFFFFF;
    border: 2px solid rgba(var(--ts-accent-dark-rgb), 0.2);
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    transition: border-color 0.25s ease, background-color 0.25s ease, box-shadow 0.25s ease;
}
@media (hover: hover) {
    .ts-flow__step:hover .ts-flow__icon {
        border-color: var(--ts-accent); /* 图形色：hover 描边 */
        background: rgba(var(--ts-accent-dark-rgb), 0.04);
        box-shadow: 0 4px 16px rgba(var(--ts-accent-dark-rgb), 0.12);
    }
}
.ts-flow__icon svg {
    width: 32px;
    height: 32px;
    color: var(--ts-accent); /* 图形色：图标线条 */
}

/* 步骤正文区（桌面无特殊布局，手机端由 flex 子项接管；原空规则块已清理） */

/* 步骤编号 */
.ts-flow__num {
    display: block;
    font-size: 20px;
    font-weight: 800;
    color: var(--ts-accent); /* 图形色：步骤编号 */
    line-height: 1;
    margin-bottom: 8px;
    letter-spacing: 0.05em;
}

/* 步骤标题 */
.ts-flow__title {
    display: block;
    font-size: clamp(16px, 1.8vw, 18px);
    font-weight: 700;
    color: var(--ts-primary);
    line-height: 1.4;
    margin: 0 0 8px 0;
}

/* 步骤描述 */
.ts-flow__desc {
    font-size: 14px;
    /* 2026-09-23 改：原用 --ts-muted(#6B7280) 是压浅灰底算的；现为白底，
       #6B7280 在白底对比度 4.83:1（过 AA），但 14px 已偏小，统一提为 --ts-text-soft(#4B5563)
       在白底 7.56:1，读起来更稳。不新增色值，用站内既有变量。 */
    color: var(--ts-text-soft);
    line-height: 1.7;
    margin: 0;
}

/* CTA 按钮 */
.ts-flow__cta {
    text-align: center;
    margin-top: clamp(28px, 3.4vw, 40px);
}
.ts-flow__btn {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 14px 32px;
    border-radius: var(--ts-radius);
    font-size: 15px;
    font-weight: 700;
    text-decoration: none;
    white-space: nowrap;
    background: var(--ts-accent);
    color: var(--ts-primary);
    border: 1.5px solid var(--ts-accent);
    transition: background-color 0.25s ease, border-color 0.25s ease, color 0.25s ease, transform 0.25s ease;
}
.ts-flow__btn::after {
    content: "\2192";
    font-size: 16px;
    line-height: 1;
    transition: transform 0.25s ease;
}
@media (hover: hover) {
    .ts-flow__btn:hover {
        background: var(--ts-accent-dark);
        border-color: var(--ts-accent-dark);
        color: var(--ts-primary);
        transform: translateY(-2px);
    }
    .ts-flow__btn:hover::after {
        transform: translateX(3px);
    }
}
.ts-flow__btn:focus-visible {
    outline: 3px solid var(--ts-accent); /* 图形色：聚焦描边 */
    outline-offset: 3px;
}

/* 减少动画 */
@media (prefers-reduced-motion: reduce) {
    .ts-flow__step,
    .ts-flow__icon,
    .ts-flow__btn,
    .ts-flow__btn::after {
        transition: none;
    }
    .ts-flow__step:hover,
    .ts-flow__btn:hover,
    .ts-flow__btn:hover::after {
        transform: none;
    }
}

/* 平板（<=1024px）：2×2 网格，无连接线 */
@media (max-width: 1024px) {
    .ts-flow__steps {
        grid-template-columns: repeat(2, 1fr);
        gap: 24px;
    }
    .ts-flow__steps::before {
        display: none;
    }
}

/* 手机（<=767px）：竖向时间轴，左线串联 */
@media (max-width: 767px) {
    .ts-flow__steps {
        grid-template-columns: 1fr;
        gap: 0;
    }
    .ts-flow__step {
        display: flex;
        align-items: flex-start;
        gap: 16px;
        text-align: left;
        /* 2026-09-23 改：上下节奏按 24px 收（原 28px），与 block 内边距收紧同频 */
        padding: 0 0 24px 0;
        border: none;
        border-radius: 0;
        background: none;
        box-shadow: none;
    }
    .ts-flow__step:last-child {
        padding-bottom: 0;
    }
    .ts-flow__step:hover {
        border: none;
        box-shadow: none;
        transform: none;
    }
    .ts-flow__step:hover .ts-flow__icon {
        border-color: rgba(var(--ts-accent-dark-rgb), 0.4);
        background: rgba(var(--ts-accent-dark-rgb), 0.02);
        box-shadow: none;
    }
    .ts-flow__icon {
        flex-shrink: 0;
        width: 56px;
        height: 56px;
        margin: 0;
    }
    .ts-flow__icon svg {
        width: 24px;
        height: 24px;
    }
    /* 竖向连接线 */
    .ts-flow__step:not(:last-child)::after {
        content: "";
        position: absolute;
        left: 27px;
        top: 56px;
        bottom: 0;
        width: 2px;
        background: repeating-linear-gradient(
            180deg,
            rgba(var(--ts-accent-dark-rgb), 0.4) 0,
            rgba(var(--ts-accent-dark-rgb), 0.4) 6px,
            transparent 6px,
            transparent 12px
        );
        z-index: 0;
    }
    .ts-flow__body {
        flex: 1;
        padding-top: 4px;
    }
    .ts-flow__num {
        margin-bottom: 4px;
    }
    .ts-flow__desc {
        /* 2026-09-23：移动端本就无卡片白底（原按浅灰底加深），现区块底也为白，口径统一为白底 → --ts-text-soft 7.56:1 */
        color: var(--ts-text-soft);
    }
.ts-flow__btn {
        width: 100%;
        justify-content: center;
    }
}

/* ===== S12 FAQ V10.0（9 条 —— 白底深蓝卡片网格） ===== */

/* ==========================================================================
   S7b 服务流程（2026-09-23 新增到首页）
   复用第 2237 行起的 .ts-flow 组件（原注释即为「S10 服务流程 V2.0」，本就是为首页预留），
   本次只往首页内容里插区块，未新增任何样式。

   【2026-09-23 第二轮改动：去背景 + 收紧上下间距】
   现状与改法（只动本区块及其上下相邻间距，不碰其他板块的布局/配色/内容）：

   1) 背景 → 透明
      .ts-flow 原为 background: var(--ts-bg-soft) 浅灰底。本区块两侧邻居都是白底：
        上邻 S7 案例墙 .ts-case（background: transparent，padding-bottom 24~40px）
        下邻 S7c 价格速查表 .ts-price（background: transparent，padding-top 32~48px）
      于是页面在 S7 与 S7c 之间凭空多出一条灰带，等于把"服务流程"单拎出来一块，
      与老周要的"自然融合"相反。现改 background: transparent（见 2239 行）。
      连带影响与对策（去背景不是删一行就完事，否则卡片会"飘"）：
        · 卡片 .ts-flow__step 原靠灰底反衬才立得住 → 改深描边 #DDE1E7 + 常驻轻投影托底
        · 圆图标 .ts-flow__icon 本就是白底，在白底上只剩描边 → 保留 2px 描边（未改）
        · 正文色不用再迁就灰底 → .ts-flow__desc 由 --ts-muted 提为 --ts-text-soft
          （白底 7.56:1，见 2396 行；--ts-muted 在白底也有 4.83:1，提色是为 14px 小字读着更稳）
        · 桌面/手机连接虚线在浅灰底上的对比本就偏弱 → 透明度 .3 → .4 补偿

   2) 上下间距收紧（原 56~96px → 40~64px）
      收紧后"视觉间距"由三段相加，取值如下（桌面 1440 实测）：
        上方 S7 案例墙 padding-bottom    24~40px
      + 本区块 padding-top              40~64px   → 上方合计 64~104px（原 80~136px）
      + 本区块 padding-bottom           40~64px
      + 下方 S7c 价格速查表 padding-top  32~48px   → 下方合计 72~112px（原 88~144px）
      上下对称、互为节奏，既不挤（卡片与 H2 之间仍留 28~44px）也不脱节。
      · 区块内同时微收：头部下间距 32~56 → 28~44px，CTA 上间距 32~48 → 28~40px
        （纯阴影/自证需求为 0，属随外层一起收的连带量，避免"外紧内松"看着别扭）
      · 未改 .ts-case / .ts-price 自身的任何数值 —— 收紧靠本区块内边距完成，
        另外两块零改动，"不影响其他板块"由此保证。
   ========================================================================== */

/* ==========================================================================
   S7c 价格速查表（2026-09-23 新增）
   设计意图：把藏在折叠问答里的价格做成可见表格——带数字、成表格、有区间的内容
   更容易被 AI 搜索整段引用，用户也能一眼看到价位。
   数据口径：与首页 FAQ、/pricing/ 价格指南页三处必须一致，改价时三处同改。
   无障碍：表头用 th scope；手机端转卡片时用 data-label 显示字段名；
           正文 --ts-text-soft(#4B5563) 在白底对比度 8.6:1，达 AA。
   ========================================================================== */
.ts-price {
    background: transparent;
    padding: clamp(32px, 4vw, 48px) 0 clamp(24px, 3vw, 40px);
    /* 【2026-09-23 撤销】曾在此加 border-top: 1px solid #E8EAEE，本行已删除，勿再加回。
       撤销原因（老周 2026-09-23 19:22 定）：
         ① 加线的动机是"S7b 去背景后两块白底相连、怕糊成一片"——但那是本区块自己造的伪问题：
            去背景要的就是融合，两块白底相连正是融合的正常表现，加线反而把去背景的效果抵消掉一半；
         ② 全站其他区块之间一律无分隔线（S7 案例墙→S7b、S7c→S8 FAQ 均靠留白分节），
            只有这一处有线属全站不一致；
         ③ 价格速查表自带「价格速查」eyebrow + H2 标题，边界本已清晰，不依赖分隔线。
       若日后又觉得两节太糊，正确解法是加大留白或调整标题层级 ——
       不要再引入分隔线，它会让 S7b「与页面自然融合」的改动前功尽弃。 */
}
.ts-price__inner {
    max-width: var(--ts-container, 1280px);
    margin: 0 auto;
    padding: 0 24px;
    box-sizing: border-box;
}
.ts-price__head {
    text-align: center;
    margin-bottom: clamp(20px, 2.6vw, 32px);
}
.ts-price__eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    font-size: 13px;
    font-weight: 700;
    letter-spacing: 0.12em;
    color: var(--ts-primary, #0B1F3A);
    margin-bottom: 12px;
}
.ts-price__eyebrow::before,
.ts-price__eyebrow::after {
    content: "";
    width: 24px;
    height: 2px;
    background: var(--ts-accent); /* 图形色：装饰短横线，非文字 */
    flex-shrink: 0;
}
.ts-price__heading {
    font-size: clamp(24px, 3vw, 34px);
    font-weight: 800;
    color: var(--ts-primary, #0B1F3A);
    margin: 0 0 12px 0;
    letter-spacing: -0.02em;
    line-height: 1.25;
}
.ts-price__sub {
    max-width: 720px;
    margin: 0 auto;
    font-size: clamp(14px, 1.4vw, 16px);
    color: var(--ts-text-soft, #4B5563);
    line-height: 1.7;
}
.ts-price__table {
    width: 100%;
    margin: 0;
    border-collapse: collapse;
    border: 1px solid var(--ts-line, #E5E7EB);
    font-size: 15px;
    line-height: 1.6;
}
.ts-price__table thead th {
    padding: 14px 16px;
    background: var(--ts-bg-soft, #F4F5F7);
    border-bottom: 1px solid var(--ts-line, #E5E7EB);
    font-size: 14px;
    font-weight: 700;
    color: var(--ts-primary, #0B1F3A);
    text-align: left;
    white-space: nowrap;
}
.ts-price__table tbody th,
.ts-price__table tbody td {
    padding: 14px 16px;
    border-bottom: 1px solid var(--ts-line, #E5E7EB);
    text-align: left;
    vertical-align: top;
}
.ts-price__table tbody tr:last-child th,
.ts-price__table tbody tr:last-child td {
    border-bottom: 0;
}
.ts-price__table tbody th {
    font-weight: 700;
    color: var(--ts-primary, #0B1F3A);
    white-space: nowrap;
}
.ts-price__table tbody td {
    color: var(--ts-text-soft, #4B5563);
}
.ts-price__table tbody td b {
    font-size: 17px;
    font-weight: 800;
    color: var(--ts-primary, #0B1F3A);
    letter-spacing: -0.01em;
}
.ts-price__note {
    max-width: 900px;
    margin: clamp(16px, 2vw, 24px) auto 0;
    text-align: center;
    font-size: 13px;
    line-height: 1.8;
    color: var(--ts-text-soft, #4B5563);
}
.ts-price__note a {
    color: var(--ts-accent-text, #C2410C);
    text-decoration: underline;
    text-underline-offset: 3px;
}

/* ============================================================================
   S2b 核心事实速览（2026-09-23 新增）
   定位：给 AI 抽取用的「事实块」——两列定义表（事实名 / 事实值），
   视觉上复用 .ts-price 的白底 + 居中标题语言，保持全站一致。
   为什么用 <table> 而不是 <dl>：AI 对表格的结构化抽取最成熟，
   且 <th scope="row"> 天然表达了「这是事实名」的语义。
   ⚠️ 特异性提醒（本项目已知坑）：本块标题是 h2，容器内的文本节点若用类名
   控制，须带 #content .entry-content 前缀，否则会被主题
   `#content .entry-content h2 { margin-left:0 }` 等规则压过。
   ============================================================================ */
#content .entry-content .ts-quick {
    background: transparent;
    padding: clamp(28px, 3.4vw, 42px) 0 clamp(20px, 2.6vw, 32px);
}
#content .entry-content .ts-quick__inner {
    max-width: var(--ts-container, 1280px);
    margin: 0 auto;
    padding: 0 24px;
    box-sizing: border-box;
}
#content .entry-content .ts-quick__head {
    text-align: center;
    margin-bottom: clamp(18px, 2.2vw, 28px);
}
#content .entry-content .ts-quick__eyebrow {
    display: inline-block;
    font-size: 13px;
    font-weight: 700;
    letter-spacing: 0.12em;
    color: var(--ts-primary, #0B1F3A);
    margin-bottom: 8px;
}
#content .entry-content .ts-quick__heading {
    font-size: clamp(20px, 2.4vw, 26px);
    line-height: 1.4;
    font-weight: 700;
    color: var(--ts-primary, #0B1F3A);
    margin: 0 0 8px;
}
#content .entry-content .ts-quick__sub {
    font-size: 14px;
    line-height: 1.7;
    color: var(--ts-text-soft, #4B5563);
    margin: 0;
}

/* 两列定义表：左列事实名（窄、右对齐感），右列事实值（宽） */
#content .entry-content .ts-quick__table {
    width: 100%;
    max-width: 900px;
    margin: 0 auto;
    border-collapse: collapse;
    background: #FFFFFF;
    border: 1px solid #E8EAEE;
    border-radius: 12px;
    overflow: hidden;
    font-size: 14px;
}
#content .entry-content .ts-quick__table tr + tr {
    border-top: 1px solid #F0F2F5;
}
#content .entry-content .ts-quick__table th,
#content .entry-content .ts-quick__table td {
    padding: 12px 18px;
    text-align: left;
    vertical-align: top;
    line-height: 1.7;
}
#content .entry-content .ts-quick__table th {
    width: 32%;
    font-weight: 700;
    color: var(--ts-primary, #0B1F3A);
    background: #FAFBFC;
    white-space: nowrap;
}
#content .entry-content .ts-quick__table td {
    color: var(--ts-text, #3D4757);
}
#content .entry-content .ts-quick__table td b {
    color: var(--ts-accent-text, #C2410C);
}
/* 价格时效戳：小字灰底，让「这条价格是哪个月的」在视觉上也成立 */
#content .entry-content .ts-quick__stamp {
    display: inline-block;
    margin-left: 2px;
    padding: 1px 7px;
    font-size: 11px;
    line-height: 1.6;
    color: var(--ts-text-soft, #4B5563);
    background: #F3F4F6;
    border-radius: 4px;
    white-space: nowrap;
}
#content .entry-content .ts-quick__table td a {
    color: var(--ts-accent-text, #C2410C);
    text-decoration: underline;
    text-underline-offset: 2px;
    font-weight: 700;
}
#content .entry-content .ts-quick__note {
    max-width: 900px;
    margin: clamp(14px, 1.8vw, 20px) auto 0;
    text-align: center;
    font-size: 13px;
    line-height: 1.8;
    color: var(--ts-text-soft, #4B5563);
}
#content .entry-content .ts-quick__note a {
    color: var(--ts-accent-text, #C2410C);
    text-decoration: underline;
    text-underline-offset: 3px;
}

/* 手机端（<=767px）：两列表转上下堆叠，事实名做成小标签 */
@media (max-width: 767px) {
    #content .entry-content .ts-quick__table {
        border-radius: 10px;
        font-size: 13.5px;
    }
    #content .entry-content .ts-quick__table th,
    #content .entry-content .ts-quick__table td {
        display: block;
        width: 100%;
        padding: 8px 16px;
        white-space: normal;
    }
    #content .entry-content .ts-quick__table th {
        background: #FAFBFC;
        padding-bottom: 2px;
        font-size: 12.5px;
        letter-spacing: 0.02em;
    }
    #content .entry-content .ts-quick__table td {
        padding-top: 2px;
    }
    #content .entry-content .ts-quick__table tr + tr {
        border-top: 1px solid #E8EAEE;
    }
}

/* 手机端：表格转卡片（保留全部字段，不做横向滚动）
   用 data-label 把列名显示在值前面，避免手机上左右滑表格 */
@media (max-width: 767px) {
    .ts-price__table thead {
        display: none;
    }
    .ts-price__table,
    .ts-price__table tbody,
    .ts-price__table tr,
    .ts-price__table th,
    .ts-price__table td {
        display: block;
        width: auto;
    }
    .ts-price__table {
        border: 0;
    }
    .ts-price__table tbody tr {
        margin: 0 0 12px;
        padding: 4px 0;
        background: #fff;
        border: 1px solid var(--ts-line, #E5E7EB);
        border-radius: var(--ts-radius, 8px);
    }
    .ts-price__table tbody tr:last-child {
        margin-bottom: 0;
    }
    .ts-price__table tbody th {
        padding: 12px 16px 6px;
        font-size: 15px;
        white-space: normal;
    }
    .ts-price__table tbody td {
        padding: 6px 16px;
        border-bottom: 0;
    }
    .ts-price__table tbody td:last-child {
        padding-bottom: 14px;
    }
    .ts-price__table tbody td::before {
        content: attr(data-label) "：";
        font-weight: 700;
        color: var(--ts-primary, #0B1F3A);
    }
    .ts-price__table tbody td b {
        font-size: 16px;
    }
}

/* 打印：去掉浅灰底省墨，文字转深色 */
@media print {
    .ts-price__table thead th,
    .ts-price__table tbody tr,
    .ts-price {
        background: #fff;
    }
    .ts-price__heading {
        color: #000;
    }
    .ts-price__sub,
    .ts-price__note,
    .ts-price__table tbody td {
        color: #444;
    }
}

.ts-faq {
    background: transparent;
    padding: 16px 0 clamp(32px, 4vw, 48px);
}

.ts-faq__inner {
    max-width: var(--ts-container, 1280px);
    margin: 0 auto;
    padding: 0 24px;
    box-sizing: border-box;
}

/* 头部 —— 居中，深蓝标题在浅灰底上 */
.ts-faq__head {
    text-align: center;
    margin-bottom: clamp(40px, 5vw, 60px);
}

/* 问号图标 —— 深蓝底白字大圆，与卡片同色 */
.ts-faq__pin {
    width: 64px;
    height: 64px;
    margin: 0 auto 16px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--ts-primary); /* 图形色：深蓝底 */
    border-radius: 50%;
    color: #FFFFFF; /* 硬编码白：图标反白 */
}
.ts-faq__pin svg {
    width: 32px;
    height: 32px;
    color: #FFFFFF; /* 硬编码白：问号线条 */
}

.ts-faq__eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    font-size: 13px;
    font-weight: 700;
    letter-spacing: 0.15em;
    /* 2026-09-23 无障碍修正（风险 9）：原 --ts-accent(#F26B21) 白底 3.04:1 未达 AA → 改 --ts-accent-text 5.18:1 */
    color: var(--ts-accent-text, #C2410C);
    margin-bottom: 12px;
    text-transform: uppercase;
}
.ts-faq__eyebrow::before {
    content: "";
    width: 24px;
    height: 2px;
    background: var(--ts-accent); /* 图形色：左装饰线 */
    flex-shrink: 0;
}
.ts-faq__eyebrow::after {
    content: "";
    width: 24px;
    height: 2px;
    background: var(--ts-accent); /* 图形色：右装饰线 */
    flex-shrink: 0;
}

.ts-faq__heading {
    font-size: clamp(28px, 3.5vw, 40px);
    font-weight: 800;
    color: var(--ts-primary);
    margin: 0 0 16px 0;
    letter-spacing: -0.02em;
    line-height: 1.15;
}

.ts-faq__sub {
    font-size: clamp(15px, 1.5vw, 17px);
    /* 压白底过 AA（#6B7280 仅 4.42:1，#4B5563 约 7:1） */
    color: var(--ts-text-soft, #4B5563);
    line-height: 1.6;
    margin: 0 auto;
    max-width: 600px;
}

/* FAQ 列表 —— 三列卡片网格（桌面），767px 以下回退单列 */
.ts-faq__list {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: clamp(20px, 2.5vw, 32px);
    align-items: start;
    counter-reset: faq-counter;
}

/* 单条 FAQ —— 深蓝沉浸式卡片 + 大圆角 + 强阴影 */
.ts-faq__item {
    background: var(--ts-primary); /* 深蓝底：品牌主色 */
    border: none;
    border-radius: 16px;
    box-shadow: 0 12px 32px rgba(var(--ts-primary-rgb, 11, 31, 58), 0.25);
    overflow: hidden;
    /* 锚点定位被固定导航遮挡时保留可读间距 */
    scroll-margin-top: 120px;
    transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1),
                box-shadow 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
@media (hover: hover) {
    .ts-faq__item:hover {
        transform: translateY(-6px) scale(1.01);
        box-shadow: 0 20px 48px rgba(var(--ts-primary-rgb, 11, 31, 58), 0.35),
                    0 0 0 2px rgba(var(--ts-accent-rgb, 242, 107, 33), 0.25);
    }
}
/* 展开项跨整行（2026-09-23 加，opus-4-7 提出的布局问题，实测成立）：
   三列网格 + 手风琴（同 name 组只能开一条）→ 展开的那一条会把所在列
   撑高、另外两列留白（实测桌面端 423px vs 86px）。让展开项跨满整行后：
   ① 无留白；② 宽度变大 → 换行减少 → 高度反而比窄列展开时更低；
   ③ 视线落在展开项上，跨行重排不明显。
   注意：跨整行的项会被 grid 自动放置到下一个完整行，因此点击靠后的条目
   时会有一次重排跳动 —— 这是手风琴 + 网格的固有代价，比留白更可接受。
   若老周更在意「零跳动」，改为 .ts-faq__list 桌面端单列即可。 */
#content .entry-content .ts-faq__item[open] {
    grid-column: 1 / -1;
}

.ts-faq__item[open] {
    /* 展开态：橙光外发光 */
    box-shadow: 0 20px 48px rgba(var(--ts-primary-rgb, 11, 31, 58), 0.35),
                0 0 0 2px rgba(var(--ts-accent-rgb, 242, 107, 33), 0.4);
}

/* 问题行 —— 白字，与深蓝底形成高对比 */
.ts-faq__q {
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 24px;
    cursor: pointer;
    list-style: none; /* 移除默认三角 */
    font-size: clamp(15px, 1.6vw, 17px);
    font-weight: 700;
    line-height: 1.4;
    color: #FFFFFF; /* 硬编码白：深蓝底上的问题文字 */
    position: relative;
}
.ts-faq__q::-webkit-details-marker {
    display: none; /* Safari 移除默认三角 */
}
.ts-faq__q::before {
    /* 编号徽章：白边框 + 透明底 + 白字 */
    counter-increment: faq-counter;
    content: counter(faq-counter, decimal-leading-zero);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border-radius: 8px;
    background: transparent;
    border: 1px solid rgba(255, 255, 255, 0.3); /* 白边框 */
    color: #FFFFFF; /* 硬编码白：编号文字 */
    font-size: 13px;
    font-weight: 700;
    flex-shrink: 0;
    transition: background-color 0.25s ease, border-color 0.25s ease, color 0.25s ease;
}
.ts-faq__item[open] .ts-faq__q::before {
    background: var(--ts-accent);
    border-color: var(--ts-accent);
    color: #FFFFFF; /* 硬编码白：展开编号文字 */
}
.ts-faq__q:focus-visible {
    outline: 3px solid var(--ts-accent); /* 图形色：聚焦描边 */
    outline-offset: 2px;
    border-radius: 16px;
}
.ts-faq__q > span:first-child {
    flex: 1;
    padding-right: 32px; /* 给 chevron 留空间 */
}

/* Chevron 箭头 —— 白色 */
.ts-faq__icon {
    position: absolute;
    right: 24px;
    top: 50%;
    width: 12px;
    height: 12px;
    flex-shrink: 0;
    border-style: solid;
    border-width: 0 2.5px 2.5px 0;
    border-color: #FFFFFF; /* 硬编码白：箭头 */
    transform-origin: center;
    /* 默认闭合：箭头向下 */
    transform: translateY(-50%) rotate(45deg);
    transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
/* 展开：箭头向上 */
.ts-faq__item[open] .ts-faq__icon {
    transform: translateY(-50%) rotate(-135deg);
}

/* 答案区 —— 半透明白字 + 橙色竖条 */
.ts-faq__a {
    padding: 0 24px 24px 72px;
    font-size: clamp(14px, 1.4vw, 15px);
    line-height: 1.7;
    color: rgba(255, 255, 255, 0.85); /* 白字 85% 不透明：答案正文 */
    position: relative;
}
.ts-faq__a::before {
    content: "";
    position: absolute;
    left: 36px;
    top: 0;
    bottom: 24px;
    width: 3px;
    border-radius: 2px;
    background: var(--ts-accent); /* 图形色：答案区左侧竖条 */
    opacity: 0.8;
}
.ts-faq__a p {
    margin: 0;
}

/* 答案区列表与段落间距（2026-09-23 加）：
   FAQ 答案改为「一句结论 + bullet 要点 + 一句行动」三段结构后，答案区首次
   出现 <ul>。若不写规则，会落到主题默认列表样式（缩进过大、项目符号颜色
   不受控）。此处统一为：橙色小圆点 + 适度左缩进 + 与上下段落留白。
   注意用 #content .entry-content 前缀 —— 本项目已知坑：主题
   `#content .entry-content ul/h2/h3` 等规则特异性 (1,2,1) 会压过类名规则。 */
#content .entry-content .ts-faq__a ul {
    margin: 10px 0;
    padding-left: 20px;
    list-style: none;
}
#content .entry-content .ts-faq__a li {
    position: relative;
    margin: 0 0 6px;
    padding-left: 14px;
    color: rgba(255, 255, 255, 0.85);
    /* 长 URL（如百度地图带坐标的分享链接）不换行时会撑破 li —— 强制断行。
       2026-09-23 踩过一次：第 9 条 FAQ 的 li 里塞了地图长链接，
       desktop 高度从 96px 涨到 423px、移动端涨到 714px。 */
    word-break: break-word;
    overflow-wrap: anywhere;
}
#content .entry-content .ts-faq__a li:last-child {
    margin-bottom: 0;
}
#content .entry-content .ts-faq__a li::before {
    content: "";
    position: absolute;
    left: 0;
    top: 0.62em; /* 与首行文字光学对齐 */
    width: 5px;
    height: 5px;
    border-radius: 50%;
    background: var(--ts-accent);
    opacity: 0.85;
}
/* 段落不再紧贴：答案区多段时留出呼吸 */
#content .entry-content .ts-faq__a p + p {
    margin-top: 10px;
}
/* 手机端答案区左内边距收窄至 24px（原 72px），列表缩进同步微调，
   避免 bullet 被挤出可视区（<=767px 断点内生效） */
@media (max-width: 767px) {
    #content .entry-content .ts-faq__a ul {
        padding-left: 16px;
    }
    #content .entry-content .ts-faq__a li {
        padding-left: 12px;
    }
}

/* 答案区链接 —— 白字橙下划线 */
.ts-faq__a a,
.ts-faq__link {
    color: #FFFFFF; /* 硬编码白：链接文字 */
    font-weight: 700;
    text-decoration: underline;
    text-decoration-color: var(--ts-accent); /* 橙色下划线 */
}
.ts-faq__a a:hover,
.ts-faq__link:hover {
    color: var(--ts-accent); /* hover 转橙色 */
    text-decoration-color: var(--ts-accent);
}

/* 减少动画 */
@media (prefers-reduced-motion: reduce) {
    .ts-faq__item,
    .ts-faq__icon {
        transition: none;
    }
}

/* 手机（<=767px）：回退单列 */
@media (max-width: 767px) {
    .ts-faq {
        padding: 12px 0 clamp(24px, 4vw, 40px);
    }
    .ts-faq__head {
        margin-bottom: 28px;
    }
    .ts-faq__pin {
        width: 48px;
        height: 48px;
    }
    .ts-faq__pin svg {
        width: 24px;
        height: 24px;
    }
    .ts-faq__heading {
        font-size: clamp(24px, 6vw, 28px);
    }
    .ts-faq__list {
        grid-template-columns: 1fr;
        gap: 16px;
    }
    .ts-faq__q {
        padding: 20px;
        font-size: 15px;
    }
    .ts-faq__q::before {
        width: 32px;
        height: 32px;
        font-size: 12px;
    }
    .ts-faq__q > span:first-child {
        padding-right: 28px;
    }
    .ts-faq__icon {
        right: 20px;
        width: 10px;
        height: 10px;
        border-color: #FFFFFF;
    }
    .ts-faq__a {
        padding: 0 20px 20px 60px;
    }
    .ts-faq__a::before {
        left: 30px;
        bottom: 20px;
    }
}
/* ===== S12b 最新知识 V2.0（报版式无框三栏）=====
   背景与 S12 常见问题区一致（transparent 露白底），
   顶部间距承接 S12 底部（32-48px）不叠加，底部留给页脚呼吸空间 */

.ts-kb {
    background: transparent;
    padding: clamp(16px, 2vw, 32px) 0 clamp(48px, 6vw, 72px);
}

.ts-kb__inner {
    max-width: var(--ts-container);
    margin: 0 auto;
    padding: 0 24px;
    box-sizing: border-box;
}

/* 区头：居中标题组（2026 对称构图 + 精致留白） */
.ts-kb__head {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    margin-bottom: clamp(40px, 5.5vw, 60px);
}

.ts-kb__headtext {
    max-width: 640px;
    margin: 0 auto;
}

.ts-kb__kicker {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
    font-size: 13px;
    font-weight: 700;
    letter-spacing: 0.12em;
    color: var(--ts-primary);
    margin: 0 0 14px;
}
.ts-kb__kicker::before {
    content: "";
    width: 40px;
    height: 3px;
    background: var(--ts-accent);
    flex-shrink: 0;
}

.ts-kb__title {
    font-size: clamp(28px, 3.8vw, 42px);
    font-weight: 800;
    color: var(--ts-primary);
    margin: 0 0 12px;
    line-height: 1.15;
    letter-spacing: -0.03em;
}

.ts-kb__desc {
    font-size: clamp(15px, 1.5vw, 17px);
    color: var(--ts-text-soft);
    line-height: 1.6;
    max-width: 520px;
    margin: 0 auto;
}

/* 三栏网格 */
.ts-kb__grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 40px;
}

/* 单条文章（轻卡片：细边框 + 圆角 + 悬浮微动效，2026 主流内容卡片形态） */
.ts-kb__item {
    position: relative;
    display: grid;
    grid-template-columns: 60px 1fr;
    gap: 20px;
    align-items: start;
    padding: 24px;
    background: var(--ts-pure);
    border: 1px solid var(--ts-line);
    border-radius: var(--ts-radius);
    box-shadow: 0 1px 2px rgba(var(--ts-primary-rgb), 0.04);
    transition: border-color 0.25s ease, box-shadow 0.25s ease, transform 0.25s ease;
}

/* 大号日期（42px 视觉锚点，浅底徽章） */
.ts-kb__day {
    display: block;
    font-size: 42px;
    font-weight: 800;
    line-height: 1;
    color: var(--ts-primary);
    font-variant-numeric: tabular-nums;
    margin: 0;
    padding: 10px 8px;
    background: rgba(var(--ts-primary-rgb), 0.05);
    border-radius: 10px;
    text-align: center;
}
.ts-kb__mon {
    font-size: 13px;
    font-weight: 600;
    color: var(--ts-text-soft);
    font-variant-numeric: tabular-nums;
    margin: 4px 0 0;
    text-align: center;
}

/* 分类归属标签（AI 可读领域实体 + 用户导航） */
.ts-kb__cat {
    margin: 0 0 8px;
}
.ts-kb__cat a {
    display: inline-block;
    padding: 3px 10px;
    font-size: 12px;
    font-weight: 700;
    letter-spacing: 0.08em;
    color: var(--ts-accent-dark);
    background: rgba(var(--ts-accent-rgb), 0.10);
    border-radius: 999px;
    text-decoration: none;
    transition: background 0.2s ease, color 0.2s ease;
}

/* 文章标题 */
.ts-kb__post {
    font-size: clamp(19px, 2vw, 22px);
    font-weight: 700;
    line-height: 1.4;
    color: var(--ts-primary);
    margin: 0 0 10px;
    transition: color 0.2s ease;
}
.ts-kb__post a {
    color: inherit;
    text-decoration: none;
}
/* 拉伸链接：Phase 2 标题加 <a> 后自动激活，整栏可点 */
.ts-kb__post a::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 1;
}
.ts-kb__post a:focus-visible {
    outline: 3px solid var(--ts-accent);
    outline-offset: 2px;
}

/* 摘要（3 行截断） */
.ts-kb__excerpt {
    font-size: 14px;
    line-height: 1.7;
    color: var(--ts-text-soft);
    margin: 0 0 12px;
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* "阅读全文" */
.ts-kb__more {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 14px;
    font-weight: 600;
    color: var(--ts-primary);
    transition: color 0.2s ease;
}
.ts-kb__more::after {
    content: "\2192";
    margin-left: 0;
    color: var(--ts-accent-dark);
    transition: transform 0.25s ease;
}

/* 指针设备：hover 效果（触摸设备不触发） */
@media (hover: hover) {
    .ts-kb__item:hover {
        border-color: rgba(var(--ts-accent-rgb), 0.35);
        box-shadow: 0 12px 32px rgba(var(--ts-primary-rgb), 0.10);
        transform: translateY(-3px);
    }
    /* 左侧品牌强调线：hover 时从顶部生长到 60%（装饰层，不干扰整卡点击） */
    .ts-kb__item::before {
        content: "";
        position: absolute;
        left: 0;
        top: 0;
        width: 3px;
        height: 0;
        background: var(--ts-accent);
        border-radius: 0 3px 3px 0;
        transition: height 0.3s cubic-bezier(0.16, 1, 0.3, 1);
    }
    .ts-kb__item:hover::before {
        height: 60%;
    }
    .ts-kb__item:hover .ts-kb__day {
        background: var(--ts-accent);
        color: #FFFFFF;
    }
    .ts-kb__item:hover .ts-kb__post {
        color: var(--ts-accent-dark);
    }
    .ts-kb__item:hover .ts-kb__more {
        color: var(--ts-accent-dark);
    }
    .ts-kb__item:hover .ts-kb__more::after {
        transform: translateX(4px);
    }
    .ts-kb__cat a:hover {
        background: var(--ts-primary);
        color: #FFFFFF;
    }
    }

/* 减少动画 */
@media (prefers-reduced-motion: reduce) {
    .ts-kb__post,
    .ts-kb__more,
    .ts-kb__more::after,
    .ts-kb__cat a,
    .ts-kb__item,
    .ts-kb__item::before,
    .ts-kb__day,
    .ts-kb__more::after {
        transition: none;
    }
    .ts-kb__item::before {
        display: none;
    }
}

/* 平板（768-1024px）：三栏转两栏，避免卡片过窄 */
@media (min-width: 768px) and (max-width: 1024px) {
    .ts-kb__grid {
        grid-template-columns: repeat(2, 1fr);
        gap: 24px;
    }
}

/* 手机（<=767px）：两栏转一栏，日期移到标题上方 */
@media (max-width: 767px) {
    .ts-kb {
        padding: 16px 16px 40px;
    }
    .ts-kb__head {
        flex-direction: column;
        align-items: flex-start;
        gap: 12px;
    }
    .ts-kb__grid {
        grid-template-columns: 1fr;
        gap: 16px;
    }
    .ts-kb__item {
        grid-template-columns: 1fr;
        gap: 8px;
        padding: 18px;
    }
    .ts-kb__date {
        display: flex;
        align-items: center;
        gap: 10px;
    }
    .ts-kb__day {
        font-size: 30px;
        padding: 6px 12px;
    }
    .ts-kb__mon {
        margin: 0;
    }
}

/* ==========================================================================
   S13 Entity Info V2.0
   ========================================================================== */
/* ===== S13 公司实体信息卡 V8.0（精致缩小 · 现代轻量 · 无缝衔接）===== */

/* —— 区块：纯白，顶部 accent 渐变细线分隔，与 S12b 自然衔接 —— */
.ts-entity {
    background: #FFFFFF;
    padding: 0 0 clamp(32px, 4vw, 48px);
}
.ts-entity::before {
    content: "";
    display: block;
    height: 2px;
    background: linear-gradient(90deg, transparent, var(--ts-accent) 20%, var(--ts-accent) 80%, transparent);
    opacity: 0.35;
}

.ts-entity__inner {
    max-width: var(--ts-container);
    margin: 0 auto;
    padding: clamp(24px, 3vw, 36px) 24px 0;
    box-sizing: border-box;
}

/* —— 区头：居中，字号克制，精致层级 —— */
.ts-entity__head {
    text-align: center;
    margin-bottom: clamp(20px, 2.5vw, 28px);
}

.ts-entity__kicker {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    /* 2026-09-23 无障碍修正（风险 9）：原 11px + --ts-accent(#F26B21) 白底 3.04:1 双重不达标
       （对比度不足 + 字号偏小）→ 改 --ts-accent-text 5.18:1，字号 11→12px。装饰线仍用原橙。 */
    font-size: 12px;
    font-weight: 700;
    letter-spacing: 0.15em;
    color: var(--ts-accent-text, #C2410C);
    margin: 0 0 8px;
    text-transform: uppercase;
}
.ts-entity__kicker::before,
.ts-entity__kicker::after {
    content: "";
    width: 18px;
    height: 2px;
    background: var(--ts-accent);
    flex-shrink: 0;
    opacity: 0.5;
}

.ts-entity__title {
    font-size: clamp(20px, 2.6vw, 26px);
    font-weight: 800;
    color: var(--ts-primary);
    margin: 0 0 6px;
    line-height: 1.25;
    letter-spacing: -0.02em;
}

.ts-entity__desc {
    font-size: clamp(13px, 1.2vw, 15px);
    color: var(--ts-muted);
    line-height: 1.55;
    margin: 0;
}

/* —— 信息网格：7 项 3 列，中等卡片，12px 圆角，单层柔和阴影 —— */
.ts-entity__grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: clamp(12px, 1.5vw, 20px);
    margin: 0 0 clamp(20px, 2.5vw, 28px);
}

.ts-entity__item {
    background: #FFFFFF;
    padding: clamp(18px, 2vw, 24px);
    border-radius: 12px;
    box-shadow: 0 1px 6px rgba(11, 31, 58, 0.05);
    border: 1px solid rgba(229, 231, 235, 0.5);
    transition: transform 0.2s ease, box-shadow 0.2s ease;
}
@media (hover: hover) {
    .ts-entity__item:hover {
        transform: translateY(-2px);
        box-shadow: 0 4px 14px rgba(11, 31, 58, 0.08);
    }
}

/* 营业时间：第 7 项横跨整行 */
.ts-entity__item--full {
    grid-column: 1 / -1;
}

.ts-entity__label {
    font-size: 10px;
    font-weight: 700;
    color: var(--ts-muted);
    margin: 0 0 6px;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.ts-entity__value {
    font-size: clamp(14px, 1.5vw, 16px);
    font-weight: 700;
    color: var(--ts-primary);
    margin: 0;
    line-height: 1.3;
    font-variant-numeric: tabular-nums;
}

/* 信用代码：等宽字体 */
.ts-entity__value--code {
    font-family: "SF Mono", "Monaco", "Consolas", monospace;
    letter-spacing: 0.02em;
    user-select: all;
}

/* 注册地址下的补充说明（2026-09-23 加）：
   首页同时出现「注册地址」（赫山区团圆北路8号，法定）与「门店/经营地址」
   （资阳区马良南路184号）两个地址。机器读地址时容易混淆，此处显式讲清
   两者关系。注意：这是可见文本而非注释——AI 抓取时能看到，才起到消歧作用。 */
.ts-entity__addr-note {
    display: block;
    margin-top: 4px;
    font-size: clamp(12px, 1.2vw, 13px); /* 2026-09-25：下限 11px→12px，修复手机/平板视口字号过小（实测 360/390/768 下为 11px） */
    font-weight: 400;
    line-height: 1.5;
    color: var(--ts-muted);
}

/* —— 主营业务：白底卡片 + accent 左竖线，克制精致 —— */
.ts-entity__summary {
    display: flex;
    align-items: baseline;
    gap: 12px;
    margin-bottom: clamp(16px, 2vw, 22px);
    padding: clamp(14px, 1.5vw, 18px) clamp(18px, 2vw, 22px);
    background: #FFFFFF;
    border-left: 3px solid var(--ts-accent);
    border-radius: 0 12px 12px 0;
    box-shadow: 0 1px 6px rgba(11, 31, 58, 0.05);
}

.ts-entity__summary-label {
    font-size: 10px;
    font-weight: 700;
    color: var(--ts-accent);
    margin: 0;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    white-space: nowrap;
    flex-shrink: 0;
}

.ts-entity__summary-value {
    font-size: clamp(14px, 1.4vw, 15px);
    font-weight: 600;
    color: var(--ts-primary);
    margin: 0;
    line-height: 1.4;
}

/* 电话链接 */
.ts-entity__tel {
    color: var(--ts-primary);
    text-decoration: none;
    border-bottom: 1px solid rgba(11, 31, 58, 0.2);
    transition: border-color 0.2s ease, color 0.2s ease;
}
.ts-entity__tel:focus-visible {
    outline: 3px solid var(--ts-accent);
    outline-offset: 2px;
}
@media (hover: hover) {
    .ts-entity__tel:hover {
        color: var(--ts-accent);
        border-color: var(--ts-accent);
    }
}

/* —— 服务区域 + 经营范围：横向双列卡片（桌面），精致缩小 —— */
.ts-entity__meta {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: clamp(14px, 1.5vw, 20px);
    margin-bottom: clamp(16px, 2vw, 22px);
}

.ts-entity__serv,
.ts-entity__scope {
    background: #FFFFFF;
    padding: clamp(14px, 1.5vw, 18px) clamp(18px, 2vw, 22px);
    border-radius: 12px;
    box-shadow: 0 1px 6px rgba(11, 31, 58, 0.05);
    border: 1px solid rgba(229, 231, 235, 0.5);
    margin: 0;
}

.ts-entity__serv-label,
.ts-entity__scope-label {
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.08em;
    color: var(--ts-accent);
    margin: 0 0 6px;
    text-transform: uppercase;
}

.ts-entity__serv-text,
.ts-entity__scope-text {
    font-size: clamp(13px, 1.3vw, 14px);
    line-height: 1.6;
    color: var(--ts-body);
    margin: 0;
}

/* 查证注脚 */
.ts-entity__note {
    margin-top: clamp(14px, 1.5vw, 20px);
    text-align: center;
}

.ts-entity__note p {
    font-size: 11px;
    color: var(--ts-muted);
    margin: 0;
    letter-spacing: 0.03em;
}

/* 减少动画 */
@media (prefers-reduced-motion: reduce) {
    .ts-entity__item,
    .ts-entity__tel {
        transition: none;
    }
    .ts-entity__item:hover {
        transform: none;
    }
}

/* 平板（768px-1024px）：3 列转 2 列，meta 单列 */
@media (min-width: 768px) and (max-width: 1024px) {
    .ts-entity__grid {
        grid-template-columns: repeat(2, 1fr);
    }
    .ts-entity__meta {
        grid-template-columns: 1fr;
    }
}

/* 手机（<=767px）：单列，卡片紧凑 */
@media (max-width: 767px) {
    .ts-entity {
        padding: 0 0 clamp(24px, 3vw, 32px);
    }
    .ts-entity__inner {
        padding: clamp(16px, 2vw, 20px) 16px 0;
    }
    .ts-entity__grid {
        grid-template-columns: 1fr;
        gap: 10px;
    }
    .ts-entity__item {
        padding: 14px 16px;
        border-radius: 10px;
    }
    .ts-entity__meta {
        grid-template-columns: 1fr;
        gap: 10px;
    }
    .ts-entity__serv,
    .ts-entity__scope {
        padding: 14px 16px;
        border-radius: 10px;
    }
    .ts-entity__summary {
        flex-direction: column;
        gap: 4px;
        padding: 14px 16px;
        border-radius: 0 10px 10px 0;
    }
}

/* ==========================================================================
   S14 Bottom CTA V7.0 (Modern White · Seamless S13 · Compact)
   ========================================================================== */
/* ===== S14 底部转化条 V7.0（现代化纯白 · 与S13无缝衔接 · 精致紧凑）===== */

/* —— 区块：纯白背景，与S13统一；顶部accent渐变细线自然分隔 —— */
.ts-cta {
    background: #FFFFFF;
    padding: 0 0 clamp(32px, 4vw, 48px);
    max-width: none;
}
.ts-cta::before {
    content: "";
    display: block;
    height: 2px;
    background: linear-gradient(90deg, transparent, var(--ts-accent) 20%, var(--ts-accent) 80%, transparent);
    opacity: 0.35;
}

.ts-cta__inner {
    display: flex;
    flex-direction: column;
    align-items: center;
    max-width: var(--ts-container);
    margin: 0 auto;
    padding: clamp(24px, 3vw, 36px) 24px 0;
    box-sizing: border-box;
    text-align: center;
}

/* —— 眉标：双侧装饰线，与S13风格一致 —— */
.ts-cta__kicker {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.15em;
    color: var(--ts-accent);
    margin: 0 0 8px;
    text-transform: uppercase;
}
.ts-cta__kicker::before,
.ts-cta__kicker::after {
    content: "";
    width: 18px;
    height: 2px;
    background: var(--ts-accent);
    flex-shrink: 0;
    opacity: 0.5;
}

/* —— 主标题：字号收一档，精致大气 —— */
.ts-cta__title {
    font-size: clamp(20px, 2.8vw, 30px);
    font-weight: 800;
    color: var(--ts-primary);
    margin: 0 0 10px;
    line-height: 1.25;
    letter-spacing: -0.02em;
    text-align: center;
}

/* —— 描述：更紧凑 —— */
.ts-cta__desc {
    font-size: clamp(13px, 1.6vw, 15px);
    line-height: 1.7;
    color: var(--ts-text-soft);
    max-width: 560px;
    margin: 0 auto 20px;
    text-wrap: pretty; /* 防止孤字独行，如"开工"单挂一行 */
}

/* —— 大字电话：尺寸收一档，单层下划线装饰 —— */
.ts-cta__phone {
    display: inline-block;
    font-size: clamp(24px, 3.5vw, 36px);
    font-weight: 800;
    color: var(--ts-primary);
    letter-spacing: 0.02em;
    margin: 0 0 8px;
    transition: transform 0.2s ease, text-decoration-color 0.2s ease;
    text-decoration: underline;
    text-decoration-color: transparent;
    text-decoration-thickness: 2px;
    text-underline-offset: 6px;
}

/* —— 地址行 —— */
.ts-cta__addr {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    font-size: 14px;
    color: var(--ts-text-soft);
    line-height: 1.5;
    margin: 0 0 20px;
    font-style: normal; /* V8: 覆盖 <address> 默认斜体（GLM 评审吸收项） */
}
.ts-cta__addr svg {
    width: 16px;
    height: 16px;
    flex-shrink: 0;
    color: var(--ts-accent-dark);
}

/* —— 地址内地图唤起链接：百度地图 POI「天舜广告标识」（指向门面，非注册地址） —— */
.ts-cta__addr a.ts-cta__addr-link {
    color: #B83E00; /* R12 橙字：白底对比度约 5.9:1，达 WCAG AA */
    font-weight: 700;
    text-decoration: underline;
    text-decoration-color: var(--ts-accent);
    text-underline-offset: 2px;
}
.ts-cta__addr a.ts-cta__addr-link:hover {
    color: var(--ts-primary);
    text-decoration-color: var(--ts-primary);
}

/* —— 操作区：横向排列（桌面），更紧凑 —— */
.ts-cta__actions {
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: center;
    gap: 16px;
    flex-wrap: wrap;
}

/* —— 主按钮：现代圆角，精致尺寸 —— */
.ts-cta__btn {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 12px 28px;
    background: var(--ts-primary);
    color: #FFFFFF;
    font-size: 16px;
    font-weight: 700;
    text-decoration: none;
    border-radius: var(--ts-radius);
    transition: transform 0.2s ease, box-shadow 0.2s ease;
    box-shadow: 0 2px 8px rgba(11, 31, 58, 0.18);
}
.ts-cta__btn svg {
    width: 18px;
    height: 18px;
    flex-shrink: 0;
}

/* —— 次链接：与按钮同高对齐 —— */
.ts-cta__link {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    color: var(--ts-primary);
    font-size: 14px;
    font-weight: 600;
    text-decoration: none;
    border-bottom: 1px solid var(--ts-line);
    padding-bottom: 2px;
    transition: border-color 0.2s ease;
}
.ts-cta__link svg {
    width: 16px;
    height: 16px;
    color: currentColor;
    transition: transform 0.2s ease;
}

/* —— 底部提示 —— */
.ts-cta__hint {
    font-size: 12px;
    color: var(--ts-muted);
    line-height: 1.5;
    margin: 16px 0 0;
}

/* 指针设备：悬停 */
@media (hover: hover) {
    .ts-cta__phone:hover {
        transform: translateY(-2px);
        text-decoration-color: var(--ts-accent-dark);
    }
    .ts-cta__btn:hover {
        transform: translateY(-2px);
        box-shadow: 0 4px 16px rgba(11, 31, 58, 0.25);
    }
    .ts-cta__link:hover {
        border-color: var(--ts-accent-dark);
    }
    .ts-cta__link:hover svg {
        transform: translateX(3px);
    }
}

/* 键盘焦点 */
.ts-cta__phone:focus-visible {
    outline: 3px solid var(--ts-accent);
    outline-offset: 4px;
}
.ts-cta__btn:focus-visible {
    outline: 3px solid var(--ts-accent);
    outline-offset: 3px;
}
.ts-cta__link:focus-visible {
    outline: 3px solid var(--ts-accent);
    outline-offset: 3px;
}

/* 手机（<=767px）：垂直堆叠 */
@media (max-width: 767px) {
    .ts-cta {
        padding: 0 0 clamp(24px, 3vw, 32px);
    }
    .ts-cta__inner {
        padding: clamp(16px, 2vw, 20px) 16px 0;
    }
    .ts-cta__actions {
        flex-direction: column;
        gap: 12px;
        width: 100%;
    }
    .ts-cta__btn {
        width: 100%;
        justify-content: center;
        padding: 14px 24px;
    }
    .ts-cta__phone {
        font-size: clamp(22px, 3vw, 28px);
    }
}

/* 减少动画 */
@media (prefers-reduced-motion: reduce) {
    .ts-cta__phone,
    .ts-cta__btn,
    .ts-cta__link svg {
        transition: none;
    }
    .ts-cta__phone:hover {
        transform: none;
    }
    .ts-cta__btn:hover {
        transform: none;
    }
    .ts-cta__link:hover svg {
        transform: none;
    }
}

/* ==========================================================================
   S15 Friend Links V1.0
   ========================================================================== */
/* ===== S15 友情链接 V2.1：极简优雅 · 只保留对比度与地标修正 ===== */
.ts-friends {
    max-width: var(--ts-container);
    margin: 0 auto;
    padding: 20px 24px 24px;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: 4px 8px;
}
.ts-friends__label {
    color: var(--ts-muted);
    font-size: 12px;
    line-height: 1.5;
}
.ts-friends__sep {
    color: var(--ts-line);
    font-size: 12px;
}
.ts-friends__link {
    color: var(--ts-muted);
    font-size: 12px;
    line-height: 1.5;
    text-decoration: none;
    transition: color 0.2s ease;
}
@media (hover: hover) {
    .ts-friends__link:hover {
        color: var(--ts-accent-text);
        text-decoration: underline;
        text-underline-offset: 3px;
    }
}
.ts-friends a:focus-visible {
    outline: 2px solid var(--ts-accent);
    outline-offset: 3px;
    border-radius: 2px;
}

/* 手机：纵排 */
@media (max-width: 767px) {
    .ts-friends {
        flex-direction: column;
        gap: 6px;
        padding: 16px 20px 20px;
    }
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
    .ts-friends__link {
        transition: none;
    }
}

/* ==========================================================================
   A3 Footer V1.3
   ========================================================================== */
/* ===== A3 页脚（墨蓝深底，全站收尾）===== */
.site-footer {
    background-color: var(--ts-primary);
    padding: 0;
}
.ts-footer {
    background-color: var(--ts-primary);
    color: #FFFFFF;
    padding: clamp(48px, 6vw, 72px) 0 0;
}
.ts-footer__inner {
    max-width: var(--ts-container);
    margin: 0 auto;
    padding: 0 20px;
}

/* 导航四栏 */
.ts-footer__cols {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 32px;
    padding-bottom: 40px;
    align-items: start;
    grid-auto-rows: min-content;
}
.ts-footer__col {
    margin: 0;
    padding: 0;
    min-width: 0;
}
.ts-footer__line {
    display: block;
    width: 24px;
    height: 2px;
    background: var(--ts-accent);
    margin: 0 0 12px;
    padding: 0;
}
.ts-footer__title {
    margin: 0 0 14px;
    color: var(--ts-accent-dark);
    font-size: 15px;
    font-weight: 700;
}
.ts-footer__list {
    list-style: none;
    margin: 0;
    padding: 0;
}
.ts-footer__list li {
    margin: 0 0 8px;
}
.ts-footer__list a {
    display: inline-block;
    color: rgba(255, 255, 255, 0.72);
    font-size: 14px;
    line-height: 1.5;
    text-decoration: underline;
    text-decoration-color: rgba(255, 255, 255, 0.45);
    text-underline-offset: 3px;
    transition: color 0.2s ease, text-decoration-color 0.2s ease, padding-left 0.2s ease;
}

.ts-footer__entity-list {
    display: grid;
    grid-template-columns: auto 1fr;
    column-gap: 14px;
    row-gap: 5px;
    align-items: baseline;
    margin: 0;
    padding: 0;
    font-size: 13px;
    line-height: 1.5;
}
.ts-footer__entity-list dt {
    color: rgba(255, 255, 255, 0.5);
    font-size: 12px;
    margin: 0;
    white-space: nowrap;
}
.ts-footer__entity-list dd {
    margin: 0;
    color: rgba(255, 255, 255, 0.72);
    min-width: 0;
}
.ts-footer__entity-name {
    grid-column: 1 / -1;
    display: block;
    margin: 0 0 8px;
    color: #FFFFFF;
    font-size: 14px;
    font-weight: 700;
}
.ts-footer__entity-list dd a {
    color: var(--ts-accent-dark);
    font-weight: 700;
    text-decoration: none;
    white-space: nowrap;
    transition: color 0.2s ease;
}
@media (hover: hover) {
    .ts-footer__entity-list dd a:hover {
        color: #FFFFFF;
        text-decoration: underline;
        text-underline-offset: 3px;
    }
}

/* 版权备案条 */
.ts-footer__bar {
    border-top: 1px solid rgba(255, 255, 255, 0.12);
    padding: 20px 0;
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
    gap: 6px 20px;
}
.ts-footer__copy,
.ts-footer__legal,
.ts-footer__credit {
    margin: 0;
    color: rgba(255, 255, 255, 0.72);
    font-size: 13px;
    display: inline-flex;
    align-items: center;
    gap: 4px;
}
/* 页脚版权备案条内嵌元素（generate_copyright 输出）：与 .ts-footer__copy 同款视觉 */
.ts-footer__bar .ts-copyright,
.ts-footer__bar .ts-sep,
.ts-footer__bar .ts-beian {
    margin: 0;
    color: rgba(255, 255, 255, 0.72);
    font-size: 13px;
    line-height: 1.6;
}
.ts-footer__bar .ts-beian a {
    color: rgba(255, 255, 255, 0.72);
    text-decoration: none;
    transition: color 0.2s ease;
}
.ts-footer__bar .ts-sep {
    color: rgba(255, 255, 255, 0.45);
}
.ts-footer__legal a,
.ts-footer__credit a {
    color: rgba(255, 255, 255, 0.72);
    text-decoration: none;
    transition: color 0.2s ease;
}

/* ★ 2026-09-22 P3-1 说明（此处不改样式，只记录结论）：
   页脚独立链接原本只有 17~21px 高（备案号 139×17、地址 65×17、电话 99×20、
   页脚导航项 56×21），低于 WCAG 2.2 SC 2.5.8 的 24×24px 下限，拇指点击易误触相邻项。
   经核查，下方 @media (max-width:768px) 段内已用 inline-flex + min-height:44px 处理，
   44px 优于 24px 下限，故此处不再叠加伪元素补丁（避免重复且更难维护）。
   但那段规则只覆盖手机、没覆盖平板 —— 缺口已在下方「触屏尺寸补齐」段统一解决。 */

/* Hover（仅指针设备） */
@media (hover: hover) {
    .ts-footer__tel:hover {
        color: #FFFFFF;
        text-decoration: underline;
        text-underline-offset: 4px;
    }
    .ts-footer__list a:hover {
        color: #FFFFFF;
        text-decoration-color: #FFFFFF;
        padding-left: 6px;
    }
    .ts-footer__legal a:hover,
    .ts-footer__credit a:hover {
        color: #FFFFFF;
        text-decoration: underline;
    }
}

/* Focus（键盘导航） */
.ts-footer a:focus-visible {
    outline: 2px solid var(--ts-accent);
    outline-offset: 3px;
    border-radius: 2px;
}

/* 平板/窄桌面：四栏降为两列，避免实体信息键值对挤压 */
@media (max-width: 1200px) {
    .ts-footer__cols {
        grid-template-columns: 1fr 1fr;
        gap: 28px 24px;
    }
}

/* Mobile：单列纵向排列 */
@media (max-width: 767px) {
    .ts-footer__cols {
        grid-template-columns: 1fr;
        gap: 24px;
    }
    .ts-footer__bar {
        flex-direction: column;
        align-items: flex-start;
        gap: 6px;
    }
}

/* 页脚避让吸底拨号条 + 触控目标合规。
   断点取 768px 而非 767px：全站拨号条 .ts-dial-bar 的显示断点是 max-width:768px，
   页面专属拨号条 .tsap-dial 是 max-width:767px —— 若这里用 767，
   iPad 竖屏（正好 768）会有拨号条却没有避让，实测版权条底部与拨号条顶部 0 间隙、紧贴。
   统一到 768 后，767/768 断点切换时也不会出现高度跳变。 */
@media (max-width: 768px) {
    /* 拨号条 position:fixed;bottom:0（.tsap-dial 60px / .ts-dial-bar 52px），
       而页脚 .ts-footer 与页面主容器是兄弟节点 —— 主容器的 padding-bottom 保护不到页脚。
       实测（390x844 滚到底）：页脚 bottom=792、拨号条 top=784，版权/备案条末行被压掉约 8px。
       这里留「拨号条 60px + 12px 呼吸 + iPhone 底部安全区」，保证末行完整可见。 */
    .ts-footer {
        padding-bottom: calc(72px + env(safe-area-inset-bottom, 0px));
    }

    /* 触控目标合规：页脚链接原本只有 21px 高（14px 字号 x 1.5 行高），
       低于 WCAG 2.5.8 与 Apple HIG 的 44x44 最小可点区，单指点击易误触相邻链接。
       改为 inline-flex + min-height:44px：高度达标，宽度仍由文字决定，不改变现有排版。
       平板同为触屏，一并覆盖。 */
    .ts-footer__list a,
    .ts-footer__entity-list dd a {
        display: inline-flex;
        align-items: center;
        min-height: 44px;
    }

    /* 版权/备案条同属页脚，实测"湘ICP备2026037813号-1"125x15、"技术支持"60x15，
       同样低于 44x44，一并处理。 */
    .ts-footer__bar a,
    .ts-footer__legal a,
    .ts-footer__credit a {
        display: inline-flex;
        align-items: center;
        min-height: 44px;
    }

    /* 回到顶部按钮：GeneratePress 默认 40x40，触屏下补到 44x44。
       用 min-width/min-height 而非固定值，避免图标本身更大时被压小。 */
    .generate-back-to-top {
        min-width: 44px;
        min-height: 44px;
    }
}

/* ★ 2026-09-22 P3-1：为所有视口兜底 24px 最小点击目标（WCAG 2.2 SC 2.5.8）。
   下面只给触屏补了 44px，桌面精确指针下直读条链接仍是 17px、导航项 21px。
   按 2.5.8 的「间距豁免」粗算：导航项行距 29px > 24px 圆直径，可过关；
   但直读条换行后行间只有 23px < 24px，属临界，换个字体或字宽就会翻车。
   直接给足 24px 更稳妥，代价只是页脚每行高 3~7px，不改配色与排版结构。
   触屏设备由紧随其后的 44px 规则覆盖（位置更靠后，优先级更高）。 */
.ts-footer__list a,
.ts-footer__entity-list dd a,
.ts-footer__bar a,
.ts-footer__legal a,
.ts-footer__credit a,
.ts-footer__tel {
    display: inline-flex;
    align-items: center;
    min-height: 24px;
}

/* ★ 2026-09-22 P3-1（续）：把 44px 触控目标从「手机」扩展到「所有触屏尺寸」。
   上一段写在 @media (max-width:768px) 内，其注释声称「平板同为触屏，一并覆盖」，
   但 768px 上界覆盖不到平板 —— iPad 竖屏 820px、横屏 1180px 都在区间外，
   实测平板下页脚链接仍是 21px 高。这是注释与实现的真实不一致。
   这里改按「无悬停 / 粗指针」判定触屏，与具体宽度解耦：
   手机、平板、触屏笔记本一律生效，不随未来新增断点而失效。
   桌面精确指针不在此列：链接间距充足、可精确点击，保持既有排版不变。 */
@media (hover: none), (pointer: coarse) {
    .ts-footer__list a,
    .ts-footer__entity-list dd a,
    .ts-footer__bar a,
    .ts-footer__legal a,
    .ts-footer__credit a,
    .ts-footer__tel {
        display: inline-flex;
        align-items: center;
        min-height: 44px;
    }
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
    .ts-footer__list a,
    .ts-footer__tel,
    .ts-footer__legal a,
    .ts-footer__credit a,
    .ts-footer__entity-list a,
    .ts-footer__entity-list dd a {
        transition: none;
    }
}

/* 辅助：屏幕阅读器专用，视觉隐藏 */
.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* 强制隐藏 GeneratePress 默认版权条（与 A3 页脚版权条重复）
   用 html body footer 高特异性覆盖，不用 !important */
html body footer .site-info,
html body footer .copyright-bar,
html body footer .site-info .copyright-bar {
    display: none;
}

/* 页脚实体信息响应式断点 */
@media (max-width: 576px) {
    .ts-footer__cols {
        grid-template-columns: 1fr;
        gap: 24px;
        padding-bottom: 24px;
    }
    .ts-footer__entity-list {
        grid-template-columns: auto 1fr;
        gap: 3px 8px;
        font-size: 12px;
    }
    .ts-footer__entity-name {
        font-size: 13px;
        margin-bottom: 6px;
    }
    .ts-footer__bar {
        padding: 16px 0;
        gap: 4px 12px;
    }
    .ts-footer__copy,
    .ts-footer__legal,
    .ts-footer__credit {
        font-size: 12px;
    }
}

/* 回到顶部按钮品牌化 */
.generate-back-to-top {
    background-color: var(--ts-primary);   /* 墨蓝 */
    color: #fff;                            /* 白字 16.52:1 */
    border-radius: 10px;
    /* 覆盖父主题 GP 的 40×40，提到 48×48 满足 WCAG/Material Design ≥44px 触控建议 */
    width: 48px;
    height: 48px;
    line-height: 48px;
    font-size: 22px;
}
/* hover 效果仅限支持悬停的设备；focus 样式对所有输入方式始终生效 */
@media (hover: hover) {
    .generate-back-to-top:hover {
        background-color: var(--ts-accent-dark); /* 深橙 */
        color: var(--ts-primary);               /* 墨蓝字 */
    }
}
.generate-back-to-top:focus {
    background-color: var(--ts-accent-dark); /* 深橙 */
    color: var(--ts-primary);               /* 墨蓝字 */
}

/* 链接 hover：正文/内容区链接统一深橙字。不写成全局裸 a:hover——
   裸 a:hover 特异性 (0,1,1) 会盖掉按钮/深底链接自己的字色（如 .ts-mkt__btn、.ts-cta__btn），
   站点各组件链接的 hover 由各自组件规则负责。focus 不做全局改色：全局 a:focus 会以同等
   优先级反噬深底区（页脚/实体卡白字被压成 3.2:1 的橙字），焦点指示统一由各组件的 :focus-visible outline 承担。 */
@media (hover: hover) {
    .entry-content a:not([class]):hover {
        color: var(--ts-accent-text);
    }
}

/* 正文文字链接常驻下划线（吸收可访问性关切）：移动端无 hover，正文链接不能只靠悬停变色提示。
   后台下划线开关保持"从不"——GP 全局 .entry-content a 划线会用 0-1-1 特异性压过半数组件类，
   波及首页 GB 卡片/按钮，且需逐类补丁兜底；改由本站只给文章正文(single)的文字链接补线。
   a:not([class]) 只命中编辑器插入的裸链接：任何带 class 的组件链接(.ts-* / .gb-button / .button 等)
   自动排除，互斥不打架；中文字体下划线默认贴字底，text-underline-offset 撑开避免脏。 */
body.single .entry-content a:not([class]) {
    text-decoration: underline;
    text-decoration-color: rgba(var(--ts-accent-rgb), 0.45);
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
    transition: text-decoration-color .2s ease, color .2s ease;
}
@media (hover: hover) {
    body.single .entry-content a:not([class]):hover {
        text-decoration-color: var(--ts-accent-text);
    }
}
body.single .entry-content a:not([class]):focus-visible {
    outline: 2px solid var(--ts-accent-dark);
    outline-offset: 3px;
    border-radius: 2px;
}

/* 按钮 hover：橙 → 深橙，字色保持墨蓝（仅支持 hover 的设备） */
@media (hover: hover) {
    button:hover, .button:hover, input[type="submit"]:hover {
        background-color: var(--ts-accent-dark);
        color: var(--ts-primary);
    }
}

/* ==========================================================================
   打印（第 7 节 @media print 隐藏块之外的补充）：保留 hero 文案，
   去掉出血背景与装饰，避免深色整块耗墨和排版错位
   ========================================================================== */
@media print {
    .ts-hero { min-height: auto; overflow: visible; }
    .ts-hero::before, .ts-hero::after { display: none; }
    .ts-hero__media { display: none; }
    .ts-hero__title,
    .ts-hero__subtitle {
        color: #000;
        max-width: 100%;
    }
    .ts-hero__actions { display: none; }
    /* 实体信息卡 / 营销模块：白底浅色区段，打印时确保文字可读 */
    .ts-entity, .ts-entity__item, .ts-entity__summary { background: #fff; }
    .ts-entity__title, .ts-entity__value, .ts-entity__value--code,
    .ts-entity__summary-value, .ts-entity__scope-text, .ts-entity__serv-text,
    .ts-mkt__heading { color: #000; }
    .ts-entity__kicker, .ts-entity__desc, .ts-entity__label, .ts-entity__summary-label,
    .ts-entity__scope-label, .ts-entity__serv-label, .ts-entity__note p,
    .ts-mkt__desc { color: #444; }
    .ts-entity__grid { gap: 8px; }
    .ts-entity__item { border: 1px solid #ccc; }
    .ts-entity__meta { gap: 8px; }
    .ts-entity__scope, .ts-entity__serv { border: 1px solid #ccc; }
    .ts-entity__tel { color: #000; border-color: #444; }
    /* S14 底部转化条打印适配 */
    .ts-cta { background: #fff; padding: 16px 0; }
    .ts-cta__title, .ts-cta__phone { color: #000; }
    .ts-cta__desc, .ts-cta__addr, .ts-cta__hint { color: #444; }
    .ts-cta__addr a.ts-cta__addr-link { color: #000; text-decoration-color: #444; }
    .ts-cta__btn { background: #fff; color: #000; border: 2px solid #000; box-shadow: none; }
    .ts-cta__link { color: #000; border-color: #444; }
    /* S6 营销横幅打印修正：ghost 按钮白字白底不可见，反色为深字深边 */
    .ts-mkt__btn--ghost { color: #000; border-color: #444; }
}

/* ==========================================================================
   Navigation v7 (顶部导航终稿 v7 - 2026-08-30)
   ========================================================================== */

/* ===== 信任通栏 ===== */

.ts-topbar {
    position: relative;
    z-index: 1001;
    background: var(--ts-primary);
    border-bottom: 1px solid rgba(255, 255, 255, 0.15);
    color: rgba(255, 255, 255, 0.85);
    font-size: 13px;
    line-height: 1.4;
}

.ts-topbar__inner {
    box-sizing: border-box;
    width: 100%;
    max-width: var(--ts-container);
    min-height: 36px;
    margin: 0 auto;
    padding: 0 24px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
}

.ts-topbar__address {
    white-space: nowrap;
}

.ts-topbar__meta {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    white-space: nowrap;
}

.ts-topbar__meta > * {
    display: inline-flex;
    align-items: center;
}

.ts-topbar__meta > * + * {
    margin-left: 16px;
    padding-left: 16px;
    border-left: 1px solid rgba(255, 255, 255, 0.18);
}

/* ===== 白色主导航与吸顶 ===== */

.site-header {
    position: sticky;
    top: 0;
    z-index: 1000;
    background: rgba(255, 255, 255, 0.96);
    border-bottom: 1px solid var(--ts-line);
    box-shadow: 0 6px 22px rgba(var(--ts-primary-rgb), 0.06);
    -webkit-backdrop-filter: blur(12px);
    backdrop-filter: blur(12px);
}

.admin-bar .site-header {
    top: 32px;
}

/* ★ 2026-09-22：WP 管理条高度令牌。
   未登录 0px；登录后桌面 32px，≤782px 为 46px（WP 自带规则）。
   供定价页 pricing.css 的 --pg-sticky-top 做加法，
   避免管理员登录状态下锚点子导航与管理条/头部错位。 */
:root {
    --ts-admin-h: 0px;
}

body.admin-bar {
    --ts-admin-h: 32px;
}

@media (max-width: 782px) {
    body.admin-bar {
        --ts-admin-h: 46px;
    }
}

.site-header .inside-header {
    box-sizing: border-box;
    width: 100%;
    max-width: var(--ts-container);
    min-height: 72px;
    margin: 0 auto;
    padding: 0 24px;
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
    align-items: center;
    justify-content: space-between;
}

/* ===== Logo ===== */

.site-logo,
.site-branding {
    flex: 0 0 auto;
}

.site-logo img,
.site-header .header-image {
    display: block;
    width: auto;
    height: 56px;
    max-width: 220px;
    object-fit: contain;
}

/* LOGO 链接触控区：图片在各断点实测 126×42 / 高 56 → 窄屏下高度差 2px 不到 44×44 建议值。
   用 inline-flex + min-height 补齐，不改图片尺寸、不影响水平位置；
   页头纵向由 align-items:center 居中，多出的 2px 由页头自身高度吸收，无位移。 */
.site-logo a,
.site-branding a {
    display: inline-flex;
    align-items: center;
    min-height: 44px;
}

.site-header .site-branding {
    margin-right: 48px;
}

.site-branding .main-title {
    margin: 0;
    font-size: 21px;
    font-weight: 700;
    line-height: 1.2;
    letter-spacing: 0.01em;
}

.site-branding .main-title a {
    color: var(--ts-body);
    text-decoration: none;
}

.site-description {
    margin-top: 4px;
    color: var(--ts-muted);
    font-size: 10px;
    line-height: 1.2;
    letter-spacing: 0.2em;
    text-transform: uppercase;
}

/* ===== 菜单项基础样式 ===== */

.main-navigation,
.main-navigation .inside-navigation {
    background: transparent;
}

.main-navigation .main-nav > ul {
    display: flex;
    align-items: center;
    gap: 2px;
}

.main-navigation .main-nav > ul > li > a {
    position: relative;
    display: flex;
    align-items: center;
    padding: 0 12px;
    color: var(--ts-body);
    font-size: 15px;
    font-weight: 500;
    line-height: 72px;
    white-space: nowrap;
    transition: color 0.2s ease, background-color 0.2s ease;
}

/* ===== 悬停下划线（CTA按钮除外）===== */

.main-navigation .main-nav > ul > li:not(.ts-menu-call) > a::after {
    content: "";
    position: absolute;
    right: 12px;
    bottom: 16px;
    left: 12px;
    height: 2px;
    background: var(--ts-accent);
    border-radius: 2px;
    transform: scaleX(0);
    transform-origin: center;
    transition: transform 0.2s ease;
}

.main-navigation .main-nav > ul > li:not(.ts-menu-call):hover > a,
.main-navigation .main-nav > ul > li:not(.ts-menu-call):focus-within > a {
    color: var(--ts-primary);
    background: transparent;
}

/* 当前页：墨蓝粗体+底线常驻（橙字#E0631A压白3.52:1不过AA，改用字重区分三态） */
.main-navigation .main-nav > ul > li.current-menu-item > a,
.main-navigation .main-nav > ul > li.current-menu-ancestor > a {
    color: var(--ts-primary);
    font-weight: 700;
    background: transparent;
}

.main-navigation .main-nav > ul > li:not(.ts-menu-call):hover > a::after,
.main-navigation .main-nav > ul > li:not(.ts-menu-call):focus-within > a::after,
.main-navigation .main-nav > ul > li.current-menu-item > a::after,
.main-navigation .main-nav > ul > li.current-menu-ancestor > a::after {
    transform: scaleX(1);
}

/* ===== 下拉菜单 ===== */

.main-navigation .main-nav > ul > li > ul.sub-menu {
    top: 100%;
}

.main-navigation .main-nav ul ul {
    box-sizing: border-box;
    width: 230px;
    padding: 9px;
    background: var(--ts-pure);
    border: 1px solid var(--ts-line);
    border-radius: 12px;
    overflow: hidden;
    box-shadow: 0 18px 45px rgba(var(--ts-primary-rgb), 0.13);
}

.main-navigation .main-nav ul ul li a {
    padding: 10px 12px;
    color: var(--ts-body);
    background: transparent;
    border-radius: 8px;
    font-size: 14px;
    font-weight: 500;
    line-height: 1.45;
    transition: color 0.18s ease, background-color 0.18s ease;
}

.main-navigation .main-nav ul ul li:hover > a,
.main-navigation .main-nav ul ul li:focus-within > a,
.main-navigation .main-nav ul ul li.current-menu-item > a {
    color: var(--ts-primary);
    background: #FFF3ED;
}

/* ===== 电话CTA按钮 ===== */

.main-navigation .main-nav > ul > li.ts-menu-call > a {
    justify-content: center;
    min-width: 94px;
    margin-left: 8px;
    padding: 0 18px;
    color: var(--ts-primary);
    background: var(--ts-accent);
    border-radius: 8px;
    box-shadow: 0 7px 18px rgba(var(--ts-accent-rgb), 0.22);
    font-weight: 600;
    line-height: 44px;
    transition: background-color 0.2s ease, transform 0.2s ease;
}

.main-navigation .main-nav > ul > li.ts-menu-call:hover > a,
.main-navigation .main-nav > ul > li.ts-menu-call:focus-within > a {
    color: var(--ts-primary);
    background: var(--ts-accent-dark);
    transform: translateY(-1px);
}

/* ===== 键盘焦点 ===== */

.main-navigation a:focus-visible {
    outline: 3px solid #E0631A;
    outline-offset: 3px;
}

/* ===== 中等屏幕压缩（769px - 1180px）===== */

@media (min-width: 769px) and (max-width: 1180px) {

    .site-header .inside-header {
        padding-right: 16px;
        padding-left: 16px;
    }

    .site-logo img,
    .site-header .header-image {
        height: 42px;
        max-width: 180px;
    }

    .site-branding {
        margin-right: 12px;
    }

    .site-branding .main-title {
        font-size: 18px;
    }

    .main-navigation .main-nav > ul {
        gap: 0;
    }

    .main-navigation .main-nav > ul > li > a {
        padding-right: 8px;
        padding-left: 8px;
        font-size: 14px;
    }

    .main-navigation .main-nav > ul > li.ts-menu-call > a {
        min-width: auto;
        margin-left: 5px;
        padding-right: 12px;
        padding-left: 12px;
    }
}

/* ===== 窄屏收紧（769px - 880px）===== */

@media (min-width: 769px) and (max-width: 880px) {

    .site-logo img,
    .site-header .header-image {
        height: 36px;
        max-width: 140px;
    }

    .site-branding {
        margin-right: 8px;
    }

    .main-navigation .main-nav > ul > li > a {
        padding-right: 6px;
        padding-left: 6px;
        font-size: 13px;
    }

    .main-navigation .main-nav > ul > li.ts-menu-call > a {
        margin-left: 4px;
        padding-right: 10px;
        padding-left: 10px;
    }

    .ts-topbar__credit {
        display: none;
    }
}

/* ===== 手机端（768px以下）===== */

@media (max-width: 768px) {

    .admin-bar .site-header {
        top: 46px;
    }

    /* 通栏缩小不隐藏（实体信息以页脚与结构化数据为准） */

    .ts-topbar__inner {
        min-height: 32px;
        padding-right: 14px;
        padding-left: 14px;
        justify-content: center;
        font-size: 12px;
    }

    .ts-topbar__address,
    .ts-topbar__credit {
        display: none;
    }

    .ts-topbar__meta > * + * {
        margin-left: 12px;
        padding-left: 12px;
    }

    /* 头部 */

    .site-header .inside-header {
        min-height: 66px;
        padding: 10px 16px;
        flex-direction: row;
        flex-wrap: nowrap;
        text-align: left;
    }

    .site-logo img,
    .site-header .header-image {
        height: 42px;
        max-width: 180px;
    }

    .site-branding {
        margin-right: 12px;
    }

    .site-branding .main-title {
        font-size: 18px;
    }

    .site-description {
        display: none;
    }

    .nav-float-right #site-navigation,
    .nav-float-right .main-navigation {
        margin-left: auto;
    }

    /* 菜单按钮 */

    #site-navigation .menu-toggle {
        display: flex;
        align-items: center;
        justify-content: center;
        min-width: 46px;
        min-height: 44px;
        padding: 0 11px;
        color: var(--ts-body);
        background: var(--ts-pure);
        border: 1px solid var(--ts-line);
        border-radius: 8px;
        font-size: 14px;
        font-weight: 600;
        line-height: 1;
    }

    #site-navigation .menu-toggle:hover,
    #site-navigation .menu-toggle:focus {
        color: var(--ts-primary);
        background: #FFF3ED;
    }

    /* 菜单展开层 */

    #site-navigation .main-nav {
        position: absolute;
        top: 100%;
        right: 0;
        left: 0;
        display: none;
        max-height: calc(100dvh - 162px);
        overflow-y: auto;
        overscroll-behavior: contain;
        padding: 10px 16px 18px;
        background: var(--ts-pure);
        border-top: 1px solid var(--ts-line);
        box-shadow: 0 18px 35px rgba(var(--ts-primary-rgb), 0.12);
    }

    #site-navigation.toggled .main-nav {
        display: block;
    }

    .main-navigation .main-nav > ul {
        display: block;
    }

    .main-navigation .main-nav > ul > li > a {
        min-height: 48px;
        padding: 0 12px;
        color: var(--ts-body);
        border-radius: 8px;
        font-size: 15px;
        font-weight: 600;
        line-height: 48px;
    }

    /* 移动端隐藏下划线动画 */

    .main-navigation .main-nav > ul > li:not(.ts-menu-call) > a::after {
        display: none;
    }

    /* 二级菜单变缩进列表 */

    .main-navigation .main-nav ul ul {
        position: relative;
        top: auto;
        left: auto;
        float: none;
        width: 100%;
        margin: 2px 0 6px;
        padding: 4px 0 4px 14px;
        background: var(--ts-surface);
        border: 0;
        border-radius: 9px;
        box-shadow: none;
    }

    .main-navigation .main-nav ul ul li a {
        padding: 10px 12px;
        font-size: 14px;
        line-height: 1.4;
    }

    /* 移动端CTA隐藏（底部拨号条已覆盖功能） */

    .main-navigation .main-nav > ul > li.ts-menu-call {
        display: none;
    }

    .main-navigation .main-nav > ul > li.ts-menu-call:hover > a,
    .main-navigation .main-nav > ul > li.ts-menu-call:focus-within > a {
        color: var(--ts-primary);
        background: var(--ts-accent-dark);
    }

    /* 给底部拨号条留空间 */

    body {
        padding-bottom: 52px;
    }

    /* ★ 2026-09-21：手机端汉堡按钮靠右（之前挨 logo 左侧空荡 163~217px） */
    /* 触发词：把汉堡按钮移到页面右侧 */
    /* 关键：把 #site-navigation 抽出 flex 流（position:absolute），避免菜单展开时
       inside-navigation 撑高 inside-header 触发 +26px CLS（用户点汉堡导致整页跳动） */
    .site-header .inside-header {
        position: relative;
    }
    .has-inline-mobile-toggle #site-navigation {
        position: absolute;
        left: 0;
        right: 0;
        top: 100%;
        flex: 0 0 auto;
        width: auto;
    }
    #mobile-menu-control-wrapper {
        margin-left: auto;
    }
}

/* ★ 2026-09-21 P2：平板改用汉堡菜单（与 P1 的 nav 抽离模式一致） */
/* 触发词：平板用汉堡菜单（修复头部从 134~162 px 折行回到 72 px 单行） */
/* ★★ 2026-09-22 修订：上界 1024 → 1239。
   原 769~1024 只覆盖了 iPad，实测桌面导航在更宽的区间**仍会折行**（非单调）：
   · 1100~1120px：header 135px（2 行）  ← 1025 起还原默认 15px 字号 / 12px padding 后装不下
   · 1130~1180px：header 73px（1 行）  ← 本文件下方 768~1180 的「紧凑菜单」规则救回来了
   · 1181~1230px：header 135px（2 行）  ← 紧凑菜单规则失效，默认字号又装不下 ← **原 1024 上界漏掉的区间**
   · 1240px 起：header 73px（1 行）稳定
   逐 10px 扫描 1100~1300 后确认：安全断点 = **≥1240**，故上界改为 1239。 */
@media (min-width: 769px) and (max-width: 1239px) {
    .site-header .inside-header {
        position: relative !important;
    }
    .has-inline-mobile-toggle #site-navigation {
        position: absolute !important;
        left: 0 !important;
        right: 0 !important;
        top: 100% !important;
        flex: 0 0 auto !important;
        width: auto !important;
    }
    #mobile-menu-control-wrapper {
        display: flex !important;
        margin-left: auto !important;
    }
    /* ★ 2026-09-22 补：本区间只写了 display:flex，按钮其余样式回落到 GP 默认
       —— 实测 55x15px、无边框无背景（手机端 ≤768 有 min-height:44px + 边框圆角）。
       原因：GP 默认 .menu-toggle 靠 line-height:60px 撑高，改为 flex 后 line-height
       不再决定盒高，高度塌成内容高度（图标 15px）。平板是触屏，必须补回触控尺寸
       与按钮外观，与手机端保持一致。 */
    #mobile-menu-control-wrapper .menu-toggle {
        display: flex !important;
        align-items: center !important;
        justify-content: center !important;
        min-width: 46px !important;
        min-height: 44px !important;
        padding: 0 11px !important;
        color: var(--ts-body) !important;
        background: var(--ts-pure) !important;
        border: 1px solid var(--ts-line) !important;
        border-radius: 8px !important;
        font-size: 14px !important;
        font-weight: 600 !important;
        line-height: 1 !important;
    }
    #site-navigation.toggled .main-nav {
        display: block !important;
        position: absolute !important;
        left: 0 !important;
        right: 0 !important;
        top: 100% !important;
        max-height: calc(100vh - 200px) !important;
        overflow-y: auto !important;
        padding: 10px 16px 18px !important;
        background: #fff !important;
        z-index: 999 !important;
        box-shadow: 0 18px 35px rgba(0, 0, 0, 0.12) !important;
    }
    #site-navigation:not(.toggled) .main-nav {
        display: none !important;
    }
}

/* ===== 手机拨号条 ===== */

.ts-dial-bar {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    z-index: 9998;
    display: none;
    padding-bottom: env(safe-area-inset-bottom);
}

.ts-dial-bar a {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 52px;
    background: var(--ts-accent);
    color: var(--ts-primary);
    font-size: 16px;
    font-weight: 600;
    text-decoration: none;
    transition: background-color 0.2s ease;
}

.ts-dial-bar a:focus-visible {
    background: var(--ts-accent-dark);
}

@media (max-width: 768px) {
    .ts-dial-bar {
        display: block;
    }
    /* 「回到顶部」按钮避开通栏电话条。
       电话条高 52px、贴底、z-index:9998；按钮原 bottom:30px、高 40px，
       两者垂直重叠 22px 且层级远低于电话条，导致按钮下半段被盖住、点击落到拨号。
       这里把按钮抬到电话条之上（52px + 12px 间距 + iPhone 底部安全区），
       并把 z-index 提到电话条之上。 */
    .generate-back-to-top{
        bottom: calc(64px + env(safe-area-inset-bottom, 0px));
        z-index: 9999;
    }
}

/* ===== 导航间距调整：增大gap填满LOGO右侧空白 ===== */

.main-navigation .main-nav > ul {
    gap: 18px;
}

.main-navigation .main-nav > ul > li > a {
    padding: 0 14px;
}

/* 下划线动画位置同步增大后的padding */
.main-navigation .main-nav > ul > li:not(.ts-menu-call) > a::after {
    right: 14px;
    left: 14px;
}

/* 导航右侧信任徽标：填满空白+传递信任 */
.ts-nav-badge {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    margin-left: 10px;
    padding: 4px 12px;
    font-size: 13px;
    font-weight: 500;
    color: var(--ts-body);
    background: var(--ts-surface);
    border: 1px solid var(--ts-line);
    border-radius: 20px;
    white-space: nowrap;
}

.ts-nav-badge::before {
    content: "✓";
    font-size: 11px;
    color: var(--ts-accent);
}

@media (max-width: 991px) {
    .ts-nav-badge {
        display: none;
    }
}

/* ==========================================================================
   S2 关键事实条 · 注册地址格「号」字折行修正（2026-09-12）
   --------------------------------------------------------------------------
   现象：「益阳市赫山区团圆北路8号」最后的「号」被挤到第二行。
   根因（真实字体度量，微软雅黑 Bold）：
     · 4 列布局下每列 299.5px，该格左右内边距 28+28=56px → 文本可用 243.5px
     · 22px 字号下这段 12 字符文本需 258.6px → 差 15px（不到一个汉字宽）
     · 浏览器在汉字之间可任意断行，于是最后 1 字掉行；
       第一行末尾余下约 12px，放不下 22px 的汉字 —— 这就是「第一排看着还有空」的由来
   处理：只调这一格 —— 内边距 28→24px、字号改用 clamp 收一档（长值用小一号字是排版常规），
         其余三格与整体版式一律不动。
   实测（修正后 文本宽 vs 可用宽）：
     1920 / 1440 / 1366 / 1280px 视口 → 20.0px，232.0px vs 251.5px  ✓ 余 19.5px
     1200px 视口 → 18.0px，209.5px vs 231.5px  ✓ 余 22.0px
     1100px 视口 → 16.5px，192.0px vs 206.5px  ✓ 余 14.5px
     1025px 视口 → 15.5px，180.4px vs 187.8px  ✓ 余  7.4px
   作用范围：仅 ≥1025px 的 4 列布局。≤1024px 为 2 列，列宽翻倍，本来就不折行。
   ========================================================================== */
/* =========================================================================
   ★ 2026-09-23 修订（风险 8）：S2 由「工商事实条」改为「信任条」后的字号适配
   -------------------------------------------------------------------------
   背景：原规则只针对 .ts-facts__cell--addr（注册地址那一格的长文本）做单格缩字。
        风险 8 把 S2 改成信任条后，四格的值全部变成长句（如「2022年兰溪镇政府广告
        服务中标」「报价确认后开工，不加价；保修写进单据」），旧的「只缩一格」策略
        已不适用，且 --addr 这个类名在 HTML 中已不存在，留着就是死规则。
   处理：把缩字范围从「单格」推广到「四格的值」，阈值同步下调一档。
        桌面 4 列下每列约 300px、可用文本宽约 244px，长句必然折行 2 行；
        缩到 clamp(15.5px, 1.5vw, 19px) 后每行可容纳更多字，整体仍是 2 行，
        视觉上与其他区块的大字标题层级关系不变。
   作用范围：仅 ≥1025px 的 4 列布局；≤1024px 为 2 列，列宽翻倍，无需缩字。
   ========================================================================== */
@media (min-width: 1025px) {
    .ts-facts__value {
        font-size: clamp(15.5px, 1.5vw, 19px);
        letter-spacing: 0;
    }
}


/* =========================================================================
   ★ 2026-09-22 多视口体检：手机端过小字号修正（≤768 视口）
   -------------------------------------------------------------------------
   问题：首页「工商信息」区的字段名（统一社会信用代码 / 法定代表人 / 注册资本 /
        成立日期 / 注册地址 / 联系电话 / 营业时间）与 主营业务 / 服务区域 / 经营范围
        在全部 9 档视口下均只有 10px。桌面端配合紧凑排版尚可接受，但在 360~414
        手机视口下，10px 中文已低于 CJK 可读下限（建议 ≥12px）。
   方案：仅在 ≤768 视口提升到 12px，桌面端保持原设计（遵循「用户偏好紧凑」）。
        同时把 letter-spacing 从 0.08em 收到 0.04em，抵消放大带来的额外宽度，
        避免字段名在窄栅格内折行。
   影响：仅首页实体信息卡；不改结构、不改元素数量。
   ========================================================================= */
@media (max-width: 768px) {
    .ts-entity__label,
    .ts-entity__summary-label,
    .ts-entity__serv-label,
    .ts-entity__scope-label {
        font-size: 12px;
        letter-spacing: 0.04em;
    }
}


/* =========================================================================
   ★ 2026-09-22 多视口体检（续）：手机端 12px 可读底线（≤480 视口）
   -------------------------------------------------------------------------
   问题：360 / 390 / 414 手机视口实测，全站共约 100 处文字字号低于 12px
        （11px 与 11.5px 两档），分布如下：
          · FAQ 序号           .ts-fq-no           11px    29 处（全站最多）
          · 案例 / 作品标签     .ts-cases-item__tag 11px    11 处
                              .ts-case__tag       11px     6 处
                              .ts-ad-work__tag    11px     6 处
                              .tsab-work__cat     11.5px   9 处
                              .ts-cx-region-tag   11.5px   7 处
                              .ts-cx-step-tag     10.5px   4 处
          · 眉题 / kicker      .tssg-eyebrow       11.5px   9 处
                              .ts-entity__kicker  11px
                              .ts-cta__kicker     11px
                              .tsab-founder__now-tag 11px
          · 顶栏               .ts-topbar__company / __since  11.5px
          · 地图点位 / 服务区域 .ts-cx-dot > span   11px     6 处
                              .tssg-area__item > span 11.5px 7 处
          · 表格 / 图注        table td            11.5px
                              figcaption          11.5px
                              .tssg-case__way     11.5px   5 处
                              b > em（数字单位）   11px     3 处
        CJK 汉字笔画密度远高于拉丁字母，11px 在 360 宽视口下已低于可读下限；
        且 iOS Safari 会对过小文本触发最小字号强制放大，反而打乱既有行高。
   方案：仅在 ≤480 视口统一抬到 12px，并把 letter-spacing 收到 0.02em
        抵消放大带来的额外宽度（与上方 4846 行「手机端过小字号修正」同一手法）。
        桌面端（≥481px）保持原设计不动，不影响既有紧凑排版。
   验证：360 / 390 / 414 三档 × 8 页 A/B 实测（逐元素 Range.getClientRects()
        行数前后 diff）：
         · 小字 100 → 0
         · 新增折行 0 处
         · 横向溢出 0 处、无横向滚动
         · 文档高度：价格页 −215 ~ −300px（更紧凑），联系页 +12px，其余 ±30px 内
   注意：① 必须置于本文件末尾——上方 4857 行已有同断点（≤768）的字号修正块，
          同特异性下「后写的赢」，放在前面会被覆盖。
        ② 页面专属 CSS（faq.css / signage.css / pricing.css …）在 style.css
          之后加载，同特异性会反压本块，故此处用 !important 锁定。
   ========================================================================= */
@media (max-width: 480px) {
    .ts-fq-no,
    .ts-cases-item__tag,
    .tsab-work__cat,
    .tssg-eyebrow,
    .ts-topbar__company,
    .ts-topbar__since,
    .ts-cx-region-tag,
    .ts-case__tag,
    .ts-ad-work__tag,
    .ts-cx-step-tag,
    .ts-entity__kicker,
    .ts-cta__kicker,
    .tsab-founder__now-tag,
    .ts-cx-dot > span,
    .tssg-area__item > span,
    .ts-entity__note p,
    .ts-kb__excerpt,
    .tssg-case__way {
        font-size: 12px !important;
        letter-spacing: 0.02em !important;
    }

    table td,
    figcaption,
    .ts-entity__note em,
    b > em {
        font-size: 12px !important;
    }
}

/* ==========================================================================
   平板/小笔记本（769~1239px）头部改汉堡菜单后，补回一键拨号入口
   --------------------------------------------------------------------------
   背景：本文件上方「P2：平板改用汉堡菜单」区块把 769~1239px 的桌面导航收进
   汉堡菜单（#site-navigation:not(.toggled) .main-nav { display:none }），
   头部高度由 135~163px 回到 73px —— 折行问题已解决，但该区间同时失去了
   「始终可见的电话入口」：
     · 菜单 CTA（.ts-menu-call）随 .main-nav 一起被隐藏；
     · 底部拨号条 .ts-dial-bar 的显示断点是 max-width:768px，769 起不显示。
   实测（注入本文件 P2 区块后，/cases/ 与 /contact/）：
     769 / 834 / 900 / 1024 / 1100 / 1239px → 头部可见电话入口 1 → 0
   处理：把拨号条的显示断点同样抬到 1239px，并配套三件事
     ① body 留出 52px 底部空间（与 ≤768 的既有规则一致）
     ② .ts-footer 再留 72px + 安全区 —— 页脚与页面主容器是兄弟节点，
        body 的 padding-bottom 保护不到页脚（≤768 已用同一手法修过）
     ③ 「回到顶部」抬到拨号条之上并提高 z-index
   实测（注入后滚到页面底部，/cases/ 与 /contact/）：
     769 / 834 / 1024 / 1239px → 拨号条显示，页脚 padding-bottom 72px，
       页脚盒 bottom=848 = 拨号条 top=848，末行内容 bottom=753，重叠 0px ✓
     1240 / 1440px → 一切不变（拨号条隐藏、页脚 padding 0）✓
     390 / 768px   → 一切不变（本区块断点不覆盖）✓
   注意：① 本块仍建议置于文件末尾，但已对本块全部声明加 !important，
        因此即便后续有人在文件末尾再追加新块，也不会把本块反压失效
        （此前已被追加内容挤出末尾两次，故加固）。
        ② 加 !important 前已核查：全部页面专属 CSS 均未设置 .ts-footer /
        body 的 padding-bottom、也未设置 .ts-dial-bar 的 display，不会互相打架。
   ========================================================================== */
@media (min-width: 769px) and (max-width: 1239px) {
    .ts-dial-bar {
        display: block !important;
    }

    body {
        padding-bottom: 52px !important;
    }

    .ts-footer {
        padding-bottom: calc(72px + env(safe-area-inset-bottom, 0px)) !important;
    }

    .generate-back-to-top {
        bottom: calc(64px + env(safe-area-inset-bottom, 0px)) !important;
        z-index: 9999 !important;
    }
}

/* ==========================================================================
   ★ 2026-09-22 多视口体检：补齐未达 WCAG 2.5.8 的触控热区
   --------------------------------------------------------------------------
   问题：WCAG 2.5.8（Target Size Minimum, AA）要求可点目标不小于 24×24 CSS px。
        全站 12 页 × 5 视口（360/390/768/820/1440）实测，下列链接任一维 < 24px：
          · .ts-facts__verify        56×22    首页「公开可查」
          · .ts-friends__link        156×18   首页友情链接
          · .ts-entity__tel          88×20    首页工商信息电话
          · .ts-cta__addr-link       178×21   首页地址
          · .ts-cases-link           60×21    案例页文内链接
          · .tsap-q__panel-in a      99×20 / 30×20  广告制作 FAQ「电话」
          · .tsap-price__note a      88×19    广告制作价格注脚
          · .ts-hub__faqMore a       154×20   分类页「看更多」
          · nav.ts-crumb a           26×22.1  活动策划面包屑
          · nav.ts-cases-crumb a     26×22.1  案例页面包屑
          · nav.ts-hub__crumbs a     26×17    分类页面包屑
          · nav.ts-priv-footbar__links a  48×23.1  隐私政策页脚导航
          · .ts-priv-sidenav__foot a 77×15    隐私政策侧栏电话
          · .ts-priv-channel a       77×16    隐私政策联系渠道
        手指在这些 15~23px 高的目标上极易点错，属「间距异常」。
   刻意排除（不是缺陷，说明理由）：
     · h3.ts-svc-card__title a（112×19）—— 是拉伸链接，实测 ::after 覆盖卡片
       面积 0.978、九宫格 elementFromPoint 命中 9/9，实际热区是整个
       163.5×201.7 的卡片，不是 19px；
     · .screen-reader-text / .skip-link —— 1×1 是有意裁剪的无障碍跳转链接；
     · 段落正文里的行内链接（如 .ts-cases-head__desc a、aside.ts-dirs-note p a、
       .tsap-stats__credit a）—— WCAG 2.5.8 对「句子内的行内链接」有明确豁免，
       且其尺寸受非目标文本的行高约束，强行放大会破坏正文排版。
   方案：统一补 5px 上下内边距。块级元素高度随之 +10px（18→28、15→25…），
        全部 ≥ 24px；行内元素上下内边距不参与行高计算，不引起重排，
        但会扩大可点边框盒，正是所需效果。用 padding-top/bottom 而非
        padding-block，避开老旧安卓内核（UC / QQ 浏览器）对逻辑属性支持不全。
   不限断点（初版曾限 ≤860px，后实测桌面 21 处仍不达标）：WCAG 2.5.8 对
        桌面鼠标用户同样适用，且这些元素在桌面也是 21~23px，故全视口生效。
        行内元素不受影响（不参与行高）；仅面包屑等块级元素在各视口 +10px。
   注意：本块用 !important，与上方拨号条区块同手法 —— 页面专属 CSS 在
        style.css 之后加载，同特异性会反压本块，故锁定。
   ========================================================================== */
.ts-facts__verify,
.ts-friends__link,
.ts-entity__tel,
.ts-cta__addr-link,
.ts-cases-link,
.ts-hub__faqMore a,
.tsap-q__panel-in a,
.tsap-price__note a,
nav.ts-crumb a,
nav.ts-cases-crumb a,
nav.ts-hub__crumbs a,
nav.ts-priv-footbar__links a,
.ts-priv-sidenav__foot a,
.ts-priv-channel a {
    padding-top: 5px !important;
    padding-bottom: 5px !important;
}

/* =========================================================================
   ★ 2026-09-22 多视口体检（续二）：平板 / 桌面 12px 可读底线（≥481 视口）
   -------------------------------------------------------------------------
   问题：768 / 1024 / 1280 / 1440 / 1920 视口实测，仍有 15 处文字低至
        10 ~ 10.5px（低于 11px）：
          · 首页工商信息字段名 dt.ts-entity__label              10px    7 处
          · 首页 p.ts-entity__summary-label / __serv-label /
            __scope-label（主营业务 / 服务区域 / 经营范围）      10px    3 处
          · 联系流程步骤 span.ts-cx-step-tag                    10.5px  4 处
          · 联系地图脚注 p.ts-cx-map-cap                        10.5px  1 处
        另有 11 ~ 11.5px 一档（.ts-fq-no / .ts-cases-item__tag /
        .tsab-work__cat / .tssg-eyebrow / .ts-topbar__company /
        .ts-topbar__since / .ts-cx-region-tag / .ts-case__tag /
        .ts-ad-work__tag / .ts-entity__kicker / .ts-cta__kicker /
        .tsab-founder__now-tag / .ts-cx-dot > span /
        .tssg-area__item > span / .tssg-case__way / .ts-event__index 等）
        在平板与桌面一并对齐到 12px。
   方案：与上方「≤480 手机端 12px 底线」完全同手法（font-size:12px +
        letter-spacing:0.02em 抵消放大带来的额外宽度）。断点取
        min-width:481px，与 ≤480 那块互补，两者不重叠、不冲突。
   刻意排除项（不修，说明理由）：
        · table td / th —— 门头招牌价格表在 768 视口为 11.5px（12 处）。
          实测抬到 12px 会让「底板 + 发光字组合」「企业 · 校园 · 社区」
          「详见六项报价拆解」等单元格折行（1024 报 2 处、1280 / 1440 /
          1920 各 1 处）。表格单元格换行的代价 > 0.5px 字号收益，
          故维持 11.5px，作为已知取舍保留。
   验证：768 / 1024 / 1280 / 1440 / 1920 × 8 页 A/B 实测
        （逐元素 Range.getClientRects() 行数前后 diff）：
         · 小字：首页 24 → 0；门头招牌 22 → 0（768 为 37 → 12，即上表排除项）
         · 新增折行 0 处
         · 横向溢出 0 处、无横向滚动
         · 文档高度：首页 +6 ~ +9、门头招牌 +7 ~ +8、价格页 ±0，其余 ±5 内
   注意：① 与上方两块一样必须置于本文件末尾（同特异性「后写的赢」）；
        ② 页面专属 CSS 在 style.css 之后加载会反压本块，故用 !important。
   ========================================================================= */
@media (min-width: 481px) {
    .ts-fq-no,
    .ts-cases-item__tag,
    .tsab-work__cat,
    .tssg-eyebrow,
    .ts-topbar__company,
    .ts-topbar__since,
    .ts-cx-region-tag,
    .ts-case__tag,
    .ts-ad-work__tag,
    .ts-cx-step-tag,
    .ts-entity__kicker,
    .ts-cta__kicker,
    .tsab-founder__now-tag,
    .ts-cx-dot > span,
    .tssg-area__item > span,
    .ts-entity__note p,
    .ts-kb__excerpt,
    .tssg-case__way,
    .ts-entity__label,
    .ts-entity__summary-label,
    .ts-entity__serv-label,
    .ts-entity__scope-label,
    .ts-cx-map-cap,
    .ts-event__index {
        font-size: 12px !important;
        letter-spacing: 0.02em !important;
    }

    figcaption,
    .ts-entity__note em,
    b > em {
        font-size: 12px !important;
    }
}

/* =============================================================
   14. 首屏外区块跳过首次布局（2026-09-22 终检补：实测 LCP 优化 316ms）
   实测：首页 798 个 DOM 元素中 626 个在首屏外（占 78%），首次布局 735ms。
   cv:auto 让浏览器跳过这些区块的首次布局，滚动到时再布局。
   contain-intrinsic-size 用桌面实测值（_hp_audit_20260922/_cv_test.py 桌面 1440 实测），
   移动端用 @media 覆盖（手机布局不同，避免滚动条跳动）。
   兼容性：Chrome 90+、Safari 18+、Firefox 125+（老浏览器不生效 = 退回原布局，无害）。
   对 SEO 安全：内容仍在 DOM 中，爬虫读得到；不会影响 Ctrl+F（Chromium 兼容）。
   注意：本规则不应用在 .ts-hero / .ts-facts（首屏内，本身就需要立即布局）。
   ★ 2026-09-23 新增的 .ts-flow（S7b 服务流程）与 .ts-price（S7c 价格速查表）
     **暂未纳入**下列 cv:auto 列表，原因：contain-intrinsic-size 必须填实测高度，
     而这两个区块是当天新增、尚无桌面实测值；无实测值就填估算值，一旦偏差大会
     把桌面 CLS 从 0.0052 往上推。二者在页面位置靠后、DOM 元素合计约 80 个
     （占首页约 10%），不启用 cv:auto 的布局代价很小。
     后续做法：实测这两个区块的桌面高度后，按同样格式补一行即可（示例）：
       .ts-flow  { contain-intrinsic-size: auto 560px; }
       .ts-price { contain-intrinsic-size: auto 760px; }
   ============================================================= */
/* 只在大屏（桌面/平板横屏）启用：
   实测 2026-09-22（_cv_scroll_cls.py 滚动 CLS 对照）——
     桌面：LCP 1140→824ms（-316ms），517ms 长任务阻塞清零，
           CLS 0 → 0.0052（微增，远优于 0.1 合格线）→ 净收益明显，启用。
     手机：LCP 784→784ms（**无收益**），CLS 0.0596 → 0.0788（**恶化 32%**）
           → 净收益为负，**移动端不启用**。
   所以下面用 min-width 包裹，只对大屏生效。 */
@media (min-width: 769px) {
.ts-s3, .ts-s4, .ts-case, .ts-event, .ts-kb, .ts-faq, .ts-entity {
    content-visibility: auto;
    contain-intrinsic-size: auto 800px;   /* 回退默认值，浏览器后续会用真实高度 */
}
.ts-s3   { contain-intrinsic-size: auto 981px;  }
.ts-s4   { contain-intrinsic-size: auto 1101px; }
.ts-case { contain-intrinsic-size: auto 784px;  }
.ts-event{ contain-intrinsic-size: auto 392px;  }
.ts-kb   { contain-intrinsic-size: auto 859px;  }
.ts-faq  { contain-intrinsic-size: auto 676px;  }
.ts-entity{contain-intrinsic-size: auto 827px;  }
}

/* 移动端不再需要覆盖高度（上面已用 min-width 限定大屏）；
   保留此注释说明曾经的移动端实测值（手机 390 dpr3），便于日后复查：
   .ts-s3 1261 / .ts-s4 1295 / .ts-case 1678 / .ts-event 1427 /
   .ts-kb 2061 / .ts-faq 1096 / .ts-entity 1226 */

/* ===== 2026-09-22 响应式审计补丁：S3/S4 版心侧边距（V1.0） =====
   根因：.ts-s3 / .ts-s4 用 100vw + 负 margin 全宽出血，__inner 只有
   max-width:1280 没有横向 padding；视口 768-1300px（平板主区间）时
   section 自身左右 margin 仅约 8px。实测：834 视口 .ts-s3__sub x=8、
   768 视口 x=0 —— 板块文案与卡片几乎贴屏；其余板块（event/case/
   faq/kb/entity/cta 等 __inner 均带 24px padding）无此问题。
   断点取 1300px：vw>=1310 时 section 宽已 >=1280，inner 被限宽自然
   居中，无需补 padding —— 桌面端（>1300px）与手机端（<768px）零改动。 */
@media (min-width: 768px) and (max-width: 1300px) {
    .ts-s3__inner,
    .ts-s4__inner {
        padding-left: 24px;
        padding-right: 24px;
        box-sizing: border-box;
    }

    /* 工商登记卡片同步对齐 24px 版心边距（原本只靠 section 约 8px margin） */
    .ts-facts__card {
        margin-left: 24px;
        margin-right: 24px;
    }
}

/* =========================================================
   首页关键事实条：四格的值改一行显示（2026-09-24）
   ---------------------------------------------------------
   反馈：用户截图指出首页 S2 信任条四格里三条值折成两行
   （2022年兰溪镇政府广告服务中标 / 约2000㎡加工场地，可预约看车间 /
   报价确认后开工，不加价；保修写进单据），希望一行显示更好看。

   根因：≥1025px 是 4 列布局，每列 299.5px；横向内边距 24+24=48px
   → 文本可用 251.5px。而值字号 19px 下最长的 18 个全角字符需 342px，
   必然折行（这也是 2026-09-23 那轮把 22px 缩到 19px、内边距 28→24 的原因，
   但只缓解了折行的拥挤感，没有消除折行）。

   改法（仅 ≥1025px，即四列布局区间）：
     · 横向内边距 24px → 12px，文本可用宽提到 275.5px；
     · 值字号 clamp(15.5px,1.5vw,19px) → 15px，18 字需 270px ≤ 275.5px。
   值与标签的层次由「700 粗体 + 深色 primary」对「400 常规 + muted 灰」
   承担，字号拉近不影响可读性。
   ≤1024px 是 2 列 / 1 列布局，每列可用宽充足，原本就不折行，不动。
   ========================================================= */
@media (min-width:1025px){
  .ts-facts__cell{ padding:4px 12px; }
  .ts-facts__value{ font-size:15px; }
}
/* 窄桌面（1025–1365px）：列宽变小，再降一档。
   以下数字是用 Range/span 精确测量「单行渲染宽度」得到的（不是估算）：
     1440 视口：格宽 299，内边距 24 → 可用 275px；最长一条「报价确认后开工，不加价；
                保修写进单据」18 个全角字符，15px 下需 270px ≤ 275 → 一行成立。
     1280 视口：格宽 283，内边距 16 → 可用 267px；15px 需 270px 放不下，
                14px 需 252px ≤ 267 → 降一档即一行。
   故窄桌面档取 14px + 内边距 8px。（1025px 附近每列仅约 219px，
   任何可读字号都放不下这条 18 字长句，属屏幕本身太窄，不做处理。） */
@media (min-width:1025px) and (max-width:1365px){
  .ts-facts__cell{ padding:4px 8px; }
  .ts-facts__value{ font-size:14px; }
}

/* ==========================================================================
   手机端顶部条：公司名与年份左右对称（2026-09-25）
   --------------------------------------------------------------------------
   客户澄清：公司名与年份仍留在顶部条内，只是要在条内左右分开、对称排布。
   现状：≤767px 时 .ts-topbar__inner{ justify-content:center } 且 address/credit
         隐藏，故 .ts-topbar__meta 内的两段（公司名 + 年份）挤在中间。
   改法：手机端让 .ts-topbar__meta 占满整行并 justify-content:space-between，
         公司名贴左、年份贴右；同时去掉两者之间的竖线分隔（左右分开后那条
         竖线会偏在一侧，反而显乱）。
   ★ 桌面端不动：.ts-topbar__inner 仍是 address 左 / meta 右的原布局。
   ========================================================================== */
@media (max-width:767px){
  .ts-topbar__meta{
    width:100%;
    justify-content:space-between;
  }
  .ts-topbar__meta > * + *{
    margin-left:0;
    padding-left:0;
    border-left:0;
  }
}

/* ==========================================================================
   手机端顶部条：左右留白加大（2026-09-25 二修）
   --------------------------------------------------------------------------
   客户截图标注：公司名再往右移一点（标注位置约在 x=30）。
   现状：≤767px 时 .ts-topbar__inner{ padding:0 14px }，公司名贴左仅 14px，
         11~12px 的小字贴边显得局促。
   改法：手机端左右内边距 14px → 30px。
   ★ 右侧年份同步内缩：上一轮客户明确要求左右对称，只移左边会破坏对称，
     故两侧一并内缩到 30px，保持左右留白相等。
   ★ 桌面端不动（仍 24px）。
   ========================================================================== */
@media (max-width:767px){
  .ts-topbar__inner{
    padding-left:30px;
    padding-right:30px;
  }
}
/* ==========================================================================
   19. 图片纯净层（2026-10-13 老周：底图不做调暗/滤镜/叠加遮罩）
   --------------------------------------------------------------------------
   ① 取消 .ts-hero__img 的 filter: brightness(0.72)（滤镜会改变像素亮度，
      并让图片层进入独立合成层）；② 取消 .ts-hero::before 的水平渐变遮罩。
   实测（1891 视口 / v2 底图 / 文字行带）：背景中位亮度 1.4% → 2.8%，
   白字对比 12.3:1 → 11.6:1 —— 仍远高于 WCAG AA 4.5:1，无需补偿。
   回滚：整段删除即可。
   ========================================================================== */
/* ★ 2026-10-13 11:40 老周：「调暗 / 加滤镜或叠加遮罩降低明度，恢复到最开始的默认样式」——
   以下两条「纯净层」规则已撤销，首页回到 10-12 19:33 定稿的默认观感：
     · .ts-hero__img 恢复 filter: brightness(0.72)（style.css 原生规则，第 562 行）
     · .ts-hero::before 恢复遮罩 linear-gradient(100deg, .52/.44/.30/.16)（原生规则，第 491 行起）
   底图仍为 v2（tianshun-hero-bg-signage-v2.webp，老周 10-12 19:21 指定）——只调参数、不换图。
   其余四页（cases / event / about / contact）的纯净层保持不变。 */

/* ==========================================================================
   20. 首页 hero 窄屏取景修正（2026-10-13）
   --------------------------------------------------------------------------
   取消调暗/遮罩后，窄屏（≤1024）文字区背景过亮（实测中位 25.0%、白字 3.5:1）。
   原因是 cover 在 0.42:1 的窄容器里只显示原图约 17% 宽度，而原
   object-position: center right 取的是原图最亮段（x83%~100%，中位 15%~22%）。
   改为取原图最暗段（x0%~17%，中位 0.7%~1.2%）→ 白字对比回到 ~15:1。
   ★ 纯 CSS 取景，图片文件未做任何处理；桌面端容器 2.5:1 与图同比例、无裁切，不受影响。
   回滚：删除本段即可。
   ========================================================================== */
@media (max-width: 1024px){
  .ts-hero__img { object-position: 15% center; }
}
/* ==========================================================================
   21. hero 内容紧凑化（2026-10-13 老周：首页高度与其他四页不一致）
   --------------------------------------------------------------------------
   问题：1280~1775 视口下首页 hero 内容 517px（h1 120 + 导语 74 + 副标题 72
         + 按钮 59 + 两条徽章 84 + 块间距 120）叠加 96px×2 的上下内边距 = 709px，
         把 2.5:1 容器顶高（1440 视口本应 570px），与其余四页差 139px。
   处理：① 上下内边距 96 → 18~26px；② 标题字号上限 46 → 40px、行高 1.3 → 1.22；
         ③ 各块下间距 24/16/28/40 → 16/10/16/20；④ 取消 ≤1180 的 padding-top:72px
         并恢复垂直居中（原为 flex-start）。文字上移、画面主体留白更多。
   实测（无头 Chrome，偏差 = 实际高度 − 容器宽/2.5）：
         1280→506(0) 1366→540(0) 1440→570(0) 1536→608(0) 1680→666(0) 1891→750(0)
   回滚：删除本段即可。
   ========================================================================== */
.ts-hero { padding-top: 0; padding-bottom: 0; align-items: center; }
.ts-hero__inner { padding: clamp(18px, 2vw, 26px) 48px; }
.ts-hero__title { font-size: clamp(23px, 3.3vw, 40px); line-height: 1.22; margin-bottom: 16px; }
.ts-hero__answer { margin-bottom: 10px; }
.ts-hero__subtitle { margin-bottom: 16px; }
.ts-hero__actions { margin-bottom: 20px; }
.ts-hero__trust { margin-bottom: 8px; }
/* ==========================================================================
   23. 大屏版式（≥1800px）：客户 2560×1440 / 100% 缩放反馈「文字小、空荡荡」
   --------------------------------------------------------------------------
   实测（无头 Chrome，2560 视口）：首屏 1018px，而 hero 版心只有 1280px
     → 内容横向仅占 50%；内容高 505（占 50%）→ 两侧与上下大片留白、「文字小」。
   处理：① ≥1800px 时 hero 版心 1280 → 1640px（只动 hero，不动全站其他区块）；
         ② 字号与间距改 clamp 随视口平滑放大，下限 = 原值 → 窄屏/笔记本零影响。
   实测（2560）内容占比：首页 50% → **73%**、案例 48→56%、活动 41→56%、
     关于 39→51%、联系 38→50%；内容宽占比 50% → 64%。
   高度不受影响：1440 全 570、1891 全 750、2560 全 1018（严格 = 容器宽/2.5）。
   回滚：删除本段即可。
   ========================================================================== */

@media (min-width: 1800px){
  .ts-hero__inner { max-width: 1640px; }
}
.ts-hero__title { font-size: clamp(40px, 2.42vw, 62px); line-height: 1.18; margin-bottom: clamp(16px, 1.2vw, 31px); }
.ts-hero__answer { font-size: clamp(16px, 0.82vw, 21px); line-height: 1.6; margin-bottom: clamp(10px, 0.78vw, 20px); }
.ts-hero__subtitle { font-size: clamp(15px, 0.78vw, 20px); line-height: 1.62; margin-bottom: clamp(16px, 1.33vw, 34px); }
.ts-hero__actions { margin-bottom: clamp(20px, 1.5vw, 38px); }
.ts-hero__actions .ts-btn { font-size: clamp(16px, 0.74vw, 19px); padding-top: clamp(14px, 0.7vw, 18px); padding-bottom: clamp(14px, 0.7vw, 18px); }
.ts-hero__badge { font-size: clamp(13px, 0.59vw, 15px); }


/* ==========================================================================
   24. 触控目标尺寸 44×44（2026-10-13 响应式审计跟进）
   --------------------------------------------------------------------------
   背景：上方 2026-09-22 段已按 WCAG 2.5.8（AA，24×24）为全站可点目标补 5px
        上下内边距，全部达到 ≥24px。本次响应式全面排查（5 页 × 11 视口 = 55 组合）
        复核后，按 WCAG 2.5.5 / Apple HIG 的 44×44 进一步放开下列「独立控件」：
          · nav.ts-crumb a / nav.ts-cases-crumb a  面包屑「首页」  26×29~32
          · a.ts-hero__badge--link                 首页门店导航     251×34
          · .ts-facts__verify                      首页公开可查     112×32
          · .ts-event__tel                         首页 hero 电话   138×29
          · .ts-cta__phone                         首页底部电话     146×37
          · .ts-cta__addr-link                     首页底部地址     178×31
          · .ts-cta__link                          首页底部内链     134×27
          · .ts-friends__link                      首页友情链接     156×28
          · #tsEventMain .ts-dir__cta              活动页咨询按钮   129×42
        段落正文里的行内链接属 WCAG 2.5.8 / 2.5.5 明确豁免项（受非目标文本行高
        约束，强行放大会破坏正文排版），不做处理。
   --------------------------------------------------------------------------
   ★ 只在 ≤1024px（手机 / 平板触屏）生效：
       桌面端（鼠标）不需要 44px；且把面包屑等从 ~30px 抬到 44px 会让 hero
       内容增高约 14px，破坏 2026-10-13 已统一的「五页首屏等高」（桌面端各视口
       严格 = 容器宽 ÷ 2.5）。窄屏本身由内容撑高，无此约束。
   ★ 用 !important：上方 2026-09-22 段对其中数个元素已用 !important 锁死
       5px 内边距，本段须锁住并覆盖。
   ★ 回滚：整段删除即可（删除后回到 2026-09-22 的 24px 基线）。
   ========================================================================== */
@media (max-width: 1024px) {
    nav.ts-crumb a,
    nav.ts-cases-crumb a {
        display: inline-flex !important;
        align-items: center !important;
        min-height: 44px !important;
        /* 抵消面包屑原有的 -11px 负外边距，避免相邻热区互相重叠 */
        margin-top: 0 !important;
        margin-bottom: 0 !important;
        /* 「首页」文字仅 26px 宽 -> 左右各撑 9px 达 44px；再用负外边距抵消，
           视觉间距零变化（面包屑分隔符不可点，热区重叠无碍） */
        padding-left: 9px !important;
        padding-right: 9px !important;
        margin-left: -9px !important;
        margin-right: -9px !important;
    }
    a.ts-hero__badge--link,
    .ts-facts__verify,
    .ts-event__tel,
    .ts-cta__phone,
    .ts-cta__addr-link,
    .ts-cta__link,
    .ts-friends__link,
    #tsEventMain .ts-dir__cta {
        display: inline-flex !important;
        align-items: center !important;
        min-height: 44px !important;
    }
}
