Files
cms-SiteForge/themes/trade-pro/blocks.css
T
浅念 45c39b1695 feat: trust_bar + applications_band blocks; homepage now block-driven
- blueprints: register trust_bar (icon/title/text items) and applications_band
  (2x2 dark-band tiles) block types; render with escaped items, ordinal icon
  fallback, 8-item cap; auto-exposed in editor via /api/editor/blocks and
  grouped under business in the studio palette
- blocks.css: platform base layer for both blocks (app/static + trade-pro
  Layer A kept verbatim in sync) + trade-pro bridge vocabulary (icon-circle,
  hairline dividers, navy->brand gradient band, glass tiles, 900/620
  breakpoints, reduced-motion) without touching canvas hooks
- tests: test_trade_pro_home_block_driven covers the full studio-draft
  PUT -> publish -> build chain; 8 block types on the homepage, template
  markers absent under layout_mode=replace, clean build report
- scripts/setup_home_blocks.py: production write path for site 483295c29ea0
  (login -> draft -> publish -> build -> verify); real catalogue counts feed
  the stats block; run after the Docker image picks up the new block types

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-28 18:11:32 +08:00

315 lines
37 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* trade-pro blocks.css — Task 13a 区块样式全量桥接。
两层结构:
── Layer A:平台基础层(app/static/blocks.css 当前版原文逐字保留)。
copy_blocks_css 会让本文件整体替代平台版分发,因此平台功能契约必须
在本文件内自带:hero 滑轨(site-runtime.js 钩子 sf-hero-track/panel/
controls)、布局栅格(responsive.py 的 820/540 设备断点 + !important
折叠语义)、卡片风格变体(card-style-*)、fit 显式选项、V8.33.1 的
区块节/内层同类名去冲突修复。旧版主题副本停在 36 行,缺失 V8.34 之后的
滑轨/变体规则——本次以平台当前版为准整体刷新。
── Layer B:trade-pro 视觉桥接层(.sf-theme-trade-pro 作用域)。
设计源 = pro.css 的 sf-tp-* 组件语汇(cms 移植,tokens 见 theme.css):
hero → sf-tp-hero(藏青→品牌蓝渐变 + 白字 + 左深右透叠层 + 反色按钮)、
features → sf-tp-feature-grid(浅渐变底 + 白卡 + 圆形序号位)、
collection → sf-tp-card-grid(发丝边卡 + 悬浮上抬 + 4:3 媒体 + 胶囊标签)、
image_text → sf-tp-two-col(1fr/1.22fr + 实景框投影)、
stats → sf-tp-stats(白卡数据条 + 分隔线 + 品牌色数字)、
cta → sf-tp-cta(深色渐变带 + 幽灵按钮)、
richtext → sf-tp-article-body 排版层;gallery/carousel/video/pricing/
tabs 按同一令牌语汇补齐(cms 无一一对应组件)。
Task 13b 新增:trust_bar → sf-tp-trustbar(白底横带 + icon-circle +
发丝分隔线)、applications_band → sf-tp-applications(深色渐变带 +
2×2 玻璃瓦片)——支撑首页从模板驱动切换为区块驱动(layout_mode=replace)。
级联纪律:
- 节级底色用 .sf-canvas 链(0,4,0)压过 pro-base 晚载的
.pro-custom-content .sf-section(:nth-of-type(even))(静态构建 blocks 先于
pro-base 载入,编辑器内联序相反——特异性取胜,不依赖源顺序)。
- 用户内联 --sf-bg/--sf-fg 经 var() 兜底保留;区块 padding-block 与 h1 字号
由 custom.css 的站点设计控件拥有,本层不碰。
- 编辑器画布红线:不触碰画布选择器钩子(区块 id 属性 / 选中态类)、不给
区块节写 outline/position(studio-canvas-bridge.js 注入样式自带 !important)。 */
/* ════════ Layer A:平台基础层(与 app/static/blocks.css 逐字一致)════════ */
/* Portable SiteForge blocks, loaded with every theme (all styles scoped to sf-). */
.sf-section{background:var(--sf-bg,transparent);color:var(--sf-fg,inherit);padding:var(--sf-pad,82px) 0;margin:0}.sf-section:nth-of-type(even){background:var(--sf-bg,#f4f6f9)}.sf-container{max-width:1200px;margin:auto;padding:0 32px}.sf-section h1,.sf-section h2,.sf-section h3,.sf-section p{color:inherit;line-height:1.3}.sf-section h1{font-size:clamp(38px,5vw,76px);font-weight:790;letter-spacing:-.052em}.sf-section h2{font-size:clamp(27px,3.2vw,44px);font-weight:760;letter-spacing:-.037em}.sf-kicker{display:block;font-size:12px;letter-spacing:.17em;text-transform:uppercase;font-weight:740;color:var(--accent,#3569d3);margin-bottom:18px}.sf-hero-grid,.sf-image-text{display:grid;grid-template-columns:1.08fr .92fr;gap:68px;align-items:center}.sf-hero-copy p{font-size:18px;line-height:1.75;max-width:520px;opacity:.75}.sf-hero-img,.sf-image-side{overflow:hidden;border-radius:9px;min-height:380px;background:linear-gradient(130deg,#d5e1ee,#eef3f9);display:grid;place-items:center}.sf-hero-img img,.sf-image-side img{width:100%;height:100%;max-height:580px;object-fit:cover}.sf-hero-abstract{font-size:110px;color:#a7bdd4}.sf-button{display:inline-flex;align-items:center;justify-content:center;gap:28px;background:var(--accent,#315ee2);color:white!important;padding:16px 26px;border-radius:6px;font-size:14px;text-decoration:none;font-weight:720;margin-top:24px}.sf-section-head{display:flex;align-items:end;justify-content:space-between;margin-bottom:32px;gap:24px}.sf-section-head h2{margin:0}.sf-section-head>a,.sf-link{color:var(--accent,#3569d3);font-weight:700;text-decoration:none}.sf-prose{font-size:16px;line-height:1.85;max-width:930px}.sf-prose p{line-height:1.85}.sf-features,.sf-collection,.sf-stats{display:grid;gap:20px}.sf-features{grid-template-columns:repeat(3,minmax(0,1fr))}.sf-feature{border:1px solid #e0e6eb;padding:32px 28px;border-radius:8px;background:#fff;color:#253247}.sf-feature>span{font-size:12px;font-weight:800;color:var(--accent,#346add)}.sf-feature h3{font-size:22px;margin:30px 0 8px}.sf-feature p{font-size:14px;line-height:1.7;color:#647181}.sf-stats{grid-template-columns:repeat(4,1fr);padding:40px 0;border-top:1px solid #b7c0cd66;border-bottom:1px solid #b7c0cd66}.sf-stats>div{display:flex;flex-direction:column;gap:8px}.sf-stats strong{font-size:clamp(28px,4vw,53px);letter-spacing:-.04em}.sf-stats span{font-size:12px;opacity:.65;letter-spacing:.04em}.sf-collection{grid-template-columns:repeat(var(--sf-cols,3),minmax(0,1fr))}.sf-item{display:block;text-decoration:none;color:#233044;background:#fff;border:1px solid #e8edf1;border-radius:8px;overflow:hidden;transition:transform .2s,box-shadow .2s}.sf-item:hover{transform:translateY(-4px);box-shadow:0 18px 38px #344d7018}.sf-item-img{height:210px;overflow:hidden;background:#e4eaf0}.sf-item-img img{height:100%;width:100%;object-fit:cover}.sf-placeholder{display:grid;place-items:center;width:100%;height:100%;min-height:190px;background:linear-gradient(130deg,#e2eaf2,#c9d7e6);font-size:72px;color:#8399b2;font-weight:800}.sf-large{min-height:360px}.sf-item-copy{padding:25px}.sf-item-copy small{text-transform:uppercase;letter-spacing:.13em;color:var(--accent,#376edc)}.sf-item-copy h3{font-size:22px;margin:12px 0 7px}.sf-item-copy p{font-size:14px;line-height:1.6;color:#7a8796;min-height:42px}.sf-item-copy span{font-size:12px;color:var(--accent,#376edc);font-weight:800}.sf-image-text>div>p{font-size:17px;line-height:1.8;max-width:520px;opacity:.7}.sf-reverse>div:first-child{order:2}.sf-gallery{display:grid;grid-template-columns:repeat(3,1fr);gap:15px}.sf-gallery img{width:100%;height:230px;object-fit:cover;border-radius:6px}.sf-faq{max-width:920px}.sf-faq details{border-bottom:1px solid #dce3eb;padding:22px 0}.sf-faq summary{font-size:17px;cursor:pointer;font-weight:700}.sf-faq p{color:#647181;line-height:1.75}.sf-cta-wrap{display:flex;justify-content:space-between;align-items:center;gap:24px}.sf-cta-wrap h2{margin:0}.sf-cta-wrap p{font-size:16px;opacity:.75}.sf-section a{cursor:pointer}.sf-muted{opacity:.65}
@media(max-width:820px){.sf-container{padding:0 20px}.sf-section{padding:50px 0}.sf-hero-grid,.sf-image-text{grid-template-columns:1fr;gap:26px}.sf-reverse>div:first-child{order:initial}.sf-hero-img,.sf-image-side{min-height:250px}.sf-features,.sf-collection{grid-template-columns:repeat(2,minmax(0,1fr))}.sf-stats{grid-template-columns:repeat(2,1fr)}.sf-cta-wrap{align-items:flex-start;flex-direction:column}}
@media(max-width:540px){.sf-features,.sf-collection,.sf-gallery{grid-template-columns:1fr}.sf-section-head{display:block}.sf-section-head>a{display:block;margin-top:13px}.sf-item-img{height:220px}.sf-hero-grid{gap:22px}.sf-hero-copy p{font-size:16px}.sf-stats{gap:28px}}
.sf-attributes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 32px;border-top:1px solid #e5eaf0}.sf-attribute{display:flex;justify-content:space-between;align-items:center;gap:18px;border-bottom:1px solid #e5eaf0;padding:19px 10px;font-size:14px}.sf-attribute span{color:#748497}.sf-attribute strong{font-weight:720;text-align:right}@media(max-width:640px){.sf-attributes{grid-template-columns:1fr}}
/* SiteForge responsive no-code grid container */
.sf-layout-grid{display:grid;grid-template-columns:var(--sf-layout-cols,1fr 1fr);gap:var(--sf-layout-gap,24px);align-items:stretch}
.sf-layout-column{min-width:0}.sf-layout-column>.sf-section{padding:0;margin:0 0 18px}.sf-layout-column .sf-container{width:100%;padding:0}
.sf-layout-column>.sf-section:last-child{margin-bottom:0}
@media(max-width:820px){.sf-layout-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important}}
@media(max-width:540px){.sf-layout-grid{grid-template-columns:minmax(0,1fr)!important}}
/* V8.6: accessible, script-free commercial design blocks */
.sf-slides{display:flex;gap:18px;overflow-x:auto;scroll-snap-type:x mandatory;padding:6px 0 18px;scrollbar-width:thin}
.sf-slide{flex:0 0 min(78%,720px);min-width:220px;margin:0;scroll-snap-align:start}
.sf-slide img{width:100%;aspect-ratio:16/9;object-fit:cover;border-radius:10px}
.sf-slide figcaption{padding:10px 2px;opacity:.7;font-size:14px}
.sf-video{aspect-ratio:16/9;max-width:1000px;background:#ebf0f5;border-radius:10px;overflow:hidden}
.sf-video iframe{width:100%;height:100%;border:0}
.sf-tab{padding:19px 0;border-bottom:1px solid #dde4ec;max-width:960px}
.sf-tab summary{font-size:18px;font-weight:700;cursor:pointer}.sf-tab p{max-width:850px;line-height:1.8}
.sf-prices{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:18px}
.sf-price{padding:28px;background:#fff;border:1px solid #dee5ef;border-radius:10px;color:#29394b}
.sf-price strong{display:block;font-size:27px;margin:14px 0}.sf-price li{margin:11px 0}.sf-price ul{padding-left:19px}
.sf-map-address{font-style:normal;font-size:18px;white-space:pre-line;line-height:1.8}
@media (prefers-reduced-motion:reduce){.sf-slides{scroll-behavior:auto}.sf-item{transition:none}}
@media(max-width:540px){.sf-slide{flex-basis:92%}}
/* V8.33.1 grid-class collision fix: block section and inner collection/features
share a class. The section must NOT become a grid container itself.
Restrict grid layout to its dedicated inner element. */
.sf-section.sf-features,.sf-section.sf-collection,.sf-section.sf-stats,.sf-section.sf-gallery,.sf-section.sf-attributes{display:block;grid-template-columns:none}
.sf-section.sf-faq{max-width:none}
/* V8.34: opt-in no-code compositions; no change for legacy blocks with no choice. */
.sf-hero-grid.sf-hero-layout-image-first > .sf-hero-img{order:-1}
.sf-hero-grid.sf-hero-layout-centered{grid-template-columns:minmax(0,1fr);text-align:center;justify-items:center}
.sf-hero-grid.sf-hero-layout-centered .sf-hero-copy{max-width:900px;margin-inline:auto}
.sf-hero-grid.sf-hero-layout-centered .sf-hero-img{width:100%;min-height:240px;max-height:540px}
.sf-hero-grid.sf-fit-contain .sf-hero-img img{object-fit:contain}
.sf-collection.sf-fit-contain .sf-item-img{background:#f4f7f9}
.sf-collection.sf-fit-contain .sf-item-img img{object-fit:contain}
.sf-collection.sf-card-style-compact .sf-item-img{height:156px}
.sf-collection.sf-card-style-compact .sf-item-copy{padding:16px 19px}
.sf-collection.sf-card-style-compact .sf-item-copy h3{font-size:clamp(16px,1.5vw,20px);margin:8px 0 5px}
.sf-collection.sf-card-style-compact .sf-item-copy p{font-size:13px;min-height:0}
.sf-collection.sf-card-style-showcase .sf-item-img{height:auto;aspect-ratio:16/10}
.sf-collection.sf-card-style-showcase .sf-item-copy{padding:25px}
.sf-collection.sf-card-style-showcase .sf-item-copy h3{font-size:clamp(19px,2vw,26px)}
@media(max-width:820px){.sf-hero-grid.sf-hero-layout-image-first > .sf-hero-img{order:initial}}
@media(max-width:540px){.sf-collection.sf-card-style-compact .sf-item-img{height:180px}.sf-hero-grid.sf-hero-layout-centered .sf-hero-img{min-height:200px}}
@media(prefers-reduced-motion:reduce){.sf-collection.sf-card-style-showcase .sf-item{transition:none}}
/* Industrial product photography respects *explicit* image fit, not archived defaults. */
.sf-theme-industrial .pro-custom-content .sf-collection.sf-fit-cover .sf-item-img img{object-fit:cover}
.sf-theme-industrial .pro-custom-content .sf-collection.sf-fit-contain .sf-item-img img{object-fit:contain}
/* V8.34.1 opt-in multi-Banner. No autoplay, low JS cost, native swipe and keyboard scroll. */
.sf-hero-slider{min-width:0}.sf-hero-track{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;overscroll-behavior-x:contain;scrollbar-width:none}.sf-hero-track::-webkit-scrollbar{display:none}
.sf-hero-panel{flex:0 0 100%;width:100%;min-width:0;scroll-snap-align:start;scroll-snap-stop:always}
.sf-hero-controls{display:flex;align-items:center;justify-content:center;gap:14px;margin-top:16px;color:inherit}
.sf-hero-controls button{border:1px solid currentColor;border-radius:50%;width:40px;height:40px;font-size:24px;line-height:1;background:transparent;color:inherit;cursor:pointer}
.sf-hero-controls button:focus-visible{outline:3px solid var(--accent,#3569d3);outline-offset:3px}
.sf-hero-count{font-size:13px;font-weight:700;min-width:40px;text-align:center}
@media(prefers-reduced-motion:reduce){.sf-hero-track{scroll-behavior:auto}}
.sf-hero-panel .sf-hero-copy h2{font-size:clamp(38px,5vw,76px);font-weight:790;letter-spacing:-.052em}
/* Trust bar: horizontal credibility strip under the hero (icon + title + note). */
.sf-section.sf-trust_bar{padding:38px 0}
.sf-trust-bar{display:grid;grid-template-columns:repeat(var(--sf-trust-cols,4),minmax(0,1fr))}
.sf-trust-item{display:flex;flex-direction:column;align-items:center;text-align:center;gap:6px;padding:10px 20px;border-inline-end:1px solid #dce3eb}
.sf-trust-item:last-child{border-inline-end:0}
.sf-trust-icon{display:grid;place-items:center;width:46px;height:46px;border-radius:50%;background:#eef2f8;color:var(--accent,#315ee2);font-size:18px;font-weight:800;margin-bottom:6px}
.sf-trust-item strong{font-size:15px}
.sf-trust-text{font-size:13px;opacity:.68;line-height:1.55}
@media(max-width:820px){.sf-trust-bar{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:24px}.sf-trust-item:nth-child(2n){border-inline-end:0}}
@media(max-width:540px){.sf-trust-bar{grid-template-columns:minmax(0,1fr)}.sf-trust-item{border-inline-end:0}}
/* Applications band: dark gradient strip with a 2x2 tile grid. */
.sf-section.sf-applications_band{background:linear-gradient(115deg,#101828,#1d3a6e 78%);color:#f5f7fa}
.sf-applications-band{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}
.sf-app-tile{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.14);border-radius:10px;padding:26px 24px}
.sf-app-icon{display:grid;place-items:center;width:44px;height:44px;border-radius:50%;background:rgba(255,255,255,.12);font-size:17px;font-weight:800;margin-bottom:12px}
.sf-app-tile h3{font-size:20px;margin:0 0 6px}
.sf-app-tile p{font-size:14px;line-height:1.65;opacity:.75;margin:0}
@media(max-width:540px){.sf-applications-band{grid-template-columns:minmax(0,1fr)}}
/* ════════ Layer B:trade-pro 视觉桥接(sf-tp-* 模板语汇 → sf-* 区块)════════ */
/* ── 画布守护(V8.33 既有约定):区块节不溢出栅格列、贴入图片不撑破版心;
下方媒体规则后置覆写 height,恢复卡片/实景框的定高裁剪 ── */
.sf-theme-trade-pro .sf-canvas .sf-section{max-width:100%;min-width:0}
.sf-theme-trade-pro .sf-section img{max-width:100%;height:auto}
.sf-theme-trade-pro :is(a,button,input,select,textarea):focus-visible{outline:3px solid #2563eb;outline-offset:3px}
/* ── 共享元素:眉题(eyebrow)/ 按钮(sf-tp-btn)/ 文字链接 / 区块头行 ── */
.sf-theme-trade-pro .sf-kicker{color:var(--sf-tp-color-brand-accent);font-weight:var(--sf-tp-font-weight-bold);font-size:var(--sf-tp-font-size-xs);letter-spacing:var(--sf-tp-letter-spacing-wide);margin-block-end:var(--sf-tp-space-3)}
.sf-theme-trade-pro .sf-button{min-height:var(--sf-tp-button-height-md);padding:var(--sf-tp-space-2) var(--sf-tp-button-padding-x-md);gap:var(--sf-tp-space-2);border-radius:var(--sf-tp-button-border-radius);background:var(--sf-tp-color-surface-brand);border:var(--sf-tp-border-width-hairline) solid var(--sf-tp-color-border-brand);color:var(--sf-tp-color-text-on-brand)!important;font-size:var(--sf-tp-font-size-md);font-weight:var(--sf-tp-button-font-weight);line-height:var(--sf-tp-line-height-snug);margin-block-start:var(--sf-tp-space-6);transition:background-color var(--sf-tp-duration-fast) var(--sf-tp-easing-standard),transform var(--sf-tp-duration-fast) var(--sf-tp-easing-standard),box-shadow var(--sf-tp-duration-fast) var(--sf-tp-easing-standard),color var(--sf-tp-duration-fast) var(--sf-tp-easing-standard)}
.sf-theme-trade-pro .sf-button:hover{transform:translateY(calc(-1 * var(--sf-tp-space-1)));background:var(--sf-tp-color-brand-primary-strong);box-shadow:var(--sf-tp-shadow-sm);color:var(--sf-tp-color-text-on-brand)!important}
.sf-theme-trade-pro .sf-section-head{margin-block-end:var(--sf-tp-space-8);gap:var(--sf-tp-space-8)}
.sf-theme-trade-pro .sf-section-head>a,.sf-theme-trade-pro .sf-link{color:var(--sf-tp-color-text-brand);font-size:var(--sf-tp-font-size-sm);font-weight:var(--sf-tp-font-weight-semibold)}
.sf-theme-trade-pro .sf-section-head>a:hover,.sf-theme-trade-pro .sf-link:hover{color:var(--sf-tp-color-text-link-hover)}
.sf-theme-trade-pro .sf-muted{color:var(--sf-tp-color-text-muted);opacity:1}
/* ── hero → sf-tp-hero:藏青→品牌蓝渐变带 + 白字 + 左深右透叠层 + 反色按钮 ── */
.sf-theme-trade-pro .sf-canvas .sf-section.sf-hero{background:var(--sf-bg,linear-gradient(115deg,var(--sf-tp-color-surface-inverse),var(--sf-tp-color-brand-primary-deep) 78%));color:var(--sf-fg,var(--sf-tp-color-text-inverse));padding-block:calc(var(--sf-pad,var(--sf-tp-space-section-y)) + var(--sf-tp-space-8))}
.sf-theme-trade-pro .sf-section.sf-hero .sf-kicker{color:var(--sf-tp-color-text-inverse-muted)}
.sf-theme-trade-pro .sf-section.sf-hero h1,.sf-theme-trade-pro .sf-section.sf-hero .sf-hero-copy h2{color:var(--sf-tp-color-text-inverse)}
.sf-theme-trade-pro .sf-section.sf-hero .sf-hero-copy p{color:color-mix(in srgb,var(--sf-tp-color-text-inverse) 88%,transparent);opacity:1;font-size:var(--sf-tp-font-size-lg);line-height:var(--sf-tp-line-height-relaxed)}
.sf-theme-trade-pro .sf-section.sf-hero .sf-hero-grid{gap:calc(var(--sf-tp-space-12) + var(--sf-tp-space-4))}
.sf-theme-trade-pro .sf-section.sf-hero .sf-hero-img{position:relative;aspect-ratio:var(--sf-tp-ratio-landscape);border-radius:var(--sf-tp-radius-md);box-shadow:var(--sf-tp-shadow-lg);background:linear-gradient(130deg,var(--sf-tp-color-surface-inverse-muted),var(--sf-tp-color-brand-primary-deep))}
.sf-theme-trade-pro .sf-section.sf-hero .sf-hero-img::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,color-mix(in srgb,var(--sf-tp-color-surface-inverse) 55%,transparent),transparent 62%);pointer-events:none}
.sf-theme-trade-pro .sf-section.sf-hero .sf-hero-abstract{background:linear-gradient(135deg,var(--sf-tp-color-surface-brand-soft),color-mix(in srgb,var(--sf-tp-color-brand-primary) 12%,var(--sf-tp-color-surface-default)));color:var(--sf-tp-color-text-brand)}
.sf-theme-trade-pro .sf-section.sf-hero .sf-hero-controls button{color:var(--sf-tp-color-text-inverse)}
.sf-theme-trade-pro .sf-section.sf-hero .sf-hero-controls button:focus-visible{outline-color:var(--sf-tp-focus-outline-color-inverse)}
.sf-theme-trade-pro .sf-section.sf-hero .sf-button,.sf-theme-trade-pro .sf-section.sf-cta .sf-button{background:var(--sf-tp-color-surface-default);border-color:var(--sf-tp-color-surface-default);color:var(--sf-tp-color-text-brand)!important}
.sf-theme-trade-pro .sf-section.sf-hero .sf-button:hover,.sf-theme-trade-pro .sf-section.sf-cta .sf-button:hover{background:var(--sf-tp-color-brand-primary);border-color:var(--sf-tp-color-brand-primary);color:var(--sf-tp-color-text-on-brand)!important}
/* ── features → sf-tp-feature-grid:浅渐变底 + 白卡 + 圆形序号位(icon-circle 语汇)── */
.sf-theme-trade-pro .sf-canvas .sf-section.sf-features{background:var(--sf-bg,linear-gradient(135deg,var(--sf-tp-color-neutral-50),var(--sf-tp-color-surface-brand-soft)))}
.sf-theme-trade-pro .sf-features{grid-template-columns:repeat(var(--sf-feature-cols,3),minmax(0,1fr));gap:var(--sf-tp-space-4) calc(var(--sf-tp-space-4) + var(--sf-tp-space-1))}
.sf-theme-trade-pro .sf-feature{background:var(--sf-tp-color-surface-default);border:var(--sf-tp-border-width-hairline) solid var(--sf-tp-color-border-subtle);border-radius:var(--sf-tp-card-border-radius);box-shadow:var(--sf-tp-shadow-xs);text-align:center;padding:var(--sf-tp-space-6) var(--sf-tp-space-4);color:var(--sf-tp-color-text-primary)}
.sf-theme-trade-pro .sf-feature>span{display:grid;place-items:center;width:var(--sf-tp-icon-size-xl);height:var(--sf-tp-icon-size-xl);margin:0 auto var(--sf-tp-space-3);border-radius:var(--sf-tp-radius-full);background:var(--sf-tp-color-surface-brand-soft);color:var(--sf-tp-color-text-brand);font-size:var(--sf-tp-font-size-sm);font-weight:var(--sf-tp-font-weight-bold)}
.sf-theme-trade-pro .sf-feature h3{font-size:var(--sf-tp-font-size-md);margin-block-end:var(--sf-tp-space-2)}
.sf-theme-trade-pro .sf-feature p{color:var(--sf-tp-color-text-muted);font-size:var(--sf-tp-font-size-sm);line-height:var(--sf-tp-line-height-normal);margin:0}
/* ── collection → sf-tp-card-grid:发丝边卡 + 悬浮上抬/图缩放 + 4:3 媒体 + 胶囊标签 ──
(card-style 与 fit 变体由 Layer A 以更高特异性继续生效)*/
.sf-theme-trade-pro .sf-collection{gap:var(--sf-tp-space-4) calc(var(--sf-tp-space-4) + var(--sf-tp-space-1))}
.sf-theme-trade-pro .sf-item{background:var(--sf-tp-color-surface-default);border:var(--sf-tp-border-width-hairline) solid var(--sf-tp-color-border-subtle);border-radius:var(--sf-tp-card-border-radius);box-shadow:var(--sf-tp-shadow-xs);color:var(--sf-tp-color-text-primary);transition:transform var(--sf-tp-duration-fast) var(--sf-tp-easing-standard),box-shadow var(--sf-tp-duration-fast) var(--sf-tp-easing-standard)}
.sf-theme-trade-pro .sf-item:hover{transform:translateY(calc(-1 * var(--sf-tp-space-1)));box-shadow:var(--sf-tp-shadow-md)}
.sf-theme-trade-pro .sf-item-img{height:auto;aspect-ratio:var(--sf-tp-ratio-landscape);background:var(--sf-tp-color-surface-muted)}
.sf-theme-trade-pro .sf-item-img img{height:100%;object-fit:cover;transition:transform var(--sf-tp-duration-slow) var(--sf-tp-easing-standard)}
.sf-theme-trade-pro .sf-item:hover .sf-item-img img{transform:scale(1.04)}
.sf-theme-trade-pro .sf-item-copy{padding:var(--sf-tp-space-4) var(--sf-tp-space-4) var(--sf-tp-space-5)}
.sf-theme-trade-pro .sf-item-copy small{display:inline-block;background:var(--sf-tp-color-surface-brand-soft);color:var(--sf-tp-color-text-brand);border-radius:var(--sf-tp-radius-full);padding:var(--sf-tp-space-1) var(--sf-tp-space-3);font-size:var(--sf-tp-font-size-xs);letter-spacing:normal}
.sf-theme-trade-pro .sf-item-copy h3{font-size:var(--sf-tp-font-size-lg);margin:var(--sf-tp-space-2) 0 var(--sf-tp-space-1)}
.sf-theme-trade-pro .sf-item-copy p{color:var(--sf-tp-color-text-muted);font-size:var(--sf-tp-font-size-sm);line-height:var(--sf-tp-line-height-normal)}
.sf-theme-trade-pro .sf-item-copy span{color:var(--sf-tp-color-text-brand);font-size:var(--sf-tp-font-size-xs);font-weight:var(--sf-tp-font-weight-semibold)}
.sf-theme-trade-pro .sf-placeholder{background:linear-gradient(135deg,var(--sf-tp-color-surface-brand-soft),color-mix(in srgb,var(--sf-tp-color-brand-primary) 12%,var(--sf-tp-color-surface-default)));color:var(--sf-tp-color-text-brand)}
/* ── image_text → sf-tp-two-col:1fr/1.22fr 双栏 + 实景框(圆角/投影/4:3)
注:平台 DOM 无第二条数据栏,cms 的悬浮数据条由 stats 区块独立承担 ── */
.sf-theme-trade-pro .sf-image-text{grid-template-columns:1fr 1.22fr;gap:calc(var(--sf-tp-space-12) + var(--sf-tp-space-4))}
.sf-theme-trade-pro .sf-image-text>div>p{color:var(--sf-tp-color-text-muted);opacity:1;font-size:var(--sf-tp-font-size-md);line-height:var(--sf-tp-line-height-relaxed)}
.sf-theme-trade-pro .sf-image-side{aspect-ratio:var(--sf-tp-ratio-landscape);border-radius:var(--sf-tp-radius-md);box-shadow:var(--sf-tp-shadow-md);background:linear-gradient(130deg,var(--sf-tp-color-surface-brand-soft),var(--sf-tp-color-neutral-200))}
.sf-theme-trade-pro .sf-image-side img{height:100%;max-height:none}
.sf-theme-trade-pro .sf-image-side .sf-placeholder,.sf-theme-trade-pro .sf-large{min-height:0}
/* ── stats → sf-tp-stats:白卡数据条 + 列间发丝分隔线 + 品牌色大数字 ──
(卡片落在 .sf-container 内层 .sf-stats 上,不裹住整个区块节)*/
.sf-theme-trade-pro .sf-container .sf-stats{padding:0;border:0;background:var(--sf-tp-color-surface-default);border-radius:var(--sf-tp-radius-sm);box-shadow:var(--sf-tp-shadow-md);overflow:hidden}
.sf-theme-trade-pro .sf-stats>div{text-align:center;padding:var(--sf-tp-space-5) var(--sf-tp-space-2);gap:var(--sf-tp-space-1);border-inline-end:var(--sf-tp-border-width-hairline) solid var(--sf-tp-color-border-default)}
.sf-theme-trade-pro .sf-stats>div:last-child{border-inline-end:0}
.sf-theme-trade-pro .sf-stats strong{color:var(--sf-tp-color-text-brand);font-size:var(--sf-tp-font-size-2xl);letter-spacing:var(--sf-tp-letter-spacing-tight);line-height:var(--sf-tp-line-height-tight)}
.sf-theme-trade-pro .sf-stats span{color:var(--sf-tp-color-text-muted);opacity:1;font-size:var(--sf-tp-font-size-xs);letter-spacing:normal}
/* ── cta → sf-tp-cta:藏青→品牌蓝渐变带 + 反色(白底品牌字)按钮 ── */
.sf-theme-trade-pro .sf-canvas .sf-section.sf-cta{background:var(--sf-bg,linear-gradient(90deg,color-mix(in srgb,var(--sf-tp-color-surface-inverse) 94%,transparent),color-mix(in srgb,var(--sf-tp-color-brand-primary) 67%,transparent)));color:var(--sf-fg,var(--sf-tp-color-text-inverse))}
.sf-theme-trade-pro .sf-section.sf-cta .sf-kicker{color:var(--sf-tp-color-text-inverse-muted)}
.sf-theme-trade-pro .sf-section.sf-cta .sf-cta-wrap h2{color:var(--sf-tp-color-text-inverse)}
.sf-theme-trade-pro .sf-section.sf-cta .sf-cta-wrap p{color:color-mix(in srgb,var(--sf-tp-color-text-inverse) 83%,transparent);opacity:1}
/* ── gallery:令牌语汇网格(圆角 + 发丝投影 + 悬浮轻缩放)── */
.sf-theme-trade-pro .sf-gallery{gap:calc(var(--sf-tp-space-4) - var(--sf-tp-space-1))}
.sf-theme-trade-pro .sf-gallery img{height:auto;aspect-ratio:var(--sf-tp-ratio-landscape);object-fit:cover;border-radius:var(--sf-tp-radius-sm);box-shadow:var(--sf-tp-shadow-xs);transition:transform var(--sf-tp-duration-fast) var(--sf-tp-easing-standard)}
.sf-theme-trade-pro .sf-gallery img:hover{transform:scale(1.03)}
/* ── faq / tabs:details 折叠走 theme.css 元素基线(卡片形态),本层只收敛
区块内间距与文案色 ── */
.sf-theme-trade-pro .sf-faq details{border-radius:var(--sf-tp-radius-sm)}
.sf-theme-trade-pro .sf-faq p{color:var(--sf-tp-color-text-muted)}
.sf-theme-trade-pro .sf-tab-list{display:grid;gap:var(--sf-tp-space-2)}
.sf-theme-trade-pro .sf-tab{max-width:none;padding:0;border-block-end:var(--sf-tp-border-width-hairline) solid var(--sf-tp-color-border-subtle)}
.sf-theme-trade-pro .sf-tab summary{font-size:var(--sf-tp-font-size-md);font-weight:var(--sf-tp-font-weight-semibold)}
.sf-theme-trade-pro .sf-tab p{color:var(--sf-tp-color-text-muted);max-width:none}
/* ── richtext → sf-tp-article-body 排版层:次级文字 + 松弛行高 + 发丝表格 ── */
.sf-theme-trade-pro .sf-prose{color:var(--sf-tp-color-text-secondary);font-size:var(--sf-tp-font-size-md);line-height:var(--sf-tp-line-height-relaxed)}
.sf-theme-trade-pro .sf-prose p{line-height:var(--sf-tp-line-height-relaxed)}
.sf-theme-trade-pro .sf-prose h2,.sf-theme-trade-pro .sf-prose h3,.sf-theme-trade-pro .sf-prose h4{color:var(--sf-tp-color-text-primary);margin-block:var(--sf-tp-space-6) var(--sf-tp-space-3)}
.sf-theme-trade-pro .sf-prose img{border-radius:var(--sf-tp-radius-md)}
.sf-theme-trade-pro .sf-prose ul,.sf-theme-trade-pro .sf-prose ol{padding-inline-start:var(--sf-tp-space-6);margin-block-end:var(--sf-tp-space-5)}
.sf-theme-trade-pro .sf-prose li{margin-block-end:var(--sf-tp-space-2)}
.sf-theme-trade-pro .sf-prose blockquote{border-inline-start:var(--sf-tp-border-width-medium) solid var(--sf-tp-color-border-brand);padding-inline-start:var(--sf-tp-space-4);color:var(--sf-tp-color-text-muted);margin-block-end:var(--sf-tp-space-5)}
.sf-theme-trade-pro .sf-prose table{width:100%;border-collapse:collapse;font-size:var(--sf-tp-font-size-sm);margin-block:var(--sf-tp-space-6)}
.sf-theme-trade-pro .sf-prose th,.sf-theme-trade-pro .sf-prose td{border:var(--sf-tp-border-width-hairline) solid var(--sf-tp-color-border-default);padding:var(--sf-tp-space-3) var(--sf-tp-space-4);text-align:start}
.sf-theme-trade-pro .sf-prose tbody tr:nth-child(even) td{background:var(--sf-tp-color-neutral-50)}
/* ── carousel → sf-slides:横滚 snap 基线在 Layer A,本层补圆角/投影/注脚色 ── */
.sf-theme-trade-pro .sf-slides{gap:var(--sf-tp-space-4)}
.sf-theme-trade-pro .sf-slide img{border-radius:var(--sf-tp-radius-sm);box-shadow:var(--sf-tp-shadow-sm)}
.sf-theme-trade-pro .sf-slide figcaption{color:var(--sf-tp-color-text-muted);opacity:1;font-size:var(--sf-tp-font-size-xs)}
/* ── video:16:9 容器 + 圆角 + 投影(节级 max-width/比例残留由本层归零)── */
.sf-theme-trade-pro .sf-section.sf-video{max-width:none;aspect-ratio:auto}
.sf-theme-trade-pro .sf-container .sf-video{border-radius:var(--sf-tp-radius-sm);box-shadow:var(--sf-tp-shadow-md);background:var(--sf-tp-color-surface-muted)}
.sf-theme-trade-pro .sf-section.sf-video>p{color:var(--sf-tp-color-text-muted)}
/* ── pricing:白卡 + 品牌色价格 + 特性列表 ── */
.sf-theme-trade-pro .sf-prices{gap:calc(var(--sf-tp-space-4) + var(--sf-tp-space-1))}
.sf-theme-trade-pro .sf-price{background:var(--sf-tp-color-surface-default);border:var(--sf-tp-border-width-hairline) solid var(--sf-tp-color-border-subtle);border-radius:var(--sf-tp-card-border-radius);box-shadow:var(--sf-tp-shadow-xs);padding:var(--sf-tp-card-padding-lg);color:var(--sf-tp-color-text-primary)}
.sf-theme-trade-pro .sf-price strong{color:var(--sf-tp-color-text-brand);font-size:var(--sf-tp-font-size-2xl);letter-spacing:var(--sf-tp-letter-spacing-tight)}
.sf-theme-trade-pro .sf-price li{color:var(--sf-tp-color-text-secondary);font-size:var(--sf-tp-font-size-sm)}
.sf-theme-trade-pro .sf-price .sf-button{margin-block-start:var(--sf-tp-space-4)}
/* ── attributes / map:spec-table 语汇(键灰值深 + 发丝线)── */
.sf-theme-trade-pro .sf-container .sf-attributes{border-block-start:0}
.sf-theme-trade-pro .sf-attribute{border-block-end:var(--sf-tp-border-width-hairline) solid var(--sf-tp-color-border-default);padding:var(--sf-tp-space-4) var(--sf-tp-space-1);font-size:var(--sf-tp-font-size-sm)}
.sf-theme-trade-pro .sf-attribute span{color:var(--sf-tp-color-text-muted)}
.sf-theme-trade-pro .sf-attribute strong{color:var(--sf-tp-color-text-primary)}
.sf-theme-trade-pro .sf-map-address{color:var(--sf-tp-color-text-secondary);font-size:var(--sf-tp-font-size-md)}
/* ── trust_bar → sf-tp-trustbar(Task 13b):白底横带 + icon-circle(brand-soft 底
品牌字)+ 列间发丝分隔线(cms 首页信任条语汇)── */
.sf-theme-trade-pro .sf-canvas .sf-section.sf-trust_bar{background:var(--sf-bg,var(--sf-tp-color-surface-default));padding-block:calc(var(--sf-pad,var(--sf-tp-space-10)) - var(--sf-tp-space-2))}
.sf-theme-trade-pro .sf-trust-item{padding:var(--sf-tp-space-2) var(--sf-tp-space-4);gap:var(--sf-tp-space-1);border-inline-end:var(--sf-tp-border-width-hairline) solid var(--sf-tp-color-border-subtle)}
.sf-theme-trade-pro .sf-trust-item:last-child{border-inline-end:0}
.sf-theme-trade-pro .sf-trust-icon{width:var(--sf-tp-icon-size-xl);height:var(--sf-tp-icon-size-xl);margin-block-end:var(--sf-tp-space-2);border-radius:var(--sf-tp-radius-full);background:var(--sf-tp-color-surface-brand-soft);color:var(--sf-tp-color-text-brand);font-size:var(--sf-tp-font-size-md);box-shadow:var(--sf-tp-shadow-xs)}
.sf-theme-trade-pro .sf-trust-item strong{color:var(--sf-tp-color-text-primary);font-size:var(--sf-tp-font-size-md)}
.sf-theme-trade-pro .sf-trust-text{color:var(--sf-tp-color-text-muted);opacity:1;font-size:var(--sf-tp-font-size-sm);line-height:var(--sf-tp-line-height-normal)}
/* ── applications_band → sf-tp-applications(Task 13b):藏青→品牌蓝渐变带 +
2×2 玻璃瓦片(inverse 透底 + 发丝透边 + 品牌圆标,cms 应用带语汇)── */
.sf-theme-trade-pro .sf-canvas .sf-section.sf-applications_band{background:var(--sf-bg,linear-gradient(115deg,var(--sf-tp-color-surface-inverse),var(--sf-tp-color-brand-primary-deep) 78%));color:var(--sf-fg,var(--sf-tp-color-text-inverse))}
.sf-theme-trade-pro .sf-section.sf-applications_band .sf-kicker{color:var(--sf-tp-color-text-inverse-muted)}
.sf-theme-trade-pro .sf-section.sf-applications_band .sf-section-head h2{color:var(--sf-tp-color-text-inverse)}
.sf-theme-trade-pro .sf-applications-band{gap:var(--sf-tp-space-4)}
.sf-theme-trade-pro .sf-app-tile{background:color-mix(in srgb,var(--sf-tp-color-text-inverse) 7%,transparent);border:var(--sf-tp-border-width-hairline) solid color-mix(in srgb,var(--sf-tp-color-text-inverse) 18%,transparent);border-radius:var(--sf-tp-card-border-radius);padding:var(--sf-tp-space-5);transition:transform var(--sf-tp-duration-fast) var(--sf-tp-easing-standard),box-shadow var(--sf-tp-duration-fast) var(--sf-tp-easing-standard)}
.sf-theme-trade-pro .sf-app-tile:hover{transform:translateY(calc(-1 * var(--sf-tp-space-1)));box-shadow:var(--sf-tp-shadow-md)}
.sf-theme-trade-pro .sf-app-icon{width:var(--sf-tp-icon-size-xl);height:var(--sf-tp-icon-size-xl);margin-block-end:var(--sf-tp-space-3);border-radius:var(--sf-tp-radius-full);background:var(--sf-tp-color-surface-brand);color:var(--sf-tp-color-text-on-brand);font-size:var(--sf-tp-font-size-md)}
.sf-theme-trade-pro .sf-app-tile h3{color:var(--sf-tp-color-text-inverse);font-size:var(--sf-tp-font-size-md);margin-block-end:var(--sf-tp-space-1)}
.sf-theme-trade-pro .sf-app-tile p{color:color-mix(in srgb,var(--sf-tp-color-text-inverse) 80%,transparent);opacity:1;font-size:var(--sf-tp-font-size-sm);line-height:var(--sf-tp-line-height-normal);margin:0}
/* ── 桥接层响应式(断点随模板:900 栅格堆叠 / 620 紧凑;Layer A 的 820/540
设备控制语义由 responsive.py 继续接管 padding/显隐)── */
@media (max-width: 900px){
.sf-theme-trade-pro .sf-hero-grid,.sf-theme-trade-pro .sf-image-text{grid-template-columns:1fr;gap:var(--sf-tp-space-8)}
.sf-theme-trade-pro .sf-section.sf-hero .sf-hero-img{aspect-ratio:auto;min-height:280px}
.sf-theme-trade-pro .sf-features{grid-template-columns:repeat(2,minmax(0,1fr))}
.sf-theme-trade-pro .sf-collection{grid-template-columns:repeat(2,minmax(0,1fr))}
.sf-theme-trade-pro .sf-gallery{grid-template-columns:repeat(2,1fr)}
.sf-theme-trade-pro .sf-cta-wrap{align-items:flex-start;flex-direction:column}
.sf-theme-trade-pro .sf-trust-bar{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:var(--sf-tp-space-6)}
.sf-theme-trade-pro .sf-trust-item:nth-child(2n){border-inline-end:0}
}
@media (max-width: 620px){
.sf-theme-trade-pro .sf-section.sf-hero .sf-hero-grid{gap:var(--sf-tp-space-4)}
.sf-theme-trade-pro .sf-hero-controls button{width:36px;height:36px;font-size:20px}
.sf-theme-trade-pro .sf-features{gap:var(--sf-tp-space-2)}
.sf-theme-trade-pro .sf-collection{gap:var(--sf-tp-space-2) var(--sf-tp-space-3)}
.sf-theme-trade-pro .sf-item-copy{padding:var(--sf-tp-space-3) var(--sf-tp-space-3) var(--sf-tp-space-4)}
.sf-theme-trade-pro .sf-item-copy h3{font-size:var(--sf-tp-font-size-md)}
.sf-theme-trade-pro .sf-item-copy p{font-size:var(--sf-tp-font-size-xs)}
.sf-theme-trade-pro .sf-gallery{gap:var(--sf-tp-space-2)}
.sf-theme-trade-pro .sf-stats{grid-template-columns:repeat(2,1fr)}
.sf-theme-trade-pro .sf-stats>div{padding:var(--sf-tp-space-3) var(--sf-tp-space-2)}
.sf-theme-trade-pro .sf-stats strong{font-size:var(--sf-tp-font-size-xl)}
.sf-theme-trade-pro .sf-section-head{display:block}
.sf-theme-trade-pro .sf-section-head>a{display:inline-block;margin-block-start:var(--sf-tp-space-2)}
.sf-theme-trade-pro .sf-cta-wrap p{font-size:var(--sf-tp-font-size-sm)}
.sf-theme-trade-pro .sf-price{padding:var(--sf-tp-card-padding-md)}
.sf-theme-trade-pro .sf-trust-bar{grid-template-columns:minmax(0,1fr)}
.sf-theme-trade-pro .sf-trust-item{border-inline-end:0;padding:var(--sf-tp-space-2)}
.sf-theme-trade-pro .sf-applications-band{gap:var(--sf-tp-space-3)}
.sf-theme-trade-pro .sf-app-tile{padding:var(--sf-tp-space-4)}
}
/* 动效尊重系统偏好(Layer A 同款契约,覆盖本层新增过渡)*/
@media(prefers-reduced-motion:reduce){
.sf-theme-trade-pro .sf-item,.sf-theme-trade-pro .sf-item-img img,.sf-theme-trade-pro .sf-gallery img,.sf-theme-trade-pro .sf-button{transition:none}
.sf-theme-trade-pro .sf-item:hover,.sf-theme-trade-pro .sf-button:hover{transform:none}
.sf-theme-trade-pro .sf-item:hover .sf-item-img img,.sf-theme-trade-pro .sf-gallery img:hover{transform:none}
.sf-theme-trade-pro .sf-app-tile{transition:none}
.sf-theme-trade-pro .sf-app-tile:hover{transform:none}
}
/* 画布列内区块的移动端收边(V8.33 既有约定)*/
@media(max-width:640px){.sf-theme-trade-pro .sf-layout-column{min-width:0}.sf-theme-trade-pro .sf-canvas .sf-section{padding-inline:clamp(12px,4vw,24px)}}