/*
Theme Name: Aizan Factory
Theme URI: https://example.com/aizan-factory
Author: Aizan
Description: 工业 / 外贸工厂站主题。自带「外观 → 自定义」可视化主题设置，可在后台直接改主色、字体、品牌名、联系方式与页脚，无需动代码。
Version: 1.7.65
Requires at least: 6.0
Tested up to: 6.7
Requires PHP: 7.4
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: aizan-factory
Tags: business, industrial, custom-colors, custom-menu, custom-logo, translation-ready
*/

:root{
 --az-acc:#E8590C;          /* 主色：按钮 / 图标 / 高亮 */
 --az-acc2:#C74A08;         /* 主色·深：悬停 / 成就数字带底色 */
 --az-ink:#14181C;          /* 深色：标题 / 顶栏 / 深色区块底 */
 --az-steel:#3F474E;        /* 正文色 */
 --az-bg:#F1F3F5;           /* 浅色区块底 */
 --az-bg2:#FAFBFC;          /* 更浅的交替底 */
 --az-line:#DFE3E8;         /* 分隔线 */
 --az-mut:#8B95A1;          /* 次要文字 */
 --az-fh:'Montserrat',sans-serif;         /* 标题字体（由主题设置覆盖）*/
 --az-fb:'Open Sans',sans-serif;           /* 正文字体（由主题设置覆盖）*/
}
.ft{--ink:var(--az-ink);--steel:var(--az-steel);--acc:var(--az-acc);--acc2:var(--az-acc2);--bg:var(--az-bg);--bg2:var(--az-bg2);--line:var(--az-line);--mut:var(--az-mut);--r:var(--az-radius,2px);
 font-family:var(--az-fb);font-size:17px;line-height:1.65;color:var(--steel);
 background:#fff;margin:0;overflow-x:clip}
.ft *{box-sizing:border-box}
.ft .wrap{max-width:1200px;width:100%;margin:0 auto;padding:0 26px}
.ft h1,.ft h2,.ft h3,.ft h4{font-family:var(--az-fh);text-transform:none;
 color:var(--ink);line-height:1.14;margin:0 0 14px;font-weight:600;letter-spacing:.005em}
.ft h1{font-size:clamp(34px,5.2vw,60px)}
.ft h2{font-size:clamp(26px,3.4vw,38px)}
.ft h3{font-size:19px}
.ft h4{font-size:16px}
.ft p{margin:0 0 16px}
.ft a{color:inherit}
.ft section{padding:92px 0}
.ft .eyebrow{font-family:var(--az-fh);text-transform:uppercase;letter-spacing:.17em;
 font-size:13px;font-weight:600;color:var(--acc);margin:0 0 16px}
.ft .head{text-align:center;max-width:660px;margin:0 auto 52px}
.ft .head p{margin:0;color:var(--mut)}
.ft .btn{display:inline-block;padding:15px 32px;border-radius:var(--r);font-family:var(--az-fh);
 text-transform:uppercase;letter-spacing:.05em;font-weight:600;font-size:14px;text-decoration:none;
 background:var(--acc);color:#fff;margin:6px 8px 0 0;border:2px solid var(--acc);cursor:pointer}
.ft .btn.ghost{background:transparent;border-color:rgba(255,255,255,.55);color:#fff}
.ft .btn.line{background:transparent;border-color:var(--ink);color:var(--ink)}
.ft .grid{display:grid;gap:22px}
.ft .g2{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}
.ft .g3{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.ft .g4{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}
.ft .g6{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}
.ft .ic{width:46px;height:46px;border-radius:var(--r);background:color-mix(in srgb,var(--acc) 11%,#fff);
 border:1px solid color-mix(in srgb,var(--acc) 26%,#fff);display:flex;align-items:center;justify-content:center;margin-bottom:18px}
.ft .ic svg{width:24px;height:24px;stroke:var(--acc);fill:none;stroke-width:1.8;
 stroke-linecap:round;stroke-linejoin:round}

.ft .topbar{background:var(--ink);color:rgba(255,255,255,.72);font-size:13.5px;padding:9px 0}
.ft .topbar .wrap{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap}
.ft .topbar a{color:rgba(255,255,255,.72);text-decoration:none;margin-right:20px}
.ft .topbar .lang a{margin:0 0 0 12px}

/* 主导航：logo + 菜单 + 行动指令（CTA）。sticky 依赖祖先不做滚动容器 —— 故全站 overflow-x 用 clip 而非 hidden */
.ft .nav{background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:80}
.ft .nav .wrap{display:flex;align-items:center;justify-content:space-between;gap:24px;
 padding-top:15px;padding-bottom:15px}
.ft .brand{display:inline-flex;align-items:center;gap:11px;font-family:var(--az-fh);
 font-size:23px;font-weight:700;letter-spacing:.06em;color:var(--ink);text-decoration:none;
 text-transform:uppercase;white-space:nowrap}
.ft .brand .mark{width:37px;height:37px;background:var(--acc);color:#fff;border-radius:var(--r);
 display:flex;align-items:center;justify-content:center;font-size:19px;font-weight:700}
.ft .menu{display:flex;align-items:center;gap:26px;font-family:var(--az-fh);
 font-size:13.5px;letter-spacing:.01em}
.ft .menu a{color:var(--ink);text-decoration:none;display:inline-flex;align-items:center;gap:6px;
 padding:6px 0;border-bottom:2px solid transparent}
.ft .menu a:hover{color:var(--acc)}
.ft .menu a.on{color:var(--acc);border-bottom-color:var(--acc)}
.ft .menu a i{font-style:normal;font-size:9px;color:var(--mut);line-height:1}
.ft .navbtn{background:var(--acc);color:#fff;text-decoration:none;padding:12px 22px;border-radius:var(--r);
 font-family:var(--az-fh);font-size:13.5px;letter-spacing:.05em;text-transform:uppercase;
 font-weight:600;white-space:nowrap;border:2px solid var(--acc)}
.ft .navbtn:hover{background:var(--acc2);border-color:var(--acc2)}

.ft .hero{position:relative;min-height:660px;display:flex;align-items:center;color:#fff;
 background-size:cover;background-position:center}
.ft .hero:before{content:"";position:absolute;inset:0;
 background:linear-gradient(95deg,rgba(10,14,18,.93) 0%,rgba(10,14,18,.74) 52%,rgba(10,14,18,.34) 100%)}
.ft .hero .wrap{position:relative;z-index:2}
.ft .hero h1,.ft .hero p{color:#fff}
.ft .hero .eyebrow{color:#fff;opacity:.85}
.ft .hero .lede{color:rgba(255,255,255,.82);font-size:19px;max-width:560px}
.ft .hero .badges{margin-top:26px;display:flex;gap:26px;flex-wrap:wrap;font-size:13.5px;
 color:rgba(255,255,255,.6);font-family:var(--az-fh);letter-spacing:.06em;text-transform:uppercase}

/* 板块分带（surface banding）：相邻板块交替浅色底，避免整页纯白造成视觉疲劳。
   底色统一走主题设置里的「浅色底」(--az-bg)，把它设成 #FFFFFF 就等于关闭分带。
   ⚠️ 只能挂在 section 上 —— 写成 .ft .wp-block-group 会把 .wrap/.head 的居中一起清掉。 */
.ft section.az-alt{background:var(--bg)}
/* 深色带（如关于页团队板块）：深墨底 + 白字，与浅色带交替形成节奏 */
.ft section.az-dark{background:var(--ink)}
.ft section.az-dark .head h2,.ft section.az-dark .head>p{color:#fff}
.ft section.az-dark .head .eyebrow{color:rgba(255,255,255,.72)}
.ft section.az-dark .member b{color:#fff}
.ft section.az-dark .member small{color:rgba(255,255,255,.68)}
.ft .trust{background:var(--bg);border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:36px 0}
.ft .trust .grid{text-align:center}
.ft .trust b{display:block;font-family:var(--az-fh);font-size:32px;color:var(--acc);
 line-height:1.2;font-weight:600}
.ft .trust small{font-size:13.5px;color:var(--mut)}

.ft .pcard{border:1px solid var(--line);border-radius:var(--r);overflow:hidden;background:#fff;
 display:flex;flex-direction:column}
.ft .pcard .ph{aspect-ratio:4/3;background-size:cover;background-position:center;
 background-color:var(--bg);border-bottom:1px solid var(--line)}
.ft .pcard .bd{padding:20px 22px 24px;flex:1;display:flex;flex-direction:column}
.ft .pcard h3{margin-bottom:8px;min-height:44px}
.ft .pcard p{font-size:14.5px;color:var(--mut);margin:0 0 14px;flex:1}
.ft .pcard a{color:var(--acc);font-size:13.5px;font-weight:700;text-decoration:none;
 font-family:var(--az-fh);letter-spacing:.04em;text-transform:uppercase}

.ft .card{border:1px solid var(--line);border-radius:var(--r);padding:30px 26px;background:#fff}
.ft .card h3{font-size:17px;margin-bottom:8px}
.ft .card p{font-size:15px;color:var(--mut);margin:0}

.ft .scene{position:relative;border-radius:var(--r);overflow:hidden;
 aspect-ratio:4/3;background-size:cover;background-position:center;background-color:var(--ink)}
.ft .scene span{position:absolute;left:0;right:0;bottom:0;padding:34px 20px 16px;color:#fff;
 font-family:var(--az-fh);text-transform:uppercase;font-size:15px;letter-spacing:.05em;
 background:linear-gradient(transparent,rgba(10,14,18,.88))}

.ft .steps{counter-reset:s;display:grid;gap:22px}
/* ⚠️ counter-increment 必须写在 .step 元素上，不能写在 ::before。
   WP 给 wp:group 渲染时会插一层 display:contents 的 wp-block-group__inner-container，
   在这种组合下 Chrome 不会跨兄弟累加计数器 —— 表现就是所有步骤号都变成 01。 */
.ft .step{position:relative;padding-left:62px;counter-increment:s}
.ft .step:before{content:counter(s,decimal-leading-zero);
 position:absolute;left:0;top:-2px;font-family:var(--az-fh);font-size:26px;
 font-weight:600;color:color-mix(in srgb,var(--acc) 35%,#fff)}
.ft .step h4{margin-bottom:6px}
.ft .step p{font-size:15px;color:var(--mut);margin:0}

.ft .tbl{width:100%;border-collapse:collapse;margin-top:26px;font-size:15px}
.ft .tbl th,.ft .tbl td{border:1px solid var(--line);padding:11px 14px;text-align:left}
.ft .tbl th{background:var(--bg);font-family:var(--az-fh);text-transform:uppercase;
 font-size:13px;letter-spacing:.05em;color:var(--ink);font-weight:600}
.ft .tbl td:first-child{color:var(--ink);font-weight:500;width:34%}

/* 双列布局：两列拉伸等高，并让图片跟随文字列的高度 ——
   否则图片按 5:4 撑满整列（实测 449px），会比右侧文字内容（约 400px）高出一截。 */
.ft .split{display:grid;grid-template-columns:1.05fr 1fr;gap:52px;align-items:stretch}
.ft .split > .wp-block-column{display:flex;flex-direction:column}
.ft .split > .wp-block-column > .ph{aspect-ratio:auto;flex:1;min-height:300px;display:flex}
.ft .split > .wp-block-column > .ph > .wp-block-image{flex:1;margin:0;min-height:0}
.ft .split .ph{border-radius:var(--r);background-size:cover;
 background-position:center;background-color:var(--bg);position:relative}
.ft .split .play{position:absolute;left:22px;bottom:22px;background:rgba(10,14,18,.78);
 color:#fff;font-size:12.5px;font-family:var(--az-fh);letter-spacing:.06em;
 padding:8px 14px;border-radius:var(--r);text-transform:uppercase}
.ft .klist{list-style:none;padding:0;margin:22px 0 26px;display:grid;gap:12px}
.ft .klist li{padding-left:24px;position:relative;font-size:15.5px}
.ft .klist li:before{content:"";position:absolute;left:0;top:9px;width:10px;height:2px;background:var(--acc)}

.ft .certs{display:flex;gap:12px;flex-wrap:wrap;margin:0 0 26px}
.ft .cert{border:1px solid var(--line);border-radius:var(--r);padding:12px 18px;
 font-family:var(--az-fh);font-size:13.5px;letter-spacing:.06em;color:var(--ink);
 text-transform:uppercase;background:#fff;display:flex;align-items:center;gap:9px}
.ft .dot{width:8px;height:8px;background:var(--acc);border-radius:50%;flex:none}

.ft .quote{border:1px solid var(--line);border-radius:var(--r);padding:28px 26px;background:#fff;
 display:flex;flex-direction:column;gap:16px}
.ft .quote .stars{color:var(--acc);font-size:14px;letter-spacing:3px}
.ft .quote p{font-size:15.5px;margin:0;color:var(--steel);font-style:italic;flex:1}
.ft .who{display:flex;align-items:center;gap:12px;border-top:1px solid var(--line);padding-top:16px}
/* 客户评价头像：真人照片圆形裁切（原来是字母圆圈） */
.ft .av{width:46px;height:46px;border-radius:50%;flex:none;overflow:hidden;margin:0;
 background:var(--bg);border:1px solid var(--line)}
.ft .av img{width:100%;height:100%;object-fit:cover;object-position:center 28%;display:block}
.ft .who b{display:block;font-size:14.5px;color:var(--ink);font-weight:600;font-family:var(--az-fh)}
.ft .who small{font-size:13px;color:var(--mut)}
/* 「上线前替换」占位提示：前台（含全页预览）一律隐藏，编辑器可见 */
.ft p.az-edit-note{display:none}

.ft .member{text-align:center}
.ft .member .ph{aspect-ratio:1;border-radius:var(--r);background-size:cover;
 background-position:center top;background-color:var(--bg);border:1px solid var(--line);margin-bottom:16px}
.ft .member b{display:block;font-family:var(--az-fh);font-size:16px;color:var(--ink)}
.ft .member small{font-size:13.5px;color:var(--mut)}

.ft details{border:1px solid var(--line);border-radius:var(--r);background:#fff;margin-bottom:10px}
.ft summary{cursor:pointer;padding:18px 22px;font-family:var(--az-fh);font-size:16px;
 color:var(--ink);list-style:none;display:flex;justify-content:space-between;gap:16px;
 align-items:center;text-transform:none;letter-spacing:0}
.ft summary::-webkit-details-marker{display:none}
.ft summary:after{content:"+";font-size:22px;color:var(--acc);flex:none;line-height:1}
.ft details[open] summary:after{content:"\2013"}
.ft details[open] summary{border-bottom:1px solid var(--line)}
/* FAQ 答案：区块化后段落是标准的 core/paragraph，原来那个 .ans 类已经不存在了，
   所以这里必须用元素选择器 —— 否则答案会贴到卡片边框上、和问题不对齐。
   拆成三条是为了兼容「一个 FAQ 里有多个段落」的情况。 */
.ft details p{padding:0 22px;font-size:15.5px;color:var(--steel);margin:0}
.ft details p:first-of-type{padding-top:18px}
.ft details p:last-of-type{padding-bottom:18px}

/* 成就数字带：刻意用品牌橙做底，与紧随其后的深色 CTA 拉开层次（此前两者同为深色，糊成一块） */
.ft .stats{background:var(--acc2);color:#fff;padding:58px 0}
.ft .stats .grid{text-align:center}
.ft .stats b{display:block;font-family:var(--az-fh);font-size:36px;color:#fff;line-height:1.2}
.ft .stats small{font-size:14px;color:#fff;letter-spacing:.03em}

.ft .cta{background:#0F1216;color:rgba(255,255,255,.8);padding:86px 0}
.ft .cta h2,.ft .cta p{color:#fff}
.ft .cta .in{display:grid;grid-template-columns:1fr 1fr;gap:56px;align-items:start}
.ft .form{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.ft .form .full{grid-column:1/-1}
.ft .form input,.ft .form select,.ft .form textarea{width:100%;padding:13px 14px;font-size:14.5px;
background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.18);border-radius:var(--r);
color:#fff;font-family:inherit}
/* 下拉展开的 option 默认继承 #fff 文字，但原生弹层是浅底 → 白字白底"看不见"。
   显式给 option 深底白字 + 声明深色配色方案，两种渲染路径都可见 */
.ft .form select{color-scheme:dark}
.ft .form select option{background:#1A1F24;color:#fff}
.ft .form input::placeholder,.ft .form textarea::placeholder{color:rgba(255,255,255,.42)}
.ft .form textarea{min-height:88px;resize:vertical}
.ft .promise{display:flex;gap:10px;align-items:center;font-size:14px;color:rgba(255,255,255,.62);
 margin-top:14px}
.ft .wa{display:inline-flex;align-items:center;gap:9px;margin-top:18px;color:#fff;text-decoration:none;
 border:2px solid rgba(255,255,255,.4);border-radius:var(--r);padding:12px 22px;font-size:14px;
 font-family:var(--az-fh);letter-spacing:.05em;text-transform:uppercase}
/* 图标此前没有 fill 规则 → 继承 SVG 默认黑，落在深色 CTA 上等于消失。改用品牌绿 */
.ft .wa svg{width:21px;height:21px;fill:#25D366;flex:none}

.ft .post{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:var(--r);
 overflow:hidden;background:#fff}
.ft .post .ph{aspect-ratio:16/10;background-size:cover;background-position:center;background-color:var(--bg)}
.ft .post .bd{padding:20px 22px 24px;display:flex;flex-direction:column;flex:1}
.ft .post small{font-size:12.5px;color:var(--mut);font-family:var(--az-fh);
 letter-spacing:.06em;text-transform:uppercase;margin-bottom:9px}
.ft .post h3{font-size:16.5px;margin-bottom:10px}
.ft .post p{font-size:14.5px;color:var(--mut);margin:0 0 14px;flex:1}
.ft .post a{color:var(--acc);font-size:13.5px;font-weight:700;text-decoration:none;
 font-family:var(--az-fh);text-transform:uppercase;letter-spacing:.04em}

/* 页脚：刻意比 CTA（#0F1216）亮一档 —— 内页 CTA 直接挨着页脚，两者曾同为近黑糊成一块 */
.ft footer{background:#1A212B;color:rgba(255,255,255,.6);padding:60px 0 26px;font-size:14px}
.ft footer .cols{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:32px}
.ft footer h4{color:#fff;font-size:14.5px;margin-bottom:16px}
.ft footer a{color:rgba(255,255,255,.55);text-decoration:none;display:block;margin-bottom:9px;font-size:14px}
.ft footer .bar{border-top:1px solid rgba(255,255,255,.12);margin-top:34px;padding-top:20px;
 font-size:13px;display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap}

/* v1.7.15 用户拍板：WhatsApp 悬浮球放**左下角**（原右下），右下角留给「一键回到顶部」。 */
.ft .floatwa{position:fixed;left:22px;bottom:22px;z-index:999;background:#25D366;color:#fff;
 width:54px;height:54px;border-radius:50%;display:flex;align-items:center;justify-content:center;
 text-decoration:none;box-shadow:0 6px 20px rgba(0,0,0,.28)}
.ft .floatwa svg{width:28px;height:28px;fill:#fff}

@media(max-width:980px){
 .ft .split,.ft .cta .in{grid-template-columns:1fr}
 /* 单列时列高由内容撑开，图片必须恢复自身比例，否则 flex:1 会把它压成 0 高 */
 .ft .split > .wp-block-column > .ph{aspect-ratio:5/4;flex:none;min-height:0}
 .ft footer .cols{grid-template-columns:1fr 1fr}
 .ft .nav .wrap{flex-wrap:wrap;gap:14px}
 .ft .menu{order:3;width:100%;justify-content:center;gap:18px;font-size:13px}
}
@media(max-width:640px){
 .ft section{padding:64px 0}
 .ft .form{grid-template-columns:1fr}
 .ft footer .cols{grid-template-columns:1fr}
 .ft .menu{gap:13px;font-size:12.5px}
 .ft .brand{font-size:20px}
 .ft .navbtn{padding:10px 15px;font-size:12.5px}
}

header.wp-block-template-part,footer.wp-block-template-part,.wp-block-post-title{display:none !important}
.wp-block-post-content.is-layout-constrained > .ft{max-width:none !important}
/* 用 clip 而非 hidden：hidden 会让祖先成为滚动容器，导致 .ft .nav 的 sticky 失效 */
html,body{overflow-x:clip}
/* 落地页免去主题上下留白：用关系选择器直接命中 .ft 的祖先，不靠猜类名。
   实测残留间距 = main margin-top 70 + 中间 group padding-top 70 + max-content margin 19.2×2 ≈ 176px */
main:has(.ft){margin-block:0 !important;padding-block:0 !important}
main:has(.ft) .has-global-padding{padding-block:0 !important;margin-block:0 !important}
main:has(.ft) .wp-block-group{padding-block:0 !important;margin-block:0 !important}
main:has(.ft) .wp-block-post-content{margin-block:0 !important}
.wp-site-blocks > main{margin-block:0 !important}
.wp-block-post-content{margin-block-start:0 !important;margin-block-end:0 !important}
/* 兜底（不依赖 :has / 主题内部结构）：把 body 底色保持白色。
   注意：**不要**把 body 改成深色 —— 一旦有任何一处漏底色，整页会像蒙了一层暗罩 */
html,body{background:#FFFFFF !important;overflow-x:clip}

/* ===== 区块版兼容（把原生区块渲染出的结构对齐到原有视觉）===== */
/* ⚠️ 千万不要写成 .ft .wp-block-group{margin:0}
   —— .wrap 和 .head 本身就是 wp-block-group，这条规则在级联里更靠后，
   会把它俩的 margin:0 auto 一并清掉，结果整页中间部分整体左偏（只剩头尾正常）。
   所以：只清上下外边距，水平方向交给各自的居中规则；再补一条兜底。 */
.ft .wp-block-columns,.ft .wp-block-column{margin-block:0}
.ft figure.wp-block-image,.ft .wp-block-buttons,.ft figure.wp-block-table{margin:0}
.ft .wrap{margin-left:auto;margin-right:auto}
.ft .head{margin-left:auto;margin-right:auto}
.ft .faqwrap{margin-left:auto;margin-right:auto}
/* WP 给 wp:group 渲染时会多套一层 wp-block-group__inner-container，
   会让 .grid 只有 1 个子元素（栅格塌掉）。用 display:contents 让它对布局透明 */
.ft .wp-block-group__inner-container{display:contents}
/* 锚点跳转时给 sticky 导航留出位置 */
.ft section[id],.ft div[id]{scroll-margin-top:92px}
/* 关掉 WP 布局支持给容器子元素加的 block-gap（否则段间距会被顶大一截） */
.ft .is-layout-flow > * + *,.ft .is-layout-constrained > * + *{margin-block-start:0}
/* 图片：figure 当容器，img 当原来那张背景图 */
.ft .ph,.ft .scene,.ft .post .ph,.ft .member .ph,.ft .split .ph{display:block;overflow:hidden;margin:0}
.ft .ph img,.ft .scene img,.ft .post .ph img,.ft .member .ph img,.ft .split .ph img{
 width:100%;height:100%;object-fit:cover;object-position:center;display:block}
.ft .member .ph img{object-position:center top}
.ft .scene{position:relative}
.ft .scene img{position:absolute;inset:0}
.ft .scene .cap,.ft .scene span{position:absolute;left:0;right:0;bottom:0;margin:0;padding:34px 20px 16px;
 color:#fff;font-family:var(--az-fh);text-transform:uppercase;font-size:15px;letter-spacing:.05em;
 background:linear-gradient(transparent,rgba(10,14,18,.88))}
.ft .split .ph .play{position:absolute;left:22px;bottom:22px;margin:0}
/* 段落内联小碎片：清掉默认下边距 */
.ft p.badges,.ft p.certs,.ft p.promise,.ft p.wa,.ft p.stars,.ft p.av,.ft p.lnk,.ft p.meta,.ft p.cap{margin:0}
.ft p.badges{margin-top:26px}
.ft p.certs{margin:0 0 26px}
.ft p.stars{color:var(--acc);font-size:14px;letter-spacing:3px;font-style:normal}
.ft p.lnk{flex:none;font-size:13.5px}
.ft p.meta{font-size:12.5px;color:var(--mut);font-family:var(--az-fh);letter-spacing:.06em;
 text-transform:uppercase;margin-bottom:9px}
.ft p.promise{margin-top:14px}
.ft p.wa{margin-top:18px}
.ft p.wa a{display:inline-flex;align-items:center;gap:9px;color:#fff;text-decoration:none}
/* 注意：mask 简写里直接塞 var() 在线上大样式表中会被判为无效（本地小文件却正常）。
   一律用长写法，避免这种"本地好好的、线上不生效"的坑 */
.ft p.wa a:before{content:"";width:21px;height:21px;flex:none;background:#25D366;
 -webkit-mask-image:var(--az-wa);-webkit-mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;
 mask-image:var(--az-wa);mask-size:contain;mask-repeat:no-repeat;mask-position:center}
:root{--az-wa:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.872.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347M12.05 2.003c-5.45 0-9.885 4.435-9.887 9.884a9.86 9.86 0 001.51 5.26l.235.374-.998 3.648 3.741-.982.361.214a9.87 9.87 0 005.031 1.378h.005c5.448 0 9.882-4.435 9.884-9.884a9.825 9.825 0 00-2.893-6.994 9.825 9.825 0 00-6.988-2.898m.005-2A11.815 11.815 0 00.157 11.897c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413A11.815 11.815 0 0012.055.003'/%3E%3C/svg%3E")}
/* feature 图标：改用 mask，颜色跟随主色 */
.ft .ic:before{content:"";width:24px;height:24px;background:var(--acc);
 -webkit-mask-image:var(--az-ic);-webkit-mask-size:24px 24px;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;
 mask-image:var(--az-ic);mask-size:24px 24px;mask-repeat:no-repeat;mask-position:center}
.ft .ic-cert{--az-ic:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 2l7 3v6c0 5-3 8-7 11-4-3-7-6-7-11V5z'/%3E%3Cpath d='M9 12l2 2 4-4'/%3E%3C/svg%3E")}
.ft .ic-cnc{--az-ic:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 20h16M6 20V9l6-5 6 5v11'/%3E%3Cpath d='M10 20v-6h4v6'/%3E%3C/svg%3E")}
.ft .ic-tool{--az-ic:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14.7 6.3a4 4 0 01-5.4 5.4L5 16v3h3l4.3-4.3a4 4 0 015.4-5.4z'/%3E%3C/svg%3E")}
.ft .ic-lab{--az-ic:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 3h6M10 3v6l-5 9a2 2 0 002 3h10a2 2 0 002-3l-5-9V3'/%3E%3C/svg%3E")}
.ft .ic-globe{--az-ic:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M3 12h18M12 3c3 3.5 3 14.5 0 18M12 3c-3 3.5-3 14.5 0 18'/%3E%3C/svg%3E")}
.ft .ic-ship{--az-ic:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 17l2-7h14l2 7M6 10V6h12v4M12 17v4'/%3E%3C/svg%3E")}
/* 按钮：class 落在 .wp-block-button 上，样式要写到里面的链接 */
.ft .wp-block-buttons{gap:16px;margin-top:6px;align-items:center}
.ft .wp-block-button .wp-block-button__link{padding:15px 32px;border-radius:var(--r);
 font-family:var(--az-fh);text-transform:uppercase;letter-spacing:.05em;font-weight:600;font-size:14px;
 text-decoration:none;background:var(--acc);color:#fff;border:2px solid var(--acc);cursor:pointer}
.ft .wp-block-button.btn{background:none;padding:0}
.ft .wp-block-button.ghost .wp-block-button__link{background:transparent;
 border-color:rgba(255,255,255,.55);color:#fff}
.ft .wp-block-button.ghost .wp-block-button__link:hover{background:rgba(255,255,255,.12)}
/* 表格：WP 把 table 包在 figure.wp-block-table 里 */
.ft figure.tbl{width:100%;margin:0;overflow-x:auto}
.ft .tbl table{width:100%;border-collapse:collapse;margin-top:26px;font-size:15px}
/* 表格进入双列布局时必须和左侧列的内容顶对齐 —— 默认的 margin-top:26px 会把它整个往下推，
   结果是左列从顶部开始、右列表格晚 26px，两列看起来高低不齐。 */
.ft .wp-block-column .tbl table{margin-top:0}
/* 清单 */
.ft ul.wp-block-list{list-style:none;padding:0;margin:22px 0 26px;display:grid;gap:12px}
.ft .klist li{list-style:none}
.ft .klist li:before{content:"";position:absolute;left:0;top:9px;width:10px;height:2px;background:var(--acc)}
.ft .klist li{padding-left:24px;position:relative;font-size:15.5px}
/* FAQ 容器 */
.ft .faqwrap{max-width:900px;margin:0 auto}
.ft .wp-block-details{margin:0 0 10px}
/* Hero 用 cover 区块：让我们的渐变盖在封面图之上、内容在最上层 */
.ft .hero{display:flex;align-items:center;padding:0}
.ft .hero:before{z-index:1}
.ft .hero .wp-block-cover__inner-container{position:relative;z-index:2;width:100%}
.ft .hero .wp-block-cover__background{background:transparent}
/* ===== 「上线前替换」占位提示（用户拍板 2026-10-05）=====
   前台一律隐藏 —— 这类话术是给后台客户看的提醒，漏到前台非常尴尬。
   编辑器里的显示样式在 make_theme.py 的 EDITOR_ONLY（仅 editor-style.css 加载）。 */
.ft p.az-edit-note{display:none}
/* ===== 工厂媒体槽（用户拍板 2026-10-05）=====
   图片或 YouTube 视频统一 16:9（YouTube 默认比例，建议 1280×720）。
   客户后台把 core/image 换成 core-embed/youtube 也照样成立（iframe 同规则）。 */
.ft .factory-media{margin:0;border-radius:var(--r);overflow:hidden;background:var(--bg)}
.ft .factory-media img,.ft .factory-media iframe{width:100%;aspect-ratio:16/9;
 object-fit:cover;display:block;border:0}
/* 右栏文字/按钮与左栏媒体同步高度：垂直居中，图换视频也不散架 */
.ft .split.factory{align-items:center}

/* ===== 设计变量：标题字重与字距（由行业风格包控制，见 Customizer ⑧）===== */
.ft h1,.ft h2,.ft h3,.ft h4,.ft .h1,.ft .h2,.ft .wp-block-heading,
.ft .wp-block-post-title{font-weight:var(--az-fw,600);letter-spacing:var(--az-ft,-0.01em)}

/* ===== 主题补充：WP 菜单结构（ul > li > a）适配 ===== */
.ft .nav .menu-host{display:flex;align-items:center}
.ft .menu{list-style:none;margin:0;padding:0}
.ft .menu li{list-style:none}
.ft .menu .current-menu-item > a,
.ft .menu li.az-on > a{color:var(--acc);border-bottom-color:var(--acc)}
/* 进到子类目页时，父项（祖先）也要跟着高亮 */
.ft .menu .current-menu-ancestor > a{color:var(--acc);border-bottom-color:var(--acc)}
.ft .menu .sub-menu{display:none}
.ft footer ul{list-style:none;margin:0;padding:0}
.ft footer li{list-style:none;margin:0}
.ft .custom-logo-link{display:inline-flex}
.ft .custom-logo{max-height:40px;width:auto;display:block}

/* ===== 内页统一页头：首页以外的页面共用，背景图 + H1 + 面包屑 =====
   高度/焦点位置/背景图都在「外观 → 自定义 → ⑦ 内页页头」调；
   默认 400px，宽度永远全幅，改高度只是裁多裁少，焦点位置决定裁哪一头。 */
.az-slim{position:relative;isolation:isolate;display:flex;align-items:center;
 min-height:var(--az-slim-h,400px);padding:64px 0;overflow:hidden;background:var(--ink,#14181C)}
.az-slim::before{content:"";position:absolute;inset:0;z-index:-2;
 background-image:var(--az-slim-bg,none);background-size:cover;background-position:var(--az-slim-pos,center)}
.az-slim::after{content:"";position:absolute;inset:0;z-index:-1;background:rgba(11,14,17,.68)}
/* 页头标题必须压过 .ft h1 的深色规则（特异性 0,2,0 > 0,1,1）
   间距 50px + 面包屑细体 300：H1 与面包屑拉成两段独立的呼吸区（用户拍板） */
.ft .az-slim-title,.ft h1.az-slim-title{margin:0 0 50px;color:#fff;font-size:clamp(25px,3.1vw,33px);
 line-height:1.18;letter-spacing:-.005em;font-weight:500}
/* 面包屑：默认居中（与标题同轴）；「靠左」选项时与下方板块左边缘对齐。
   一行显示：桌面 nowrap 超长截断，≤980px 恢复换行；
   字号走变量 --az-crumb-fs（默认 16），可在「外观 → 自定义 → ⑦ 内页页头」里改 */
.az-slim .az-crumbs ol{justify-content:center;flex-wrap:nowrap;overflow:hidden}
.az-slim{text-align:center}
.az-slim.is-left .az-crumbs ol{justify-content:flex-start;flex-wrap:wrap}
.az-slim.is-left{text-align:left}
.az-slim.is-center .az-crumbs ol{justify-content:center}
.az-slim.is-center{text-align:center}
.az-crumbs ol{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:0;padding:0;list-style:none;
 font-size:var(--az-crumb-fs,16px);font-weight:300;line-height:1.5;letter-spacing:.015em;
 text-shadow:0 1px 4px rgba(0,0,0,.65)}
.az-crumbs li{display:flex;align-items:center;gap:10px;color:rgba(255,255,255,.92);white-space:nowrap}
.az-crumbs .sep{color:rgba(255,255,255,.62);font-size:1.1em;line-height:1}
/* 可点项：与当前页同色（无下划线）；hover = 当前页同款橙色，反馈明确 */
.az-crumbs a{color:rgba(255,255,255,.92);text-decoration:none;transition:color .18s}
.az-crumbs a:hover{color:var(--acc,#E8590C)}
/* 最后一项 = 当前页，橙色标出「你在这」；超长时省略号截断（面包屑保持一行） */
.az-crumbs li:last-child > span:first-child{color:var(--acc,#E8590C);font-weight:400}
.az-slim .az-crumbs li:last-child{min-width:0;overflow:hidden}
.az-slim .az-crumbs li:last-child > span:first-child{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ===== 关于页 · 服务编号清单（与「为什么选我们」图标卡网格区分的另一种形态）
   白底无框、橙色序号 01-06、两列分隔线；≤760px 收成单列 =====
   🔴 v1.7.59 修错位（用户截图圈出）：原来 `1fr 1fr` 两列，但 grid 默认按**行**排且
   行高由最高的那项决定 → 文字 2 行的项把整行抬高，同行另一项跟着下沉，
   视觉上就是"左边一列在上面、右边一列错开"。
   正解：保留两列，但让每个 .svc-item 内部用 flex column + 分隔线走 item 自身下沿，
        行内各列互不影响高度（grid 里 align-items:start 即可）。 */
.ft .svc-list{display:grid;grid-template-columns:1fr 1fr;column-gap:44px;align-items:start}
.ft .svc-item{display:grid;grid-template-columns:auto 1fr;gap:16px;
 border-top:1px solid var(--line,#DFE3E8);padding:18px 0}
.ft .svc-item:nth-last-child(-n+2){border-bottom:1px solid var(--line,#DFE3E8)}
.ft .svc-num{margin:0;font-family:var(--az-fh,'Montserrat',sans-serif);font-weight:600;
 font-size:19px;color:var(--acc);line-height:1.3}
.ft .svc-body h3{margin:0 0 6px;font-size:16.5px}
.ft .svc-body p{margin:0;font-size:14px;color:var(--mut,#8B95A1);line-height:1.65}

/* ===== 产品体系（自建 CPT）：总览 / 类目页（左侧栏 + 右侧网格）===== */
.az-products{padding:56px 0 70px}
.az-shop{display:grid;grid-template-columns:264px minmax(0,1fr);gap:40px;align-items:start}
/* 产品详情页：主内容在左、侧栏在右（与目录页同一套网格，只换顺序） */
.az-prod .az-shop{grid-template-columns:minmax(0,1fr) 264px}
.az-prod .az-shop-main{order:1}
.az-prod .az-shop-side{order:2}
.az-prod .spec-h{margin-top:34px}
.az-shop-main{min-width:0}
.ft .side-box{background:var(--az-bg2,#FAFBFC);border:1px solid var(--line,#DFE3E8);
 border-radius:var(--r);padding:22px 22px 24px;margin:0 0 26px}
.ft .side-box:last-child{margin-bottom:0}
.ft .side-h{margin:0 0 14px;font-size:15px;letter-spacing:.04em;text-transform:uppercase;
 color:var(--ink);display:inline-block;padding-bottom:6px;border-bottom:2px solid var(--acc)}
.ft .side-cats{list-style:none;margin:0;padding:0}
.ft .side-cats a{display:flex;justify-content:space-between;align-items:center;gap:8px;
 padding:9px 2px;border-bottom:1px solid var(--line,#DFE3E8);font-size:14px;font-weight:600;
 color:var(--steel,#3F474E);text-decoration:none;transition:color .15s}
.ft .side-cats li:last-child a{border-bottom:0}
.ft .side-cats a:hover,.ft .side-cats a.on{color:var(--acc)}
.ft .side-cats .n{font-size:12px;font-weight:600;color:var(--mut,#8B95A1);
 background:var(--az-bg,#F1F3F5);border-radius:999px;padding:2px 9px;flex:none}
.ft .side-cats a.on .n{background:color-mix(in srgb,var(--acc) 12%,#fff);color:var(--acc)}
/* 侧栏 About us 模块：内容自动取 about 页（缩略图 + 完整介绍 + Contact us 按钮），零配置 */
.ft .side-about figure{margin:0 0 12px;border:1px solid var(--line,#DFE3E8);
 border-radius:var(--r);overflow:hidden;aspect-ratio:4/3;background:var(--az-bg,#F1F3F5)}
.ft .side-about img{width:100%;height:100%;object-fit:cover;display:block}
.ft .side-about p{margin:0 0 12px;font-size:13.5px;line-height:1.7;color:var(--mut,#8B95A1)}
.ft .side-about p:last-of-type{margin-bottom:16px}
/* 侧栏产品搜索框：分类列表上方。纯表单，零 JS */
.ft .side-search{position:relative;display:flex;margin:0 0 16px}
.ft .side-search input[type=search]{width:100%;padding:10px 40px 10px 13px;border:1px solid var(--line,#DFE3E8);
 border-radius:var(--r);background:#fff;font-family:inherit;font-size:13.5px;color:var(--ink,#14181C)}
.ft .side-search input[type=search]::placeholder{color:var(--mut,#8B95A1)}
.ft .side-search input[type=search]:focus{outline:0;border-color:var(--acc)}
.ft .side-search button{position:absolute;right:1px;top:1px;bottom:1px;width:38px;border:0;
 background:transparent;cursor:pointer;padding:0}
.ft .side-search button:hover{background:var(--az-bg,#F1F3F5)}
/* 放大镜图标（纯 CSS 画，省一张图） */
.ft .side-search .ico-sr{display:block;width:13px;height:13px;margin:0 auto;
 border:1.8px solid var(--mut,#8B95A1);border-radius:50%}
.ft .side-search button:hover .ico-sr{border-color:var(--acc)}
.ft .side-search .ico-sr::after{content:"";position:absolute;width:6px;height:1.8px;background:var(--mut,#8B95A1);
 right:6px;bottom:5px;transform:rotate(45deg)}
.ft .side-search button:hover .ico-sr::after{background:var(--acc)}
/* 搜索状态条 */
.az-search-note{margin:0 0 20px;padding:12px 16px;background:var(--az-bg,#F1F3F5);
 border-left:3px solid var(--acc);font-size:14px;color:var(--steel,#3F474E)}
.az-search-note a{color:var(--acc);font-weight:600}
.ft .side-btn{display:inline-block;padding:10px 18px;background:var(--acc);color:#fff;
 border-radius:var(--r);font-size:13px;font-weight:700;letter-spacing:.05em;
 text-transform:uppercase;text-decoration:none;transition:background .18s}
.ft .side-btn:hover{background:var(--acc2)}
.ft .prodcard{background:var(--az-bg2,#FAFBFC);border:1px solid var(--line,#DFE3E8);
 border-radius:var(--r);overflow:hidden;display:flex;flex-direction:column;
 transition:box-shadow .2s,transform .2s}
.ft .prodcard:hover{box-shadow:0 14px 30px rgba(20,24,28,.12);transform:translateY(-2px)}
.ft .prodcard .pc-media{display:block;aspect-ratio:4/3;overflow:hidden;background:var(--az-bg,#F1F3F5)}
.ft .prodcard .pc-media img{width:100%;height:100%;object-fit:cover;display:block;
 transition:transform .35s ease}
.ft .prodcard:hover .pc-media img{transform:scale(1.04)}
.ft .prodcard{position:relative}   /* .pc-link 整卡可点层的前提 */
.ft .prodcard .pc-link{position:absolute;inset:0;z-index:2;display:block}
.ft .prodcard .bd{position:relative;z-index:3;pointer-events:none}
.ft .prodcard .bd a{pointer-events:auto}

/* ===== 卡片「整块可点」（用户拍板 2026-10-05）=====
   诉求：文章卡（首页博客区 + 文章列表页）的**图片**要能点击进详情，
   之前只有标题和「Read article」能点，图看着可点却点不动。
   做法：
   ① 图片本身包一层 <a class="pc-media">（与产品卡一致，语义正确、可中键新开页）
   ② 再加一个覆盖整卡的透明链接层 <a class="pc-link">，让卡片空白处也能点。
      <a> 不能嵌套 <a>，所以卡片级链接用绝对定位层，不包住内部链接 ——
      这样标题/摘要/「Read article」仍是真实 <a>，可单独点击、可被搜索引擎识别。
   ⚠️ 前提：卡片容器必须 position:relative，否则覆盖层会定位到别处。
   适用：.post（文章卡）· .prodcard（产品卡）· .pcard（首页静态卡） */
.ft .post{position:relative}
/* v1.7.63 博客列表卡按底部对齐 +摘要不再被切（用户两次反馈，最终修法）
   ------------------------------------------------------------------
   🔴 为什么不能再靠"flex:1 + max-height"：
   ① max-height 用 em 手算行高**在同一元素有两套字号时必然算错**（基础层 13.5px
      vs clamp 段 14px → 4.86em 实际只够 2.8 行 → 第 3 行被切一半）。
   ② 更根本：`display:-webkit-box`（line-clamp 的老实现）会**让元素脱离 flex 上下文**，
      flex 子项上的 `flex:1` 直接失效 → "底部对齐"和"不裁切"两个目标互相打架。

   ✅ 正解（三个要点）：
   ① 摘要**不用 flex:1**，改用 `flex:1 1 auto` + `min-height:0`（允许 flex 子项收缩到内容高度），
      让它作为可增长的弹性项把按钮压到底部。
   ② 裁切交给**标准 line-clamp**（Chrome 120+/Edge/Safari 17+ 原生支持），
      并保留 -webkit- 前缀做旧浏览器兜底；两者同时写时以标准属性为准。
   ③ 标题/摘要**都不写 max-height** —— line-clamp 自己会精确按行裁切并加省略号。
      不支持的旧浏览器宁可完整显示，也不要"切一半"。 */
.ft .post{display:flex;flex-direction:column}
.ft .post .bd{display:flex;flex-direction:column;flex:1;min-height:0}
.ft .grid .post .excerpt,
.ft .az-archive .post .excerpt{flex:1 1 auto;min-height:0}
.ft .post .bd>p:last-child{margin-top:auto;padding-top:6px}
.ft .post .pc-media{display:block;aspect-ratio:16/10;overflow:hidden;background:var(--az-bg,#F1F3F5)}
.ft .post .pc-media img{width:100%;height:100%;object-fit:cover;display:block;
 transition:transform .35s ease}
.ft .post:hover .pc-media img{transform:scale(1.04)}
.ft .post .pc-media.ph-link{display:block}
.ft .post .pc-link{position:absolute;inset:0;z-index:2;display:block}
.ft .post .bd{position:relative;z-index:3;pointer-events:none}
.ft .post .bd a{pointer-events:auto}
.ft .post:hover{box-shadow:0 14px 34px rgba(20,24,28,.12);border-color:var(--acc)}

/* 首页静态卡 .pcard：同样让图可点（blocks_home.py 的 IMG(link=…) 会输出 .pc-media 包裹）。
   原来 .ph 是「背景图 span」，现在是 <img>，所以 aspect-ratio 挪到包裹层 .pc-media 上，
   保持 4:3 不变形。 */
.ft .pcard{position:relative}
.ft .pcard .pc-media{display:block;aspect-ratio:4/3;overflow:hidden;background:var(--az-bg,#F1F3F5)}
.ft .pcard .pc-media img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .35s ease}
.ft .pcard:hover .pc-media img{transform:scale(1.04)}
.ft .prodcard .bd{padding:18px 20px 22px;display:flex;flex-direction:column;flex:1}
.ft .prodcard .cat{margin:0 0 6px;font-size:12px;font-weight:700;letter-spacing:.06em;
 text-transform:uppercase;color:var(--acc)}
.ft .prodcard h3{margin:0 0 8px;font-size:16.5px;line-height:1.35;min-height:44px}
.ft .prodcard h3 a{color:var(--ink);text-decoration:none}
.ft .prodcard h3 a:hover{color:var(--acc)}
.ft .prodcard .bd > p:not(.cat):not(.go){margin:0 0 12px;font-size:14px;color:var(--mut,#8B95A1);line-height:1.65;flex:1}
.ft .prodcard .go{margin:auto 0 0;font-size:13.5px;font-weight:700}
.ft .prodcard .go a{color:var(--acc);text-decoration:none}
.ft .prodcard .go a:hover{text-decoration:underline}

/* ===== 产品体系：详情页（左图右文 + Request a Quote 按钮 + 参数表）===== */
.az-prod{padding:56px 0 56px}
.ft .az-prod .pc-media.main{margin:0;border:1px solid var(--line,#DFE3E8);border-radius:var(--r);
 overflow:hidden;aspect-ratio:4/3;background:var(--az-bg,#F1F3F5)}
.ft .az-prod .pc-media.main img{width:100%;height:100%;object-fit:cover;display:block}
.ft .az-prod .cat{margin:0 0 6px;font-size:12px;font-weight:700;letter-spacing:.06em;
 text-transform:uppercase;color:var(--acc)}
.ft .az-prod .pc-body > p{font-size:15px;color:var(--steel,#3F474E);line-height:1.75}
.ft .spec-h{margin:0 0 2px;font-size:24px}
.ft .az-prod .tbl{margin-top:22px}
/* 报价按钮：右栏描述下方，链到联系页表单（询盘不再内嵌深色板块） */
.ft .az-quote{margin:24px 0 0}
.ft .az-btn{display:inline-block;padding:13px 32px;background:var(--acc);color:#fff;
 border-radius:var(--r);font-size:14px;font-weight:700;letter-spacing:.06em;
 text-transform:uppercase;text-decoration:none;transition:background .18s}
.ft .az-btn:hover{background:var(--acc2)}
.az-related{padding:52px 0 64px}

/* ===== 聚合页（分类 / 标签归档）导语与分页 ===== */
.az-archive{padding:56px 0 70px}
.az-archive-intro{max-width:780px;margin:0 0 30px}
.az-pager{margin-top:38px;display:flex;flex-wrap:wrap;gap:10px;justify-content:center}
.az-pager .page-numbers{display:inline-block;padding:9px 15px;
 border:1px solid var(--line,#e3e6e9);border-radius:var(--r);font-size:14px;text-decoration:none}
.az-pager .page-numbers:hover{border-color:var(--acc);color:var(--acc)}
.az-pager .page-numbers.current,
.az-pager .page-numbers.current:hover{background:var(--acc);border-color:var(--acc);color:#fff}

/* ===== 二级下拉菜单（方案 A）=====
   桌面 ≥981px：鼠标悬停展开
   手机 ≤980px：点父项展开/收起（.az-open 由 nav.js 切换）
   只有在后台「外观 → 菜单」里排了子项才会出现下拉；没排子项则完全无痕。 */
.ft .menu li{position:relative}
.ft .menu .menu-item-has-children > a{position:relative;padding-right:15px}
.ft .menu .menu-item-has-children > a::after{
 content:"";position:absolute;right:1px;top:50%;width:6px;height:6px;margin-top:-5px;
 border-right:1.6px solid currentColor;border-bottom:1.6px solid currentColor;
 transform:rotate(45deg);opacity:.7}

@media(min-width:981px){
 .ft .menu .sub-menu{display:none;position:absolute;left:-16px;top:100%;z-index:90;
  min-width:208px;padding:8px 0;margin:0;list-style:none;background:#fff;
  border:1px solid var(--line);border-top:2px solid var(--acc);border-radius:var(--r);
  box-shadow:0 14px 30px rgba(20,24,28,.15)}
 .ft .menu li:hover > .sub-menu,.ft .menu li:focus-within > .sub-menu{display:block}
 .ft .menu .sub-menu li{position:relative}
 .ft .menu .sub-menu a{display:block;padding:8px 18px;white-space:nowrap;
  font-size:13px;border-bottom:0;color:var(--ink);text-transform:none}
 .ft .menu .sub-menu a:hover{background:var(--az-bg);color:var(--acc)}
 .ft .menu .sub-menu .current-menu-item > a{color:var(--acc)}
 /* 三级菜单：向右侧展开 */
 .ft .menu .sub-menu .sub-menu{left:100%;top:-9px}
 .ft .menu .sub-menu .menu-item-has-children > a::after{transform:rotate(-45deg);right:12px;margin-top:-4px}
}
@media(max-width:760px){
 .ft .svc-list{grid-template-columns:1fr}
 .ft .svc-item:nth-last-child(-n+2){border-bottom:0}
 .ft .svc-item:last-child{border-bottom:1px solid var(--line,#DFE3E8)}
}
@media(max-width:980px){
 .ft .nav .wrap{flex-wrap:wrap;gap:14px}
 .az-slim{min-height:220px;padding:30px 0 26px}
 .ft .az-slim-title{font-size:24px;margin-bottom:8px}
 .ft .az-prod .split{grid-template-columns:1fr;gap:28px}
 .ft .az-prod .pc-media.main{aspect-ratio:16/10}
 /* 产品目录页：窄屏时产品网格在上、侧栏（分类/About）移到下方 */
 .az-shop{grid-template-columns:1fr;gap:34px}
 .az-shop-main{order:1}
 .az-shop-side{order:2}
 .az-slim .az-crumbs ol{font-size:calc(var(--az-crumb-fs,16px) - 2px);gap:7px;flex-wrap:wrap;justify-content:center}
 .az-slim .az-crumbs li{white-space:normal}
 .ft .menu-host{order:3;width:100%;justify-content:center}
 .ft .menu{width:auto;order:0;gap:18px;font-size:13px;flex-wrap:wrap;justify-content:center}
 .ft .menu .sub-menu{position:static;min-width:0;margin:8px 0 4px;padding:0 0 0 14px;
  list-style:none;background:transparent;border:0;box-shadow:none}
 .ft .menu li.az-open > .sub-menu{display:block}
 .ft .menu .sub-menu a{display:block;padding:7px 0;font-size:13px;border-bottom:0}
 .ft .menu li.az-open > a::after{transform:rotate(-135deg);margin-top:-3px}
}
@media(max-width:640px){
 .ft .menu{gap:13px;font-size:12.5px}
}

/* ===== Contact Form 7 适配 =====
   表单由 CF7 渲染（真提交：后台 Flamingo 存档 + 邮件通知），
   这里让它的外观与主题自带 .form 一致。
   两套配色：浅底区块（联系页 inquiry）为默认；深底区块（首页 CTA .cta）单独覆盖。
   CF7 自带样式表由 functions.php 注销，避免两套规则打架。 */
.ft .wpcf7{position:relative}
/* v1.7.44：询盘表单由「两列」改为「单列全宽」——
   用户要求 Name / Email / WhatsApp 各占一整行，且与 Message 等宽。
   之前 name+email 并排、WhatsApp 单独一格却只占半宽，视觉上长短不齐。
   CF7 模板把所有字段塞进同一个 <p>，所以是两处网格都要改。 */
.ft .wpcf7-form{display:grid;grid-template-columns:1fr;gap:12px}
.ft .wpcf7-form>p{margin:0}
.ft .wpcf7-form>p:has(textarea),
.ft .wpcf7-form>p:has(input[type=submit]){grid-column:1/-1}
/* CF7 6.x 的隐藏域 fieldset 与空响应框会被网格当成可见项，各占一格出现"多余灰框" */
.ft .wpcf7-form .hidden-fields-container{display:none}
.ft .wpcf7-form .wpcf7-response-output{grid-column:1/-1}
.ft .wpcf7-form.init .wpcf7-response-output{display:none}
/* CF7 模板把所有字段塞在一个 <p> 里用 <br> 分隔 → 该 p 变单列，<br> 隐藏 */
.ft .wpcf7-form p:has(.wpcf7-form-control-wrap){display:grid;grid-template-columns:1fr;gap:12px}
.ft .wpcf7-form p br{display:none}
.ft .wpcf7-form p>.wpcf7-form-control-wrap{display:block;min-width:0}
.ft .wpcf7-form p>.wpcf7-form-control-wrap[data-name="your-message"],
.ft .wpcf7-form p>.wpcf7-form-control-wrap[data-name="your-drawing"],
.ft .wpcf7-form p>input[type=submit]{grid-column:1/-1}
.ft .wpcf7-form .wpcf7-form-control-wrap{display:block}
/* ---- 文件上传字段（v1.7.37 新增：CF7 核心自带 [file]，无需插件）----
   🔴 v1.7.44 **原生 file input 的界面文案会跟访客浏览器语言走**（中文系统/中文浏览器
      就显示「浏览…」「未选择文件。」），外贸站出现中文 unacceptable，且**无法用 CSS 改**。
      正解：把原生 input 完全隐藏（.az-file-input），自绘一个英文 label 按钮
      （.az-file-btn，文案 "Browse files"）—— 见 functions.php::az_inquiry_file_js。
      ↓ 保留的原生样式只作 JS 未执行时的兜底。 */
.ft .wpcf7-form input[type=file]{
 width:100%;height:auto;padding:11px 12px;font-size:14px;font-family:inherit;
 color:var(--ink);background:#fff;border:1px dashed var(--line);border-radius:var(--r);
 cursor:pointer;display:block}
.ft .wpcf7-form input[type=file]::-webkit-file-upload-button{
 margin:0 12px 0 0;padding:7px 14px;border:0;border-radius:calc(var(--r) - 1px);
 background:var(--acc);color:#fff;font-family:inherit;font-size:12.5px;font-weight:700;
 letter-spacing:.04em;text-transform:uppercase;cursor:pointer;transition:background .15s}
.ft .wpcf7-form input[type=file]::file-selector-button:hover{background:var(--acc2)}
.ft .wpcf7-form input[type=file].wpcf7-not-valid{border-color:#C0392B}
/* ---- v1.7.44 自绘上传按钮（英文文案，彻底摆脱浏览器界面语言）----
   原生 input 被 JS 藏起来，我们画一个 label 按钮 + 一行英文占位文案。
   ⚠️ 隐藏方式必须是「视觉隐藏」而不是 `display:none` / `visibility:hidden` ——
      display:none 会让 CF7 收不到值（表单提交拿不到文件），还可能被读屏软件跳过。
      这里用 absolute + 1px + opacity:0：不可见但仍在无障碍树与表单里。
      同理 .wpcf7-form 里凡是自绘控件的原生 counterpart 都按这个方式处理。 */
.ft .wpcf7-form input[type=file].az-file-input{
 position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
 clip:rect(0 0 0 0);white-space:nowrap;border:0;opacity:0}
.ft .wpcf7-form .az-file-drop{display:flex;align-items:center;gap:12px;
 padding:9px 12px;background:#fff;border:1px dashed var(--line);border-radius:var(--r);cursor:pointer}
.ft .wpcf7-form .az-file-drop:hover{border-color:var(--acc)}
.ft .wpcf7-form .az-file-btn{flex:0 0 auto;padding:8px 16px;border-radius:calc(var(--r) - 1px);
 background:var(--acc);color:#fff;font-family:inherit;font-size:12.5px;font-weight:700;
 letter-spacing:.04em;text-transform:uppercase;line-height:1.2;cursor:pointer;
 transition:background .15s;user-select:none}
.ft .wpcf7-form .az-file-btn:hover{background:var(--acc2)}
.ft .wpcf7-form .az-file-none{flex:1 1 auto;min-width:0;font-size:14px;line-height:1.5;
 color:var(--mut,#8B95A1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ft .wpcf7-form .az-file-drop:focus-within{outline:2px solid var(--acc);outline-offset:2px}
/* 🔴 v1.7.49：`.ft .cta .wpcf7-form .az-file-*` 一组深色规则已整体删除 ——
   #quote 实际带 cta 类（见 v1.7.48 铁律），这组半透明白规则会压过浅色修复。
   询盘三处（#quote/#inquiry/弹窗）现已全部浅色，深色版只剩 demo 站有意义。 */
/* v1.7.49 选文件后的显性反馈（JS 切 .az-file-none 的状态类）：
   有效文件=绿 ✓；超限/类型错=红。选择器带 .has-file/.is-bad 提特异性，稳压占位灰 */
.ft .wpcf7-form .az-file-none.has-file{color:#1E7B34;font-weight:600}
.ft .wpcf7-form .az-file-none.is-bad{color:#C0392B;font-weight:600}
/* 选好文件后 JS 追加的文件名提示（普通=灰，超限/类型错=红） */
.ft .wpcf7-form .az-file-picked{display:block;margin-top:7px;font-size:12.5px;line-height:1.5;
 color:var(--mut,#8B95A1);word-break:break-all}
.ft .wpcf7-form .az-file-picked.is-bad{color:#C0392B;font-weight:600}
.ft .wpcf7-form input[type=text],
.ft .wpcf7-form input[type=email],
.ft .wpcf7-form input[type=tel],
.ft .wpcf7-form select,
.ft .wpcf7-form textarea{
 width:100%;padding:13px 14px;font-size:14.5px;
 background:#fff;border:1px solid var(--line);border-radius:var(--r);
 color:var(--ink);font-family:inherit}
/* CF7 模板 textarea rows=10 会渲染 200+px，压到固定高度与左栏视觉齐平（仍可拖拽调高） */
.ft .wpcf7-form textarea{height:96px;min-height:88px;resize:vertical}
.ft .wpcf7-form ::placeholder{color:var(--mut)}
.ft .wpcf7-form input[type=submit]{
 width:100%;margin:0;padding:13px 22px;border:0;border-radius:var(--r);cursor:pointer;
 background:var(--acc);color:#fff;font-family:var(--az-fh);font-size:14px;
 letter-spacing:.05em;text-transform:uppercase}
.ft .wpcf7-form input[type=submit]:hover{background:var(--acc2)}
/* 🔴 v1.7.49：`.ft .cta .wpcf7-form input/textarea/placeholder/select` 深色整组已删 ——
   #quote/#inquiry 都带 cta 类但均为浅色（section#id 覆盖早已生效），深色版只剩 demo 站。
   校验与提交反馈 */
.ft .wpcf7-form .wpcf7-not-valid-tip{display:block;margin-top:5px;font-size:12.5px;color:#C0392B}
.ft .wpcf7-form input.wpcf7-not-valid,
.ft .wpcf7-form textarea.wpcf7-not-valid{border-color:#C0392B}
/* 🔴 v1.7.49：`.ft .cta .wpcf7-response-output{color:#fff}` 等 4 条深色规则已删 ——
   #quote 实际带 cta 类（v1.7.48 铁律），白字压浅底=成功提示完全看不见（用户实测踩坑）。 */
.ft .wpcf7-response-output{margin:12px 0 0;padding:12px 14px;font-size:14px;
 border-radius:var(--r);border:1px solid var(--line);background:#fff;color:var(--steel)}
/* v1.7.49 CF7 6.x：状态类加在 **form 元素** 上（sent/invalid/failed/spam），
   响应框的 .wpcf7-mail-sent-ok 等类在 6.x 已不存在。旧版类选择器保留兼容。 */
.ft .wpcf7-form.sent .wpcf7-response-output,
.ft .wpcf7-response-output.wpcf7-mail-sent-ok{
 border-color:#3FB950;background:rgba(63,185,80,.12);color:#1E7A34;font-weight:600}
.ft .wpcf7-form.invalid .wpcf7-response-output,
.ft .wpcf7-form.failed .wpcf7-response-output,
.ft .wpcf7-form.spam .wpcf7-response-output,
.ft .wpcf7-response-output.wpcf7-validation-errors,
.ft .wpcf7-response-output.wpcf7-mail-sent-ng,
.ft .wpcf7-response-output.wpcf7-spam-blocked{
 border-color:#E0593B;background:rgba(224,89,59,.12);color:#A4341B}
/* 浅底询盘区（#quote/#inquiry）显式覆盖，别靠书写顺序（铁律） */
.ft section#quote .wpcf7-response-output,.ft section#inquiry .wpcf7-response-output{
 background:#fff;color:var(--steel,#3F474E)}
.ft section#quote .wpcf7-form.sent .wpcf7-response-output,
.ft section#inquiry .wpcf7-form.sent .wpcf7-response-output{
 border-color:#3FB950;background:rgba(63,185,80,.12);color:#1E7A34;font-weight:600}
/* 🔴 v1.7.51：主题 dequeue 了 CF7 官方 styles.css，screen-reader-response 的
   官方隐藏规则不在页面上 —— CF7 6.x 提交后会把消息同时写进这个无障碍区，
   不隐藏就会以裸文本显示在表单顶部（弹窗顶部那条「Thanks」就是它）。
   用 CF7 同款 clip 手法：视觉隐藏但对读屏软件可访问，别用 display:none */
.ft .wpcf7 .screen-reader-response{
 position:absolute!important;overflow:hidden!important;
 clip:rect(1px,1px,1px,1px)!important;clip-path:inset(50%)!important;
 height:1px!important;width:1px!important;margin:-1px!important;
 padding:0!important;border:0!important;word-wrap:normal!important;
 pointer-events:none!important}
/* v1.7.53 防御：这三类元素任何情况下都不许拦截点击 */
.ft .wpcf7-spinner{pointer-events:none!important}
.ft .az-send-note{pointer-events:none!important}
.ft .wpcf7-response-output{pointer-events:none}
/* v1.7.52 方案A：提交即时反馈（大文件上传期间按钮变化 + 提示行） */
.ft .wpcf7-form.az-sending{opacity:.92}
.ft .wpcf7-form.az-sending input[type=submit]{
 opacity:.7;cursor:progress;background:var(--acc,#E8590C)}
.ft .az-send-note{margin:9px 0 0;font-size:12.5px;line-height:1.5;color:var(--mut,#8B95A1)}
/* 空响应框不占位：提交前 / 成功清空后避免留一块空白框 */
.ft .wpcf7-response-output:empty{
 display:none!important;margin:0!important;padding:0!important;border:0!important}
/* 🔴 v1.7.51：CF7 6.x 提交成功给克隆表单加 [hidden] 隐藏表单、只留成功卡，
   但作者样式 .wpcf7-form{display:grid} 会把 hidden 的 UA display:none 压掉
   —— 成功卡只能挤在表单下面。!important 扳回来 */
.ft .azwa-box form.wpcf7-form[hidden]{display:none!important}
.ft .wpcf7-spinner{display:none}
@media(max-width:640px){
 .ft .wpcf7-form{grid-template-columns:1fr}
 .ft .wpcf7-form p:has(.wpcf7-form-control-wrap){grid-template-columns:1fr}
}

/* ===== 布局变体（C1 编排产物）================================================
   类名 lv-* 由 blocks_home.py 依据 agents/c1_compose 的 layout_plan.json 挂到对应板块。
   同一个板块换一个 lv-* 就是另一套排版 —— 这是「不同行业跑出来结构真的不同」的落地层。
   不传 --plan 时不加任何类，以下规则全部不命中，视觉保持原样。 */

/* —— 首屏 Hero：同一张 cover，靠对齐 / 高度 / 背景定位 / 遮罩方向做出不同气质 —— */
.ft .hero.lv-full-bleed{min-height:720px}
.ft .hero.lv-full-bleed .wp-block-cover__inner-container{max-width:820px;margin:0 auto;text-align:center}
.ft .hero.lv-split-left{min-height:600px}
.ft .hero.lv-split-left .wp-block-cover__inner-container{max-width:600px;margin:0 auto 0 0;text-align:left}
.ft .hero.lv-split-left .wp-block-cover__image-background{object-position:74% center}
.ft .hero.lv-split-left .wp-block-cover__background{opacity:1;
 background:linear-gradient(90deg,rgba(16,20,24,.95) 0%,rgba(16,20,24,.90) 32%,rgba(16,20,24,.38) 62%,rgba(16,20,24,0) 100%)}
.ft .hero.lv-split-right{min-height:600px}
.ft .hero.lv-split-right .wp-block-cover__inner-container{max-width:600px;margin:0 0 0 auto;text-align:left}
.ft .hero.lv-split-right .wp-block-cover__image-background{object-position:26% center}
.ft .hero.lv-split-right .wp-block-cover__background{opacity:1;
 background:linear-gradient(270deg,rgba(16,20,24,.95) 0%,rgba(16,20,24,.90) 32%,rgba(16,20,24,.38) 62%,rgba(16,20,24,0) 100%)}
.ft .hero.lv-alternating{min-height:560px}
.ft .hero.lv-alternating .wp-block-cover__inner-container{max-width:640px;margin:0 auto 0 0;text-align:left}
.ft .hero.lv-alternating .wp-block-cover__image-background{object-position:70% 42%}

/* —— 产品线：两列大图 / 参数行 / 图文交替 —— */
.ft .grid.g3.lv-grid-2-wide{grid-template-columns:repeat(2,1fr);gap:26px}
.ft .grid.g3.lv-grid-2-wide .pcard .ph{aspect-ratio:16/9}
.ft .grid.g3.lv-list-rows{grid-template-columns:1fr;gap:12px}
.ft .grid.g3.lv-list-rows .pcard{display:flex;flex-direction:row;align-items:stretch}
.ft .grid.g3.lv-list-rows .pcard .ph{flex:0 0 190px;width:190px;aspect-ratio:1;border-right:1px solid var(--line)}
.ft .grid.g3.lv-list-rows .pcard .bd{padding:16px 22px;display:flex;flex-direction:column;justify-content:center}
.ft .grid.g3.lv-alternating{grid-template-columns:1fr;gap:30px}
.ft .grid.g3.lv-alternating .pcard{display:flex;flex-direction:row;align-items:stretch}
.ft .grid.g3.lv-alternating .pcard:nth-child(even){flex-direction:row-reverse}
.ft .grid.g3.lv-alternating .pcard .ph{flex:0 0 46%;width:46%;aspect-ratio:4/3}
.ft .grid.g3.lv-alternating .pcard .bd{padding:28px 34px;display:flex;flex-direction:column;justify-content:center}

/* —— 为什么选我们：紧凑四列 / 横向列表 / 双列横卡 —— */
/* 注意：该变体当前只落在 6 张卖点卡上，4 列会变成 4+2 不平衡，固定 3 列（3×2） */
.ft .grid.g3.lv-grid-4-compact{grid-template-columns:repeat(3,1fr);gap:16px}
.ft .grid.g3.lv-grid-4-compact .card{padding:22px 18px}
.ft .grid.g3.lv-grid-4-compact .card h3{font-size:15px;margin:12px 0 6px}
.ft .grid.g3.lv-grid-4-compact .card p{font-size:12.5px}
.ft .grid.g3.lv-compact-rows{grid-template-columns:1fr;gap:0}
.ft .grid.g3.lv-compact-rows .card{border:0;border-top:1px solid var(--line);border-radius:0;
 padding:20px 0;display:flex;gap:20px;align-items:flex-start}
.ft .grid.g3.lv-compact-rows .card .ic{flex:0 0 34px}
.ft .grid.g3.lv-two-col{grid-template-columns:repeat(2,1fr);gap:18px}
.ft .grid.g3.lv-two-col .card{display:flex;gap:16px;align-items:flex-start;padding:24px 22px}
.ft .grid.g3.lv-two-col .card .ic{flex:0 0 34px}

/* —— 质量与认证：认证墙 / 紧凑 —— */
.ft .split.lv-certs-wall>.wp-block-column:last-child{display:none}
.ft .split.lv-certs-wall .certs{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.ft .split.lv-certs-wall .cert{justify-content:center;padding:14px 10px;border:1px solid var(--line);
 border-radius:var(--r);background:#fff;font-weight:500}
.ft .split.lv-grid-4-compact>.wp-block-column:last-child{flex-basis:36%}
.ft .split.lv-grid-4-compact .certs{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}

/* —— 信任条：数字条（默认）↔ 分行带线 —— */
/* trust 里放的是 4 个大数字，list-rows 变体的 2 列行式会显得稀疏散架，这里强制回到一行 4 个居中 */
.ft .trust .grid.g4.lv-list-rows{grid-template-columns:repeat(4,1fr);gap:24px;text-align:center}
.ft .trust .grid.g4.lv-list-rows>.wp-block-column{border-top:0;padding:12px 0}

/* —— 应用领域：三列 / 两列大图 / 横向条目 —— */
.ft .grid.g4.lv-grid-3{grid-template-columns:repeat(3,1fr)}
.ft .grid.g4.lv-grid-2-wide{grid-template-columns:repeat(2,1fr);gap:24px}
.ft .grid.g4.lv-grid-2-wide .scene img{aspect-ratio:16/9}
.ft .grid.g4.lv-list-rows{grid-template-columns:repeat(2,1fr);gap:14px}

/* —— OEM/ODM 步骤 —— */
.ft .steps.lv-two-col{display:grid;grid-template-columns:repeat(2,1fr);gap:18px}
.ft .steps.lv-list-rows{display:grid;grid-template-columns:1fr;gap:0}
.ft .steps.lv-list-rows .step{border-top:1px solid var(--line);padding:16px 0 16px 62px}

/* —— 工厂：左图右文（默认）/ 镜像 / 通栏大图 —— */
.ft .split.lv-split-right{flex-direction:row-reverse}
.ft .split.lv-full-bleed{display:block}
.ft .split.lv-full-bleed>.wp-block-column{flex-basis:100%;max-width:100%}
.ft .split.lv-full-bleed>.wp-block-column:first-child{min-height:380px;margin-bottom:28px}

/* —— 生产流程 —— */
.ft .grid.g3.steps.lv-list-rows{grid-template-columns:1fr;gap:0}
.ft .grid.g3.steps.lv-list-rows .step{border-top:1px solid var(--line);padding:16px 0 16px 62px;display:flex;gap:22px;align-items:baseline}
.ft .grid.g3.steps.lv-two-col{grid-template-columns:repeat(2,1fr)}
/* 时间轴：左侧一条竖线串起全部序号，适合「从原料到出货」的连续工序。
   注意 .step 的序号是绝对定位（靠 padding-left 留位），所以任何改 .step 内边距的
   变体都必须保留 62px 左内边距，否则序号会压在文字上。 */
.ft .steps.lv-timeline{display:grid;grid-template-columns:1fr;gap:0}
.ft .grid.g3.steps.lv-timeline{grid-template-columns:1fr;gap:0}
.ft .steps.lv-timeline .step{border:0;padding:18px 0 18px 62px}
.ft .steps.lv-timeline .step:before{left:22px}
.ft .steps.lv-timeline .step:after{content:"";position:absolute;left:8px;top:10px;bottom:-10px;width:1px;background:var(--line)}
.ft .steps.lv-timeline .step:last-child:after{display:none}

/* —— 小屏兜底：变体一律退回单列 / 两列，避免挤压 —— */
@media(max-width:900px){
 .ft .grid.g3.lv-grid-2-wide,.ft .grid.g3.lv-grid-4-compact,
 .ft .grid.g3.lv-two-col{grid-template-columns:repeat(2,1fr)}
 .ft .trust .grid.g4.lv-list-rows{grid-template-columns:repeat(2,1fr)}
}
@media(max-width:640px){
 .ft .grid.g3.lv-grid-2-wide,.ft .grid.g3.lv-grid-4-compact,
 .ft .grid.g3.lv-two-col{grid-template-columns:1fr}
 .ft .trust .grid.g4.lv-list-rows{grid-template-columns:repeat(2,1fr);gap:8px 24px}
 .ft .grid.g3.lv-list-rows .pcard,.ft .grid.g3.lv-alternating .pcard{flex-direction:row}
 .ft .grid.g3.lv-alternating .pcard:nth-child(even){flex-direction:row}
 .ft .grid.g3.lv-list-rows .pcard .ph{flex:0 0 120px;width:120px}
 .ft .split.lv-certs-wall .certs{grid-template-columns:repeat(2,1fr)}
}

/* ===== 归档网格固定一排三个（用户拍板 2026-10-05）=====
   基础层 .grid.g3 是 auto-fit minmax(280px,1fr)：
   产品目录右栏被 264px 侧栏挤窄后只装得下 2 列，与文章目录节奏不一致。
   目录/归档页是卡片墙，固定 3 列（窄屏降 2 列、1 列），全站节奏统一。 */
.ft .az-shop-main .grid.g3,
.ft .az-archive .grid.g3,
.ft .az-prod .grid.g3{grid-template-columns:repeat(3,1fr)}
@media(max-width:960px){
 .ft .az-shop-main .grid.g3,.ft .az-archive .grid.g3,.ft .az-prod .grid.g3{grid-template-columns:repeat(2,1fr)}
}
@media(max-width:620px){
 .ft .az-shop-main .grid.g3,.ft .az-archive .grid.g3,.ft .az-prod .grid.g3{grid-template-columns:1fr}
}

/* ===== 作者资料模块（详情页底部，用户拍板 2026-10-05 同日两轮调整，规则见规范文档 §4.7）=====
   单品详情页左栏内，**一个大框 .az-author-box** 装全部内容：标题 + 作者卡（头像 | 品牌名+
   两行介绍+社交）+ Latest entries = 4 篇随机文章**只显示标题**（小字体，压模块高度；
   用户明确不要产品大卡——太高）。作者卡与文章列表同一框内，不再两张皮。
   社交默认不渲染；无任何 tawk 类外链客服。 */
/* ⚠️ 关键：基础层 `.ft section{padding:92px 0}` 会给所有 section 加 92px 上下内边距。
   .az-author 是 <section>，若不清零，实际间距 = 92+margin，看起来永远"缩不动"。
   用户拍板 2026-10-05：规格表与作者大框间距 = 15px（曾误缩 margin 到 15 仍无效，根因在此）。 */
.ft .az-author{padding:0;margin-top:15px}
.ft .az-author-box{border:1px solid var(--line);border-radius:var(--r);background:#fff;
 padding:26px 30px 24px}
.ft .az-author-h{font-size:15px;font-weight:600;color:var(--ink);margin:0 0 16px}
.ft .az-author-card{display:flex;align-items:center;gap:22px;
 padding-bottom:20px;border-bottom:1px solid var(--line)}
.ft .az-author-card .avatar{width:84px;height:84px;flex:0 0 84px;border-radius:10px;
 object-fit:cover;display:block;overflow:hidden}
.ft .az-author-card .avatar.ph-letter{display:flex;align-items:center;justify-content:center;
 background:var(--ink);color:#fff;font:600 32px/1 var(--az-fh,'Montserrat',sans-serif)}
.ft .az-author-card .info{flex:1;min-width:0}
.ft .az-author-card .name{margin:0 0 7px;font-size:15px;font-weight:600;color:var(--ink);
 font-family:var(--az-fh,'Montserrat',sans-serif)}
.ft .az-author-card .desc{margin:0;font-size:13.5px;line-height:1.6;color:var(--steel)}
.ft .az-author-card .social{display:flex;gap:10px;margin-top:12px}
.ft .az-social{display:flex;align-items:center;justify-content:center;width:30px;height:30px;
 border-radius:6px;background:var(--ink);color:#fff;text-decoration:none;transition:background .15s}
.ft .az-social:hover{background:var(--acc);color:#fff}
.ft .az-latest-h{font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;
 color:var(--steel);margin:18px 0 10px}
/* 4 个产品卡：左栏内等宽横排 1 排（缩卡片不换行，用户硬性要求）。
   卡片本身复用全局 az_product_card（.pc-media 图可点 + .pc-link 整卡可点），此处只管网格。 */
.ft .az-author-items{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:18px}
/* compact 卡（v1.7.6 定稿：图 + 日期 + 标题，无角标无摘要无按钮）：
   标题/字号已对齐介绍段。角标 .pc-cat 样式保留备用（v1.7.5 曾启用，v1.7.6 用户拍板去掉）。 */
.ft .az-author-items .prodcard.compact .pc-media{position:relative}
.ft .az-author-items .prodcard.compact .pc-cat{position:absolute;top:8px;left:8px;z-index:3;
 background:var(--ink,#14181C);color:#fff;font:600 10.5px/1.2 var(--az-fh,'Montserrat',sans-serif);
 padding:3px 8px;border-radius:4px;letter-spacing:.02em;text-transform:uppercase;pointer-events:none}
.ft .az-author-items .prodcard.compact .bd{padding:12px 13px 14px}
.ft .az-author-items .prodcard.compact .pc-date{display:block;margin:0 0 4px;font-size:12px;
 line-height:1.4;color:var(--steel);font-family:inherit;letter-spacing:normal}
.ft .az-author-items .prodcard.compact h3{margin:0;min-height:0;
 font-family:inherit;font-weight:400;font-size:11.5px;line-height:1.5;
 letter-spacing:normal;text-transform:none}
@media(max-width:760px){
 .ft .az-author-box{padding:20px 18px}
 .ft .az-author-card{flex-direction:column;align-items:flex-start;gap:14px}
 .ft .az-author-items{grid-template-columns:repeat(2,1fr)}
}

/* Related products（v1.7.12 用户拍板重做）：**不再是底部全宽大板块**，收进左栏、
   紧跟作者板块下方；默认**随机 3 个**（orderby=rand，排除当前）；卡片标题 16.5→14.5px（小 2 号）。
   ⚠️ 同 .az-author：这是 <section>，必须 padding:0 清掉基础层 `.ft section{padding:92px 0}`。 */
.ft .az-rel-in{padding:0;margin-top:70px}
/* v1.7.13 用户拍板：标题黑色、字号放大（15→20px）、居中不靠左 */
.ft .az-rel-h{margin:0 0 18px;font-size:20px;font-weight:600;color:var(--ink);text-align:center}
.ft .az-rel-items{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
/* 卡片标题缩小 2 号（16.5 → 14.5px），并去掉固定最小高度，3 张卡更紧凑 */
.ft .az-rel-items .prodcard h3{font-size:14.5px;min-height:0;line-height:1.4}
.ft .az-rel-items .prodcard .bd{padding:14px 15px 16px}
@media(max-width:960px){.ft .az-rel-items{grid-template-columns:repeat(2,1fr)}}
@media(max-width:620px){.ft .az-rel-items{grid-template-columns:1fr}}

/* ===== 联系页「Offices and Main Labs」卡片（v1.7.28 用户拍板重做）=====
   版式参考竞品 ivdcdmo：深色卡头（标题反白）+ 徽标行 + 若干「标签: 值」行。
   整站只此一处用 .ob-*，改这里就够。
   ⚠️ 锚点是 #offices、section 的 class 就是 wrap（没有额外修饰类），所以靠 :target / 锚点定位不到，
      统一用 `.ft section#offices` 选择。
   v1.7.29：标题 + 副标题居中（用户要求）。 */
.ft section#offices{padding:56px 0 20px}
.ft section#offices .wp-block-heading,
.ft section#offices h2{text-align:center}
.ft section#offices .sub{margin:10px auto 30px;color:var(--mut,#8B95A1);font-size:15px;
 max-width:760px;text-align:center}
.ft .ob-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:22px}
.ft .ob-card{background:#fff;border:1px solid var(--line,#DFE3E8);border-radius:var(--r);
 overflow:hidden;display:flex;flex-direction:column}
/* 卡头：深色底 + 反白标题（用 --az-ink 保证与全站深色块一致）。
   ⚠️ WP 序列化后 h3 的 class 是 "wp-block-heading"、ob-card 里多包一层
   .wp-block-group__inner-container —— 所以标题/内容的选择器都要带上这两层，否则样式不命中。 */
.ft .ob-card h3.wp-block-heading{margin:0;padding:20px 22px;background:var(--az-ink,#14181C);
 color:#fff;font-size:17px;font-weight:600;letter-spacing:.01em;border-radius:0;
 text-transform:none}
.ft .ob-card>.wp-block-group__inner-container{display:flex;flex-direction:column;align-items:flex-start;
 flex:1;width:100%}
.ft .ob-badge{align-self:flex-start;margin:16px 22px 6px;padding:3px 12px;border-radius:999px;
 background:color-mix(in srgb,var(--acc) 12%,#fff);color:var(--acc);
 font-size:12px;font-weight:700;line-height:1.6}
.ft .ob-card .ob-row{margin:0;padding:0 22px 8px;font-size:13.5px;line-height:1.7;
 color:var(--mut,#8B95A1);display:flex;gap:8px}
.ft .ob-card .ob-row b{color:var(--ink);font-weight:600;flex:0 0 auto;min-width:66px}
/* 最后一行是 Hours，卡片底部留白由它撑；WP 会给 <p> 加 wp-block-paragraph，选择器要跟上 */
.ft .ob-card .ob-row.wp-block-paragraph:last-child{padding-bottom:20px}
@media(max-width:980px){.ft .ob-grid{grid-template-columns:1fr;gap:18px}}

/* ===== 联系页 #inquiry：浅色版询盘区（v1.7.29 用户要求）=====
   背景 .ft .cta 是深色 #0F1216，与页脚太近 → **只把 Contact 页这一块改成浅色**，
   首页 #quote 仍保持深色（那里是深色首页上的深色块，视觉是对的）。
   正文/标题/表单标签全部改深色；输入框改白底浅边。 */
.ft section#inquiry{background:var(--az-bg2,#FAFBFC);color:var(--ink)}
.ft section#inquiry h1,.ft section#inquiry h2,.ft section#inquiry .wp-block-heading,
.ft section#inquiry .eyebrow,.ft section#inquiry p{color:var(--ink)}
.ft section#inquiry .eyebrow{color:var(--acc)}
.ft section#inquiry .promise{color:var(--steel)}
/* 左栏 WhatsApp 幽灵按钮：深色版是白框白字，浅底上要改成深色框深字 */
.ft section#inquiry .wa a{display:inline-flex;align-items:center;gap:8px;
 padding:12px 20px;border:1px solid var(--ink);color:var(--ink);
 font-size:13.5px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;
 text-decoration:none;transition:background .15s,color .15s}
.ft section#inquiry .wa a:hover{background:var(--ink);color:#fff}
/* CF7 表单控件：白底 + 浅边 + 深色占位符 */
.ft section#inquiry .wpcf7-form input[type=text],
.ft section#inquiry .wpcf7-form input[type=email],
.ft section#inquiry .wpcf7-form input[type=tel],
.ft section#inquiry .wpcf7-form select,
.ft section#inquiry .wpcf7-form textarea{
 background:#fff !important;color:var(--ink) !important;
 border:1px solid var(--line,#DFE3E8) !important}
.ft section#inquiry .wpcf7-form ::placeholder{color:var(--mut,#8B95A1) !important}
.ft section#inquiry .wpcf7-not-valid-tip{color:#C8102E}

/* ===== FAQ 独立页（v1.7.30 建页，v1.7.31 用户拍板改版）=====
   一块两栏：左 1/3（品牌介绍 + 产品线纯文字 + 引导咨询 + Contact 按钮）、
             右 2/3（FAQ 折叠问答，与首页同一份内容，第 1 条默认展开）。
   ⚠️ 宽度比 1:2 是竞品的比例（col-33 / col-66），不要改成 1:1。
   ⚠️ 右栏已删掉 .head（eyebrow + 大标题 + 副标题），只剩 .faqwrap。 */
.ft .faqcols{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr);gap:56px;align-items:start}
.ft .faqcols>.wp-block-column{min-width:0}

/* ---- 左栏字号与配色：v1.7.34 定稿 ----
   字号（v1.7.33 一度把引导段也拉到 16px，v1.7.34 用户纠正：引导段应与**介绍段**同 13px）：
     h2「Every day help for our customers」= 16px（对齐右栏问题标题 .ft summary）
     h3「If you need more help」          = 16px
     p 介绍段 = 13px；p.faq-more-text 引导段 = **13px**（与介绍段相同）
     p.faq-copy 产品线三条 = 13px
   配色（v1.7.34）：标题**恢复默认深色**，只有标题里 `<span class="hl">` 包住的那半段上主色：
     "Every day help for |our customers" → 只有 our customers 橙色
     "If you need |more help"           → 只有 more help 橙色
     （实现见 blocks_pages.py `build_faq()` 里的 `_hl()`，文案里用 `|` 分隔主色段）
     正文段 / 产品线 / 引导段统一 var(--steel)。
   产品线三条前面加「·」表示列表（纯 CSS ::before，不改 HTML 文本）。
   ⚠️ 这套规则必须用 `.faqcols>.wp-block-column:first-child` 限定，只影响左栏，右栏问答不动。 */
.ft .faqcols>.wp-block-column:first-child h2{font-size:16px;line-height:1.3}
.ft .faqcols>.wp-block-column:first-child h3{font-size:16px;line-height:1.3;margin:0 0 9px}
/* 标题里只有 <span class="hl"> 包住的那半段上主色，其余保持默认深色 */
.ft .faqcols>.wp-block-column:first-child h2 .hl,
.ft .faqcols>.wp-block-column:first-child h3 .hl{color:var(--acc)}
.ft .faqcols>.wp-block-column:first-child p{font-size:13px;line-height:1.72;margin:0 0 9px;color:var(--steel)}
/* 产品线三条 = 与介绍段同字号同颜色，前面加「·」当列表项（v1.7.33 起是纯文字无标记） */
.ft .faqcols>.wp-block-column:first-child p.faq-copy{position:relative;padding-left:13px;margin:0 0 4px}
.ft .faqcols>.wp-block-column:first-child p.faq-copy::before{content:"·";position:absolute;left:0;top:0;font-weight:700}
/* 产品线最后一条（Precision Ceramic Components）与下面的 h3「If you need more help」
   拉开 70px —— 用户拍板的分段间距（v1.7.36）。h3 属于「引导咨询」板块，与上方介绍区分开。 */
.ft .faqcols>.wp-block-column:first-child h3{margin-top:70px}
/* 引导段 = 与介绍段同为 13px（v1.7.33 曾误设 16px，v1.7.34 纠正） */
.ft .faqcols>.wp-block-column:first-child p.faq-more-text{font-size:13px;line-height:1.72;color:var(--steel);margin:0 0 4px}
/* Contact 按钮（12px，与左栏 16px 档位协调） */
.ft .faq-cta{margin:16px 0 0}
.ft .faq-cta .btn{display:inline-flex;align-items:center;gap:8px;padding:12px 26px;
 border-radius:999px;background:var(--acc);color:#fff;font-size:12px;font-weight:700;
 letter-spacing:.06em;text-transform:uppercase;text-decoration:none;transition:background .15s}
.ft .faq-cta .btn:hover{background:var(--az-acc2,var(--acc))}
/* 右栏：第 1 条默认展开（HTML 已带 open，这里只保证展开态的排版不留多余上边距） */
.ft .faqcols .faqwrap>.wp-block-details:first-child{margin-top:0}
@media(max-width:980px){
 .ft .faqcols{grid-template-columns:1fr;gap:34px}
}

/* ===== 文章目录页 / 归档页：与产品目录页同款两栏（v1.7.17 用户拍板）=====
   整站归档视觉统一：左卡片网格（一排两篇）+ 右侧 搜索/Categories/About us/Tags。
   home.php（文章目录页）与 archive.php（分类/标签/日期/作者/搜索）共用同一套函数。 */
.ft .az-bloglist .az-shop{grid-template-columns:264px minmax(0,1fr)}
/* 两列锁死：基础层 .g2 是 auto-fit minmax(320px,1fr)，侧栏占位后容器变窄会掉成 1 列 */
.ft .az-archive .az-shop-main .grid.g2{grid-template-columns:repeat(2,1fr)}
@media(max-width:1080px){.ft .az-archive .az-shop-main .grid.g2{grid-template-columns:1fr}}
/* 标签云：字号统一，不随文章数放大。
   🔴 v1.7.59：原来靠 PHP 的 wp_tag_cloud 输出内联 style="font-size:18px/15px" 做分级，
   但内联样式优先级高于 class → 侧栏只有 264px，18px 的标签一个就占满一行，
   24 个标签把侧栏拉到 1000+px 高（用户报"字体太大，一个标签占一行"）。
   侧栏窄，统一 12px + 紧凑 padding 才是对的；分级字号留给顶部大标签云，不要放在侧栏。 */
.ft .side-tags .tagcloud{display:flex;flex-wrap:wrap;gap:6px 6px}
.ft .side-tags .tagcloud a{font-size:12px !important;line-height:1.2;color:var(--mut,#8B95A1);
 text-decoration:none;padding:4px 9px;border:1px solid var(--line,#DFE3E8);border-radius:999px;
 white-space:nowrap;max-width:100%}
.ft .side-tags .tagcloud a:hover,.ft .side-tags .tagcloud a.on{color:var(--acc);
 border-color:var(--acc);background:color-mix(in srgb,var(--acc) 8%,#fff)}
/* v1.7.18：搜索拆成独立盒子后，表单不再需要底部留白（原来它下面还接着分类列表） */
.ft .side-searchbox .side-search{margin:0}

/* ===== 文章详情页（v1.7.20 用户拍板：骨架同产品页，内容换文章）=====
   结构：az-shop 两栏 = 右栏 az_post_sidebar() + 左栏（大图/元信息/正文/本文标签/作者框/Related）。
   头部是**通栏大图在上、正文在下**（与产品页「图|正文」左右分列不同，是用户明确要求）。 */
.ft .az-post{padding:56px 0 70px}
/* 主栏在左、侧栏在右 —— 必须和 single-product.php 的 HTML 顺序一致（主栏先输出）。
   ⚠️ v1.7.20 踩过：把侧栏写在前面 → 侧栏跑到左边，与产品页左右颠倒，用户要求改回来。
   同时显式写死 grid 列宽与 order，别指望基础层 .az-prod 的规则（它只作用于 .az-prod）。 */
.ft .az-post .az-shop{grid-template-columns:minmax(0,1fr) 264px}
.ft .az-post .az-shop-main{order:1}
.ft .az-post .az-shop-side{order:2}
/* ① 开头通栏大图：比例由 PHP 输出 --az-hero-ar（Customizer 可调，默认 16/9），后台关掉开关则整块不输出 */
.ft .az-post-hero{margin:0 0 34px;border:1px solid var(--line,#DFE3E8);border-radius:var(--r);
 overflow:hidden;background:var(--az-bg,#F1F3F5);aspect-ratio:var(--az-hero-ar,16/9)}
.ft .az-post-hero img{width:100%;height:100%;object-fit:cover;display:block}
/* ② 元信息一行：日期 · 分类（v1.7.21 用户反馈"间距有问题"，与产品页留白对齐后略放大） */
.ft .az-post-meta{display:flex;align-items:center;gap:14px;flex-wrap:wrap;
 margin:0 0 30px;font-size:13px;color:var(--mut,#8B95A1)}
.ft .az-post-meta .d{letter-spacing:.02em}
.ft .az-post-meta .c{display:inline-flex;align-items:center;padding:4px 10px;border-radius:999px;
 background:color-mix(in srgb,var(--acc) 10%,#fff);color:var(--acc);
 font-size:12px;font-weight:600;text-decoration:none}
.ft .az-post-meta .c:hover{background:var(--acc);color:#fff}
/* ③ 正文：给一层浅色底 + 内边距，长文更好读（与产品页正文区分开） */
.ft .az-post-body{font-size:16px;line-height:1.78;color:var(--ink)}
.ft .az-post-body>*:first-child{margin-top:0}
.ft .az-post-body>*:last-child{margin-bottom:0}
.ft .az-post-body p{margin:0 0 18px}
.ft .az-post-body h2{margin:34px 0 14px;font-size:24px;line-height:1.3}
.ft .az-post-body h3{margin:28px 0 12px;font-size:19px;line-height:1.35}
.ft .az-post-body ul,.ft .az-post-body ol{margin:0 0 20px;padding-left:24px}
.ft .az-post-body li{margin:0 0 8px}
.ft .az-post-body img{border-radius:var(--r)}
.ft .az-post-body blockquote{margin:0 0 20px;padding:14px 18px;border-left:3px solid var(--acc);
 background:var(--az-bg2,#FAFBFC);color:var(--mut,#8B95A1)}
.ft .az-post-body table{width:100%;border-collapse:collapse;margin:0 0 20px;font-size:14.5px}
.ft .az-post-body th,.ft .az-post-body td{border:1px solid var(--line,#DFE3E8);padding:10px 12px;text-align:left}
.ft .az-post-body th{background:var(--bg);font-weight:600}
.ft .az-post-body pre,.ft .az-post-body code{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:13.5px}
.ft .az-post-body pre{overflow-x:auto;padding:14px;background:var(--az-bg2,#FAFBFC);border-radius:var(--r)}
/* ④ 本文标签（一排小药丸）——与右栏「全部 Tags」不同，这里只显示这一篇自己的标签 */
.ft .az-post-tags{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:28px 0 0;
 padding-top:20px;border-top:1px solid var(--line,#DFE3E8)}
.ft .az-post-tags .lab{font-size:12px;font-weight:600;letter-spacing:.08em;
 text-transform:uppercase;color:var(--mut,#8B95A1);margin-right:2px}
.ft .az-post-tags a{display:inline-flex;align-items:center;padding:5px 11px;border-radius:999px;
 border:1px solid var(--line,#DFE3E8);font-size:13px;line-height:1;color:var(--mut,#8B95A1);
 text-decoration:none}
.ft .az-post-tags a:hover{color:var(--acc);border-color:var(--acc);
 background:color-mix(in srgb,var(--acc) 8%,#fff)}
@media(max-width:980px){
 .ft .az-post .az-shop{grid-template-columns:1fr;gap:34px}
 .ft .az-post{padding-bottom:56px}
}
/* ===== 悬浮件：WhatsApp 左下 + 一键回到顶部右下（v1.7.15 用户拍板）=====
   .floatwa 的定位在基础层 build_full_home.py 已改为 left:22px（右下让给回顶按钮）。
   两者同尺寸 54px 圆球、同位置距边 22px，视觉对称；JS 见 nav.js 末尾的 toTop 模块。 */
.ft .totop{position:fixed;right:22px;bottom:22px;z-index:999;width:54px;height:54px;
 border:0;border-radius:50%;background:var(--ink,#14181C);color:#fff;cursor:pointer;
 display:flex;align-items:center;justify-content:center;padding:0;
 box-shadow:0 6px 20px rgba(0,0,0,.28);transition:opacity .2s,visibility .2s,background .15s;
 visibility:hidden;opacity:0}
.ft .totop svg{width:24px;height:24px;fill:none;stroke:#fff;stroke-width:2.2;
 stroke-linecap:round;stroke-linejoin:round}
.ft .totop:hover{background:var(--acc,#C8102E)}
/* 滚过 320px 才淡入（JS 切 .az-on），避免页面顶部就杵着一个没用的按钮 */
.ft .totop.az-on{visibility:visible;opacity:1}

/* ===== 询盘区配色 + 左右高度对齐（v1.7.41 用户拍板，v1.7.42 加深底色 + 缩标题）=====
   ① 「黑底太扎眼」→ 首页 #quote 整块改**浅灰蓝底** + 深色字，与 Contact 页 #inquiry 同一套处理。
      ⚠️ 深色 CTA 样式在基础层 build_full_home.py 的 `.ft .cta{}`（`background:#0F1216`），
         这里用 `section#quote` 提高特异性覆盖 —— 别去改基础层（demo 站还要用）。
   ② 「左右高度不一致」→ .in 由 align-items:start 改成 **stretch**（两列等高），
      左栏改 flex 列，promise 用 margin-top:auto 沉到最底，与右栏表单底部齐平。 */
.ft section#quote{background:var(--az-bg2,#FAFBFC);color:var(--ink);padding:64px 0}
.ft section#quote h2,.ft section#quote p{color:var(--ink)}
.ft section#quote .eyebrow{color:var(--acc)}
.ft section#quote .in{align-items:stretch;gap:48px}
.ft section#quote .in>.wp-block-column:first-child{display:flex;flex-direction:column}
.ft section#quote .in>.wp-block-column:first-child>p.promise{margin-top:auto;padding-top:22px}

/* 浅底上的要点卡：白底 + 细边（深底版的半透明白边在浅底上看不见） */
.ft section#quote .points .cap{background:#fff;border-color:var(--line,#DFE3E8)}
.ft section#quote .points .cap>b{color:var(--ink)}
.ft section#quote .points .cap>p{color:var(--steel)}
.ft section#quote .promise .dot{background:var(--acc)}
/* 浅底上的表单：白底浅边深字 + 占位符灰 */
.ft section#quote .wpcf7-form input[type=text],
.ft section#quote .wpcf7-form input[type=email],
.ft section#quote .wpcf7-form input[type=tel],
.ft section#quote .wpcf7-form select,
.ft section#quote .wpcf7-form textarea{background:#fff;border-color:var(--line,#DFE3E8);color:var(--ink)}
.ft section#quote .wpcf7-form ::placeholder{color:var(--mut,#8B95A1)}
.ft section#quote .wpcf7-form input[type=file]{background:#fff;border-color:var(--line,#DFE3E8);color:var(--ink)}
.ft section#quote .wpcf7-form .az-file-picked{color:var(--mut,#8B95A1)}
.ft section#quote .wpcf7-form .az-file-picked.is-bad{color:#C0392B}
/* v1.7.49 上传反馈状态色（section#id 提特异性，别靠书写顺序） */
.ft section#quote .az-file-none.has-file,.ft section#inquiry .az-file-none.has-file{color:#1E7B34;font-weight:600}
.ft section#quote .az-file-none.is-bad,.ft section#inquiry .az-file-none.is-bad{color:#C0392B;font-weight:600}
.ft section#quote .wpcf7-form .wpcf7-not-valid-tip{color:#C0392B}
@media(max-width:980px){
 .ft section#quote{padding:44px 0}
 .ft section#quote .in{gap:32px}
}

/* v1.7.41：Contact 页 #inquiry 与首页 #quote 观感统一（浅底 + 左右等高） */
.ft section#inquiry{padding:64px 0}
.ft section#inquiry .in{align-items:stretch;gap:48px}
.ft section#inquiry .in>.wp-block-column:first-child{display:flex;flex-direction:column}
.ft section#inquiry .in>.wp-block-column:first-child>p.promise{margin-top:auto;padding-top:22px}
.ft section#inquiry .points .cap{background:#fff;border-color:var(--line,#DFE3E8)}
.ft section#inquiry .points .cap>b{color:var(--ink)}
.ft section#inquiry .points .cap>p{color:var(--steel)}
@media(max-width:980px){
 .ft section#inquiry{padding:44px 0}
 .ft section#inquiry .in{gap:32px}
}

/* ===== v1.7.42：询盘区真·浅底 + 标题缩小 3 号 =====
   ① 「没变成浅灰蓝底」→ 之前用的是 var(--az-bg2)，默认值 #FAFBFC 跟白底几乎看不出差别，
      而且这个变量客户能在 Customizer 里改掉。**改用硬编码底色**（不要用 --az-bg2 这类浅变量，
      肉眼要能分辨才行）。首页 #quote 与 Contact #inquiry 同步。
   ② 「标题小3号」→ 询盘区 h2 从 clamp(26,3.4vw,38) 压到 clamp(21,2.3vw,27)，
      比 Related 标题(20px)只大一档，与左栏正文的层级关系更稳。 */
.ft section#quote,.ft section#inquiry{background:#F4F1EC}
.ft section#quote h2,.ft section#inquiry h2{
 font-size:clamp(21px,2.3vw,27px);line-height:1.28;letter-spacing:-.005em;margin:0 0 18px}
.ft section#quote .in>.wp-block-column:first-child>p:not(.eyebrow):not(.promise),
.ft section#inquiry .in>.wp-block-column:first-child>p:not(.eyebrow):not(.promise){
 max-width:46ch;font-size:16px;line-height:1.72;color:var(--steel)}
.ft section#quote .promise,.ft section#inquiry .promise{font-size:14px;line-height:1.6}

/* v1.7.43：询盘左栏的三条产品线（复用 FAQ 页那三条，数据源 blocks_shared.PRODUCT_LINES）
   —— FAQ 页那套 .faq-copy 规则被 .faqcols 限定在 FAQ 左栏，询盘区要单独写一份同款。
   三条包在 .plines 组里（见 blocks_home.py / blocks_pages.py），好处：
   ① 整组的上下间距用组 margin 一次控制，不用 fragile 的 :first-of-type；
   ② 组里的 p 不再是 column 的直接子元素，不会被上面那条「左栏正文 16px + max-width:46ch」
      的 `p:not(...)` 通配规则误伤。 */
.ft section#quote .plines,.ft section#inquiry .plines{margin:18px 0 6px}
.ft section#quote p.faq-copy,.ft section#inquiry p.faq-copy{
 position:relative;padding-left:14px;margin:0 0 5px;
 font-size:15px;line-height:1.6;color:var(--steel)}
.ft section#quote p.faq-copy::before,.ft section#inquiry p.faq-copy::before{
 content:"·";position:absolute;left:0;top:0;font-weight:700;color:var(--acc)}

/* ===== 询盘左栏「能力要点」（v1.7.39 加 / v1.7.42 已下线）=====
   ⚠️ **三张要点卡用户已要求全部删掉**（卡片把左栏撑得比右侧表单高，左右永远等不了高）。
   现在 blocks_home.py / blocks_pages.py 三处 CTA 都不再输出 .points，
   下面这套 CSS 保留作备用 —— 若以后要恢复，只要在 copy 文件里把 CTA_POINTS 加回渲染即可。 */
.ft .cta .points{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:18px 0 0}
.ft .cta .points .cap{padding:11px 13px;border:1px solid rgba(255,255,255,.14);
 border-radius:var(--r);background:rgba(255,255,255,.04)}
.ft .cta .points .cap>b{display:block;font-size:13.5px;font-weight:600;color:#fff;line-height:1.4}
.ft .cta .points .cap>p{margin:3px 0 0;font-size:12.5px;line-height:1.55;color:rgba(255,255,255,.62)}
/* 第三张卡单独占满一行时不再显得孤立 */
.ft .cta .points .cap:last-child:nth-child(odd){grid-column:1/-1}
@media(max-width:560px){
 .ft .cta .points{grid-template-columns:1fr}
 .ft .cta .points .cap{padding:10px 12px}
 .ft .cta .points .cap>b{font-size:13px}
 .ft .cta .points .cap>p{font-size:12px}
}

/* ===== 作者框内的 compact 卡：产品卡与文章卡观感必须一致（v1.7.23 用户拍板）=====
   产品卡 .prodcard.compact 与文章卡 .post.compact 共用同一套尺寸/字号：
   图 + 日期（12px steel）+ 标题（11.5px/400/正文字体），无分类角标、无摘要、无按钮。
   ⚠️ v1.7.25：文章卡标题加 !important 兜底 —— 基础层 `.ft h1..h4{font-family:var(--az-fh);
   font-weight:600}` 与 `.ft .post h3{font-size:16.5px}` 特异性雖低但同源，
   某些环境下 h3 仍会被标题字体/粗体继承（用户截图反馈"太大太粗"）。
   用 !important + 更高特异性双重锁定，确保与产品卡像素级一致。 */
.ft .az-author-items .post.compact .bd{padding:12px 13px 14px}
.ft .az-author-items .post.compact .pc-date{display:block;margin:0 0 4px;font-size:12px;
 line-height:1.4;color:var(--steel);font-family:inherit;letter-spacing:normal}
.ft .az-author-items .post.compact h3,
.ft .az-author-items .post.compact h3 a{margin:0 !important;min-height:0;
 font-family:inherit !important;font-weight:400 !important;font-size:11.5px !important;
 line-height:1.5 !important;letter-spacing:normal !important;text-transform:none !important}
.ft .az-author-items .post.compact h3{color:var(--ink) !important}
.ft .az-author-items .post.compact h3 a{color:var(--ink) !important;text-decoration:none}
.ft .az-author-items .post.compact h3 a:hover{color:var(--acc) !important}

/* ===== Related 那组卡：去掉类目角标 + 标题不加粗（v1.7.24 用户拍板）=====
   两类卡（.prodcard / .post）都加 .plain；摘要与 View details / Read article 保留。
   ⚠️ 角标是 php 端不输出（不是 CSS 隐藏），所以 .plain 只负责标题字重。 */
.ft .az-rel-items .plain h3,
.ft .az-rel-items .plain h3 a{font-weight:400 !important}
.ft .az-rel-items .plain h3 a{color:var(--ink);text-decoration:none}
.ft .az-rel-items .plain h3 a:hover{color:var(--acc)}
/* 角标去掉后第一行就是标题，卡内留白相应收紧一点 */
.ft .az-rel-items .plain .bd{padding-top:16px}
/* v1.7.27：标题最多 3 行 + 摘要最多 3 行，都用硬裁切（用户截图反馈"错位"）。
   ⚠️ 上一版 line-clamp:4 + max-height:calc(1.65em*4) 有两个问题：
     ① 摘要段**本来没有行高样式**（只有 .prodcard 的摘要是 1.65），实际行高由 body 默认决定，
        max-height 按 1.65em 算就会**把第 3 行压掉一半**（用户截图里那行字被切一半）。
     ② 标题不限行 → 三张卡标题 3 行/4 行/2 行不齐，"READ ARTICLE"按钮就错位。
   正解：先把两处的 font-size / line-height **显式定死**（标题 16.5/1.35，摘要 14/1.65），
        再按各自行高算 max-height（标题 3 行 = 4.05em、摘要 3 行 = 4.95em）。
   line-clamp 是渐进增强，max-height 是兜底（老浏览器不会无限撑开）。 */
/* 🔴 v1.7.63 彻底修博客列表卡摘要被切一半（用户 2026-10-09 二次反馈）：
   ⚠️ **max-height 用 em 手算行高是不可行的** —— 同一元素上有两套字号
   （基础层13.5px/1.62=4.86em vs 这里 14px/1.65=4.95em），em 基于**各自字号**重算，
   后写的max-height:4.86em 生效但与实际字号不匹配 → 摘要第 3 行被切一半
   （用户截图里"…invest in custom extruded" 后半行消失）。
   ⚠️ 另外 `display:-webkit-box`（line-clamp 的实现）会**让元素脱离 flex 布局上下文**，
   导致同时写的 `flex:1` 失效、卡内按钮对齐也跟着坏。

   正解：**只保留 line-clamp，不写 max-height**。
   - line-clamp 是渐进增强：支持它的浏览器按 clamp 行数精确裁切并显示省略号；
     不支持的浏览器（老IE）不做限制 = 内容完整显示，比"切一半"好。
   - 卡内对齐靠 flex（.post / .bd column+ excerpt flex:1 + last-child margin-top:auto），
     不再用 max-height 硬算高度。 */
.ft .az-rel-items .plain h3,
.ft .grid .post h3{
 font-size:16.5px;line-height:1.35;
 display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;
 line-clamp:3;overflow:hidden}
.ft .az-rel-items .plain .excerpt,
.ft .grid .post .excerpt{
 font-size:14px;line-height:1.65;
 display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;
 line-clamp:3;overflow:hidden}}

/* ================================================================
   v1.7.45（用户六项拍板）
   ================================================================ */

/* ① 客户评价卡：三张卡内容行数不同 → 底部头像行没对齐（用户圈出第三张）
   🔴 根因：基础层 `.ft .quote p{...;flex:1}` 里 flex:1 只保证「填满剩余空间」，
      **不保证「最少多高」**。三张卡各自独立算高度：
      前两张评价 4 行、第三张 3 行 → 第三张整张卡矮一行，头像行跟着上移。
      → 基础层改不得（demo 站共用），这里用 ADDENDUM 提特异性：
      ① 给评价段一个 **min-height**（按最长那条的行数算），
      ② 三张卡外层 grid 加 `align-items:stretch`（同高由 grid 保证）。 */
.ft .grid.g3 .quote{min-height:100%}
.ft .grid.g3 .quote>p:not(.stars){
 flex:1 1 auto;min-height:6.2em;      /* 4 行 × 1.65 行高 = 6.6em，留一点余量 */
 display:flex;align-items:flex-start}
/* 第二条评价更短（3 行）时同样撑住，头像行仍贴底 */
.ft .grid.g3 .quote .stars{flex:0 0 auto}
.ft .grid.g3 .quote .who{flex:0 0 auto;margin-top:auto}

/* ② 工厂板块：右栏文字明显高于左图（用户要求左右等高）
   基础层 .split{align-items:center} 让两栏垂直居中，但**右栏内容本身太高**。
   用户拍板「整体字体都要小一些」→ 这一栏字号/行距/间距整体收一档。 */
.ft .split.factory h2{font-size:clamp(23px,2.4vw,29px);line-height:1.22;margin:0 0 12px}
.ft .split.factory p{font-size:14.5px;line-height:1.68;margin:0 0 12px}
.ft .split.factory .eyebrow{font-size:12px;margin:0 0 12px}
.ft .split.factory .klist{gap:9px}
.ft .split.factory .klist li{font-size:14px;line-height:1.62;padding-left:18px}
.ft .split.factory .klist li::before{width:7px;height:7px;top:8px}
@media(max-width:980px){
 .ft .split.factory h2{font-size:24px}
}

/* ③ 上传框提示文字与米灰底几乎同色（用户圈出「看不清」）—— v1.7.48 重修
   🔴 v1.7.45 这次修错了：只改了 `.ft .wpcf7-form` 那条，但**首页 #quote 的 class 里带 `cta`**
      （实测 `id="quote" class="wp-block-group cta"`）→ 命中了 ADDENDUM 里
      `.ft .cta .wpcf7-form .az-file-none{color:rgba(255,255,255,.6)}` 这条**深色 CTA 专用规则**。
      两者特异性相同（0,3,0），**写在后面的赢** → 白字压米灰底，几乎看不见。
      ⚠️ 这跟 v1.7.42「用 var(--az-bg2) 白改一场」是同一类坑：**同名 class 复用 +覆盖顺序**。
   正解：用 `section#quote` / `section#inquiry` 提特异性（0,2,1 > 0,3,0里的0,3,0要看具体权重，
      实际 #id 直接胜出），并且**删掉那条为深色 CTA 保留的 .cta 规则** —— 询盘区已全改浅色，
      深色版只在 demo 站有意义，留在成品站里只会捣乱。 */
.ft section#quote .az-file-drop,.ft section#inquiry .az-file-drop{
 background:#fff;border-color:#C2C8CF;padding:11px 12px}
.ft section#quote .az-file-none,.ft section#inquiry .az-file-none{
 color:var(--steel,#3F474E);font-size:13.5px}
.ft section#quote .az-file-btn,.ft section#inquiry .az-file-btn{background:var(--acc,#E8590C)}

/* ④ 文章卡：标题占满 3 行时，摘要被推到下面且**下半行被遮盖**（用户圈出）
   🔴 根因：标题 `max-height:4.05em`（=3行×1.35）看似刚好，但标题与摘要之间
      还有标题自身的下margin + 摘要的 line-height 计算误差，超出的半行被
      `.excerpt` 的 `overflow:hidden` 裁掉 → 视觉上"半行不见"。
   → 用户要求「标题和正文位置往上调整，READ ARTICLE 位置不变」：
      ① 摘要上移（负margin 抵消标题下方空隙）② 摘要行高略降，3 行正好放满。
   ⚠️ 底部 READ ARTICLE 的位置由 .post .lnk 控制，不动。 */
.ft .grid .post h3{margin-bottom:8px}
/* 🔴 v1.7.63 删掉这两行里的max-height —— 它是"摘要被切一半"的**直接元凶**：
   基础层这里写`font-size:13.5px` + `max-height:4.86em`（=3行×1.62，按 13.5px 算），
   但同一选择器在上方 clamp 段又写了 `font-size:14px`（em 基于各自字号重算 → 4.86em
   实际只够 2.8 行），第 3 行被 overflow:hidden 裁掉半行。
   现在统一交给 line-clamp 裁切（精确到行、带省略号），不再手算 em 高度。 */
.ft .grid .post .excerpt{margin-top:0;font-size:14px;line-height:1.65}
.ft .az-rel-items .plain .excerpt{font-size:14px;line-height:1.65}

/* ===== v1.7.45：左下角 WhatsApp 留资弹窗 =====
   图标 .azwa 在左下（回顶 .totop 在右下，不冲突）。点击**不跳聊天**（v1.7.39
   已删除 wa.me 外链：整站不给在线沟通），而是弹窗留资 —— 时差原因没人在线，
   但客户仍要能联系上。表单走 mailto:，零后端依赖。 */
/* v1.7.55：弹窗克隆用的隐藏表单源（每张页面都挂，保证无可见表单页也能弹窗）。
   必须包裹层 display:none —— 内部 .wpcf7-form{display:grid} 会盖掉 [hidden] 的默认 display:none。 */
.ft .azwa-cf7src{display:none!important}
.ft .azwa{position:fixed;left:22px;bottom:22px;z-index:999;width:52px;height:52px;
 border:0;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;
 background:#25D366;box-shadow:0 4px 16px rgba(0,0,0,.18);transition:transform .15s,box-shadow .15s}
.ft .azwa:hover{transform:scale(1.06);box-shadow:0 6px 20px rgba(0,0,0,.24)}
.ft .azwa svg{width:28px;height:28px;fill:#fff}
.ft .azwa-modal{position:fixed;inset:0;z-index:1200;display:flex;align-items:center;
 justify-content:center;padding:20px;background:rgba(11,14,17,.55)}
.ft .azwa-modal[hidden]{display:none}
.ft .azwa-box{position:relative;width:100%;max-width:560px;max-height:88vh;overflow:auto;
 background:#fff;border-radius:var(--r,4px);box-shadow:0 18px 50px rgba(0,0,0,.28);padding:26px 26px 22px}
.ft .azwa-x{position:absolute;right:12px;top:10px;width:32px;height:32px;border:0;background:none;
 font-size:26px;line-height:1;color:var(--mut,#8B95A1);cursor:pointer;border-radius:50%}
.ft .azwa-x:hover{background:var(--bg2,#FAFBFC);color:var(--ink,#14181C)}
.ft .azwa-head{display:flex;gap:14px;align-items:flex-start;margin:0 26px 16px 0}
.ft .azwa-ico{flex:none;width:42px;height:42px;border-radius:50%;background:#25D366;
 display:flex;align-items:center;justify-content:center}
.ft .azwa-ico svg{width:24px;height:24px;fill:#fff}
.ft .azwa-head h3{margin:0 0 5px;font-family:var(--az-fh,'Montserrat',sans-serif);
 font-size:18px;font-weight:600;color:var(--ink,#14181C)}
.ft .azwa-head p{margin:0;font-size:13.5px;line-height:1.6;color:var(--steel,#3F474E)}

/* ===== v1.7.46：弹窗内复用询盘 CF7 表单（不再是自建 azwa-form）=====
   表单本体由 nav.js 克隆主表单注入（.azwa-formslot），所以这里**不重写字段样式**——
   直接让询盘区那套 `.wpcf7-form` 规则作用到克隆体上（同一份 class，天然一致）。
   需要额外处理的三点：
     ① CF7 把所有字段塞在一个 <p> 里，询盘区那条「单列网格」规则必须也命中克隆体
        （否则 name/email 会并排，与用户要求的「各占一整行」冲突）
     ② 弹窗底色是白底，输入框要白底浅边（别继承浅灰 CTA 区那套反色）
     ③ 响应框/文件名的字号在窄弹窗里要收一档 */
.ft .azwa-box .wpcf7-form p:has(.wpcf7-form-control-wrap){display:grid;grid-template-columns:1fr;gap:11px}
.ft .azwa-box .wpcf7-form{display:grid;grid-template-columns:1fr;gap:11px}
.ft .azwa-box .wpcf7-form input[type=text],
.ft .azwa-box .wpcf7-form input[type=email],
.ft .azwa-box .wpcf7-form input[type=tel],
.ft .azwa-box .wpcf7-form select,
.ft .azwa-box .wpcf7-form textarea{background:#fff;border-color:var(--line,#DFE3E8);color:var(--ink,#14181C)}
.ft .azwa-box .wpcf7-form ::placeholder{color:var(--mut,#8B95A1)}
.ft .azwa-box .wpcf7-form textarea{height:84px;min-height:76px}
.ft .azwa-box .wpcf7-form input[type=submit]{background:var(--acc,#E8590C);color:#fff}
/* 文件上传框：克隆体会被 az_inquiry_file_js 自动补上 .az-file-drop（自绘英文按钮） */
.ft .azwa-box .az-file-drop{background:#fff;border-color:#C9CED4}
.ft .azwa-box .az-file-none{color:var(--steel,#3F474E);font-size:13px}
.ft .azwa-box .az-file-picked{font-size:12px}
.ft .azwa-box .az-file-none.has-file{color:#1E7B34;font-weight:600}
.ft .azwa-box .az-file-none.is-bad{color:#C0392B;font-weight:600}
/* CF7 校验/响应提示在窄弹窗里字号收一档 */
.ft .azwa-box .wpcf7-not-valid-tip{font-size:12px}
.ft .azwa-box .wpcf7-response-output{font-size:13px;padding:10px 12px;margin:10px 0 0}
.ft .azwa-box .wpcf7-spinner{display:none}
/* 页面没有 CF7 时的兜底（直接给邮箱） */
.ft .azwa-fallback{display:inline-block;margin-top:4px;font-size:14px;font-weight:600;
 color:var(--acc,#E8590C);text-decoration:none}
.ft .azwa-fallback:hover{text-decoration:underline}

/* ===== v1.7.47：提交成功大成功卡 + 倒计时自动关窗 =====
   标题文案选 03「Thank you — we've got it.」：礼貌 + 明确已接手，
   B2B 场景既友好又不轻浮（对比原版 Enquiry received 纯被动、零情绪）。
   副标锁定「4 小时」这个确定性承诺，**不写 as soon as possible**（太空）。
   成功后表单整体隐藏 —— 两者同时出现会让人以为没发出去、可能再点一次提交（发两遍邮件）。 */
.ft .azwa-okcard{text-align:center;padding:26px 22px 22px;border-radius:var(--r,4px);
 background:#F0F9F2;border:1px solid rgba(63,185,80,.35);
 opacity:0;transform:scale(.96);transition:opacity .28s ease,transform .28s ease}
.ft .azwa-okcard.is-in{opacity:1;transform:scale(1)}
.ft .azwa-ok-ico{display:flex;align-items:center;justify-content:center;
 width:46px;height:46px;margin:0 auto 13px;border-radius:50%;background:#3FB950;
 transform:scale(.6);transition:transform .32s cubic-bezier(.2,1.4,.4,1) .06s}
.ft .azwa-okcard.is-in .azwa-ok-ico{transform:scale(1)}
.ft .azwa-ok-ico svg{width:24px;height:24px;fill:none;stroke:#fff;stroke-width:3;
 stroke-linecap:round;stroke-linejoin:round}
.ft .azwa-ok-title{margin:0;font-family:var(--az-fh,'Montserrat',sans-serif);
 font-size:18px;font-weight:600;color:#155724;line-height:1.4}
.ft .azwa-ok-sub{margin:9px 0 0;font-size:14px;line-height:1.55;color:#2C6E3F;
 white-space:nowrap}
.ft .azwa-ok-btn{display:block;width:100%;margin:20px 0 0;padding:12px 20px;border:0;
 cursor:pointer;border-radius:var(--r,2px);background:#3FB950;color:#fff;
 font-family:var(--az-fh,'Montserrat',sans-serif);font-size:14px;font-weight:600;
 letter-spacing:.04em;text-transform:uppercase;transition:filter .15s}
.ft .azwa-ok-btn:hover{filter:brightness(.94)}
.ft .azwa-ok-tick{margin:10px 0 0;font-size:12.5px;color:#2C6E3F;opacity:.85}
/* 窄屏：副标不能 nowrap（会溢出），允许换行 */
@media(max-width:600px){
 .ft .azwa-ok-sub{white-space:normal}
 .ft .azwa-okcard{padding:22px 16px 18px}
}
@media(max-width:560px){
 .ft .azwa{width:48px;height:48px;left:14px;bottom:14px}
 .ft .azwa-box{padding:20px 18px 18px}
}

/* ================================================================
   v1.7.64 后台编辑器可读性修复（客户在 WP 编辑器里看不清文字）
   ================================================================
   用户反馈：coolshinepro 后台编辑首页时hero 白字几乎看不见（压在明亮窗户上）、
   数字带挤成一行乱麻。对照 croc 站发现：croc 的 style.css 被**手工加过**遮罩和
   数字带规则，而 make_theme.py 源码里根本没有→ 新站生成的主题缺这两条。

   🔴 教训：style.css 是**生成物**，任何直接改 style.css 的修改都会在下次
   make_theme 重建时丢失（croc 那两条就是历史手工改动，随时可能丢）。
   所有补充都必须写进 make_theme.py 的 ADDENDUM。

   ① hero 遮罩：用 ::before 伪元素自己铺一层，不依赖 core/cover 的
      `has-background-dim` 类（coolshinepro 的 cover 根本没输出
      `wp-block-cover__background` 这层 DOM，WP 只在区块设了 backgroundColor
      时才渲染它 → 指望区块属性不可靠）。
      遮罩强度 .42：实测能压住最亮的窗光区（croc hero 图47% 极亮像素也能压住）。
   ② 数字带：`<b>[16+]</b><small>Years LED production</small>` 全是行内元素，
      默认会挤在一行。给 b / small 设 display:block 让它们上下排列。
   ================================================================ */

/* ---- ① hero 暗色遮罩（CSS 伪元素，任何图任何环境下都生效）---- */
.ft .hero{position:relative}
.ft .hero::before{content:"";position:absolute;inset:0;z-index:1;
 background:linear-gradient(100deg,rgba(8,12,16,.62)0%,rgba(8,12,16,.50)46%,rgba(8,12,16,.34)100%);
 pointer-events:none}
/* 遮罩压在图上，内容要浮到它上面 */
.ft .hero .wp-block-cover__image-background{z-index:0}
.ft .hero .wp-block-cover__inner-container{position:relative;z-index:2}

/* ---- ② 数字带：数字与说明上下分行 ---- */
.ft .trust p{margin:0;text-align:center}
.ft .trust p>b,.ft .trust p>b:where(:not([class])){display:block;font-family:var(--az-fh,'Montserrat',sans-serif);
 font-weight:600;font-size:26px;line-height:1.15;color:var(--acc,#E8590C);margin:0 0 6px}
.ft .trust p>small{display:block;font-size:12.5px;line-height:1.5;color:var(--mut,#8B95A1);
 letter-spacing:.02em;font-weight:400}

/* ================================================================
   🔴 v1.7.59 移动端基线（用户反馈"手机访问有错位"）
   原来 ≤640px 只有零星几条规则（菜单字号 / CF7 单列 / 几个 grid 变体），
   板块内边距、两栏布局、表格、页头高度、悬浮件等都没收→ 手机上到处溢出/错位。
   这里是**一次性补齐基线**，放在所有断点之后（ADDENDUM 末尾 = 优先级最高）。

   断点统一成 3 档，避免原来 980/960/900/760/640/620/600/560 八九个值互相打架：
     ≤1024px平板：两栏 → 单栏、缩小留白
     ≤ 760px 手机：进一步收紧、页头变矮、表格可横向滚
     ≤ 480px 小屏：字号与留白再降一档、隐藏次要装饰
   ================================================================ */

/* ---- ≤1024px：平板。侧栏两栏改单栏、大网格降列 ---- */
@media(max-width:1024px){
 .ft{padding:64px 0}
 .ft section{padding:64px 0}
 .az-shop,.az-prod .az-shop,.ft .az-bloglist .az-shop,.ft .az-post .az-shop{grid-template-columns:1fr;gap:28px}
 /* 侧栏改到正文下方：两栏塌成单列后，右栏会显得突兀 */
 .ft .az-shop>.side-box:first-child,.ft .az-prod .az-shop>.az-shop-side:first-child{order:2}
 .ft .az-shop-main{order:1}
 .ft .az-archive .az-shop-main .grid.g2{grid-template-columns:1fr}
 .ft .az-shop-main .grid.g3,.ft .az-archive .grid.g3,.ft .az-prod .grid.g3{grid-template-columns:repeat(2,1fr)}
 .ft .grid.g4.lv-grid-2-wide,.ft .grid.g3.lv-two-col,.ft .steps.lv-two-col,
 .ft .grid.g3.steps.lv-two-col{grid-template-columns:1fr}
 .ft .trust .grid.g4.lv-list-rows{grid-template-columns:repeat(2,1fr)}
 .ft .wrap{padding-left:22px;padding-right:22px}
}

/* ---- ≤760px：手机。主栅格全单列、页头变矮、表格可横滚 ---- */
@media(max-width:760px){
 .ft{padding:44px 0}
 .ft section{padding:44px 0}
 .ft .wrap{padding-left:16px;padding-right:16px}

 /* 所有多列一律单列（覆盖上面所有 lv- 变体的残留） */
 .ft .grid.g2,.ft .grid.g3,.ft .grid.g4,
 .ft .grid.g3.lv-grid-2-wide,.ft .grid.g3.lv-grid-4-compact,.ft .grid.g3.lv-two-col,
 .ft .grid.g4.lv-grid-2-wide,.ft .grid.g4.lv-grid-3,.ft .grid.g4.lv-list-rows,
 .ft .steps.lv-two-col,.ft .grid.g3.steps.lv-two-col,
 .ft .trust .grid.g4.lv-list-rows,
 .ft .az-shop-main .grid.g3,.ft .az-archive .grid.g3,.ft .az-prod .grid.g3,
 .ft .az-archive .az-shop-main .grid.g2{grid-template-columns:1fr !important}

 /* 页头：手机上400px 太高且标题易被挤成两行 */
 .ft .az-slim{--az-slim-h:240px !important}
 .ft .az-slim-title{font-size:clamp(21px,6vw,27px) !important}
 .ft .az-slim .az-crumbs ol{justify-content:flex-start;flex-wrap:wrap}

 /* 服务清单 / 分隔线清单收单列 */
 .ft .svc-list{grid-template-columns:1fr;column-gap:0}
 .ft .svc-item:nth-last-child(-n+2){border-bottom:0}
 .ft .svc-item:last-child{border-bottom:1px solid var(--line,#DFE3E8)}

 /* 表格横向滚动（手机上硬挤会挤爆单元格） */
 .ft .tbl,.ft .wp-block-table{overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%}
 .ft table{width:100%;min-width:520px}
 .ft th,.ft td{padding:10px 12px !important}

 /* 悬浮件别挡住内容 */
 .ft .totop{width:42px;height:42px}
}

/* ---- ≤480px：小屏。字号与留白再降一档 ---- */
@media(max-width:480px){
 .ft{padding:36px 0}
 .ft section{padding:36px 0}
 .ft .wrap{padding-left:14px;padding-right:14px}
 .ft .az-slim{--az-slim-h:200px !important}
 .ft .card,.ft .pcard,.ft .prodcard{padding:16px 14px}
 .ft .wpcf7-form input[type=text],.ft .wpcf7-form input[type=email],
 .ft .wpcf7-form input[type=tel],.ft .wpcf7-form textarea{padding:11px 12px}
}
