项目文件夹

文件
wehub-resource-sync 070959e133
landing-page-staging / Deploy landing page to staging (push) Has been skipped
landing-page-ci / Validate landing page (push) Failing after 4s
visual-baseline / Capture visual baselines (push) Has been cancelled
bake-plugin-previews / Bake plugin previews (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:00:47 +08:00

101 行
4.7 KiB
CSS

/* ─────────────────────────────────────────────────────────────────────────
* design-systems/_schema/defaults.css
*
* Fallback values for every Layer A2 token in the shared schema.
*
* What this file is FOR:
* - A human-readable mirror of the `fallback` field on every A2
* entry in `tokens.schema.ts`. Reviewers can scan real CSS and
* spot weird defaults faster than they can read a TS array.
* - The future input to the derive script (PR-B): when a brand's
* DESIGN.md does not specify an A2 token, the script copies the
* declaration from this file into the brand's tokens.css.
*
* What this file is NOT FOR:
* - Runtime cascade. Artifacts are generated by agents pasting one
* brand's :root block into a single <style>. There is no global
* stylesheet that loads alongside the brand. A brand's tokens.css
* must therefore declare every A2 token directly — this file
* never reaches the browser.
*
* Drift contract:
* The `design-system: A2 defaults parity` guard check asserts that
* each declaration here matches the `fallback` field on the
* corresponding entry in `tokens.schema.ts`. Update both together.
*
* Tokens absent from this file:
* - A1-identity tokens (--bg, --fg, --accent, font stacks) have no
* defensible cross-brand default; brands must author them.
* - A1-structure tokens (type scale, container, section-y) are
* structural decisions that vary per brand by design.
* - B-slot tokens (--fg-2, --meta, --surface-warm, --border-soft)
* resolve via `var()` aliasing inside each brand's tokens.css,
* not via this file.
* - C-extension tokens are brand-specific and have no shared
* default by definition.
* ─────────────────────────────────────────────────────────────────── */
:root {
/* Accent states (over --accent bg). The black-mix formulas work for
mid-luminance accents; brands with very dark or very light accents
should override the value with a hand-picked one (e.g. kami binds
--accent-hover to var(--accent) because ink-blue cannot darken
further visibly). */
--accent-on: #ffffff;
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
--accent-active: color-mix(in oklab, var(--accent), black 14%);
/* Semantic state. Reserve under 5% of any surface area; not all
brands need these — print-first kami inherits defaults rather than
designing custom warm equivalents. */
--success: #16a34a;
--warn: #eab308;
--danger: #dc2626;
/* Monospace. Every brand uses kbd / tabular-nums / code somewhere;
CJK brands override with a stack that includes their preferred
CJK monospace face (kami adds TsangerJinKai02 / Source Han Serif). */
--font-mono: ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Monaco, Consolas, monospace;
/* Base spacing scale on a 4px grid. Identical across default and
kami today. Brands with a print-rooted rhythm (different physical
paper sizes) may rebind these wholesale; keep the names stable. */
--space-1: 4px;
--space-2: 8px;
--space-3: 12px;
--space-4: 16px;
--space-5: 20px;
--space-6: 24px;
--space-8: 32px;
--space-12: 48px;
/* Radius scale. Pill is functionally fixed at 9999px; the small /
medium / large tiers are defaults that brands routinely override
to express softness or sharpness as part of brand mood. */
--radius-sm: 8px;
--radius-md: 12px;
--radius-lg: 16px;
--radius-pill: 9999px;
/* Elevation. Three sanctioned levels (no fourth — that is
neumorphism territory). Brands forbidding blur shadows (kami,
paper, editorial) override --elev-raised with a whisper or
ring-only treatment. */
--elev-flat: none;
--elev-ring: 0 0 0 1px var(--border);
--elev-raised: 0 2px 8px color-mix(in oklab, var(--fg), transparent 92%);
/* Focus. Implemented as a box-shadow so it layers outside the
element without affecting layout. Brands forbidding cool-blue
glows must override; rebind via accent or a hand-picked ring. */
--focus-ring: 0 0 0 3px color-mix(in oklab, var(--accent), transparent 70%);
/* Motion. Two durations + one easing curve, per the anti-ai-slop
"short, purposeful transitions (150–250ms) with stable easing"
contract. Add a third duration only when a real interaction
needs it; do not invent --motion-slow speculatively. */
--motion-fast: 150ms;
--motion-base: 200ms;
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
}