← Back to Index

ALPA Mobile — Design Tokens Reference

Extracted from Figma source files: ALPA mobile app

Updated: 2026-07-30 17:52 ET · Audited: 2026-07-02 13:37 ET

Foundations reconciliation note (2026-06-29): the canonical Figma foundation frames (Colors 2093:566, Buttons 1:16, Grid/Spacing 1:17, Forms 2093:702, Icons 3:7) were never diffed against this token doc. Captured discrepancies — Surface/Text/Interactive/Border semantic naming, a Blue/Gray primitive ramp, the named spacing scale, and button geometry — are documented (capture-only, no values changed) in foundations-reconciliation.html.

Primary source: docs/ui-refresh-1821/ALPA mobile app (1).fig — Parsed 2026-06  |  2026-06-17 revision: ALPAmobileWtablet_20260617 (exported 2026-06-16) — tablet components, new token paths, typography Tablet mode added 2026-06-22  |  2026-06-23 revision: ALPAMobile2026-06-23 (exported 2026-06-23T05:25:43Z) — 16 new library components inventoried (D18D24); dimension audit pending  |  2026-06-26 Phase 1+2 capture: 6 additional token paths (Border/Red, Border Radius/L, Interactive/Blue-dk, 3 Typography spacing); D31–D34 applied; masterCount 34→50  |  2026-07-02 Flight Finder scoped sync: live file owEYzHf7FrHRvWC2u82UOl (distinct from the dated-snapshot files above) — 4 components captured with full dimensions (D41D44)  |  2026-07-06 gap-audit scoped sync: live file owEYzHf7FrHRvWC2u82UOl — 4 items resolved, no new tokens (D46D49)  |  All values extracted directly from Figma component definitions and binary canvas
Figma import note — favorite heart. The favorite / i-heart element appears throughout the Figma source (layer trees and the "Favorite icon" dimensions below keep it for provenance). It IS rendered on all favoritable components per design decision D31 (2026-06-26). The favorite feature persists as client state (IsFavorite). Do NOT drop the i-heart layer on future Figma imports — it is intentional.

Color Palette

Brand & Primary

Navy / Primary
#05273E
Headings, card bg-dark, nav bar
Blue / Brand
#007BC2
Buttons, links, icon accents
White / Surface
#FFFFFF
Card backgrounds, surfaces
Blue / 100
#DFEDF9
Welcome card bg, card-sm image fallback, callout tint

Text Colors

Text Primary
#05273E
Titles, body text (dark mode primary)
Text Secondary
#5D6471
Eyebrow/label text, secondary metadata
Text Tertiary
#9BA1A8
Divider lines, muted metadata
Text Inverted
#FFFFFF
Text on dark/brand backgrounds

Border & Surface

Border / Subtle
#E3E3E3
Card borders, dividers, section strokes
Border / Light
#E7E7E7
Flight detail card borders
Surface / Alt
#EFEFEF
Layover row backgrounds, alternating rows
Surface / Page
#F5F5F5
Page/screen background

Status / Semantic

Error / Badge
#C02126
Notification count badge, error states
Neutral / Line
#868D9A
Flight route line, neutral separators
Status / Delayed
#F7BB0D
Yellow/500 — Badge "delayed", card-lg yellow border variant
Status / On-time
#00EA75
NEW (2026-06-10) — Badge "on-time" state

MEC Brand & Component Tokens 2026-06-10

United Brand / Blue-500
#0008CE
NEW — per-MEC brand color (D12 MEC theming)
Component Stroke
#6155F5
NEW — selection / focus stroke
UI / Form Borders
#E7E7E7
Form Field borders (new Form Field component)
Text / Disabled · Border / Default
#D2D4D6
Disabled text, default borders

Border Accents

Border / Blue-lt
#007BC2
card-lg left border accent (6px)
Border / Yellow
#F7BB0D
card-lg alt left border variant (6px)
Blue / 100
#DFEDF9
Welcome card surface, card-sm image fallback, callout tint
Blue / Light
#7CB9F2
Welcome card chevron (Group 568) fill

Typography

All values extracted from live Figma component instances. Superseded in part: the 2026-07-30 census found four declared families, not three — see Typography Font Mapping § Census.

Font mapping is documented separately (2026-07-30). The app is permitted to ship two font files onlyFuturaPT-Book (400) and FuturaPT-Bold (700). The working file owEYzHf7FrHRvWC2u82UOl declares 8 type styles across Lora, Futura, Inter and League Spartan; the mapping of each onto those two files, with node-level provenance, is in typography-font-mapping.html. League Spartan (all buttons) is not recorded anywhere else in these docs.

Typography scale reconciled 2026-07-30. Design confirmed Body/Body M (18px) is the page default, which settled the conflict recorded in § 5.4. Four values on this page were corrected to match the Figma census — body L 16→20px, body M 14→18px, body line-height 1.6→1.2, button 12→15px — and a missing --font-caption-size (14px) was added. --font-title-lg-size (28px) is left as-is and marked unconfirmed: no census style sits at 28px, and a larger Display style may exist that it maps to. Eyebrow, Display/S and body-small already matched.
DQ-1 resolved 2026-06-22: Futura PT is confirmed as the single body font family — Futura LT Pro overrides in the Figma file are unintentional and should be re-bound to the Font Family/Body token. Font files confirmed available: Futura PT Book and Futura PT Bold (.otf). Weights Medium, Demi, Heavy are referenced in Figma layer trees but file availability is TBD — to be resolved when bundling fonts for the ALPAMobile.Presentation native-XAML surface (deferred — the library shipped Blazor-first as an RCL, D61).
Eyebrow / Label
Font: Inter Bold Size: 12px Letter-spacing: 5% Color: #5D6471 (light) / #05273E (dark) Line-height: 1.4×
MEC GROUP
Card Title / Heading (Large)
Font: Lora SemiBold Size: 20px (card-lg, card-md, notification — all Display/S) · card-lg revised from 28px → 20px, 2026-06-10 — Figma node 4033:1436 (confirm) Color: #05273E Line-height: 1.2×
United Airlines
Body / Description
Font: Futura PT Book Size: 18px (card-lg, card-md, notification — Body/M; card-lg revised from 16px, 2026-06-10) / 14px (caption/secondary) Color: #05273E Line-height: 1.3×
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Caption / Metadata
Font: Futura PT Medium Size: 12px Color: #05273E
Flight Time: 02:45
Nav Tab Label
Font: Futura PT Medium Size: 12px Color: #FFFFFF (on dark nav bar)
Home
Button Label
Font: Futura PT Bold Size: 12px Color: #FFFFFF (on blue button) ✓ DQ-1 resolved 2026-06-22 — was Futura LT Pro (Figma override), corrected to Futura PT
MEMBER NUMBER
Flight Date/Time (Heavy)
Font: Futura PT Heavy Size: 18px Color: #05273E
April 28 2026 10:58 -06:00

Font Size Tokens

Named size tokens extracted from Figma component instances. Figma variable paths (2026-06-17 revision) added in right columns. Tablet mode values are the Figma "Tablet" collection switch on the Typography variable set (D12).

Docs TokenFigma PathPhone (Mobile)TabletUsed In
display-heading/xsFont Size/Display Heading/XS16 pxTBDcard-sm title, Welcome heading, card-md title
display-heading/sFont Size/Display Heading/S20 pxTBDFeed section titles, card-lg title
display-heading/mFont Size/Display Heading/M28 pxTBDcard-lg hero title
display-heading/lFont Size/Display Heading/L32 px36 px ↑Large/hero headings (tablet template, card-lg variants)
body/lFont Size/Body/L18 px20 px ↑card-lg body text, notification body, "View Contract" link
body/mFont Size/Body/M16 pxTBDSecondary body text, flight card time
body/sFont Size/Body/S14 pxTBDFlight number, aircraft type, metadata
other/eyebrowFont Size/Other/eyebrow12 pxEyebrow / label (ls 5%)
other/buttonFont Size/Other/Button15 pxPrimary button label
other/captionFont Size/Other/Caption12 pxFlight leg totals, metadata captions

Note: "TBD" tablet values require a full Figma variable read (Figma API or Figma SDK). The annotation confirms the two bracketed values above; remaining deltas are "modest." See D12 in naming-decisions-record.html.

Spacing & Layout Tokens

Inferred 2026-06-26 from auto-layout padding and gap values across 9 component nodes (home screen, carousel, card-lg, card-md, card-btn, navBar-bottom, Section Title, listy card, notification card). The scale is a strict 4 px grid. DQ-12 status: tentative — 3 outlier values still need design confirmation (see table below).

Correction (2026-06-29): a previous note here stated "No Figma spacing variable panel exists." That was false. A dedicated spacing panel does exist on Figma page 📐 Grid, Columns, Spacing — frame "Mobile-360" (117:176) — with a full named 14-step scale (xtiny 4 → xmassive 96), plus a column system (2002:483). The scale below was inferred from component auto-layout and is not yet reconciled against that canonical panel (several Figma steps — large 28, xlarge 32, huge 48+ — are missing here, and names differ: xxs/xs vs xxsmall/xsmall). Reconciliation is captured (not applied) in foundations-reconciliation.html; no token values changed here.

UAL MEC: Identical spacing to base — no MEC overrides. The scale below applies universally across all MECs.

Figma CSS varFigma pathTheme token (PascalCase)ValuePrimary usage (inferred from nodes)
--noneSpacing/None0 pxFlush edge layouts, icon-to-edge alignment
--xtinySpacing/xtinySpacing/XTiny4 px ✓Button card body gap (4735:13033), nav route icon px, inline icon gaps, UAL welcome body gap. Confirmed via get_variable_defs on card-duty period-alt (4617:13877) 2026-06-22.
--tiny (no Figma var path found)Spacing/Tiny8 px ✓Dominant step (14 occurrences). card-lg content top padding, card-btn outer all sides, navBar-bottom bottom padding, card-md status bar, flight card inner padding, carousel item gap, nav item icon gap.
--xxsmallSpacing/xxsmallSpacing/XXSmall12 px ✓card-lg and card-md content item gap. Also used as button/form icon-text gap. Confirmed via get_variable_defs on card-duty period-alt (4617:13877) 2026-06-22.
--xsmall
--page-margins
Spacing/xsmallSpacing/Small16 px ✓Page horizontal margins, navBar-bottom left/right, nav item vertical padding, listy card content row px, UAL feed container gap. --page-margins is a semantic alias for the same value — keep both names.
--smallSpacing/smallSpacing/Medium20 px ✓Notification card outer item gap (4864:31901). Nav item padding-y on larger slots.
--mediumSpacing/mediumSpacing/Large24 px ✓card-lg content bottom padding, card-md outer padding, notification card outer padding (T=24, L=24).
--xxlargeSpacing/XXLarge40 pxPage-level vertical margin (not yet confirmed from auto-layout sweep — retained from prior capture).
8--page-columns: grid column count, not a spacing token.

3 outlier values — design confirmation needed before committing to token scale

ValueLocationIssueRecommendation
5 pxNotification card text block internal gap (node 4864:31875)Not on 4 px gridRound to --xtiny (4 px) — likely draft imprecision
10 pxFlight card outer section gap + route line-wrap gap (nodes 4555:7483, 4555:7000)2.5 grid unitsRound to --tiny (8 px) or --xxsmall (12 px)
18 pxNavBar-bottom inter-tab slot gap (node 5035:16370)4.5 grid unitsConfirm: --xsmall (16 px) or --small (20 px)?

Other layout vars: --page-columns: 8 (grid column count, not a spacing token). Button/form padding values (16 px h/v, 12 px icon-text gap) align with --xsmall and --xxsmall respectively — see Buttons and Form Fields token paths below.

Component Dimensions

All dimensions in density-independent points (dp/pt). Values are from the Figma source at 1× density.

Component Width Height Background Corner Radius Notes
card-lg 361 343 #ffffff Image area: 361×200. Content area: 361×143
card-md 250 148 #ffffff Image area: 250×200. Has notification badge (18×18, r=30, #c02126)
card-sm 361 51 #ffffff Small list-row card. Token: --card-sm-width/height
card-btn 116 106 #ffffff Icon-tile navigation button used in Button Group. Token: --card-btn-width/height
card-button (ButtonCard) 353 (content)
393 full viewport
Default: 189
Variant2: 129
#ffffff New scaffold component (D14): description text + CTA button. 2 variants confirmed. Live Figma: node 4074:4624 (Default 353×189), node 4104:5452 (Variant2 353×129). DQ-5 resolved 2026-06-22.
card-notification 345 203 #ffffff / stroke #05273e Icon + date + title + body. Icon area: 44×44
button-sm 151 36 #007bc2 4 Label in Futura PT Bold 12px white (DQ-1 resolved — was Futura LT Pro)
flight card-og (FlightCard) 353 Default/Swipe: 164
Expanded: 1361
#ffffff / stroke #e3e3e3 Renamed from flight segment card in 2026-06-17 rev (D15). Expandable. States: Default · Swipe · Expanded. Route line: #9ba1a8. Plane icon: r=62. Live Figma node 4713:19868. DQ-5 resolved 2026-06-22. Token: --card-flight-width/height
flight card-recent searches 353 115 #ffffff / stroke #e3e3e3 Compact list-row variant for the Recent Searches feed. Live Figma node 4450:11208. DQ-5 resolved 2026-06-22.
flight detail flight info 297 154 #ffffff Flight leg detail panel (Departure or Arrival side, not both). Fields: DirectionLabel · StatusBadge (incl. delay duration, e.g. "Delayed 34m") · Airport code · Time · FlightNumber · Gate · AircraftModel · ActionLinks (KCM, Jumpseat Policy) · UpdatedTimestamp. Appears in: FTDT expanded flight-card detail panel, Jumpseat detail pages. Symbol master node 4325:6399. DQ-10 open — reusability vs FlightSegmentCardViewModel.
card-duty period-alt (Duty Period Card) 345 Default: 237
Variant2: 1051
delete demo: 237
#ffffff Duty period summary card. Variant2 (1051 px) is fully expanded detail view (MANAGE FLIGHTS & DETAILS). Delete demo = swipe-reveal red strip. Master node 4617:13876 confirmed via get_metadata 2026-06-22. DQ-5 resolved, DQ-11 open (embedded flight rows).
section title 313 38 transparent / stroke #e3e3e3 Label in Inter Bold 12px #05273e
navBar-bottom 393 88 #05273e 5 nav items, each 53×80. Label: Futura PT Medium 12px #fff. Token: --navbar-bottom-*
navBar-bottom-tablet (D12) 800 ✓ TBD #05273e Tablet nav bar. Deferred-responsive tier (D12). Width 800 confirmed from .fig binary (node 5452:267); height not yet resolved in live Figma metadata. Token: --navbar-bottom-tablet-width.
search bar DEPRECATED 313 (content) auto #ffffff Dropped 2026-06-10 (0 occurrences). Successor: Search screen + search secondary buttons.
slider re-scoped 313 63 transparent 2026-06-10: NOT the Carousel — it's the Carousel's scroll-position indicator (track #e3e3e3 + thumb #007bc2 + min/max labels). Carousel = horizontal scrolling feed.

card-lg — Layer Tree (from Figma)

[SYMBOL] card-lg Figma node 4033:1436 · 361×343 (master now 519w) bg=#ffffff
  [ROUNDED_RECT] img 361×200 stroke=#007bc2
  [FRAME] content 361×143
    [FRAME] favorite wrapper 361×18
      [INSTANCE] i-heart 18×18
    [FRAME] text wrapper 361×105
      [FRAME] eyebrow 313×17
        [TEXT] MEC Group Inter Bold 12px ls=5% color=#5d6471
      [FRAME] body 313×76
        [TEXT] United Airlines Lora SemiBold 20px (Display/S; was 28px — revised 2026-06-10) lh=1.2× color=#05273e
        [TEXT] description Futura PT Book 18px (Body/M; was 16px) lh=1.3× color=#05273e

card-notification — Layer Tree (from Figma)

[SYMBOL] card-notification 345×203 bg=#ffffff stroke=#05273e
  [FRAME] content area 283×155
    [INSTANCE] icon-generic 44×44
    [FRAME] text 219×155
      [TEXT] date Inter Bold 12px color=#05273e
      [TEXT] title Lora SemiBold 20px color=#05273e
      [TEXT] body Futura PT Book 18px color=#05273e
  [FRAME] Underline Button 155×18 bg=#ffffff

flight card-og (FlightCard) — Layer Tree (from Figma)

Previously flight segment card. Renamed in 2026-06-17 revision (D15). Structure unchanged; adds Swipe state.

[SYMBOL] flight segment card 353×111 bg=#ffffff stroke=#e3e3e3
  [FRAME] card 353×111
    [FRAME] trip 321×22
      [INSTANCE] endpoint (origin) 41×22
      [FRAME] line wrap 239×0 (horizontal route line)
        [LINE] route line 231×0 color=#9ba1a8
        [FRAME] plane icon 24×24 bg=#ffffff r=62
          [VECTOR] plane 16×18 color=#007bc2
      [INSTANCE] endpoint (destination) 41×22
    [FRAME] date time & flight 321×19
      [TEXT] flight time Futura PT Medium 16px color=#05273e
      [FRAME] airlines 73×17
        [TEXT] flight number Futura PT Book 14px color=#05273e
        [TEXT] aircraft type Futura PT Book 14px color=#05273e
    [TEXT] departure datetime Futura PT Heavy 18px color=#05273e
[SYMBOL] navBar-bottom 393×88 bg=#05273e
  [FRAME] slot 337×80 (5 nav items, each 53×80)
    [INSTANCE] NavItem-primary 53×80 (×4 standard items)
    [FRAME] NavItem-primary (active/custom) 53×80
      [TEXT] tab label Futura PT Medium 12px color=#ffffff
      [INSTANCE] pilot (icon) 28×28

Tablet Typography Mode (2026-06-17 revision · D12)

The Figma Typography variable collection has two modes: Mobile (phone) and Tablet. Switching a frame's type mode reflows every bound style — it is a collection switch, not a zoom. The designer annotation: "a modest bump (Body 18→20, Display L 32→36, etc.), not a zoom."

Figma Token PathMobile (phone)TabletDeltaCSS variable
Font Size/Body/L18 px20 px+2--font-body-l-size / --font-body-l-size-tablet
Font Size/Display Heading/L32 px36 px+4--font-display-l-size / --font-display-l-size-tablet
Font Size/Body/M18 px ✓TBD tabletest. +2--font-body-m-size Note: variable defs on card-duty period-alt returned Body/M=18, which matches Body/L above — confirm whether this token is overridden in that component context vs the global 16 px value in the Font Size table.
Font Size/Display Heading/M and belowTBDTBDest. +2–4

TBD values require a full Figma variable read. Confirmed values sourced from designer annotation in canvas.fig at 0x77acb8. Code implementation: tablet layout context switches the CSS variable set or a platform-level size modifier — do not subclass ViewModels (D12).

2026-06-17 New Token Paths (ALPAmobileWtablet_20260617)

New Figma variable paths introduced in the 2026-06-17 revision. Pixel values require a full Figma API variable read to confirm. Token path names are authoritative from binary extraction.

Spacing

All values confirmed 2026-06-26 via auto-layout inference sweep (9 component nodes). See Spacing & Layout Tokens for full usage detail.

Figma PathValueNotes
Spacing/medium24 px ✓card-lg content bottom padding, notification card outer padding. (CSS var: --medium)
Spacing/small20 px ✓Notification card outer item gap, nav item padding on larger slots. (CSS var: --small)
Spacing/xsmall16 px ✓Page margin, card inner padding, list item py. Same value as --page-margins. (CSS var: --xsmall)
Spacing/xtiny4 px ✓Tight inline gaps, icon badge offsets. Confirmed via get_variable_defs 2026-06-22 + sweep 2026-06-26. (CSS var: --xtiny)
Spacing/xxsmall12 px ✓Card content item gap, button icon-text gap. Confirmed via get_variable_defs 2026-06-22 + sweep 2026-06-26. (CSS var: --xxsmall)

Buttons and Form Fields

Figma PathValueNotes
Buttons and Form Fields/Horizontal PaddingTBDButton horizontal inner padding
Buttons and Form Fields/Vertical PaddingTBDButton vertical inner padding
Buttons and Form Fields/Icon-Text GapTBDGap between leading icon and button label
Buttons and Form Fields/Vertical GapTBDGap between stacked buttons / form fields
Buttons and Form Fields/Horizontal GapTBDGap between inline buttons

Component Widths

Figma PathValueNotes
Component Widths/FullTBDFull-bleed component width (≈ screen width)
Component Widths/LargeTBDLarge card width (est. ≈361 px)
Component Widths/MediumTBDMedium card width (est. ≈250–353 px)
Component Widths/SmallTBDSmall card / tile width (est. ≈116–250 px)

Button Style Tokens (D14)

Three button style tiers introduced in 2026-06-17. These apply to the CallToAction property of ButtonCardViewModel (D14) and to standalone ButtonViewModel instances.

Figma PathNotes
Buttons/Primary ButtonHigh-emphasis CTA (filled, brand blue). Used as CTA in card-button (ButtonCard).
Buttons/Secondary ButtonMedium-emphasis action (outlined or tinted).
Buttons/Tertiary ButtonLow-emphasis / underline action. Maps to "Underline Button" pattern already in flight card detail.

Border Radius

Full set confirmed 2026-06-26 — reconciled against theme endpoint contract (D38). Theme token path uses BorderRadius/ (no space) as the API key; Figma source uses Border Radius/ (with space).

Figma PathTheme Token (API key)ValueCSS varNotes
Border Radius/NoneBorderRadius/None0px ✓Flush containers, full-bleed banners
Border Radius/SBorderRadius/S4px ✓--radius-sChips, tags, inline badges. Node 4993:2. Confirms --button-sm-radius: 4px.
Border Radius/MBorderRadius/M8px ✓Standard card rounding — HeroCard, CardSmall, CardText. Default client fallback when CornerRadiusToken absent.
Border Radius/LBorderRadius/L12px ✓--radius-lProminent rounding — ButtonCard, MEC grid tiles. NEW 2026-06-26 Phase 1+2.
Border Radius/XLBorderRadius/XL16px ✓Large panels — welcome card stack, full-width modals
Border Radius/CircleBorderRadius/Full50% ✓Pill / circle — avatar frames, FAB. Node 2310:0.

2026-06-26 New Token Paths (Phase 1+2 component capture)

Additional Figma variable paths discovered during the Phase 1+2 component library capture (2026-06-26). Token values require a full Figma API variable read (get_variable_defs) to confirm. All listed as TBD with estimates where inferable from adjacent tokens.

Border Colors

Figma PathValueCSS VariableNotes
Border/RedTBD (est. #c02126)--border-redError / destructive border. Likely aliases Status/Error (#c02126) — confirm in library file.

Interactive

Figma PathValueCSS VariableNotes
Interactive/Blue-dkTBD (est. #005f99 or #05273e)--interactive-blue-dkDark interactive state — hover / pressed on primary interactive elements. Pairs with existing Interactive/Blue-lt (#007bc2).

Typography Spacing

Spacing tokens scoped to typography layout rather than component auto-layout. All values TBD — read from Figma Typography variable collection.

Figma PathValueCSS VariableNotes
Typography/Media to Caption GapTBD--typo-media-caption-gapGap between an image/media element and its caption text row.
Typography/Vertical Spacing in WYSIWYGTBD--typo-wysiwyg-spacingParagraph/block vertical spacing inside rich-text (WYSIWYG) content regions (e.g. contract or news article body).
Typography/Extra Margin over HeadingsTBD--typo-heading-extra-marginAdditional top margin applied before headings within body content (WYSIWYG context).

MEC Theming — Per-Pilot-Group Customization

The Figma token system has four named sets: core (primitive values), light (light mode, enabled), dark (dark mode, disabled), and theme (MEC customization layer, enabled). MEC branding is applied by swapping the theme token set — the component library itself does not change. Designer annotation verbatim:

MEC theming — restyle, don't rebuild. This United example shows the core components re-skinned to a MEC's brand: color palette, rounded corners, accent-border treatments, and the like. Same components, themed per MEC — not bespoke builds.

Semantic Theming Hooks

These token paths are the contact surface between the base component library and a MEC's brand. A MEC theme overrides these; base components reference them rather than hardcoding color values.

Figma PathRoleBase (ALPA)MEC Override example (United)
Surface/BrandPrimary branded surface (nav bar, card header tint)#05273E (Navy)United Brand/Blue-800
Border/BrandAccent border on branded elements#007BC2 (Blue)United Brand/Blue-500
Text/On-BrandText color when rendered on Surface/Brand#FFFFFFWhite or MEC contrast color
Accents/BlueInteractive accent / link / CTA color#007BC2United Brand/Blue-400
Accents/IndigoSecondary accent (alternative to blue)TBDTBD
Accents/RedDestructive / warning accentTBD (est. #C02126)TBD

Accent sub-modes: Light, Dark, IC-Light, IC-Dark (IC = inverted/contrast). United palette hex values confirmed 2026-06-22 via get_variable_defs on MEC frame node 4684:7914 (DQ-7 resolved).

United Airlines MEC Example Palette

The Figma file uses United Airlines MEC as the example theming scenario. All five token hex values confirmed via live Figma variable read (DQ-7 resolved 2026-06-22).

Token PathHex ValueSwatchRole
United Brand/Blue-800#002243Darkest blue — nav bar background (replaces Surface/Brand)
United Brand/Blue-600#001262Mid-dark blue — active states, hover
United Brand/Blue-500#0008ceCore brand blue — buttons, borders
United Brand/Blue-400#94ebfeLighter blue — links, CTA accent
United Brand/Grey-100#f7f7f7Neutral light grey — surface backgrounds, dividers

Surface Tokens — Razor vs XAML Implementation Note

Deferred mapping — applies to the native-XAML (Track B) surface of ALPAMobile.Presentation; not delivered by the Blazor RCL (D61). Surface token semantics are CSS/HTML-aligned. Before the scaffold component library is built, each token path needs an explicit XAML mapping record. This is a build-time concern, not a design concern — do not add XAML specifics to per-component Figma specs.

The Figma token surface model (Surface/*, Border/*, Text/*, Fills/*) is architected for the Razor/Blazor Hybrid rendering path, where tokens map directly to CSS custom properties (background-color, border-color, color). The XAML/MAUI rendering path uses a structurally different surface model that requires explicit mapping.

Full Surface Token Inventory

Figma PathRazor (CSS) bindingXAML/MAUI binding (map at native-XAML surface build)
Surface/Defaultbackground-color: var(--surface-default)BackgroundColor{StaticResource SurfaceDefault}
Surface/Primarybackground-color: var(--surface-primary)BackgroundColor{StaticResource SurfacePrimary}
Surface/Secondarybackground-color: var(--surface-secondary)BackgroundColor{StaticResource SurfaceSecondary}
Surface/Subtlebackground-color: var(--surface-subtle)BackgroundColor{StaticResource SurfaceSubtle}
Surface/Brandbackground-color: var(--surface-brand) — swapped by MEC themeBackgroundColor{DynamicResource SurfaceBrand} — must use DynamicResource (not Static) to support runtime MEC theme swap
Surface/LIghtbackground-color: var(--surface-light) (note: Figma typo — "LIght")BackgroundColor{StaticResource SurfaceLight}
Fills/Secondarybackground-color or fill on non-card surfacesBackgroundColor or Color on shapes/borders
Fills/TertiaryTertiary fill (layover rows, alternating surfaces)BackgroundColor{StaticResource FillsTertiary}

XAML Theming Architecture (ALPAMobile.Presentation native-XAML guidance)

When building the native-XAML surface of ALPAMobile.Presentation, the surface token mapping defines the theming contract. Key rules:

This mapping is a build-time task, not a Figma sync task. Flag it as a prerequisite when the native-XAML surface work item is created (the Blazor RCL shipped 2026-07-15, D61 — the XAML mapping remains open).

Theme Endpoint — Complete Token Namespace Reference

Full HTTP contract: theme-endpoint-contract.html  ·  Token values used in BackgroundToken fields: dynamic-feed-api-contract.html §3.4

The theme endpoint delivers one flat token map per mecId, queried at login and cached client-side. It carries every visual property that varies by MEC brand: surface colors, text colors, border colors, icon tints, action-button colors, navigation chrome, and semantic status colors. Frontend hydrates the component library by mapping each token to a CSS custom property (e.g. --surface-brand) or a XAML DynamicResource key (e.g. SurfaceBrand). The base ALPA values below are the fallback when no MEC theme is loaded.

On-* pairing rule. Every Surface/* token a MEC can override has a paired Text/On-* (and/or Icon/On-*) counterpart guaranteeing accessible contrast. A component binding Surface/Brand as its background must also bind Text/On-Brand for its text — never hard-code #ffffff directly, as a MEC could override the surface to a light color. See Surface Tokens — XAML Implementation Note for Razor / XAML binding rules.

Namespace Overview

NamespacePurposeMEC-variable?Notes
Surface/*Background fills for containers, cards, and page regionsYesSurface/BrandAlways pair with the matching Text/On-* token
Text/*Foreground text colors including On-* paired tokensYes — all On-* tokens track their surface pair
Border/*Stroke / border colorsYesBorder/Brand
Icon/*Icon fill tints (mirrors On-* semantics)YesIcon/On-Brand
Action/*CTA and interactive button surfacesYes — tracks Accents/Blue MEC override
Nav/*Navigation chrome: tab bar, top bar, active/inactive statesYes — background tracks Surface/Brand
Status/*Semantic feedback colors (error, success, warning, info)No — fixed design-system values
Spacing/*Layout spacing scaleYes — delivered at ALPA base values for all MECs; MEC-overridable server-side without app deployment (D35)DQ-12 open to confirm Figma path names; values confirmed from CSS vars
BorderRadius/*Corner radius scale — resolves CornerRadiusToken in the dynamic feedNo — all MECs receive ALPA base values today6 steps (None → Full). D38. Client falls back to BorderRadius/M (8px) when field absent.

Surface/*

Token PathDescriptionALPA DefaultUAL MEC OverridePaired On-* token
Surface/Brand Primary branded surface — nav bar, card header, MEC grid background #05273E United Brand/Blue-800 #002243 Text/On-Brand · Icon/On-Brand
Surface/Default Page / default card background #FFFFFF No override (white) Text/Primary
Surface/Primary Primary elevated card surface (above the page layer) #EFEFEF United Brand/Grey-100 #F7F7F7 Text/Primary
Surface/Subtle Blue-tinted background (welcome cards, callout sections) #DFEDF9 No override Text/On-Subtle

Text/*

Token PathDescriptionALPA DefaultUAL MEC OverrideCSS var
Text/PrimaryPrimary body / heading text on default surfaces#05273ENo override--text-primary-sem
Text/SecondaryMuted / secondary text (subtitles, timestamps)#5D6471No override--text-secondary-sem
Text/On-BrandText placed ON Surface/Brand — guarantees contrast with the branded surface. MEC-themeable (D34) — must always bind via DynamicResource, never hardcoded. UAL override: #bed6fb.#FFFFFF#BED6FB (UAL periwinkle)--text-on-brand
Text/On-SubtleText placed ON Surface/Subtle#05273ENo override
Text/LinkHyperlink and CTA text (carousel "View All", inline nav links)#007BC2United Brand/Blue-400 #94EBFE--text-links
Text/DisabledDisabled / inactive text state#D2D4D6No override--text-disabled

Border/*

Token PathDescriptionALPA DefaultUAL MEC OverrideCSS var
Border/BrandAccent border on branded elements (PilotCard, section accents)#05273EUnited Brand/Blue-500 #0008CE--border-blue-dk
Border/DefaultStandard card / container border#D2D4D6No override--border-default-sem
Border/SubtleHairline / low-contrast dividers#E3E3E3No override--border-subtle-sem

Icon/*

Token PathDescriptionALPA DefaultUAL MEC OverrideCSS var
Icon/DefaultDefault icon fill on neutral surfaces#05273ENo override--ui-icons
Icon/On-BrandIcon fill ON Surface/Brand — mirrors Text/On-Brand#FFFFFFWhite or MEC contrast color
Icon/ActiveActive / selected icon state (selected nav tab)#007BC2United Brand/Blue-400 #94EBFE

Action/*

Token PathDescriptionALPA DefaultUAL MEC OverrideCSS var
Action/PrimaryCTA button background#007BC2United Brand/Blue-500 #0008CE--interactive-blue-lt
Action/PrimaryTextText ON Action/Primary button surface#FFFFFFWhite
Action/AccentGhost button border, focus ring, secondary interactive accent#007BC2United Brand/Blue-400 #94EBFE
Token PathDescriptionALPA DefaultUAL MEC Override
Nav/BackgroundNavigation bar fill (tracks Surface/Brand for most MECs)#05273E#002243 (United Brand/Blue-800)
Nav/ActiveSelected tab label + icon tint#FFFFFFWhite or MEC contrast color
Nav/InactiveUnselected tab label + icon tint#9BA1A8Muted contrast per MEC
Nav/HoverHover / pressed overlay (web / tablet Blazor)rgba(255,255,255,0.12)Semi-transparent overlay

Status/*

Status tokens are not MEC-variable. They are fixed semantic values from the design system, delivered as constants in the theme endpoint payload.

Token PathDescriptionValue (fixed)Used by
Status/ErrorDestructive / error state#C02126 Error banners, form validation, EmergencyButton background
Status/SuccessSuccess / confirmed state#1A7340 Success toasts, confirmed actions
Status/WarningCaution / advisory state#B7770D Warning banners, delayed-status indicators
Status/InfoInformational / neutral highlight#007BC2 Info toasts, DYK cards, advisory callouts
Status/OnTimeOn-time flight indicator#00EA75 Flight status badge, on-time dot indicator

Spacing/* (Delivered via theme endpoint at base defaults — D35)

Spacing is included in every ThemeResponse at ALPA base values. No MEC overrides (UAL uses identical spacing — confirmed 2026-06-26). A MEC can get custom spacing via a server change with no app deployment (D35). Values below confirmed via auto-layout inference sweep 2026-06-26 — strict 4 px grid. 3 outlier values (5 px, 10 px, 18 px) need design sign-off before implementing flight card and notification card spacing; all others can be used immediately. See DQ-12.

Figma CSS varTheme tokenFigma path (binary)ValueTypical use
--noneSpacing/None0pxFlush layouts, icon-to-edge
--xtinySpacing/XTinySpacing/xtiny4px ✓Button card body gap, inline icon gaps, UAL welcome body
--tinySpacing/Tiny(no Figma var path; CSS var only)8px ✓Dominant step (14× in sweep). card-lg top padding, card-btn outer, navBar-bottom bottom, card-md status bar, flight card inner, carousel gap
--xxsmallSpacing/XXSmallSpacing/xxsmall12px ✓card-lg and card-md content item gap; button icon-text gap
--xsmall / --page-marginsSpacing/SmallSpacing/xsmall16px ✓Page horizontal margins, navBar-bottom l/r, nav item py, listy card px, UAL feed gap
--smallSpacing/MediumSpacing/small20px ✓Notification card outer item gap
--mediumSpacing/LargeSpacing/medium24px ✓card-lg content bottom padding, card-md outer padding, notification outer padding
--xxlargeSpacing/XXLarge40pxPage-level vertical margin (not yet confirmed from sweep — retained from prior capture)

3 values still need design confirmation before flight card and notification card spacing is implemented: 5 px (notification text gap, node 4864:31875), 10 px (flight card section gap, nodes 4555:7483 + 4555:7000), 18 px (navBar-bottom inter-tab gap, node 5035:16370). All other steps are implementation-ready.

BorderRadius/* (Delivered via theme endpoint at base defaults — D38)

Resolves ContainerDto.CornerRadiusToken from the dynamic feed. Client falls back to BorderRadius/M (8 px) when the field is absent or null. No MEC overrides today — all MECs receive the ALPA base values below. Full contract: theme-endpoint-contract.html.

Theme Token (API key)Figma PathValueCSS varTypical use
BorderRadius/NoneBorder Radius/None0px ✓Flush containers, full-bleed banners/grids
BorderRadius/SBorder Radius/S4px ✓--radius-sChips, tags, inline badges
BorderRadius/MBorder Radius/M8px ✓Standard card — HeroCard, CardSmall, CardText. Default fallback.
BorderRadius/LBorder Radius/L12px ✓--radius-lProminent — ButtonCard, MEC grid tiles
BorderRadius/XLBorder Radius/XL16px ✓Large panels — welcome card stack, full-width modals
BorderRadius/FullBorder Radius/Circle50% ✓Pill / circle — avatar frames, FAB buttons

2026-06-23 New Components (ALPAMobile2026-06-23 · D18D24)

Sixteen new components were added to figma-component-specs.json in the 2026-06-23 sync. All dimensions are TBD — sizing audit pending (MCP get_metadata access was limited to the thumbnail page in this sync; a follow-up targeted metadata pull per componentKey is required). Token paths for new components are also TBD pending that audit.

Figma NameDecisionProvisional TierCode NameWidthHeightNotes
flight cardD18scaffold/compositeFlightCardTBDTBDDistinct from flight card-og; pending designer confirmation
flight finder filtersD22domain-controlFlightFinderFiltersTBDTBDJSFF filter UI; domain binding TBD
notification card flight statusD22domain-controlNotificationCardFlightStatusTBDTBDFlight-status notification variant
flight card-saved & recent searchesD21domain-controlFlightCardSavedAndRecentSearchesTBDTBDConsolidates 3 previous JSFF entries
Master Form FieldD23scaffold/atomFormFieldTBDTBDGeneral form input component_set
toggle-settingsD23scaffold/atomToggleSettingsTBDTBDSettings toggle component_set
hamburger menuD23scaffold/atomHamburgerMenuTBDTBDNav-drawer trigger
Toolbar - Top - iPhoneD20vendor/referenceTBDTBDApple iOS kit — excluded from ALPA scaffold
Toolbar - Top - SheetD20vendor/referenceTBDTBDApple iOS kit — excluded from ALPA scaffold
nav controlsD19nav-chromeNavControlsTBDTBDReplaces topNav/topNav-og atomic behaviors
NavItem-primaryD23nav-chromeNavItemPrimaryTBDTBDPrimary nav-item atom
Primary buttonD24scaffold/atomPrimaryButtonTBDTBDRelationship to button-sm TBD
alpa logoD23scaffold/atomAlpaLogoTBDTBDLogo asset component
radio buttonD23scaffold/atomRadioButtonTBDTBDRadio button atom
i-favoritesD23scaffold/atomIFavoritesTBDTBDFavorites icon atom
search secondary buttonsD42scaffold/atom (resolved from provisional domain-control)SearchSecondaryButton103 (Default) / 79 (Variant2)38 (Default) / 63 (Variant2)Overall component_set 143×121. Fill #5d6471, stroke #05273e. Both variants carry generic content (icon-generic + "Recent" label) — resolved 2026-07-02, D42.

2026-07-02 New Components (Flight Finder scoped sync, live file owEYzHf7FrHRvWC2u82UOl · D41D44)

Four components captured from the live Figma file (not the dated-snapshot files sourced above) as part of a scope-limited Flight Finder sync. Full dimensions confirmed via direct get_metadata / REST calls — no TBD sizing this pass.

Figma NameDecisionTierCode NameWidthHeightNotes
flight finder filter and sortD41domain-controlFlightFinderFilterSort393Filter: 499
Sort: 480
Component_set overall 433×1087. Canonical node 4450:11374 — a byte-identical duplicate exists at 4705:8702 (flagged, not catalogued). Composes flight finder filters ×3 + radio button ×5 + tab group + nav controls + Primary button + Underline Button.
expander-flight finder-advanced searchD44domain-control (composes Expander primitive)FlightFinderAdvancedSearch345Default: 71
Open: 693
Component_set overall 385×828. Fill #efefef. Resolves the Expander primitive spec's open "expanded content not shown" gap — see expander-component.html.
bannerD43domain-control (provisional)PromoBanner319.4 (Default) / 309.4 (Variant2)56Component_set overall 346.4×172. Fill #05273e. Sample content: UPA27 survey promo. Domain source unconfirmed.
search secondary buttonsD42scaffold/atomSearchSecondaryButton103 / 7938 / 63See row above (2026-06-23 table) — dimensions confirmed and tier resolved in this pass.

Typography discrepancy flagged — League Spartan on base (non-MEC) UI text

Three of the four new components render base-app (non-MEC-flagged) text in League Spartan: the Expander trigger label "Advanced Search", the Secondary button "Save Search to Favorites" text, and the search secondary buttons "Recent" label. Per D33, League Spartan is a MEC-theme-only font (UAL heading+body slot) — the app base font is Futura PT Book/Bold. This may be an unintentional Figma override on these specific button/label styles (the same pattern DQ-1 found and corrected for "Futura LT Pro"), or these controls may intentionally carry their own "Button Label" type style distinct from body copy. Not resolved — flagging only, per Phase 4 scope (this sync did not run a full foundations re-audit). Needs design confirmation before implementation. Tracked with node-level Figma links at DQ-25.

2026-07-06 Figma Gap Sync (live file owEYzHf7FrHRvWC2u82UOl · D46D49)

Four items surfaced by a gap-audit pass against this baseline. Full dimensions confirmed via direct REST nodes calls. No new design tokens introduced this pass — see per-row notes.

Figma NameDecisionTierCode NameWidthHeightNotes
button pillD46primitive (unchanged)Button (Pill)127 (default) / 109 (selected)31Component_set overall 167×158, node 4245:5754. Confirms the already-adopted Button (Pill) master — the docs' "pill button" spelling was a word-order transcription slip, not a Figma rename. See button-pill-component.html.
Toggle - SwitchD47scaffold/atom (new)ToggleSwitch6428Component_set overall 104×120, node 4128:7733. Off (fill #d2d4d6) / On (fill #007bc2) states. Bare on/off switch composed by the existing toggle-settings entry (label + this atom). See toggle-switch-component.html.
flight card-saved & recent searchesD48domain-control (unchanged, confirms D21)FlightCardSavedAndRecentSearches353Default: 61
Variant2: 340
Component_set overall 393×465, node 4450:9884 — resolves D21's TBD dimensions/node gap. Two sibling usage frames (flight card-saved searches 4450:10395, flight card-recent searches 4450:11208) instance this master; not separate masters.
button linkD49screen-out (not catalogued)218.424Node 5251:15088, FRAME (no published master). Sample: "FORGOT MEMBER NUMBER" — Log In screen, sibling to the existing uncatalogued "Forgot Password" link. Uses only already-tokenized styles (Text/Link #007bc2 · Mobile Button Text) — no new tokens.
Generated from Figma binary source (kiwi format). Extracted by parsing canvas.fig directly. Raw data: docs/ui-refresh-1821/figma-component-specs.json  |  Last Figma sync 2026-07-06 (D46D49, gap-audit scoped, live file)  |  Previous scoped sync 2026-07-02 (D41D44, Flight Finder)  |  Previous full sync 2026-06-23 (D18D24)  |  Theme token namespace reference added 2026-06-25