Files
cms-SiteForge/themes/trade-pro/blocks.css
T
浅念 c4d9b1075c feat: full block visual bridge — platform blocks get trade-pro template-grade styling
Task 13a. Rewrite themes/trade-pro/blocks.css as two layers:
- Layer A: current app/static/blocks.css verbatim (old theme copy was stale,
  missing V8.34+ hero slider / layout-variant / card-style rules); keeps all
  platform contracts (site-runtime.js hero track, responsive.py 820/540 device
  semantics, card-style/fit variants, V8.33.1 section-vs-inner class fix).
- Layer B: .sf-theme-trade-pro scoped bridge to the sf-tp-* template language:
  hero (dark gradient + scrim + inverse button), features (soft band + white
  cards + icon-circle index), collection (hairline cards, hover lift, 4:3
  media, pill tag), image_text (1fr/1.22fr + photo frame), stats (white stat
  bar with hairline dividers), cta (gradient band + ghost button), richtext
  (article-body typography incl. tables), plus gallery/faq/tabs/carousel/
  video/pricing/attributes in the same tokens. 68 distinct --sf-tp-* token
  references; breakpoints 900/620 follow the template.
  Section backgrounds use a .sf-canvas chain (0,4,0) so they beat pro-base's
  later-loading .pro-custom-content rules in both static and editor cascades;
  user inline --sf-bg/--sf-fg still win via var() fallbacks; canvas hooks
  (block-id attrs, selection outlines, site-design padding/h1 controls)
  untouched.

Tests: test_trade_pro_blocks_visual_bridge covers distribution (theme file
served verbatim, not platform), full multi-block DOM structure with pro.js
filter hooks, scoped rule/token/breakpoint contracts and editor-safety
red lines. 36/36 in test_theme_registry + test_theme_pro_v3; full suite
453 passed / 11 failed (identical to pre-change baseline).

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-28 16:07:39 +08:00

263 lines
31 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 无一一对应组件)。
级联纪律:
- 节级底色用 .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}
/* ════════ 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)}
/* ── 桥接层响应式(断点随模板: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}
}
@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)}
}
/* 动效尊重系统偏好(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}
}
/* 画布列内区块的移动端收边(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)}}