diff --git a/tests/test_theme_registry.py b/tests/test_theme_registry.py
index 3a5de92..c61ea22 100644
--- a/tests/test_theme_registry.py
+++ b/tests/test_theme_registry.py
@@ -512,6 +512,97 @@ def test_trade_pro_about_layout_structure(factory):
assert len(bsoup.select('.sf-tp-about-certs .sf-tp-feature')) == 4
+def test_trade_pro_contact_layout_structure(factory):
+ # Task 10f:contact.html 移植 cms 联系页设计(contact.astro + LeadForm.astro,
+ # 像素基准 dist/hesupipe/en/contact/)后的结构契约。
+ # 区块序列:PageHero(面包屑 + 封面底图 + 眉题/h1/导语)→ 联系信息/
+ # 表单双栏(0.85fr 信息列 + 1.25fr 灰底表单卡)→ 富文本正文(body
+ # 存在才渲染)。cms 的地图带(Google 嵌入 = 公司真实地址数据)不移植
+ # ——平台无地址字段,虚构地址即假数据;结尾 Cta 由 pro.html 全局
+ # pro-end-cta 覆盖。
+ # 无假提交双形态:配置 form_endpoint(HTTPS 双层校验——API 400 拒绝
+ # 非 HTTPS + make_context 渲染层回退)→ 外部表单(name/email/message
+ # + pro-honeypot 蜜罐,10b 同款契约,隐藏规则随构建分发);未配置 →
+ # 不渲染任何
,表单位换引导卡
+ (真实邮箱 mailto 优先;无邮箱给通用引导 + /products/ CTA)。
+ 2. 联系信息条目有真实字段才渲染:平台上下文只有 footer_email
+ (邮箱 mailto + mail 图标)。cms 词典的电话/地址/营业时间是
+ HESU 真实数据,平台无对应字段——绝不虚构,以两条通用服务承诺
+ (响应时效/采购对接,全主题既有口径)补足列表节奏。地图带同理
+ 不移植:Google 嵌入指向公司真实地址,无地址数据源即无地图。
+ 结尾 Cta 带不重复渲染:pro.html 全局 pro-end-cta 对 contact 页
+ 本就输出(cms Cta 也是「回联系页」自指按钮,无增量信息)。
+ 3. 正文:cms 无独立正文区(infoText 为单段配置文案,平台由静态
+ 引导语对应);WP 迁移的 contact 页常带富文本 body,渲染为正文
+ 区(10d sf-tp-article-body 排版层双挂,无 body 整段隐藏)。 #}
+
+ {% if safe_image(page.cover) %} {% endif %}
+
+
+
+ Home {{ page.title }}
+
+
+
CONTACT US
+
{{ page.title }}
+ {% if page.summary %}
{{ page.summary }}
{% endif %}
+
+
+
+
+{% if content %}
+
+
+
{{ body_copy(content, page) }}
+
+
{% endif %}
diff --git a/themes/trade-pro/pro.css b/themes/trade-pro/pro.css
index 265304d..2843f7f 100644
--- a/themes/trade-pro/pro.css
+++ b/themes/trade-pro/pro.css
@@ -491,3 +491,43 @@
.sf-theme-trade-pro .sf-tp-about-facility figcaption{padding:9px 10px}
.sf-theme-trade-pro .sf-tp-about-facility .sf-tp-tag{font-size:10px}
}
+
+/* ── Task 10f:contact 联系页(contact.astro + LeadForm.astro 移植)──
+ 源 src/pages/[locale]/contact.astro:联系信息/表单双栏(0.85fr 信息列 +
+ 1.25fr 灰底 form-card)+ LeadForm(引导语 + 纵向字段栅格 + 提交按钮)。
+ 共享组件复用:sf-tp-page-hero/breadcrumb(10c 内页 hero)、
+ sf-tp-article-body(10d 富文本排版层双挂);表单卡与 10b 询盘表单卡
+ 同构(cms 同一 LeadForm 组件),字段样式走 theme.css 元素基线,
+ 本块只补 contact 专属布局(双栏比、信息列表、图标实底圆)。 */
+
+.sf-theme-trade-pro .sf-tp-contact-grid{display:grid;grid-template-columns:0.85fr 1.25fr;gap:calc(var(--sf-tp-space-16) + var(--sf-tp-space-6));align-items:start}
+.sf-theme-trade-pro .sf-tp-contact-info>p{color:var(--sf-tp-color-text-muted)}
+/* 信息列表(cms contact-list):图标圆 + 标题/值两列行 */
+.sf-theme-trade-pro .sf-tp-contact-list{display:grid;gap:var(--sf-tp-space-6);margin-block-start:var(--sf-tp-space-8)}
+.sf-theme-trade-pro .sf-tp-contact-item{display:grid;grid-template-columns:var(--sf-tp-space-12) 1fr;gap:var(--sf-tp-space-4);align-items:center}
+/* cms icon-solid:品牌实底圆覆写默认 brand-soft 形态(居中 auto 边距归零) */
+.sf-theme-trade-pro .sf-tp-contact-item .icon-circle{margin:0;background:var(--sf-tp-color-brand-primary);color:var(--sf-tp-color-text-on-brand)}
+.sf-theme-trade-pro .sf-tp-contact-item strong{display:block;margin-block-end:var(--sf-tp-space-1)}
+.sf-theme-trade-pro .sf-tp-contact-item p{margin:0;color:var(--sf-tp-color-text-muted);font-size:var(--sf-tp-font-size-sm)}
+.sf-theme-trade-pro .sf-tp-contact-item a{color:inherit;word-break:break-all}
+.sf-theme-trade-pro .sf-tp-contact-item a:hover{color:var(--sf-tp-color-text-link)}
+/* 表单卡(cms form-card + lead-text):灰底圆角;两形态共用(外部表单/
+ 无表单引导卡),卡内引导语 muted(cms .lead-text 间距) */
+.sf-theme-trade-pro .sf-tp-contact-form{background:var(--sf-tp-color-surface-muted);padding:calc(var(--sf-tp-space-8) + var(--sf-tp-space-1));border-radius:var(--sf-tp-radius-sm)}
+.sf-theme-trade-pro .sf-tp-contact-form>p{color:var(--sf-tp-color-text-muted);margin-block-end:var(--sf-tp-space-6)}
+.sf-theme-trade-pro .sf-tp-contact-form form{display:grid;gap:var(--sf-tp-space-4)}
+.sf-theme-trade-pro .sf-tp-contact-form .sf-tp-btn{justify-self:start}
+.sf-theme-trade-pro .sf-tp-contact-form textarea{min-height:110px}
+.sf-theme-trade-pro .sf-tp-contact-note{font-size:var(--sf-tp-font-size-xs);color:var(--sf-tp-color-text-muted);margin:0}
+
+/* ── contact 响应式(cms 断点 900/620;767 无 contact 专属规则——内页
+ hero 的 767 竖版由 10c 既有块覆盖。折叠规则收在本任务媒体块内
+ (10c 教训:同特异性按源顺序取胜)── */
+@media (max-width: 900px){
+ .sf-theme-trade-pro .sf-tp-contact-grid{grid-template-columns:1fr}
+}
+@media (max-width: 620px){
+ .sf-theme-trade-pro .sf-tp-contact-list{gap:16px}
+ .sf-theme-trade-pro .sf-tp-contact-item{grid-template-columns:40px 1fr;gap:10px}
+ .sf-theme-trade-pro .sf-tp-contact-form{padding:20px}
+}