证据,而非装饰。
项目图像与内容是主角。用大字、留白和尺寸对比组织信息,不把所有内容装进相同卡片。
从 Deethin 的真实首页出发,延续 Fabrica 式的编辑节奏。把视觉、空间与动作变成可以检查、复用和讨论的规则。
查看真实组件保留 V1 作为历史对照。正式首页首屏后的内容与 Portfolio 审阅页已按业主要求接入共享 token;项目卡片使用下方的实际组件。新增首页组合保留来源与待审状态,不冒充已批准的 Figma 资产。其他页面未作全站样式迁移。
项目图像与内容是主角。用大字、留白和尺寸对比组织信息,不把所有内容装进相同卡片。
页面章节有展陈节奏;组件内部有明确的 padding、gap、状态与可访问性规则。两种密度不混用。
保留首页的叙事性开场;操作控件即时响应。动效不可成为阅读、键盘或 reduced-motion 用户的门槛。
Primary #FFFFFF 是基底,Secondary #101010 是对比,Accent #73D1F8 是品牌点睛。60–30–10 作为构图参考,不是逐屏像素配额,也不等于 primary button 必须白色。Surface / Ink 描述用途,可以指向相同原色。
#ffffff--ds-surface项目、输入、对话框
Deethin source#101010--ds-ink正文、主按钮、深色章节;构图上的 Secondary
Deethin source / owner direction#73d1f8--ds-accentLogo 主色、少量点睛、黑底 data label;不作白底小字
Owner direction#f4f4f2--ds-canvas页面底色
Deethin source#1d1d1d--ds-surface-dark黑色章节内的深灰证据卡片,不用白卡制造过强反差
Deethin .caseEvidence#0087fb--ds-accent-ink浅底 MONO data label;不替换 Logo 的 #73D1F8
Owner direction灰色说明保留 text/muted 职责,不再叫 Secondary。系统状态色不在这组色卡展示;控件暂沿用 V1 的功能色,后续核对 Figma,未擅自覆盖。
oklch(.18 .02 255)oklch(.53 .2 263)oklch(.81 .108 234)oklch(.955 .022 226)oklch(.985 .008 235)上方完整色带使用主页 CSS fallback 的 165° / 48% / 62% 配方;下方五个色卡来自 smoke-renderer.ts 的真实光场 palette。两者不是同一个算法;Figma 先用静态关键帧或渐变近似,不能只抄五个色值就还原流动光场。
JetBrains Mono · 12px / 500 / 1.6 / .04em。深底使用 #73D1F8;白底按本轮决定使用 #0087FB。#0087FB 与白底对比为 3.58:1,低于普通小字 4.5:1;当前仅作为 Proposed data label,若承担必要信息需要加深或提升字号/字重。说明段落保持 sans 与中性灰。
Inter / system sans 负责内容;JetBrains Mono 负责代码和测量。复用网站已有字体,不新增字体请求。语义层级与视觉尺寸分开。
clamp(3rem, 7.5vw, 7rem) · 600
line 0.96 · tracking -.055em只用于短英文展陈标题;不用于正文
clamp(2.5rem, 5vw, 4.5rem) · 600
line 1.04 · tracking -.04em页面标题,每页一个语义 h1
clamp(2rem, 3.8vw, 3.5rem) · 600
line 1.1 · tracking -.035em章节标题
1.5rem · 600
line 1.25 · tracking -.02em组件和项目标题;允许换行
1.25rem · 600
line 1.35 · tracking -.01em小节标题
1rem · 600
line 1.5 · tracking 0组内标题
.875rem · 600
line 1.5 · tracking 0细分标题,避免深层嵌套
1rem · 400
line 1.7 · tracking 0中英说明;最长 65ch;中文行高 1.8
.875rem · 500
line 1.4 · tracking 0按钮与表单标签;不全大写
.75rem · 400
line 1.6 · tracking 0注解;数值用 JetBrains Mono,不承担核心说明
紧字距只用于英文标题。中文标题恢复 normal tracking / 1.25 行高;中文正文 1.8。禁止用超小标签装载重要信息。
space-00pxspace-14pxspace-28pxspace-312pxspace-416pxspace-520pxspace-624pxspace-832pxspace-1248pxspace-1664pxspace-2496pxspace-32128px每项都附局部示意。缩略图展示关系,不把1440px页面强行塞入小卡;控件框模型保留实际尺寸,完整响应式网格见下方。
max 1440px16–40pxclamp(16px, 3vw, 40px),内容最多 1440px;不缩放整张页面。
64–128pxclamp(64px, 8vw, 128px);区分展陈大留白和控件内部小间距。
12 col6 col1 col12 → 6 → 1≥1200px 为 12 列;700–1199px 为 6 列;<700px 为单列。演示格栅真实响应。
gap 8 · cover 4:32 → 1≥700px 两列,gap 8px;<700px 单列。V2 封面 4:3,标题常驻,辅助标签按交互显示。
↕12 / ↔20 / gap848 / 20 / 8按钮 min-height 48px,padding 12px 20px,图文 gap 8px;长标签可换行增高。
← max 65ch →让文字自然呼吸。
让信息按顺序被阅读。
行高 1.8,不缩小字号。
65ch长文单列,中文行高 1.8;只给数值加 mono,不给整段说明加 mono。
320pxAa200%Aa320px / 200%导航换行、表格转堆叠、弹窗可滚动;不隐藏溢出来伪装适配。
这里的按钮与状态库用同一个 class 和 token;不是另外画的一张框模型图。控件有最小高度,没有固定高度锁死放大的文字。
灰底承托白卡。黑卡用于章节对比;蓝卡只作极少量重点,不替代所有内容背景。
黑底承托 #1D1D1D 卡片;白色主要用于文字,accent 用于少量 MONO 标记。
8px小型精确控件:输入框、菜单、参数面板。边缘更利落,不让每个小控件都像一张大卡片。
18px中型内容容器:项目封面+标题、深灰证据卡片。圆角负责成组,不表示可以点击。
28px大型章节或独立舞台:与页面形成更明显的空间边界,不套在每个内部元素上。
pill按钮由高度决定胶囊轮廓。它是动作形状,不与卡片圆角竞争;嵌套圆角按内距协调,不盲目18套18。
Elevation 是“浮在页面上方”的视觉提示,靠阴影表达;z-index 只是网页重叠顺序,不是阴影大小,也不是 Figma 的坐标深度。静态卡片用明暗表面区分,无需投影。弹窗才使用两层阴影;content 0 / sticky 20 / toast 40 是本地层级约定,native dialog 在浏览器 top layer,不能拿一个更大的 z-index 等同它。
下面是可对照的视觉状态样本;hover / focus / pressed 被固定展示,真实交互请用下方演示。不可用与加载状态不能重复触发。
保持焦点、固定最小宽度、900ms 后返回反馈。
Focus 不是可删除的装饰:键盘 Tab、触屏外接键盘都需要知道当前位置。输入框可与 hover 共用深色边界,但 focus-visible 额外保留细 2px 环;普通鼠标/触屏按钮不常驻粗环。浏览器也可能为正在输入的文本框显示焦点,这是有意保留的定位信息。
label→input 8px;input padding 12×16px、min-height 48px;helper gap 8px;font-size 16px 防止 iOS 聚焦缩放。disabled 与 read-only 不等价。
REST / 可 hover 或用 Tab 聚焦
REVEALED / 固定展示辅助信息
封面增至 4:3,正文精简为项目类型、年份与标题。白底 tags 与箭头在封面底部同排,hover / focus 出现;触屏常驻。长标题可换行,200% 文字时辅助信息移至正常文流,避免压住图像。
页面色、18px 项目圆角、16:9 封面和编辑式动效在 Deethin 源码中可追溯;状态色、完整字号阶梯、控件尺寸和交互补全属于 Proposed。Fabrica 的提取数据独立保存,不自动替换语义 token。
首页、case study 与实验组件职责不同。需要你先确认第 6 版方向,再逐组件迁移、核对状态与内容,不把实验值悄悄变成全站规范。
首页复杂开场保留在生产页面;这里用独立舞台检验相同的编辑节奏,不重复播放整段 WebGL 开场。
hover 图标 translate(3px,−3px),320ms。移出可反向;按下缩至.98;键盘定位立即可见。
hover 下划线 scaleX(0→1),240ms,左侧为原点。focus 立即显示,触屏始终有线。
复用上方真实 ProjectCard:图像800ms、tags240ms、箭头500ms;只改变辅助信息,不隐藏标题与入口。
点击重播:translateY(110%→0),1050ms (.16,1,.3,1)。无循环、无阅读等待;减少动态效果时直接显示。
点击重播:opacity + translateY(16px→0),240ms、间隔70ms。帮助理解阅读顺序,不动画尺寸或模糊。
hover 改底色;pointer pressed scale .98;键盘 focus 无延迟。离开/松开平滑回到 resting。
仅点击重播的舞台:opacity 0→1、translateY 24→0、stagger 70ms;内容默认可见,不设滚动门槛。
细指针 hover 图像 scale 1→1.04;键盘 focus 立即显示辅助信息,不延迟定位;touch 不依赖 hover 才出现文字。
本轮使用 native details 与 dialog;不伪造未实现的高度/退出动画。Escape 关闭 dialog、焦点回触发器。
实际保存演示延迟 900ms;aria-busy、禁止重复触发,结束以 status 文本宣布;仅本地、不发送数据。
系统偏好或本页开关任一开启即禁用动画、变换和过渡;仍显示保存状态,不让 spinner 承担唯一反馈。
这是组件压力样本,不冒充整页浏览器缩放测试。也请在真实 320px viewport 检查导航与布局。
规范页与 Figma 资产不是实时同步的。这里分别列出已有规范、线上首页源码与本轮待定项,避免把网页里出现的值自动算作批准。
已对照 www.deethin.site 的部署 CSS 与本地生产源码。首屏保留原有设计;正式首页首屏后的组合、项目卡片、Portfolio 审阅页与本目录现在使用同一个 token 入口。下方保留来源与待定状态,补充值不自动算作 Figma 批准。
fabrica.module.css / .caseSection · .caseEvidence黑色章节 / 深灰卡片 / 4 → 2 → 1 列 / 18px 圆角
深色表面与证据内容组合;不等同于所有页面 dark mode
查看首页组合fabrica.module.css / .contactSection · .contactStory并置深浅表面 / 24px 面板 / 28px 内距 / 独立表单
完整 Contact 组合;控件复用规范现有 form 与 button
查看首页组合FabricaMotion.tsx + fabrica.module.css:699–717800/950ms · 40px 位移 · 7px 模糊 · 一次进入
滚动到每组内容时揭示;默认可见、减少动态直接显示
查看首页组合HeroExperience.tsx / smoke-renderer.tsWebGL 光场 / 开场时序 / 静态 fallback
已有 Hero 拆解继续保留;fallback 不代表完整交互复刻
查看首页组合已部署的双语 Portfolio 门户,并保留历史版本作为比较与恢复依据
从 Obsidian factual master 到中英文模块与项目页面的来源驱动流程
一次有范围、有验收、有返回材料的 Codex → WorkBuddy 任务配置实践
本地 Design System V2、Figma Inuse 资产与代表页面组成的可检查 pilot
告诉我产品、最困难的部分,以及什么样的结果才真正有用。
--home-evidence-canvas#0d0d0d--home-evidence-cardvar(--ds-surface-dark)--home-evidence-textvar(--ds-surface)--home-evidence-muted#aaaaaa--home-evidence-label#8a8a86--home-evidence-radiusvar(--ds-radius-panel)--home-evidence-card-radiusvar(--ds-radius-card)--home-evidence-card-padding22px--home-evidence-card-height200px--home-evidence-card-gapvar(--ds-space-2)--home-evidence-title-sizevar(--ds-type-h3)--home-evidence-title-leading1.15--home-evidence-title-gap50px--home-contact-canvas#111111--home-contact-muted#b2b2ae--home-contact-radiusvar(--ds-space-6)--home-contact-paddingvar(--ds-radius-panel)--home-contact-title-leading.9--home-contact-title-tracking-.07em--home-contact-title-sizeclamp(76px,10vw,140px)来源:2026-10-04 绑定清单及 2026-09-27 foundation 审计。Light / Inverse 是使用环境,不是自动 mode。下方旧 Semantic-Colors / Component-colors variable manifest 是历史提案,不作为当前 Figma 资产。
内容常驻可读,细指针 hover 显示既有 Overlay/Modal 阴影;这是本轮业主要求的用法,不新增阴影色值。
浅蓝辅助表面已按业主最新反馈撤销,不再作为可用扩展。现有按钮、muted 与 focus 从规范复用;尚未确认的映射和组合独立列出。Figma 本轮因调用额度限制没有重新读取,不能据此声明缺少资产。
primary-ctavar(--ds-ink)Existing component reusedV2 / .button恢复黑色 pill 主按钮;不再使用自造蓝色大面板
muted-textvar(--ds-muted)Existing web token / Figma mapping pendingV2 tokens.ts / muted网页已有角色;实时 Figma Paint Style 尚未核对
focusvar(--ds-focus)Existing web token / Figma mapping pendingV2 tokens.ts / focus;Figma 另有 propose/System/Focus/Light复用规范焦点环,不把不同数值当成一致
mono-strong700Pending / not usedPrevious candidate页面改回 Data/Label 500;700 保留待定,不使用
closing-24var(--ds-type-h3)Existing size / role pendingV2 / H3 24px尺寸已有,收尾文字角色仍待确认
responsive-typevar(--ds-type-h1) / var(--ds-type-h2)Existing interpolationV2 / typeScale中英取消 ch 限宽;中文按规范恢复 1.25 行高
breakpoints900 / 640 / 400pxPendingPrevious candidate从本 registry 生成媒体规则
gallery-widthmin(85%, 48rem)PendingOwner requested galleries两轮 gallery 同一宽度,不限制文字行数
bottom-blur112px / 4,8,16pxPendingPrevious candidate底部模糊保持隔离,不作为已批准 Figma Effect Style
scroll-choreography800ms / 950ms / 40px / 7pxProduction-source pattern / Pending adoptionFabricaMotion.tsx / fabrica.module.css:699逐组进入;reduced motion 与键盘定位即时显示
首页、当前 Portfolio 审阅页与本目录使用同一个 portfolioTokens 对象。以下补充项来自现有首页:记录原值,不代表已写回 Figma 或获得新的批准。
所有宽度下保持单行;空间不足时原生横向滚动;不显示标题。
4:3 媒体、项目元信息和标题;悬停或聚焦时显示标签和箭头,触屏下直接显示。
所有宽度下每张卡片占完整一行;缩略图、本地化标题和摘要保留共享的标题与表面职责。
每项只有一个随展开移动的标题,配合图片、描述和标签;不重复标题或分类说明。按用户要求使用 650ms 缓入缓出的布局过渡;减少动态效果时即时切换。
现有反相组合、卡片和表单使用共享语义 token。
每条路由只显示一个通用页脚;本地化导航返回相应语言的首页章节。
编程助手
编程助手
网站结构与线框
设计参考
Agent Harness
AI 工作台
根据每类内容承担的任务定义移动端文本输入规则。
连接品牌语言、交互规则、可复用组件与自适应交付的 HMI 设计系统。
连接品牌语言、交互规则、可复用组件与自适应交付的 HMI 设计系统。
一个持续演进且不丢失设计意图的作品集、内容系统与多 AI 工作流。
--home-evidence-canvas#0d0d0d--home-evidence-cardvar(--ds-surface-dark)--home-evidence-textvar(--ds-surface)--home-evidence-muted#aaaaaa--home-evidence-label#8a8a86--home-evidence-radiusvar(--ds-radius-panel)--home-evidence-card-radiusvar(--ds-radius-card)--home-evidence-card-padding22px--home-evidence-card-height200px--home-evidence-card-gapvar(--ds-space-2)--home-evidence-title-sizevar(--ds-type-h3)--home-evidence-title-leading1.15--home-evidence-title-gap50px--home-contact-canvas#111111--home-contact-muted#b2b2ae--home-contact-radiusvar(--ds-space-6)--home-contact-paddingvar(--ds-radius-panel)--home-contact-title-leading.9--home-contact-title-tracking-.07em--home-contact-title-sizeclamp(76px,10vw,140px)--home-frame-inset6px--home-frame-inset-compactvar(--ds-space-1)--home-gutter30px--home-gutter-tablet22px--home-gutter-compactvar(--ds-space-4)--home-section-space138px--home-section-space-compact94px--home-displayclamp(84px,11.25vw,144px)--home-display-compactclamp(62px,19vw,112px)--home-display-leading.92--home-display-tracking-.06em--home-study-headingclamp(56px,7vw,92px)--home-study-heading-compactclamp(52px,17vw,76px)--home-headingclamp(50px,6vw,78px)--home-heading-compactclamp(42px,13vw,68px)--home-heading-leading1.08--home-heading-tracking-.055em--home-intro-size20px--home-intro-size-compact17px--home-copy-leading1.45--home-copy-measure560px--home-header-gap100px--home-header-gap-compact60px--home-heading-gap90px--home-heading-gap-compactvar(--ds-space-12)--home-study-space-start56px--home-study-space-end170px--home-study-space-end-compact110px--home-study-card-height220px--home-study-card-height-compact190px--home-study-thumb76px--home-study-thumb-compact68px--home-study-card-radius22px--home-study-titleclamp(20px,2.1vw,30px)--home-study-title-leading1.05--home-media-placeholder#dededb--home-services-canvas#0f0f0f--home-services-text#f8f8f5--home-inverse-linergb(255 255 255 / .18)--home-inverse-muted#aaaaaa--home-service-index#b1b1ad--home-inverse-control-linergb(255 255 255 / .25)--home-services-space-start110px--home-services-space-end90px--home-services-list-gap86px--home-services-list-gap-compact54px--home-service-height92px--home-service-height-compact76px--home-service-titleclamp(24px,3vw,40px)--home-service-title-compact21px--home-service-expanded-titlevar(--ds-type-h2)--home-service-inset24%--home-service-inset-compact72px--home-service-index-width62px--home-service-toggle46px--home-service-toggle-compact40px--home-service-fan-height160px--home-service-image-width112px--home-service-image-height84px--home-service-image-step44px--home-service-image-turn7deg--home-service-image-top20px--home-tag-padding-block9px--home-tag-padding-inline13px--home-wordmark-weight650--home-section-extended-space180px--home-case-titleclamp(44px,5vw,68px)--home-case-wordmarkclamp(66px,10vw,140px)--home-case-wordmark-compact18vw--home-case-heightmin(67vw,800px)--home-case-height-compact120vw--home-case-height-max-compact650px--home-case-overlaylinear-gradient(180deg,rgb(0 0 0 / .05),rgb(0 0 0 / .62))--home-case-media-inset-7%--home-case-media-height114%--home-case-media-scale1.05--home-case-media-travel5%--home-contact-height760px--home-contact-height-compact690px--home-contact-headingclamp(38px,4vw,58px)--home-contact-heading-gap96px--home-contact-form-gap7px--home-contact-textarea-height110px--home-contact-muted-note#999999--home-contact-borderrgb(255 255 255 / .2)--home-footer-statementclamp(32px,4vw,54px)--home-footer-statement-tracking-.045em--home-footer-emailclamp(24px,3vw,42px)--home-footer-wordmarkclamp(110px,20vw,270px)--home-footer-wordmark-compact26vw--home-footer-wordmark-leading.7--home-footer-wordmark-tracking-.085em--home-footer-titleclamp(20px,3vw,42px)--home-footer-label#92928f--home-footer-legal#888888--home-footer-columns-gap120px--home-footer-wordmark-gap160px--home-footer-columns-gap-compact86px--home-footer-wordmark-gap-compact110px--home-heading-reveal-duration1050ms--home-heading-reveal-easecubic-bezier(.16,1,.3,1)--home-heading-reveal-travel110%--home-study-hover-scale1.06--home-hover-travel3px--home-hover-duration320ms--project-media-ratio4 / 3--project-arrow-size52px--project-arrow-size-compact44px--project-media-hover-scale1.04--project-arrow-rest-scale.75--project-arrow-rest-turn-20deg--project-arrow-duration500ms--project-arrow-icon-size22px--project-tag-size11px--project-tag-padding6px 10px--project-tag-padding-compact5px 8px--home-tools-gapvar(--ds-space-8)--home-tools-paddingvar(--ds-space-6)--home-tools-item-widthvar(--ds-space-32)--home-capability-open-padding76px--home-capability-index-top36px--home-capability-toggle-topvar(--ds-space-6)--home-capability-index-top-compact30px--home-capability-toggle-top-compactvar(--ds-space-4)--home-blur-layer30--home-blur-mask-smalllinear-gradient(to bottom, transparent, rgb(0 0 0 / .12) 20%, black 62%)--home-blur-mask-mediumlinear-gradient(to bottom, transparent 25%, rgb(0 0 0 / .15) 48%, black 82%)--home-blur-mask-largelinear-gradient(to bottom, transparent 48%, rgb(0 0 0 / .2) 72%, black)--home-grid-projects-headingminmax(0, 1fr) minmax(260px, .65fr)--home-grid-studies-headingminmax(0, 1fr) minmax(240px, .65fr)--home-grid-service-legacyminmax(120px, 24%) minmax(0, 1fr) 52px--home-grid-service-panel-legacyminmax(120px, 24%) minmax(0, 1fr) minmax(250px, .8fr)--home-grid-service-compact62px minmax(0, 1fr) 42px--home-grid-study-cardvar(--home-study-thumb) minmax(0, 1fr)--home-grid-study-card-compactvar(--home-study-thumb-compact) minmax(0, 1fr)--home-study-linergb(16 16 16 / .16)--home-study-letter-spacing-heading-3-.035em--home-study-padding0 6px--home-study-outline2px solid #0b6eff--home-section-padding138px 30px--home-kicker-font-size14px--home-kicker-line-height1--home-kicker-width15px--home-kicker-padding2px--home-heading-suffix-padding-right22%--home-item-tag-font-weight700--home-item-tag-letter-spacing.08em--home-case-hero-inset-7% 0--home-case-hero-transitiontransform 800ms cubic-bezier(.22,1,.36,1)--home-studies-header-line-height.95--home-studies-header-max-width38ch--home-study-card-padding24px 26px--home-study-thumb-transitiontransform 300ms cubic-bezier(.32,.72,0,1)--home-study-card-body-letter-spacing-.04em--home-study-card-body-margin-top10px--home-study-card-body-line-height1.35--home-pill-action-gap36px--home-pill-action-margin-top28px--home-pill-action-padding0 22px--home-pill-action-border-radius999px--home-pill-action-width18px--home-services-section-padding110px 30px 90px--home-services-section-box-shadow0 18px 32px rgb(0 0 0 / .18)--home-services-section-color#777--home-service-list-border-bottom1px solid rgb(255 255 255 / .18)--home-service-toggle-border1px solid rgb(255 255 255 / .25)--home-service-fan-border2px solid #111--home-service-copy-max-width14ch--home-service-copy-font-weight550--home-service-copy-max-width-140ch--home-service-copy-color#aaa--home-service-tags-color#888--home-service-tags-padding9px 13px--home-service-tags-color-2#111--home-case-section-padding42px 30px 80px--home-case-section-background#0d0d0d--home-case-meta-color#a7a7a3--home-case-hero-margin-top38px--home-case-hero-background#1f1f1f--home-case-wordmark-insetauto 34px 28px--home-case-wordmark-line-height.9--home-case-wordmark-letter-spacing-.07em--home-case-intro-padding-top42px--home-case-intro-border-bottom1px solid currentColor--home-case-intro-max-width16ch--home-case-intro-letter-spacing-.05em--home-case-evidence-margin-top80px--home-case-evidence-min-height200px--home-case-evidence-background#1d1d1d--home-case-evidence-color#8a8a86--home-case-evidence-margin-top-350px--home-case-evidence-line-height1.15--home-insights-header-gap8%--home-insights-header-max-width12ch--home-contact-section-padding180px 30px 8px--home-contact-panel-max-width10ch--home-contact-form-padding12px 0--home-contact-form-border-bottom1px--home-contact-form-width19px--home-contact-form-line-height1.4--home-contact-story-font-sizeclamp(76px, 10vw, 140px)--home-contact-story-max-width34ch--home-contact-story-color#b2b2ae--home-contact-notes-border-top1px solid rgb(255 255 255 / .2)--home-contact-notes-color#999--home-footer-padding80px 30px 28px--home-footer-border-radius28px 28px 0 0--home-footer-statement-max-width22ch--home-study-transformtranslate3d(0, 40px, 0)--home-study-filterblur(7px)--home-study-transition800ms--home-study-transition-4950ms--home-study-transform-5translate3d(0, 0, 0)--home-study-filter-6blur(0)--home-study-transform-7translateY(110%)--home-study-transform-8translateY(0)--home-study-card-transformscale(1.06)--home-pill-action-transformtranslate(3px, -3px)--home-pill-action-transitiontransform 320ms cubic-bezier(.22,1,.36,1)--home-section-padding-compact94px 16px--home-why-section-padding-compact32px 16px 110px--home-studies-header-margin-bottom-compact34px--home-study-card-padding-compact20px 22px--home-services-section-padding-compact80px 16px 70px--home-service-panel-margin-bottom-compact26px--home-service-fan-min-height-compact116px--home-case-section-padding-compact28px 16px 60px--home-contact-section-padding-compact110px 4px 4px--home-contact-story-font-size-compact20vw--home-footer-padding-compact70px 20px 24px--home-footer-border-radius-compact22px 22px 0 0--home-study-transition-duration.01ms--home-service-item-top-236px--home-service-item-top-9-248px--home-service-item-top-compact-232px--home-service-item-top-compact-10-246px以本地生产主页源码及浏览器实测为证据,以 V2 为可检查的提案。这里先把 Figma 会看到的 variable type、name path、scope、mode 和 alias 分开:Variable 管单值与别名,Style 管组合配方,Component 管结构与状态。本页是手工绑定说明,不宣称 Figma 已同步,也不把任意 JSON 当成 Figma 通用导入格式。
Primitive-colors / blue / 500 = #0087FB [Light]
Primitive-colors / sky / 300 = #73D1F8 [Inverse]
↑ Semantic-Colors / color / text / accent
↑ Component-colors / data-label / text
↑ DataLabel instance · text fill
Text Style / Data / Label = family + size + weight + line-height + tracking
Effect Style / Overlay = shadow layers + offsets + blur + alpha
Paint Style / Hero / Fallback = gradient stops + angle + positions
Modes 是上下文选择器,不是 alias 链的第四级。只存色值,不表达用途。所有条目的 Figma variable type 都是 COLOR,只有 Value 一个 mode,scope 留空以避免设计师在组件上直接选原色。
这一层仍然全是 COLOR;color/text/primary 中的 text 是“给文字使用”,不是 String/Text 变量类型。每个 mode 的值都必须是指向 Primitive-colors 的 VARIABLE_ALIAS,不是手输路径字符串。
存储可绑定的 FLOAT / STRING 单值,不与颜色 mode 混在一起。
响应式采样值与 Light / Inverse 是两条独立维度。
把组件部位指向语义用途,不指向 hex,也不跳过 Semantic-Colors 直接连 Primitive-colors。
color/text/primary 是变量名:color 是领域,text 是使用位置,primary 是优先级。它的 Figma variable type 必须是 COLOR,不是 STRING。
TEXT_FILL 是 scope:它只让这个颜色出现在文字填充的选择器中。同理,color/border/subtle 仍是 COLOR,但 scope 是 STROKE_COLOR。
如果导入后变量显示为 String/Text,说明导入器把 neutral/ink 当成了文本值,没有建立 VARIABLE_ALIAS。Figma 中已创建变量的 resolved type 不应靠改名修补;重建为 Color,再用变量选择器绑到 primitive。
适用于首页浅色章节、白色项目卡、输入和普通内容区。父 Frame / Section 设为 Light,text/primary 解析为 #101010。
适用于黑色章节、深灰证据卡和深色舞台。只给该父容器设 Inverse,text/primary 自动解析为白色;不表示全站进入 dark mode。
表中的 text / surface / border 是语义用途,不是变量类型。Light / Inverse 两列应通过 Figma variable alias 选择器指向 primitive,不要复制名称为文本值。
Semantic-Colors / color/text/primary
variable type: COLOR
scopes: TEXT_FILL
Light value: VARIABLE_ALIAS → Primitive-colors / neutral/ink
Inverse value: VARIABLE_ALIAS → Primitive-colors / neutral/white
Component-colors / data-label/text
variable type: COLOR
Light + Inverse: VARIABLE_ALIAS → Semantic-Colors / color/text/accent在 Primitive-colors 中创建 COLOR 变量,mode 只有 Value。填入 RGBA,scope 留空。
在 Semantic-Colors 中创建 color/text/primary,创建时明确选 Color,添加 Light 和 Inverse 两个 mode。
不要在值里输入 neutral/ink 文字。点击变量图标 / Apply variable,Light 选 Primitive-colors/neutral/ink,Inverse 选 neutral/white。
text/* 用 TEXT_FILL,surface/* 用 FRAME_FILL + SHAPE_FILL,border/* 用 STROKE_COLOR。这一步决定它在哪个 Figma picker 出现。
浅色章节的 Frame 设 Semantic-Colors=Light;黑色章节的 Frame 设 Inverse。内部文字仍绑同一个 color/text/primary。
只对 Button、ProjectCard、DataLabel 等稳定复用部位创建 Component-colors,并让它 alias 到 Semantic-Colors。
page.module.css .heroHeading / HeroExperience.tsx / smoke-renderer.tsInter 500;clamp(96px,13.9vw,220px);line .85;tracking −.04em。≤700px:clamp(66px,13.4vw,96px),line .95。
Text Style / Homepage / Hero;字号进入 Layout,字重进入 Foundation。1440px 画板约 200.16px,390px 画板 66px。
标题区 padding 40×38px,gap 24px;≤700px padding 30×24px。标题自身没有圆角、边框或阴影。
Component / hero / heading-padding;Auto Layout 横排→窄屏重排。不用系统文档页的 gutter 去替代主页。
白字;WebGL 5 个主调色值。开场 name .65s、popup 2.95s、typing 3.95s,每字42ms;dock 1.35s。
文字 → text/on-hero;光场归 local/hero,静态 fallback Paint Style;时间线记为 choreography,不泛化为所有组件动画。
fabrica.module.css .section / .displayRow / .projectsHeaderInter 600;clamp(84px,11.25vw,144px);line .92;实际 tracking −.055em。源码局部写−.06em,但全局 !important 经变量覆盖,浏览器实测为准。≤700px:clamp(62px,19vw,112px)。
Text Style / Editorial / Section;1440px→144px / line132.48 / tracking−7.92px;390px→74.1px / line68.172 / tracking−4.0755px。本规范页 H2 刻意较小,不冒充首页章节尺寸。
section padding 138×30px;≤1000px inline22px;≤700px 94×16px。displayRow gap30;Work 标题下100px / 窄屏60px。
Layout / section-padding + Component / section-heading / gap;Work 是局部例外,不强行统一成 128px。
ink 文字;标题没有投影。源码 masked title 110%→0,1050ms (.16,1,.3,1);外层 reveal 800/950ms。
fill → text/primary;mask + timeline 属于组件动效。V2 演示取消 blur,仅 transform / opacity,属 Proposed 性能取舍。
fabrica.module.css .project / .projectImage / .projectCaption / .imageArrow源码标题 Inter 18px/600/1.1;继承 tracking −.035em;标签11px/700/.08em,年份13px。V2 用18px/1.25可换行标题,12px MONO data label。
Text Style / Project / Title 与 Data / Label 分开。MONO 与可读行高属于本轮 Proposed;实际元数据仍来自项目内容。
源码两列 gap8;封面16:9;radius18;caption padding20×24,小屏inline18。V2 封面4:3、caption20×24、小屏20;cover overlay inset16、gap8。
4:3 是你要求更大图片后的提案,不假称原站值。Component / project-card 引用 spacing、radius;Auto Layout 标题hug、宽度fill,媒体裁切。
白底、无静态投影;源码 cover scale1.06→1.1 /800ms;箭头52px,opacity260ms、scale.75 rotate−20°→rest /500ms。
V2 cover1→1.04 /800ms;白 tags+箭头同排显现240ms,标题常驻、删除 Read case study。hover/focus/touch/reduced 均有替代状态。
以你现有 Primitive-colors + Semantic-Colors 为候选主库。Portfolio / Semantic / Draft 先做迁移适配层,指向唯一语义来源;确认现有消费者后再讨论退役,绝不这轮删除。
逐个记录 stable ID、alias target、type、mode、scope、sourceRevision、Current/Proposed 与 replacement ID。填色只走 semantic/component;text、border、effect alpha 分别核对,禁止循环别名。
Hero → SectionHeading → ProjectCard,分别记录图层结构、变量绑定、styles、variants、内容来源。先复刻同一画板静态关键帧,再扩展状态;不是堆一页色块就算设计系统。
网页与 Figma 用同一字体文件、内容、图像裁切与宽度(1440 / 390 / 320)比较;关键尺寸建议偏差≤1px、无换行漂移。动效另验时序与降级,不承诺 WebGL 在 Figma 中逐帧完全一致。V1 始终可回看。
来源:2026-10-04 绑定清单及 2026-09-27 foundation 审计。Light / Inverse 是使用环境,不是自动 mode。下方旧 Semantic-Colors / Component-colors variable manifest 是历史提案,不作为当前 Figma 资产。
<button className={styles.button} type="button">
Review project
</button>
/* tokens.ts → tokenVariables → scoped CSS */
.button {
min-height: var(--ds-control-height);
padding: var(--ds-space-3) var(--ds-control-padding);
gap: var(--ds-control-gap);
border-radius: var(--ds-radius-pill);
}内部名称、mode 值和 alias 目标完整;这只验证历史提案本身,不代表当前 Inuse 采用该架构。