Files
workbuddy_skills/open-design/design-systems/framer/tokens.css
T
admin 5afeb6b78a ④段整套同步(六节 + P/S/F/J + 模板)+ open-design 移到技能根
一、④段整套同步(用户选候选 A)
- 新增 `references/stage-proto-doc/assets/产品文档模板.html`(16 KB/247 行,从备份拷、转 LF)。
- ④段 SKILL.md 换成备份 15:28 那版,并按模板口径改齐:
  · 「产品文档框架」从「四块+一附录」改成**六节** —— 页面结构/功能清单/使用场景/操作流程/
    跨页与界面状态/待确认与偏离;与模板同构,⛔ 不从空白页重写结构。
  · 编号从 R/S/F 改成 **P 页面/S 场景/F 功能/J 二级功能**,各自唯一、按展示顺序通排。
  · 保留旧版有价值的要求:每项功能补齐 做什么/入口在哪/输入边界/异常与恢复;重点功能三处标红;
    横向流程图每步写清页面/功能/操作/完成判据。
  · 完成标准「七节」→「六节」,自查清单同步换掉「需求」那批条目,补模板与配图两条。
  · 路径 `designs/<项目>/` → `docs/pm/<项目>/ui/`(2 处)。
  · 补回本机那条「每份产出文档开头都要有一张图」的引用(指向主 skill,段内不复述)。
- 主 skill 同步:四段结构表④行、④段沿革、画图小节(④段画页面结构图 + 用户路径)。

二、open-design 移到技能根(用户选候选 A)
- `git mv product-planning/references/stage-delivery/assets/open-design → open-design/`(4178 文件)。
- `.gitignore` 白名单加 `!/open-design/` —— 否则移出去就不再纳入版本控制。
- 引用改 11 处:路径形态 `assets/open-design/...` → `<技能根>/open-design/...`;
  「随段携带的自带件」改称「同根技能」;「路径怎么找」那条改成自带件(段内相对路径)与
  同根技能(`<技能根>/<技能名>/`)两类分开写。
- open-design 自己的 ATTRIBUTION.md 两处同步(它现在与 oil-ui-pro 同层)。
- 副作用(有益):命名闸门读数由 2063 降到 225 —— 此前它把 open-design 里 919 个第三方 md
  当成规则一起扫了;现在只扫本包 23 个 md。已确认④段的 H1 与 4a/4b/4c 子步仍在检查范围内。

三、验收
- check_naming.py --ws E:/ProgramData/AIProject/contentm_agent = 通过 225 / 失败 0 / 提示 27。
- 活文件里 `assets/open-design` 残留 0;工作区 CRLF 文件 0。
2026-10-15 21:17:28 +08:00

239 lines
14 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.
/* ─────────────────────────────────────────────────────────────────────────
* design-systems/framer/tokens.css
*
* Structured token bindings for "Design System Inspired by Framer".
* Pure black void canvas, Framer Blue accent, GT Walsheim display with
* extreme negative letter-spacing, Inter body with OpenType features,
* and a blue-tinted ring-shadow elevation system.
*
* Brand-specific schema decisions (each one bends a schema convention
* to match Framer's voice rather than the cross-brand default):
*
* 1. `--bg` is `#000000` (Void Black). DESIGN.md §1 names this as
* "absolute void, not warm or gray-tinted" — Framer's identity
* hinges on pure black. `#0a0a0a` or any near-black tint reads
* as a generic dark theme; the void IS the brand. `--surface`
* sits at `#090909` (Near Black) for elevated dark surfaces.
*
* 2. `--border` is `rgba(0, 153, 255, 0.15)` — the literal Framer
* Blue ring-shadow alpha. DESIGN.md §6 Level 1 names this single
* value as the "Framer Blue glow ring" used for card containment.
* Binding `--border` to the blue alpha lets `--elev-ring`
* (`0 0 0 1px var(--border)`) reproduce Framer's signature blue
* hairline by default. `--border-soft` drops to a translucent
* white for inner row separators that should not light up.
*
* 3. `--accent` is Framer Blue (`#0099ff`), the one-and-only chromatic
* move. DESIGN.md §2 forbids decorative use ("one-accent-color
* system"). Primary CTAs in Framer are SOLID WHITE, not blue —
* the components.html encodes that by using `#ffffff` as the
* primary button background, so `--accent` stays reserved for
* links, borders, focus rings, and the chromatic moments where
* blue actually appears.
*
* 4. Type scale climbs to 110px (`--text-4xl`) — the GT Walsheim
* display hero size from DESIGN.md §3. `--leading-tight` drops
* to `0.95` (the section-display tier) so headings across the
* scale read compressed-but-not-overlapping; the most extreme
* 0.85 line-height is reserved for the display hero h1 inline.
* `--tracking-display` is `-0.05em`, the em-relative form of
* "-5.5px at 110px" that scales proportionally with size.
*
* 5. Section rhythm is generous: `120px` desktop, `80px` tablet,
* `60px` phone. DESIGN.md §5 describes "80–120px between sections"
* with whitespace manifesting as "void" — the black background
* means generous padding reads as dramatic pause, not as wasted
* space. Container caps at `1200px` per DESIGN.md §5.
*
* 6. `--radius-sm: 8px` (DESIGN.md §5: standard component radius
* for code blocks / buttons / interactive elements). Pill
* buttons go via `--radius-pill` and override locally — the
* 40px–100px pill range from DESIGN.md is button-specific and
* not part of the shared schema.
*
* 7. `--elev-raised` reproduces the multi-layer Framer card stack
* from DESIGN.md §6 Level 3 verbatim: a 0.5px white top-edge
* highlight (simulating light hitting the top surface) plus a
* deep ambient 30px shadow (true floating depth). Never drop
* either layer when overriding — both are required for the
* "built-not-pasted-onto-page" quality DESIGN.md describes.
*
* 8. Foreground ramp binds all four tiers (#ffffff →
* rgba(255,255,255,0.6) → rgba(255,255,255,0.4)) so cross-brand
* components targeting `--fg-2`, `--muted`, or `--meta` resolve
* to Framer's actual ghost-white tiers instead of collapsing.
* `--fg-2` binds to Muted Silver (#a6a6a6), the documented
* secondary text color from DESIGN.md §2.
*
* Source contracts:
* - Standard token names: design-systems/_schema/tokens.schema.ts
* - A2 fallback parity: design-systems/_schema/defaults.css
* - Lint enforcement: apps/daemon/src/lint-artifact.ts
*
* Keep this file additive: never invent token names not also
* documented in DESIGN.md or the schema. GT Walsheim / Inter / Azeret
* Mono are not bundled — the font stacks list system fallbacks so
* artifacts render acceptably even when the custom faces are not
* loaded, and any host that wants the real faces links them externally.
* ─────────────────────────────────────────────────────────────────── */
:root {
/* ─── Surface ─────────────────────────────────────────────────────
* The void: pure black canvas with a near-black elevated surface.
* No warm tier — `--surface-warm` aliases to surface because the
* brand explicitly forbids tinted backgrounds (DESIGN.md §7 don't:
* "no warm dark backgrounds, no charcoal, no brownish blacks"). */
--bg: #000000; /* Void Black — the foundation canvas */
--surface: #090909; /* Near Black — elevated dark surface */
--surface-warm: var(--surface); /* alias — Framer has no warm tier */
/* ─── Foreground ramp (4 levels) ──────────────────────────────────
* Pure white headings, muted silver body, ghost white tertiary,
* fainter placeholder/disabled. `--fg-2` and `--muted` and `--meta`
* are independently bound (not aliased) because Framer genuinely
* uses distinct text tiers across heading, body, caption, and
* placeholder per DESIGN.md §2. */
--fg: #ffffff; /* Pure White — headings, primary text */
--fg-2: #a6a6a6; /* Muted Silver — body description */
--muted: rgba(255, 255, 255, 0.6); /* Ghost White — captions, tertiary */
--meta: rgba(255, 255, 255, 0.4); /* Faint White — placeholders, disabled */
/* ─── Border ──────────────────────────────────────────────────────
* Blue ring-shadow as border is THE signature: `rgba(0, 153, 255,
* 0.15)` at 1px spread is the literal Framer Blue glow ring from
* DESIGN.md §6 Level 1. Binding `--border` to the blue alpha (not
* a solid hex) lets `--elev-ring` reproduce Framer's hairline by
* default. `--border-soft` drops to a translucent white for inner
* row separators that should not light up the section. */
--border: rgba(0, 153, 255, 0.15); /* signature Framer Blue ring alpha */
--border-soft: rgba(255, 255, 255, 0.06); /* inner separator on dark */
/* ─── Accent ──────────────────────────────────────────────────────
* Framer Blue — the cold, electric one-accent-color of the system.
* DESIGN.md §2 forbids decorative use ("one-accent-color system").
* Used in links, ring borders, focus rings, and badge tints.
*
* Primary CTAs in Framer are SOLID WHITE PILL on black, not blue.
* components.html encodes that pattern via `background: #ffffff`
* on the primary button, so `--accent` stays reserved for the
* chromatic moments where blue actually appears. */
--accent: #0099ff; /* Framer Blue */
--accent-on: #ffffff; /* white label when --accent is bg */
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
--accent-active: color-mix(in oklab, var(--accent), black 14%);
/* ─── Semantic ────────────────────────────────────────────────────
* Framer's marketing surface rarely renders state. Inherit schema
* defaults — the brand has no defined success/warn/danger palette
* of its own; the only declared color is Framer Blue. */
--success: #16a34a;
--warn: #eab308;
--danger: #dc2626;
/* ─── Typography ──────────────────────────────────────────────────
* GT Walsheim Medium for display, Inter for body, Azeret Mono for
* code. All three lead with the custom faces and fall back to
* system sans/mono so artifacts render legibly even when the
* Framer-licensed fonts are not loaded. */
--font-display: "GT Walsheim Framer Medium", "GT Walsheim Medium", "GT Walsheim", -apple-system, "Segoe UI", Inter, sans-serif;
--font-body: "Inter Variable", "Inter", -apple-system, "Segoe UI", Arial, sans-serif;
--font-mono: "Azeret Mono", ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Consolas, monospace;
/* Type scale (px) — DESIGN.md §3. Tops out at 110px display hero;
* Framer reads HUGE because GT Walsheim at extreme negative tracking
* compresses the headline into a spring-loaded block. */
--text-xs: 12px; /* Small Caption */
--text-sm: 14px; /* Caption / Label */
--text-base: 15px; /* Body / Nav / UI */
--text-lg: 18px; /* Body Large */
--text-xl: 22px; /* Feature Title */
--text-2xl: 32px; /* Feature Heading */
--text-3xl: 62px; /* Section Heading */
--text-4xl: 110px; /* Display Hero — spring-loaded */
/* `--leading-tight: 0.95` sits at the Section-Display tier from
* DESIGN.md §3. The most extreme 0.85 line-height is reserved for
* the display hero h1 (applied inline in components.html).
* `--tracking-display: -0.05em` is the em-relative form of
* "-5.5px at 110px" — letter-spacing in em scales proportionally
* with size, matching DESIGN.md §3's principle that tracking
* scales with font size. */
--leading-body: 1.3;
--leading-tight: 0.95;
--tracking-display: -0.05em;
/* ─── Spacing ─────────────────────────────────────────────────────
* 4/8-grid base scale per DESIGN.md §5. The 1/2/3/5/6/10/15/20/30/
* 35px sub-tier increments from DESIGN.md are inlined per-component
* because they are too fine to belong in the shared schema. */
--space-1: 4px;
--space-2: 8px;
--space-3: 12px;
--space-4: 16px;
--space-5: 20px;
--space-6: 24px;
--space-8: 32px;
--space-12: 48px;
/* Section rhythm — DESIGN.md §5: "80–120px between sections" desktop,
* "120px desktop → 60px mobile" per §8 collapsing strategy. We sit
* at the upper end of the desktop range (120px) so whitespace reads
* as dramatic void, drop to 80px on tablet, and 60px on phone (the
* documented mobile floor). */
--section-y-desktop: 120px;
--section-y-tablet: 80px;
--section-y-phone: 60px;
/* ─── Radius ──────────────────────────────────────────────────────
* DESIGN.md §5 radius scale: 1/5–7/8/10–12/15–20/30–40/100. We bind
* the four schema tiers to: 8 (button/input/code-block), 12 (cards
* and product screenshots), 20 (large containers), 9999 (full pill).
* The 40px–100px pill-button range from DESIGN.md is button-specific
* and is reached via `--radius-pill` with a local override. */
--radius-sm: 8px; /* buttons, inputs, code blocks */
--radius-md: 12px; /* cards, product screenshots */
--radius-lg: 20px; /* large containers, feature cards */
--radius-pill: 9999px; /* full pill — CTAs, tag elements */
/* ─── Elevation (3 levels) ────────────────────────────────────────
* Framer's depth system is shadow-led, not blur-led. Three levels:
*
* --elev-flat no shadow (page background, void areas)
* --elev-ring the signature Framer Blue 1px ring (most cards)
* --elev-raised the multi-layer floating stack (DESIGN.md §6 L3)
*
* `--elev-raised` is reproduced VERBATIM from DESIGN.md §6 Level 3:
* 0.5px white top-edge highlight (light hitting the top surface)
* 30px deep ambient shadow at 0.25 alpha (true floating depth)
* Never drop either layer when overriding — both are required for
* the "floating not pasted-on" quality of Framer's elevated cards. */
--elev-flat: none;
--elev-ring: 0 0 0 1px var(--border);
--elev-raised:
0 0.5px 0 0.5px rgba(255, 255, 255, 0.1),
0 10px 30px rgba(0, 0, 0, 0.25);
/* ─── Focus ring ──────────────────────────────────────────────────
* Blue glow halo — `rgba(0, 153, 255, 0.15)` (Blue Glow) is the
* Framer focus tint per DESIGN.md §2. We reproduce it as a 3px
* alpha ring at `var(--accent)` so the halo softens around inputs
* without overpowering the void canvas. */
--focus-ring: 0 0 0 3px color-mix(in oklab, var(--accent), transparent 70%);
/* ─── Motion ──────────────────────────────────────────────────────
* Standard durations + standard easing. Framer's boldness is in
* type, color, and product polish — never in long-form animation. */
--motion-fast: 150ms;
--motion-base: 200ms;
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
/* ─── Layout ──────────────────────────────────────────────────────
* ~1200px max content width per DESIGN.md §5. Gutters narrow on
* mobile so the void surrounding content stays generous on phones
* without crushing the dramatic margin. */
--container-max: 1200px;
--container-gutter-desktop: 24px;
--container-gutter-tablet: 16px;
--container-gutter-phone: 12px;
}