SeasonPassBadge
ImplementedSeason-pass loyalty tier badge — tier-colored diamond + label pill (gold/silver/bronze/platinum). Describes WHO the holder is; distinct from CategoryPill (ticket tier) and StatusBadge (lifecycle state). Exported from the barrel; role=img with derived aria-label.
patterns/atoms/seasonpassbadge.htmlSeason-pass loyalty tier badge — tier-colored diamond + label. Says WHO the holder is (gold/silver/bronze/platinum membership), not which ticket tier it is (CategoryPill) and not a lifecycle state (StatusBadge).
SeasonPassBadge
Display atom (Family 2)
Renders a rounded-full pill: a decorative tier-colored diamond (aria-hidden, rotate-45) plus the label. Colors come from existing tokens tinted via color-mix() (ADR-027) — no raw values, no new tokens, dark mode adapts automatically.
This component supports light and dark mode.
Usage
Import from the barrel and render the tier. tier defaults to gold; label defaults to the capitalized tier name. The component is a static display element — no interactive state.
import { SeasonPassBadge } from '@epasslive/design-system'
<SeasonPassBadge tier="gold" />
<SeasonPassBadge tier="platinum" label="Platine VIP" size="lg" />
<SeasonPassBadge tier="silver" label="Argent" ariaLabel="Membre passe de saison Argent" />Which pill? (4-way disambiguation)
Four DS components look like "a colored pill with a label". Pick by semantics, not by shape:
Metallic-name trap: platinum/silver/gold exist on both SeasonPassBadge (loyalty tier) and CategoryPill (ticket category). If the value describes who the holder is, use SeasonPassBadge; if it describes which ticket tier this is, use CategoryPill.
Localization
Default labels are English proper nouns rendered from the component (Gold, Silver, Bronze, Platinum). The label prop is the localization hook — pass the translated term from your catalog. The default aria-label is derived from the visible label ("Or VIP season pass member"); override with ariaLabel when the announced phrase needs its own translation.
// FR <SeasonPassBadge tier="gold" label="Or VIP" ariaLabel="Membre passe de saison Or VIP" /> <SeasonPassBadge tier="platinum" label="Platine" />
Dark mode
Backgrounds and borders are 8%/20% tints computed at runtime via color-mix(in oklab, var(--ep-*) N%, transparent) — when the referenced tokens swap in dark mode, the tints adapt automatically (ADR-027). Every referenced token (--ep-amber, --ep-neutral-500, --ep-semantic-warning-fg, --ep-pink) has a dark override in globals.css. The bronze tier reuses the warning-fg brown as a color VALUE (the diamond is decorative and aria-hidden — no semantic claim).
Accessibility
Non-interactive glyph unit: role="img" with an aria-label announcing the pass type (default "Gold season pass member") — aria-label is prohibited on a generic span (axe aria-prohibited-attr) but allowed on role=img, per the PatternMeta contract. The tier diamond is aria-hidden decoration. Pill text is the inherited body text token on an 8% tint — WCAG AA 4.5:1 in both themes.
Props
tier'gold' | 'silver' | 'bronze' | 'platinum'goldLoyalty tier — drives the diamond color and the token tint of the pill background/border.
labelstringcapitalized tier nameOverride the visible label. Localization hook — defaults are English proper nouns (Gold, Silver, Bronze, Platinum). Pass the translated term, e.g. "Or VIP".
size'sm' | 'md' | 'lg'mdBadge size preset — scales padding, diamond and text.
ariaLabelstringOverride the announced label. Defaults to "<label> season pass member".
Props
SeasonPassBadge
tier'gold' | 'silver' | 'bronze' | 'platinum''gold'Loyalty tier — drives the decorative diamond color and the color-mix token tint of the pill background/border.
labelstringcapitalized tier nameVisible label text. Localization hook — defaults are English proper nouns (Gold, Silver, Bronze, Platinum); pass the translated term, e.g. "Or VIP".
size'sm' | 'md' | 'lg''md'Badge size preset — scales padding, diamond and text (sm 10px / md text-ep-xs / lg text-ep-sm).
ariaLabelstring'<label> season pass member'Override the announced label (WCAG 4.1.2). Default announces the pass type, not just the tier color.
<SeasonPassBadge />Accessibility
Type
1 ruleARIA
1 ruleUsage
Import
import { SeasonPassBadge } from "@epasslive/design-system"Example 1
<SeasonPassBadge tier='gold' label='Season Pass' />Example 2
<SeasonPassBadge tier='silver' size='sm' label='Silver Member' />Anti-patterns
— Do not use for ticket categories (Diamond/Platinum/CAT 1-3) — use CategoryPill
— Do not use for order/fulfilment state — use StatusBadge
— Avoid raw tier colors — the component already derives tints from tokens