182 lines
12 KiB
CSS
182 lines
12 KiB
CSS
/* ─────────────────────────────────────────────────────────────────────────
|
||||
|
|
* 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 2–3 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;
|
|||
|
|
}
|