Files
cms-SiteForge/themes/trade-pro/theme.css
T
浅念 afecc10aad fix: scope trade-pro element baselines to body class (review I-1/I-2/I-3)
- body/h1-h4/p/a/:focus-visible/label/input/details/summary now under
  .sf-theme-trade-pro so they win the cascade over platform pro-base.css
  (cms typography actually applies now)
- same scoping inside the 620px mobile block to keep overrides effective
- data-reveal gated behind html.js + comment states Task 10 JS dependency

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 08:22:41 +08:00

759 lines
23 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 theme.css — cms 设计令牌与基础样式全量移植(Task 8)
*
* 来源:
* - D:/project/cms/runtimes/astro-site-runtime/src/styles/tokens.css
* (ThemeTokenSet V2「bright-blue」,183 令牌,2026-10-09 设计稿)
* - D:/project/cms/runtimes/astro-site-runtime/src/styles/base.css
* (元素基线 + 布局/按钮/表单/FAQ 工具类,约 445 行)
* 像素基准:D:/project/cms/runtimes/astro-site-runtime/dist/hesupipe/en/
* 移植日期:2026-10-23
*
* 移植规则:
* 1. cms 变量统一加 --sf-tp- 前缀并保留语义名
* (--color-brand-primary → --sf-tp-color-brand-primary,引用处同步)。
* 2. 按钮/交互类名一律 sf-tp- 前缀:.btn → .sf-tp-btn(尺寸 --sm/--lg、
* 变体 solid/--ghost/--outline/--round)。严禁 .btn/.primary/.request/
* .button/.nav-btn——平台 custom.css 会无条件覆盖这些选择器。
* 3. base.css 的元素选择器(html/body/h1-h4/p/a/:focus-visible/表单/details)
* 保留全局形态:本文件只作用于静态站点产物与预览,不进管理后台 UI。
* 4. cms 源文件无 Astro scoped(.astro-XXXX 哈希)规则,零跳过;组件级
* 样式(卡片/特性栅格桌面形态等)随 Task 10 布局移植。
* 5. 文件末尾保留 Phase 2 骨架的短令牌别名(--sf-tp-primary 等,供
* pro.css 与既有模板引用)与 .pro-* 桥接规则,值全部改由 cms 令牌驱动。
*/
:root {
/* ── 3.1 品牌(10)明亮蓝 + 天蓝辅助 + 强调蓝 ── */
--sf-tp-color-brand-primary: #0874df;
--sf-tp-color-brand-primary-strong: #075ebc;
--sf-tp-color-brand-primary-deep: #054a94;
--sf-tp-color-brand-primary-soft: #edf7ff;
--sf-tp-color-brand-secondary: #4bc4ff;
--sf-tp-color-brand-secondary-strong: #2fa8e8;
--sf-tp-color-brand-secondary-soft: #eaf6ff;
--sf-tp-color-brand-accent: #075bb5;
--sf-tp-color-brand-accent-strong: #054a94;
--sf-tp-color-brand-accent-soft: #e9f4ff;
/* ── 3.2 中性(11)冷调蓝灰 ── */
--sf-tp-color-neutral-0: #ffffff;
--sf-tp-color-neutral-50: #f8fbff;
--sf-tp-color-neutral-100: #f3f7fb;
--sf-tp-color-neutral-200: #e5ecf4;
--sf-tp-color-neutral-300: #dfe8f2;
--sf-tp-color-neutral-400: #b7c5d5;
--sf-tp-color-neutral-500: #8497aa;
--sf-tp-color-neutral-600: #64748b;
--sf-tp-color-neutral-700: #52647b;
--sf-tp-color-neutral-800: #27415f;
--sf-tp-color-neutral-900: #071b38;
/* ── 3.3 语义(12)── */
--sf-tp-color-success-default: #1e7a46;
--sf-tp-color-success-strong: #175e35;
--sf-tp-color-success-soft: #e3f2e9;
--sf-tp-color-warning-default: #9a6700;
--sf-tp-color-warning-strong: #7a5200;
--sf-tp-color-warning-soft: #fbf0d9;
--sf-tp-color-danger-default: #c42b1c;
--sf-tp-color-danger-strong: #9e2114;
--sf-tp-color-danger-soft: #fbe7e4;
--sf-tp-color-info-default: #0b5fa5;
--sf-tp-color-info-strong: #094a80;
--sf-tp-color-info-soft: #e5f0f9;
/* ── 3.4 文本(13)── */
--sf-tp-color-text-primary: #071b38;
--sf-tp-color-text-secondary: #52647b;
--sf-tp-color-text-muted: #64748b;
--sf-tp-color-text-inverse: #ffffff;
--sf-tp-color-text-inverse-muted: #b7c5d5;
--sf-tp-color-text-brand: #0874df;
--sf-tp-color-text-link: #075bb5;
--sf-tp-color-text-link-hover: #054a94;
--sf-tp-color-text-on-brand: #ffffff;
--sf-tp-color-text-on-brand-muted: #d9ecff;
--sf-tp-color-text-disabled: #b7c5d5;
--sf-tp-color-text-success: #1e7a46;
--sf-tp-color-text-danger: #c42b1c;
/* ── 3.5 表面(8)── */
--sf-tp-color-surface-page: #ffffff;
--sf-tp-color-surface-default: #ffffff;
--sf-tp-color-surface-muted: #f3f7fb;
--sf-tp-color-surface-inverse: #03192f;
--sf-tp-color-surface-inverse-muted: #0b2440;
--sf-tp-color-surface-brand: #0874df;
--sf-tp-color-surface-brand-soft: #edf7ff;
--sf-tp-color-surface-overlay: rgba(3, 25, 47, 0.55);
/* ── 3.6 边框(5)── */
--sf-tp-color-border-subtle: #e5ecf4;
--sf-tp-color-border-default: #dfe8f2;
--sf-tp-color-border-strong: #b7c5d5;
--sf-tp-color-border-brand: #0874df;
--sf-tp-color-border-inverse: rgba(255, 255, 255, 0.16);
/* ── 3.7 字体家族(3)── */
--sf-tp-font-family-sans: "Inter", "Noto Sans SC", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;
--sf-tp-font-family-heading: var(--sf-tp-font-family-sans);
--sf-tp-font-family-mono: "JetBrains Mono", "IBM Plex Mono", "SFMono-Regular", Consolas, monospace;
/* ── 3.8 字号阶梯(11)── */
--sf-tp-font-size-root: 16px;
--sf-tp-font-size-xs: 12px;
--sf-tp-font-size-sm: 13px;
--sf-tp-font-size-md: 16px;
--sf-tp-font-size-lg: 17px;
--sf-tp-font-size-xl: 20px;
--sf-tp-font-size-2xl: 24px;
--sf-tp-font-size-3xl: 31px;
--sf-tp-font-size-4xl: 38px;
--sf-tp-font-size-5xl: 48px;
--sf-tp-font-size-display: clamp(42px, 5vw, 62px);
/* ── 3.9 字重/行高/字间距(11)── */
--sf-tp-font-weight-regular: 400;
--sf-tp-font-weight-medium: 500;
--sf-tp-font-weight-semibold: 650;
--sf-tp-font-weight-bold: 800;
--sf-tp-line-height-tight: 1.05;
--sf-tp-line-height-snug: 1.35;
--sf-tp-line-height-normal: 1.55;
--sf-tp-line-height-relaxed: 1.7;
--sf-tp-letter-spacing-tight: -0.035em;
--sf-tp-letter-spacing-normal: 0;
--sf-tp-letter-spacing-wide: 0.16em;
/* ── 3.10 间距(16)4/8px 体系 ── */
--sf-tp-space-0: 0;
--sf-tp-space-1: 4px;
--sf-tp-space-2: 8px;
--sf-tp-space-3: 12px;
--sf-tp-space-4: 16px;
--sf-tp-space-5: 20px;
--sf-tp-space-6: 24px;
--sf-tp-space-8: 32px;
--sf-tp-space-10: 40px;
--sf-tp-space-12: 48px;
--sf-tp-space-16: 64px;
--sf-tp-space-20: 80px;
--sf-tp-space-24: 96px;
--sf-tp-space-section-y: clamp(48px, 6vw, 84px);
--sf-tp-space-field-gap: 20px;
--sf-tp-space-grid-gutter: 20px;
/* ── 3.11 布局(13)── */
--sf-tp-container-page-max: 1160px;
--sf-tp-container-content-max: 768px;
--sf-tp-container-narrow-max: 640px;
--sf-tp-container-page-margin-mobile: 20px;
--sf-tp-container-page-margin-desktop: 40px;
--sf-tp-grid-columns-mobile: 4;
--sf-tp-grid-columns-tablet: 8;
--sf-tp-grid-columns-desktop: 12;
--sf-tp-breakpoint-mobile-min: 320px;
--sf-tp-breakpoint-tablet: 768px;
--sf-tp-breakpoint-desktop: 1024px;
--sf-tp-breakpoint-wide: 1440px;
--sf-tp-container-wide-gutter: auto;
/* ── 3.12 形制(15)明亮蓝灰调阴影 ── */
--sf-tp-radius-none: 0;
--sf-tp-radius-xs: 4px;
--sf-tp-radius-sm: 10px;
--sf-tp-radius-md: 8px;
--sf-tp-radius-lg: 12px;
--sf-tp-radius-full: 999px;
--sf-tp-border-width-hairline: 1px;
--sf-tp-border-width-medium: 2px;
--sf-tp-border-width-strong: 3px;
--sf-tp-shadow-none: none;
--sf-tp-shadow-xs: 0 7px 22px rgba(4, 32, 64, 0.05);
--sf-tp-shadow-sm: 0 10px 26px rgba(10, 45, 85, 0.08);
--sf-tp-shadow-md: 0 14px 38px rgba(10, 45, 85, 0.10);
--sf-tp-shadow-lg: 0 18px 48px rgba(10, 45, 85, 0.16);
--sf-tp-shadow-focus-ring: 0 0 0 3px rgba(8, 116, 223, 0.30);
/* ── 3.13 Button(8)── */
--sf-tp-button-height-sm: 36px;
--sf-tp-button-height-md: 46px;
--sf-tp-button-height-lg: 52px;
--sf-tp-button-padding-x-sm: 18px;
--sf-tp-button-padding-x-md: 26px;
--sf-tp-button-padding-x-lg: 34px;
--sf-tp-button-border-radius: 10px;
--sf-tp-button-font-weight: 700;
/* ── 3.14 Input(6)── */
--sf-tp-input-height-sm: 36px;
--sf-tp-input-height-md: 46px;
--sf-tp-input-padding-x: 14px;
--sf-tp-input-border-radius: 6px;
--sf-tp-input-border-width: 1px;
--sf-tp-input-font-size: 16px;
/* ── 3.15 Card(5)── */
--sf-tp-card-border-radius: 8px;
--sf-tp-card-border-width: 1px;
--sf-tp-card-padding-sm: 16px;
--sf-tp-card-padding-md: 20px;
--sf-tp-card-padding-lg: 30px;
/* ── 3.16 图片比例(9)── */
--sf-tp-ratio-square: 1 / 1;
--sf-tp-ratio-portrait: 3 / 4;
--sf-tp-ratio-landscape: 4 / 3;
--sf-tp-ratio-photo: 3 / 2;
--sf-tp-ratio-cinema: 21 / 9;
--sf-tp-ratio-product-main: 4 / 3;
--sf-tp-ratio-product-thumb: 1 / 1;
--sf-tp-ratio-case-cover: 16 / 9;
--sf-tp-ratio-news-cover: 3 / 2;
/* ── 3.17 动效(8)── */
--sf-tp-duration-instant: 100ms;
--sf-tp-duration-fast: 180ms;
--sf-tp-duration-normal: 240ms;
--sf-tp-duration-slow: 400ms;
--sf-tp-easing-standard: cubic-bezier(0.2, 0, 0, 1);
--sf-tp-easing-emphasized: cubic-bezier(0.4, 0, 0.2, 1);
--sf-tp-easing-entry: cubic-bezier(0.05, 0.7, 0.1, 1);
--sf-tp-easing-exit: cubic-bezier(0.3, 0, 0.8, 0.15);
/* ── 3.18 z-index(10)── */
--sf-tp-z-base: 0;
--sf-tp-z-raised: 10;
--sf-tp-z-dropdown: 100;
--sf-tp-z-sticky: 200;
--sf-tp-z-drawer: 300;
--sf-tp-z-overlay: 400;
--sf-tp-z-modal: 500;
--sf-tp-z-tooltip: 600;
--sf-tp-z-toast: 700;
--sf-tp-z-skip-link: 1000;
/* ── 3.19 焦点(5)── */
--sf-tp-focus-outline-width: 2px;
--sf-tp-focus-outline-style: solid;
--sf-tp-focus-outline-color: #0874df;
--sf-tp-focus-outline-offset: 2px;
--sf-tp-focus-outline-color-inverse: #4bc4ff;
/* ── 3.20 图标(4)── */
--sf-tp-icon-size-sm: 16px;
--sf-tp-icon-size-md: 20px;
--sf-tp-icon-size-lg: 24px;
--sf-tp-icon-size-xl: 46px;
/* ── Phase 2 短令牌别名(pro.css 与既有模板引用;值随 cms 令牌走)── */
--sf-tp-primary: var(--sf-tp-color-brand-primary);
--sf-tp-accent: var(--sf-tp-color-brand-secondary);
--sf-tp-bg: var(--sf-tp-color-surface-page);
--sf-tp-text: var(--sf-tp-color-text-primary);
--sf-tp-muted: var(--sf-tp-color-text-muted);
--sf-tp-radius: var(--sf-tp-radius-md);
--sf-tp-font: var(--sf-tp-font-family-sans);
}
/* ── 元素基线(base.css)── */
*,
*::before,
*::after {
box-sizing: border-box;
}
html {
font-size: var(--sf-tp-font-size-root);
scroll-behavior: smooth;
}
/* Element baselines are scoped to the theme body class so they win the cascade
over platform pro-base.css (same specificity would lose to later loads). */
body.sf-theme-trade-pro {
margin: 0;
background: var(--sf-tp-color-surface-page);
color: var(--sf-tp-color-text-primary);
font-family: var(--sf-tp-font-family-sans);
font-size: var(--sf-tp-font-size-md);
line-height: var(--sf-tp-line-height-normal);
-webkit-font-smoothing: antialiased;
overflow-x: hidden;
}
.sf-theme-trade-pro h1,
.sf-theme-trade-pro h2,
.sf-theme-trade-pro h3,
.sf-theme-trade-pro h4 {
font-family: var(--sf-tp-font-family-heading);
font-weight: var(--sf-tp-font-weight-bold);
line-height: var(--sf-tp-line-height-tight);
letter-spacing: var(--sf-tp-letter-spacing-tight);
margin: 0 0 var(--sf-tp-space-4);
text-wrap: balance;
}
.sf-theme-trade-pro h1 { font-size: var(--sf-tp-font-size-display); }
.sf-theme-trade-pro h2 { font-size: var(--sf-tp-font-size-3xl); }
.sf-theme-trade-pro h3 { font-size: var(--sf-tp-font-size-xl); }
.sf-theme-trade-pro h4 { font-size: var(--sf-tp-font-size-lg); }
.sf-theme-trade-pro p {
margin: 0 0 var(--sf-tp-space-4);
}
.sf-theme-trade-pro a {
color: inherit;
text-decoration: none;
}
.sf-theme-trade-pro :focus-visible {
outline: var(--sf-tp-focus-outline-width) var(--sf-tp-focus-outline-style) var(--sf-tp-focus-outline-color);
outline-offset: var(--sf-tp-focus-outline-offset);
}
/* ── 布局工具 ── */
.wrap {
width: min(1440px, 90vw);
margin-inline: auto;
}
.section {
padding-block: var(--sf-tp-space-section-y);
}
.section--soft {
background: linear-gradient(135deg, var(--sf-tp-color-neutral-50), var(--sf-tp-color-surface-brand-soft));
}
.section--dark {
color: var(--sf-tp-color-text-inverse);
background: 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) 60%, transparent)
);
}
.section--dark h2,
.section--dark h3 {
color: var(--sf-tp-color-text-inverse);
}
/* 眉题(eyebrow):强调蓝 + 宽字距大写(.pro-eyebrow 为 Phase 2 桥接同款) */
.eyebrow,
.pro-eyebrow {
color: var(--sf-tp-color-brand-accent);
font-weight: var(--sf-tp-font-weight-bold);
letter-spacing: var(--sf-tp-letter-spacing-wide);
text-transform: uppercase;
font-size: var(--sf-tp-font-size-xs);
margin-block-end: var(--sf-tp-space-3);
display: block;
}
.section--dark .eyebrow {
color: var(--sf-tp-color-text-inverse-muted);
}
/* 圆形图标位 */
.icon-circle {
width: var(--sf-tp-icon-size-xl);
height: var(--sf-tp-icon-size-xl);
margin: 0 auto 8px;
border-radius: var(--sf-tp-radius-full);
display: grid;
place-items: center;
color: var(--sf-tp-color-text-brand);
background: var(--sf-tp-color-surface-brand-soft);
font-size: var(--sf-tp-font-size-2xl);
font-weight: var(--sf-tp-font-weight-bold);
}
/* 等宽数据 */
.mono {
font-family: var(--sf-tp-font-family-mono);
font-variant-numeric: tabular-nums;
}
/* ── Button(cms §4.2 V2:蓝底白字 + 悬浮上抬;类名 sf-tp- 前缀隔离平台 custom.css)── */
.sf-tp-btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--sf-tp-space-2);
min-height: var(--sf-tp-button-height-md);
padding-inline: var(--sf-tp-button-padding-x-md);
font-family: var(--sf-tp-font-family-sans);
font-size: var(--sf-tp-font-size-md);
font-weight: var(--sf-tp-button-font-weight);
line-height: var(--sf-tp-line-height-snug);
border-radius: var(--sf-tp-button-border-radius);
border: var(--sf-tp-border-width-hairline) solid var(--sf-tp-color-border-brand);
background: var(--sf-tp-color-surface-brand);
color: var(--sf-tp-color-text-on-brand);
cursor: pointer;
text-decoration: none;
transition:
background-color var(--sf-tp-duration-fast) var(--sf-tp-easing-standard),
border-color var(--sf-tp-duration-fast) var(--sf-tp-easing-standard),
color var(--sf-tp-duration-fast) var(--sf-tp-easing-standard),
box-shadow var(--sf-tp-duration-fast) var(--sf-tp-easing-standard),
transform var(--sf-tp-duration-fast) var(--sf-tp-easing-standard);
}
.sf-tp-btn: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);
}
.sf-tp-btn:active {
background: var(--sf-tp-color-brand-primary-deep);
transform: none;
}
/* 尺寸 */
.sf-tp-btn--sm {
min-height: var(--sf-tp-button-height-sm);
padding-inline: var(--sf-tp-button-padding-x-sm);
font-size: var(--sf-tp-font-size-sm);
}
.sf-tp-btn--lg {
min-height: var(--sf-tp-button-height-lg);
padding-inline: var(--sf-tp-button-padding-x-lg);
font-size: var(--sf-tp-font-size-lg);
}
/* 变体:ghost(浅底品牌字) */
.sf-tp-btn--ghost {
background: var(--sf-tp-color-surface-default);
color: var(--sf-tp-color-text-brand);
}
.sf-tp-btn--ghost:hover {
background: var(--sf-tp-color-surface-brand-soft);
color: var(--sf-tp-color-text-brand);
}
/* 变体:outline(描边品牌字;.sf-tp-btn-outline 为 Phase 2 骨架既有类名) */
.sf-tp-btn--outline,
.sf-tp-btn-outline {
background: transparent;
color: var(--sf-tp-color-text-brand);
}
.sf-tp-btn--outline:hover,
.sf-tp-btn-outline:hover {
background: var(--sf-tp-color-surface-brand-soft);
color: var(--sf-tp-color-text-link-hover);
}
/* 变体:round(药丸) */
.sf-tp-btn--round {
border-radius: var(--sf-tp-radius-full);
min-height: var(--sf-tp-space-10);
padding-inline: var(--sf-tp-space-6);
font-size: var(--sf-tp-font-size-sm);
}
/* 深色表面上的描边按钮 */
.section--dark .sf-tp-btn--ghost,
.cta-band .sf-tp-btn--ghost {
background: var(--sf-tp-color-surface-default);
color: var(--sf-tp-color-text-brand);
}
/* ── Skip link(无障碍跳转,z 最高)── */
.skip-link {
position: absolute;
inset-block-start: var(--sf-tp-space-2);
inset-inline-start: var(--sf-tp-space-2);
z-index: var(--sf-tp-z-skip-link);
background: var(--sf-tp-color-surface-default);
color: var(--sf-tp-color-text-brand);
padding: var(--sf-tp-space-3) var(--sf-tp-space-4);
border-radius: var(--sf-tp-radius-sm);
box-shadow: var(--sf-tp-shadow-md);
transform: translateY(calc(-100 * var(--sf-tp-space-4)));
}
.skip-link:focus-visible {
transform: none;
}
/* ── 视觉隐藏(屏幕阅读器可用)── */
.visually-hidden {
position: absolute;
width: var(--sf-tp-space-1);
height: var(--sf-tp-space-1);
overflow: hidden;
clip-path: inset(50%);
white-space: nowrap;
}
/* ── 药丸选项卡 ── */
.tabs {
display: flex;
flex-wrap: wrap;
gap: calc(var(--sf-tp-space-4) - var(--sf-tp-space-1));
margin-block-end: var(--sf-tp-space-8);
}
.tab {
border: 0;
min-width: 130px;
padding: calc(var(--sf-tp-space-3)) var(--sf-tp-space-5);
border-radius: var(--sf-tp-radius-full);
background: var(--sf-tp-color-surface-muted);
color: var(--sf-tp-color-text-secondary);
font-weight: var(--sf-tp-font-weight-semibold);
font-size: var(--sf-tp-font-size-sm);
cursor: pointer;
transition:
background-color var(--sf-tp-duration-fast) var(--sf-tp-easing-standard),
color var(--sf-tp-duration-fast) var(--sf-tp-easing-standard);
}
.tab.active {
background: var(--sf-tp-color-surface-brand);
color: var(--sf-tp-color-text-on-brand);
}
/* ── 表单(label 永远可见)── */
.sf-theme-trade-pro label {
display: block;
font-weight: var(--sf-tp-font-weight-semibold);
font-size: var(--sf-tp-font-size-sm);
margin-block-end: var(--sf-tp-space-2);
}
.sf-theme-trade-pro input,
.sf-theme-trade-pro select,
.sf-theme-trade-pro textarea {
width: 100%;
border: var(--sf-tp-input-border-width) solid var(--sf-tp-color-border-default);
border-radius: var(--sf-tp-input-border-radius);
padding: var(--sf-tp-space-3) var(--sf-tp-space-4);
background: var(--sf-tp-color-surface-default);
font: inherit;
color: inherit;
}
.sf-theme-trade-pro input:focus-visible,
.sf-theme-trade-pro select:focus-visible,
.sf-theme-trade-pro textarea:focus-visible {
border-color: var(--sf-tp-color-border-brand);
}
.sf-theme-trade-pro textarea {
min-height: 120px;
resize: vertical;
}
/* ── FAQ 折叠(原生 details,静态可抓取)── */
.sf-theme-trade-pro details {
border: var(--sf-tp-border-width-hairline) solid var(--sf-tp-color-border-subtle);
border-radius: var(--sf-tp-radius-sm);
margin-block-end: calc(var(--sf-tp-space-3) - var(--sf-tp-space-1));
background: var(--sf-tp-color-surface-default);
}
.sf-theme-trade-pro summary {
cursor: pointer;
padding: var(--sf-tp-space-4) calc(var(--sf-tp-space-4) + var(--sf-tp-space-1));
font-weight: var(--sf-tp-font-weight-semibold);
}
.sf-theme-trade-pro details[open] summary {
border-block-end: var(--sf-tp-border-width-hairline) solid var(--sf-tp-color-border-subtle);
}
.sf-theme-trade-pro details p {
padding: var(--sf-tp-space-4) calc(var(--sf-tp-space-4) + var(--sf-tp-space-1));
color: var(--sf-tp-color-text-muted);
margin: 0;
}
/* ── Phase 2 桥接:骨架期 .pro-* 强调样式改由 cms 令牌驱动(Task 10 布局移植后由组件样式接管)── */
.pro-utility {
background: var(--sf-tp-color-surface-inverse);
color: var(--sf-tp-color-text-inverse-muted);
}
.pro-home-hero em {
color: var(--sf-tp-color-text-brand);
}
/* ── 滚动浮现动效(渐进增强:仅在 JS 打开 html.js 且注册 IntersectionObserver
后生效——Task 10 随布局引入配套 JS;无 JS/reduced-motion 时默认可见)── */
@media (prefers-reduced-motion: no-preference) {
html.js [data-reveal] {
opacity: 0;
transform: translateY(calc(var(--sf-tp-space-3)));
transition:
opacity var(--sf-tp-duration-slow) var(--sf-tp-easing-entry),
transform var(--sf-tp-duration-slow) var(--sf-tp-easing-entry);
transition-delay: calc(var(--sf-tp-duration-fast) * var(--reveal-i, 0));
}
html.js [data-reveal].is-visible {
opacity: 1;
transform: none;
}
}
/* ── 令牌媒介覆盖(tokens.css)── */
/* 移动端栅格沟槽覆盖 */
@media (max-width: 767px) {
:root {
--sf-tp-space-grid-gutter: 14px;
}
}
/* prefers-reduced-motion:时长归零 */
@media (prefers-reduced-motion: reduce) {
:root {
--sf-tp-duration-instant: 0ms;
--sf-tp-duration-fast: 0ms;
--sf-tp-duration-normal: 0ms;
--sf-tp-duration-slow: 0ms;
}
}
/* ════════ 移动端适配(base.css,2026-10-14 设计稿 620px 断点)════════ */
@media (max-width: 620px) {
:root {
--sf-tp-font-size-md: 13px;
--sf-tp-font-size-lg: 13px;
--sf-tp-font-size-xl: 15px;
--sf-tp-font-size-2xl: 18px;
--sf-tp-font-size-3xl: 22px;
--sf-tp-font-size-4xl: 26px;
--sf-tp-space-section-y: 30px;
--sf-tp-card-border-radius: 7px;
--sf-tp-button-height-md: 37px;
--sf-tp-button-height-lg: 42px;
--sf-tp-button-border-radius: 999px;
--sf-tp-icon-size-xl: 39px;
}
body {
font-size: 13px;
line-height: 1.42;
}
.wrap {
width: calc(100% - 30px);
}
h1 { font-size: 28px; line-height: 1.05; }
h2 { font-size: 22px; line-height: 1.1; }
h3 { margin-block-end: 5px; }
.eyebrow,
.pro-eyebrow {
font-size: 9px;
letter-spacing: 0.2em;
margin-block-end: 7px;
}
.sf-tp-btn {
min-height: 37px;
padding-inline: 18px;
font-size: 11px;
border-radius: 999px;
}
.section { padding-block: 30px; }
/* 卡片:2 列紧凑(组件类,桌面形态随 Task 10 移植) */
.cards {
gap: 10px;
}
.card { border-radius: 7px; }
.card-media {
aspect-ratio: 16 / 9;
}
.card-body {
padding: 9px 10px 11px;
}
.card h3 {
font-size: 13px;
margin-block-end: 2px;
}
.card p {
font-size: 11px;
line-height: 1.25;
margin-block-end: 5px;
}
.more { font-size: 10px; }
/* 特性:2 列横排(图标左、文字右) */
.feature-grid {
grid-template-columns: 1fr 1fr;
gap: 8px;
}
.feature {
min-height: 92px;
text-align: left;
padding: 12px;
display: grid;
grid-template-columns: 44px 1fr;
align-content: center;
column-gap: 7px;
}
.feature .icon-circle {
grid-row: 1 / 3;
align-self: center;
margin: 0;
font-size: 20px;
}
.feature h3 {
font-size: 12px;
margin: 0 0 3px;
}
.feature p {
font-size: 10px;
line-height: 1.3;
}
/* 选项卡 */
.tabs { gap: 8px; margin-block-end: 16px; }
.tab { min-width: auto; padding: 9px 14px; font-size: 11px; }
/* FAQ(作用域同桌面基线,保持移动端覆写有效) */
.sf-theme-trade-pro details { margin-block-end: 6px; }
.sf-theme-trade-pro summary { padding: 10px 12px; font-size: 12px; }
.sf-theme-trade-pro details p { padding: 0 12px 10px; font-size: 11px; }
/* 表单 */
.sf-theme-trade-pro input, .sf-theme-trade-pro select, .sf-theme-trade-pro textarea { padding: 8px 10px; font-size: 13px; }
.sf-theme-trade-pro label { font-size: 11px; }
.sf-theme-trade-pro textarea { min-height: 80px; }
}