④段整套同步(六节 + 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。
This commit is contained in:
1 parent
fa0a9026c8
commit
5afeb6b78a
4184 files changed
+326
-70
No files matched your search
@@ -0,0 +1,261 @@
|
||||
/* ─────────────────────────────────────────────────────────────────────────
|
||||
* design-systems/airtable/tokens.css
|
||||
*
|
||||
* Structured token bindings for "Design System Inspired by Airtable" —
|
||||
* the spreadsheet-database hybrid that talks to enterprise without
|
||||
* shouting. A white canvas with deep-navy text, Airtable Blue as the
|
||||
* single chromatic accent, Haas Swiss-precision typography, and a
|
||||
* signature blue-tinted multi-layer shadow that makes cards feel
|
||||
* built into the page rather than dropped onto it.
|
||||
*
|
||||
* Brand-specific schema decisions (each one bends a schema convention
|
||||
* to match Airtable's voice rather than the cross-brand default):
|
||||
*
|
||||
* 1. `--accent` is Airtable Blue (#1b61c9), not deep navy. Deep
|
||||
* navy is already `--fg`; the brand expresses primary CTAs by
|
||||
* using `--accent` as the button background and reserves
|
||||
* navy-on-white for headlines and body. `--accent-hover` binds
|
||||
* to the documented "Mid Blue" #254fad rather than a generic
|
||||
* color-mix darken — Airtable explicitly differentiates the
|
||||
* hover tier as a discrete brand tone, not a calculated shade.
|
||||
*
|
||||
* 2. `--fg` is `#181d26` (Deep Navy), not `#000000`. The faint
|
||||
* blue undertone at the top of the neutral ramp is part of the
|
||||
* brand — pure black would clash with Airtable Blue and make
|
||||
* the page read as harsh against the white canvas. `--fg-2`
|
||||
* drops to `#333333` (documented Dark Gray) for body
|
||||
* description; `--muted` binds to the documented Weak Text
|
||||
* `rgba(4, 14, 32, 0.69)` so cross-brand `var(--muted)` calls
|
||||
* land on Airtable's actual semitransparent navy tier instead
|
||||
* of a flat gray.
|
||||
*
|
||||
* 3. `--surface-warm` aliases to `--surface` because Airtable has
|
||||
* no warm tier — the canvas is white and the lifted surface is
|
||||
* the documented `#f8fafc` light-surface, both cool. Adding a
|
||||
* warm sibling would invent a tone the brand does not use.
|
||||
*
|
||||
* 4. `--elev-raised` is the full multi-layer Airtable shadow stack
|
||||
* reproduced VERBATIM from DESIGN.md §6: a 1px dark hairline, a
|
||||
* 2px ambient, a 3px blue-tinted (rgba(45,127,249,0.28))
|
||||
* "Airtable glow" at 1px y-offset, and a 0.5px inner ring. The
|
||||
* blue tint is the brand signature — it makes cards feel
|
||||
* authored by the same hand as the Airtable Blue CTAs, instead
|
||||
* of a generic gray-shadow drop. Never drop the third layer
|
||||
* when overriding this token.
|
||||
*
|
||||
* 5. Radius scale binds 12 / 16 / 24 / 9999 (sm / md / lg / pill)
|
||||
* per DESIGN.md §5. Buttons sit at 12px (documented), cards at
|
||||
* 16px, large feature containers at 24px. The 2px "sharp"
|
||||
* cookie-consent radius is component-specific and inlined
|
||||
* where needed, not promoted to the schema. The 32px "large"
|
||||
* radius is also section-specific; binding it to `--radius-lg`
|
||||
* would over-round the typical card surface.
|
||||
*
|
||||
* 6. `--leading-body` is 1.35 (DESIGN.md body 18px / 24px), not
|
||||
* the schema-conventional 1.5. Airtable runs body copy at a
|
||||
* slightly tighter rhythm so dense product UI (table rows,
|
||||
* record cards) does not feel sparse. `--leading-tight` is 1.2
|
||||
* for headings, matching the documented 1.15–1.25 band.
|
||||
*
|
||||
* 7. `--tracking-display` is `0` (normal), not negative. DESIGN.md
|
||||
* §3 explicitly lists display headings as `letter-spacing:
|
||||
* normal` and body text as POSITIVE tracking (0.08–0.28px).
|
||||
* The Haas family is engineered for positive tracking; mapping
|
||||
* display to a negative em would fight the typeface. Body-tier
|
||||
* positive tracking is applied at the component level (button,
|
||||
* caption) since `--tracking-display` only covers display sizes.
|
||||
*
|
||||
* 8. `--success` is `#006400` (documented `--theme_success-text`),
|
||||
* a darker forest green than the schema's #16a34a. Airtable's
|
||||
* semantic green is intentionally deeper so it reads as a
|
||||
* "confirmed / saved" tone against the white canvas rather
|
||||
* than a vibrant alert.
|
||||
*
|
||||
* 9. Section rhythm is 96 / 64 / 48 (desktop / tablet / phone).
|
||||
* DESIGN.md does not pin section padding numerically but the
|
||||
* site's airy enterprise voice asks for generous vertical
|
||||
* space — this matches the documented 8px-base spacing scale
|
||||
* (96 = 12 × 8) without inventing a new tier. Container caps
|
||||
* at 1200px, consistent with Airtable's documented
|
||||
* 425–1664px responsive band centered on a desktop sweet spot.
|
||||
*
|
||||
* 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. The Haas family does not
|
||||
* need a CDN reference here — the font stack lists OS fallbacks
|
||||
* (`-apple-system, system-ui, Segoe UI, Roboto`) per DESIGN.md §3
|
||||
* so artifacts render acceptably even when Haas is not loaded.
|
||||
* ─────────────────────────────────────────────────────────────────── */
|
||||
|
||||
:root {
|
||||
/* ─── Surface ─────────────────────────────────────────────────────
|
||||
* White canvas, white lifted card. Airtable explicitly does not
|
||||
* vary background between sections — depth comes from the
|
||||
* blue-tinted shadow stack, not from tinting one surface against
|
||||
* another. `--surface-warm` aliases to surface because the brand
|
||||
* has no warm tier (DESIGN.md §2 lists only cool neutrals). */
|
||||
--bg: #ffffff; /* primary canvas */
|
||||
--surface: #ffffff; /* card / lifted container */
|
||||
--surface-warm: var(--surface); /* alias — Airtable has no warm tier */
|
||||
|
||||
/* ─── Foreground ──────────────────────────────────────────────────
|
||||
* Deep Navy → Dark Gray → Weak Text (semitransparent navy) →
|
||||
* tertiary alias. The four-tier ramp matches DESIGN.md §2 + §6
|
||||
* exactly: `#181d26` headings, `#333333` body, the documented
|
||||
* `rgba(4, 14, 32, 0.69)` weak tier for captions, and `--meta`
|
||||
* aliasing to muted because Airtable does not differentiate a
|
||||
* fourth tertiary tone. */
|
||||
--fg: #181d26; /* Deep Navy — primary text */
|
||||
--fg-2: #333333; /* Dark Gray — secondary text / body */
|
||||
--muted: rgba(4, 14, 32, 0.69); /* Weak Text — captions, meta */
|
||||
--meta: var(--muted); /* alias — no distinct tertiary tier */
|
||||
|
||||
/* ─── Border ──────────────────────────────────────────────────────
|
||||
* `#e0e2e6` is the documented card-border tone from DESIGN.md §4.
|
||||
* `--border-soft` drops to a lighter `#eef0f3` for inner row
|
||||
* separators (table rows, list dividers) that must not visually
|
||||
* compete with the outer card edge. */
|
||||
--border: #e0e2e6; /* card / input edge */
|
||||
--border-soft: #eef0f3; /* inner row separator */
|
||||
|
||||
/* ─── Accent ──────────────────────────────────────────────────────
|
||||
* Airtable Blue — the single chromatic accent across the brand.
|
||||
* Used for primary CTAs, links, focus rings, and active-state
|
||||
* highlights. Hard cap of ≤2 visible uses per screen (lint
|
||||
* enforced); decorative blue is forbidden because the brand reads
|
||||
* the accent as "this is the action".
|
||||
*
|
||||
* `--accent-hover` binds to the documented "Mid Blue" #254fad
|
||||
* rather than a generic color-mix darken — Airtable explicitly
|
||||
* differentiates the hover tier as a discrete brand tone. */
|
||||
--accent: #1b61c9; /* Airtable Blue — CTA, links */
|
||||
--accent-on: #ffffff; /* white label on blue */
|
||||
--accent-hover: #254fad; /* Mid Blue — documented hover tone */
|
||||
--accent-active: color-mix(in oklab, var(--accent), black 14%);
|
||||
|
||||
/* ─── Semantic ────────────────────────────────────────────────────
|
||||
* `--success` is the documented `--theme_success-text` (#006400),
|
||||
* a deeper forest green than the schema's #16a34a — Airtable's
|
||||
* green reads as "confirmed / saved" against white, not as a
|
||||
* vivid alert. Warn / danger inherit schema defaults because the
|
||||
* brand has no defined yellow / red. */
|
||||
--success: #006400; /* documented Success Green */
|
||||
--warn: #eab308;
|
||||
--danger: #dc2626;
|
||||
|
||||
/* ─── Typography ──────────────────────────────────────────────────
|
||||
* Haas (display + Groot Disp variant) is Airtable's proprietary
|
||||
* Swiss family. The OS fallbacks `-apple-system, system-ui,
|
||||
* Segoe UI, Roboto` are documented in DESIGN.md §3 and ensure
|
||||
* artifacts render legibly when Haas is not loaded. The Groot
|
||||
* Disp variant carries display headings; Haas regular carries
|
||||
* body and UI. */
|
||||
--font-display: "Haas Groot Disp", Haas, -apple-system, system-ui, "Segoe UI", Roboto, sans-serif;
|
||||
--font-body: Haas, -apple-system, system-ui, "Segoe UI", Roboto, sans-serif;
|
||||
--font-mono: ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Monaco, Consolas, monospace;
|
||||
|
||||
/* Type scale — derived from DESIGN.md §3 hierarchy. The scale
|
||||
* tops out at 48px (display hero); Airtable reads as "sophisticated
|
||||
* simplicity" because hierarchy comes from weight + tracking
|
||||
* variation within the Haas family, not from inflated px counts. */
|
||||
--text-xs: 12px; /* metadata, tags */
|
||||
--text-sm: 14px; /* caption, small UI */
|
||||
--text-base: 16px; /* body medium, button */
|
||||
--text-lg: 20px; /* feature copy */
|
||||
--text-xl: 24px; /* card title */
|
||||
--text-2xl: 32px; /* sub-heading */
|
||||
--text-3xl: 40px; /* section heading */
|
||||
--text-4xl: 48px; /* display hero */
|
||||
|
||||
/* `--leading-body` is 1.35 (DESIGN.md body 18px / 24px), not 1.5.
|
||||
* Dense product UI (table rows, record cards) needs the tighter
|
||||
* rhythm so rows do not feel sparse. `--leading-tight` is 1.2
|
||||
* for headings, matching the documented 1.15–1.25 band.
|
||||
* `--tracking-display` is `0` because DESIGN.md §3 explicitly
|
||||
* lists display headings as `letter-spacing: normal`; positive
|
||||
* body tracking (0.08–0.28px) is applied per-component. */
|
||||
--leading-body: 1.35;
|
||||
--leading-tight: 1.2;
|
||||
--tracking-display: 0;
|
||||
|
||||
/* ─── Spacing ─────────────────────────────────────────────────────
|
||||
* 8px base unit per DESIGN.md §5 (1–48px range). The 4/8/12/16/
|
||||
* 20/24/32/48 tier covers structural rhythm; finer sub-tier
|
||||
* increments (1–3px micro-padding inside chips and badges) are
|
||||
* inlined per-component because they are too granular for 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 — Airtable's enterprise voice asks for generous
|
||||
* vertical space between marketing sections without going gallery-
|
||||
* empty. 96 desktop / 64 tablet / 48 phone matches the 8px base
|
||||
* (96 = 12 × 8) and stays within the documented responsive band. */
|
||||
--section-y-desktop: 96px;
|
||||
--section-y-tablet: 64px;
|
||||
--section-y-phone: 48px;
|
||||
|
||||
/* ─── Radius ──────────────────────────────────────────────────────
|
||||
* DESIGN.md §5 radius scale: 2 / 12 / 16 / 24 / 32 / 50%. We bind
|
||||
* the four schema tiers to: 12 (button/input, documented), 16
|
||||
* (card, documented), 24 (large feature container, documented),
|
||||
* 9999 (pill). The 2px "sharp" cookie-consent radius is
|
||||
* component-specific and inlined where it appears; the 32px
|
||||
* section radius would over-round typical surfaces and is
|
||||
* intentionally not bound here. */
|
||||
--radius-sm: 12px; /* buttons, inputs, chips */
|
||||
--radius-md: 16px; /* cards, modals */
|
||||
--radius-lg: 24px; /* featured containers */
|
||||
--radius-pill: 9999px; /* badges, avatars */
|
||||
|
||||
/* ─── Elevation ───────────────────────────────────────────────────
|
||||
* Airtable's signature: blue-tinted multi-layer shadow that makes
|
||||
* cards feel authored by the same hand as the Airtable Blue CTAs.
|
||||
* Four layers reproduced verbatim from DESIGN.md §6:
|
||||
* 1px dark hairline (defines the edge)
|
||||
* 2px ambient (soft surround)
|
||||
* 3px blue glow @ 1y (the Airtable signature — never drop)
|
||||
* 0.5px inset ring (subtle inner highlight) */
|
||||
--elev-flat: none;
|
||||
--elev-ring: 0 0 0 1px var(--border);
|
||||
--elev-raised:
|
||||
0 0 1px rgba(0, 0, 0, 0.32),
|
||||
0 0 2px rgba(0, 0, 0, 0.08),
|
||||
0 1px 3px rgba(45, 127, 249, 0.28),
|
||||
inset 0 0 0 0.5px rgba(0, 0, 0, 0.06);
|
||||
|
||||
/* ─── Focus ring ──────────────────────────────────────────────────
|
||||
* 3px Airtable-Blue alpha glow — keyboard focus reads as
|
||||
* "actionable" without competing with the saturated CTA fill.
|
||||
* Matches schema default formula so cross-brand focus styles
|
||||
* remain visually consistent. */
|
||||
--focus-ring: 0 0 0 3px color-mix(in oklab, var(--accent), transparent 70%);
|
||||
|
||||
/* ─── Motion ──────────────────────────────────────────────────────
|
||||
* Standard durations + curve. Airtable's product UI uses motion
|
||||
* to confirm direct manipulation (cell edits, drag-and-drop),
|
||||
* not to choreograph entrances — 150/200ms feels responsive
|
||||
* without dragging. */
|
||||
--motion-fast: 150ms;
|
||||
--motion-base: 200ms;
|
||||
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
|
||||
/* ─── Layout ──────────────────────────────────────────────────────
|
||||
* 1200px max content width — sits in the middle of Airtable's
|
||||
* documented 425–1664px responsive band. Gutters narrow on
|
||||
* mobile to preserve line length on dense marketing copy. */
|
||||
--container-max: 1200px;
|
||||
--container-gutter-desktop: 24px;
|
||||
--container-gutter-tablet: 16px;
|
||||
--container-gutter-phone: 12px;
|
||||
}
|
||||
Reference in new issue
Block a user