/** * 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, .sf-tp-cta .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; } /* ── 图标(Task 9 SVG 宏库:内联线条图标的对齐与间距)── */ /* 基线对齐:inline 上下文垂直居中,flex 上下文不被压缩换行。 尺寸在 CSS 层固定(Safari 等引擎不支持 width/height 属性中的 var(), 属性值仅作无 CSS 场景的渐进增强;CSS 覆盖属性保证跨引擎一致) */ .sf-tp-icon { display: inline-block; vertical-align: middle; flex-shrink: 0; width: var(--sf-tp-icon-size-md, 20px); height: var(--sf-tp-icon-size-md, 20px); } .sf-tp-icon--sm { width: var(--sf-tp-icon-size-sm, 16px); height: var(--sf-tp-icon-size-sm, 16px); } /* 按钮内紧跟文字的图标留出呼吸空间(flex gap 之外的显式间距, 兼容图标包在 里或直接暴露两种写法) */ .sf-tp-btn svg { margin-inline-start: var(--sf-tp-space-1); } /* 非按钮内联上下文:图标贴着文字时补一点间距 */ .pro-mega a .sf-tp-icon, .pro-contact-email .sf-tp-icon, .pro-footer-links a .sf-tp-icon { margin-inline-start: var(--sf-tp-space-1); } /* filters 宏搜索框:放大镜占位在输入框内左侧(不抢焦点) */ .sf-theme-trade-pro .pro-filter-search-box { position: relative; display: block; margin: 0; /* 抵消 pro-base 的 label>span 说明文字样式 */ } .sf-theme-trade-pro .pro-filter-search-box .sf-tp-icon { position: absolute; inset-inline-start: var(--sf-tp-space-3); inset-block-start: 50%; transform: translateY(-50%); pointer-events: none; color: var(--sf-tp-color-text-muted); } .sf-theme-trade-pro .pro-filter-search-box input { padding-inline-start: calc(var(--sf-tp-icon-size-md, 20px) + var(--sf-tp-space-6)); } /* ── Phase 2 桥接:骨架期 .pro-* 强调样式改由 cms 令牌驱动(home 布局已由 pro.css 的 sf-tp-* 组件层接管,Task 10a 起仅保留 utility 条)── */ .pro-utility { background: var(--sf-tp-color-surface-inverse); color: var(--sf-tp-color-text-inverse-muted); } /* ── 滚动浮现动效(渐进增强:仅在 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; } /* 卡片/特性等组件的移动端形态已随 Task 10a 移入 pro.css 的 sf-tp-* 组件层(.sf-tp-card-grid / .sf-tp-feature-grid 等), 本文件只保留元素基线与共享工具类。 */ /* 选项卡 */ .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; } }