open-design/design-systems/starbucks/tokens.css
chaoxiaoche 336620e06f
feat(design-systems): add tokens.css + components.html for 10 consumer / hardware / cultural brands (#2033)
Adds the schema-compliant token + fixture pair for the next 10 brands in
Tier E (consumer / hardware / global-cultural surfaces):

- pinterest, airtable          (visual discovery + no-code product)
- bmw, tesla                   (automotive: German precision vs. EV minimalism)
- spacex                       (aerospace cosmic minimalism, zero-shadow)
- nike                         (sportswear, monochrome editorial)
- playstation                  (gaming console, dark-first cobalt)
- starbucks                    (warm cream + Siren Green)
- wechat, xiaohongshu          (CJK-primary consumer apps, bilingual stacks)

Each pair declares all 56 shared tokens (26 A1 + 26 A2 + 4 B-slot) in
:root with brand-rationale comments in tokens.css and a comment-free
byte-equivalent :root in components.html. No C-extensions were needed.

Validation:
- pnpm guard: passed (66 brand pairs aligned, 3714 declarations, 66
  brands declare all A1/A2/B-slot tokens, A2 defaults parity intact,
  flag parity unchanged)

Co-authored-by: chaoxiaoche <chaoxiaoche@chaoxiaochedeMacBook-Pro.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-18 15:40:52 +08:00

182 lines
12 KiB
CSS
Raw Permalink 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/starbucks/tokens.css
*
* Structured token bindings for "Design System Inspired by Starbucks".
* Warm cream canvas, four-tier green system, full-pill buttons, whisper-
* soft layered shadows, and SoDoSans with universal -0.01em tracking.
*
* Key brand decisions encoded here:
* - Neutral Warm cream (#f2f0eb) as the page canvas — never pure white
* - Green Accent (#00754A) reserved for the primary CTA fill / Frap
* - Text Black at rgba(0, 0, 0, 0.87) to match the warm canvas temperature
* - Whisper-soft dual-shadow card elevation — never one heavy drop
* - Universal -0.01em tracking on SoDoSans across every surface
* - 9999px pill radius — every button is a full pill, no exceptions
* - Measured ease-out (0.25, 0.46, 0.45, 0.94) — the Starbucks expander
*
* No C-extensions: every token in this :root maps to a shared schema slot.
* ─────────────────────────────────────────────────────────────────── */
:root {
/* ─── Surface ─────────────────────────────────────────────────────
* Warm cream canvas: the brand never sits on cold white. Neutral
* Warm references café paper and store wood; Ceramic is the
* slightly warmer/darker step used for zone separators and
* partnership bands. White is reserved for the card surface so
* content cards feel like ceramic mugs on a wood table. */
--bg: #f2f0eb; /* Neutral Warm — primary page canvas */
--surface: #ffffff; /* White — content card / modal surface */
--surface-warm: #edebe9; /* Ceramic — zone separator, warmer tier */
/* ─── Foreground ──────────────────────────────────────────────────
* Text Black is 87%-opacity black, never pure #000 — it reads
* warmer on the cream canvas. Rewards Green (--fg-2) is the
* dustier slate-green used only on Rewards-page text blocks: a
* "reward surface" signal without reaching for Starbucks Green. */
--fg: rgba(0, 0, 0, 0.87); /* Text Black — primary heading + body */
--fg-2: #33433d; /* Rewards Green — dustier reading tier */
--muted: rgba(0, 0, 0, 0.58); /* Text Black Soft — secondary / metadata */
--meta: var(--muted); /* alias — single secondary text tier */
/* ─── Border ──────────────────────────────────────────────────────
* Input Border (#d6dbde) is the explicit DESIGN.md value for the
* outlined-rectangle Add-in / Milk / Customize fields. The soft
* tier is the nutrition-table hairline — quiet enough to row-
* separate without competing with the card edge. */
--border: #d6dbde; /* Input Border — outlined rectangle edge */
--border-soft: #e7e7e7; /* Nutrition-table row hairline */
/* ─── Accent ──────────────────────────────────────────────────────
* Green Accent (#00754A) is the CTA green — the brighter, more
* luminous tier in the four-tier green system. Reserved for the
* primary filled pill CTAs and the Frap floating circular order
* button. Starbucks Green (#006241) is the heading tier and stays
* inline on h1; House Green (#1E3932) is the feature-band /
* footer tier and stays inline at those surfaces. */
--accent: #00754A; /* Green Accent — primary CTA / Frap fill */
--accent-on: #ffffff;
--accent-hover: color-mix(in oklab, var(--accent), black 8%);
--accent-active: color-mix(in oklab, var(--accent), black 14%);
/* ─── Semantic ────────────────────────────────────────────────────
* Red (#c82014) is the explicit DESIGN.md error / destructive
* value. Yellow (#fbbc05) is the documented warning / legacy brand
* touch. Success has no brand-specific value in DESIGN.md — keep
* the schema default so it does not collide with the four-tier
* green system. */
--success: #16a34a;
--warn: #fbbc05; /* Yellow — DESIGN.md warning state */
--danger: #c82014; /* Red — DESIGN.md error / destructive */
/* ─── Typography — fonts ──────────────────────────────────────────
* SoDoSans is Starbucks' proprietary corporate typeface (licensed
* from House Industries; not publicly available). Display and body
* share the same stack — the visual identity comes from the
* universal -0.01em / -0.16px tracking, not from typeface mixing.
* Lander Tall (Rewards serif) and Kalam (Careers script) are
* context-specific and intentionally NOT promoted to schema
* slots — they stay inline at their respective surfaces. */
--font-display: SoDoSans, "Helvetica Neue", Helvetica, Arial, sans-serif;
--font-body: SoDoSans, "Helvetica Neue", Helvetica, Arial, sans-serif;
--font-mono: ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Monaco, Consolas, monospace;
/* ─── Typography — type scale ─────────────────────────────────────
* DESIGN.md anchors at 1rem = 10px and uses semantic textSize-1
* through textSize-10. We bind the px values directly so the
* pasted :root works without the 62.5% root font-size trick.
* Hierarchy is carried by weight + color, not by size jumps —
* H1 and H2 share 24px (--text-xl), only weight (600 vs 400) and
* color (Starbucks-Green vs Text Black) separate them. */
--text-xs: 13px; /* Micro / text-1 — caption */
--text-sm: 14px; /* Small / text-2 — button, label */
--text-base: 16px; /* Body / text-3 — default body */
--text-lg: 19px; /* Body Large — hero intro copy */
--text-xl: 24px; /* H1 / H2 — shared by weight, not size */
--text-2xl: 32px; /* sub-heading bridge to hero */
--text-3xl: 45px; /* Hero Large / text-8 */
--text-4xl: 58px; /* Jumbo / text-9 — display ceiling */
/* ─── Typography — leading & tracking ─────────────────────────────
* Body leading 1.5, display leading 1.2 — the schema-standard
* two-mode rhythm. Tracking sits at -0.01em across the entire
* system: SoDoSans reads slightly compressed, which gives it its
* confident-but-friendly presence without feeling squeezed. */
--leading-body: 1.5;
--leading-tight: 1.2;
--tracking-display: -0.01em; /* universal — DESIGN.md letterSpacingNormal */
/* ─── Spacing ─────────────────────────────────────────────────────
* 4px grid. The brand's universal rhythm constant is 16px
* (--space-4) — the default outer gutter, card padding baseline,
* and body text size all share it. The off-grid Starbucks rem
* scale (4 / 8 / 16 / 24 / 32 / 40 / 48 / 56 / 64) maps cleanly
* to this schema with 12px and 20px filling the gaps. */
--space-1: 4px;
--space-2: 8px;
--space-3: 12px;
--space-4: 16px; /* universal rhythm — gutter, card pad, body */
--space-5: 20px;
--space-6: 24px;
--space-8: 32px;
--space-12: 48px;
/* ─── Section rhythm ──────────────────────────────────────────────
* 64px desktop / 48px tablet / 32px phone — generous breathing so
* the cream canvas can carry "plenty of space in the café". The
* brand never uses divider lines between sections; whitespace
* does the work. */
--section-y-desktop: 64px;
--section-y-tablet: 48px;
--section-y-phone: 32px;
/* ─── Radius ──────────────────────────────────────────────────────
* Two anchor values define the geometry: 12px on cards / modals
* (--cardBorderRadius), 9999px on every button (--buttonBorderRadius
* is 50px on the brand, but 9999px pills are visually identical at
* any reasonable height). 4px is reserved for outlined-rectangle
* inputs (Add-in / Milk / store availability). 16px stays as the
* larger-container tier for hero-photo frames. */
--radius-sm: 4px; /* outlined-rectangle inputs */
--radius-md: 12px; /* cards, modals — --cardBorderRadius */
--radius-lg: 16px; /* larger containers */
--radius-pill: 9999px; /* full pill — universal button radius */
/* ─── Elevation ───────────────────────────────────────────────────
* Whisper-soft layered shadows. The brand forbids a single heavy
* drop shadow; instead it stacks 23 low-alpha shadows with
* different offsets to simulate ambient + direct lighting. The
* --elev-raised value here is the canonical Starbucks card
* --cardBoxShadow (DESIGN.md §6). The Frap floating button gets
* its own stacked shadow inline at the component level. */
--elev-flat: none;
--elev-ring: 0 0 0 1px var(--border);
--elev-raised: 0 0 0.5px 0 rgba(0, 0, 0, 0.14), 0 1px 1px 0 rgba(0, 0, 0, 0.24);
/* ─── Focus ring ──────────────────────────────────────────────────
* Green-tinted ring built from --accent. DESIGN.md does not
* publish a brand-specific focus treatment, so we keep the
* schema's accent-tinted formula — Green Accent reads cleanly
* against the warm cream canvas and the white card surface. */
--focus-ring: 0 0 0 3px color-mix(in oklab, var(--accent), transparent 70%);
/* ─── Motion ──────────────────────────────────────────────────────
* 150ms for micro-states (the universal `transform: scale(0.95)`
* pressed-button rebound), 200ms for general state changes
* (DESIGN.md: `all 0.2s ease` on buttons). The standard easing
* curve is the Starbucks Expander cubic-bezier from DESIGN.md
* §4 — a measured ease-out rather than the schema's snappier
* default, giving accordions and disclosures a calm café cadence. */
--motion-fast: 150ms;
--motion-base: 200ms;
--ease-standard: cubic-bezier(0.25, 0.46, 0.45, 0.94);
/* ─── Layout ──────────────────────────────────────────────────────
* Content caps at 1440px (--columnWidthXLarge per DESIGN.md §5).
* Gutters scale progressively: 40px desktop (--outerGutterLarge),
* 24px tablet (--outerGutterMedium), 16px phone (--outerGutter,
* the universal rhythm constant). */
--container-max: 1440px;
--container-gutter-desktop: 40px;
--container-gutter-tablet: 24px;
--container-gutter-phone: 16px;
}