Figma Revision Capture — 2026-06-10

Updated: 2026-06-26 · Audited: 2026-06-26 · Source: Figma ALPA mobile app 20260610, file psH738AqHDxuMyFm897f9r, canvas node 4001:15 · Captured by: Claude Code · 2026-06-10

Guardrail: This is the capture step of a full re-sync. The adopted naming set and D1–D11 override decisions are protected. Authoritative decisions: naming-decisions-record.html (D1–D14). Status: all 34 masters tiered/decided — applied to COMPONENT-CHANGES.html and figma-component-specs.json.

1. Designer Annotation

The revised file carries one explicit designer callout ("Documentation Note", node 5397:33328) on the Components board:

"This tab should include an all components on a single website grid, as an overview. Each component should also have its own page for more details, variations, and developer notes."

Implication: The designer wants a per-component page structure (details + variations + developer notes) — which is exactly what docs/component-specifications/<component>/ already provides. New masters currently have no such page; tracked in new-components-2026-06-10.html.

Per-component developer notes were extracted from the local .fig archive (kiwi schema = deflate, data tree = zstd). The verbatim notes are in §6 — several are architecture-level.

2. Component Master Inventory (34 Masters)

Note: The "Provisional class" column is SUPERSEDED — it was the first-pass read. Read §5 for the actual decisions.
#Figma masterNode idIn prior 19-spec?Status
1card-md4718:11125Card (size variant)
2card-btn4737:13038Button (D3)
3card-notification4864:31901Card layout variant
4flight segment card4555:7483Domain control (FTDT)
5horizontal scrolling feed4047:4230Carousel
6listy card generic5172:15482List
7main-feed slot4038:891Feed Template
8navBar-bottom4038:1037Bottom Navigation
9profile4153:8817Screen (out of library)
10profile info block4128:7690Info Block atom
11section title4596:11818Section Title primitive
12slider4317:5239Carousel scroll indicator (not Carousel)
13tab group4361:8479Segmented Control (D9 amended)
14topNav5419:34168Top Navigation
15button-sm4128:7717Button (size variant)
16NavItem-primary4020:3429❌ NEWNavItem atom (Primary)
17NavItem-top4038:3300❌ NEWNavItem atom (Top)
18navItem hamburger4057:7542❌ NEWNavItem atom (Drawer)
19nav controls4084:2871❌ NEWNav Controls
20navBar-bottom-tablet5419:34086❌ NEWDeferred-responsive
21hamburger menu4084:2712❌ NEWNavigation Drawer
22menu-hamburger4153:8871❌ NEWScreen (out of library)
23main view-interior4245:5027❌ NEWInterior Template
24template4436:5299❌ NEWPage Template
25template-tablet5419:34171❌ NEWDeferred-responsive
26flight detail flight info4325:6399❌ NEWDomain control (FTDT)
27progress bar & labels4537:14830❌ NEWProgress Bar primitive
28status4325:6332❌ NEWBadge atom
29endpoint4322:5706❌ NEWEndpoint domain atom
30horizontal button with icon4128:7799❌ NEWButton variant
31btn-pulldown4555:6510❌ NEWButton variant (pulldown)
32btn-sort&filter4358:4501❌ NEWButton variant (icon+label)
33alpa logo4023:780❌ NEWLogo brand-asset atom
34back4431:4432❌ NEWBack control atom

3. Delta vs Prior 19-Component Spec

Retained (15): card-md · card-btn · card-notification · flight segment card · horizontal scrolling feed · listy card generic · main-feed slot · navBar-bottom · profile · profile info block · section title · slider · tab group · topNav · button-sm

Dropped (3) — 0 occurrences in revised file: mobile hero (→ CardHero) · mobile nav (→ nav controls / navBar-bottom / topNav) · search bar (→ Search screen + search secondary buttons)

Still live but master outside this canvas: card-lg (17× instances; → Card Large + CardHero) · card-sm (28× instances; → CardSmall, D4)

New masters (19): NavItem-primary · NavItem-top · navItem hamburger · nav controls · navBar-bottom-tablet · hamburger menu · menu-hamburger · main view-interior · template · template-tablet · flight detail flight info · progress bar & labels · status · endpoint · horizontal button with icon · btn-pulldown · btn-sort&filter · alpa logo · back

4. New Scope Themes

5. Decision-Alignment Map

D-number note (2026-06-22): Decisions proposed here as D12/D13/D14 were formally adopted in naming-decisions-record.html under those numbers. When the 2026-06-17 Figma ingest added its own D12–D17, the June 10 D12/D13/D14 were renumbered D18/D19/D20 to eliminate duplicate anchor IDs. All prose below that says "D12", "D13", or "D14" in the context of this June 10 capture correspond to D18, D19, D20 respectively in the current decisions record.

5a. Name-Mapping Authority

When importing a Figma revision, resolve every Figma master against these, in order, before flagging anything as "new":

  1. naming-decisions-record.html — Authoritative adopted naming set (D1–D14)
  2. Per-component -property-mapping.html — each carries the exact Figma node ref
  3. naming-alignment-report.html — analysis behind the set

Carousel ← horizontal scrolling feed (4047:4230). The current carousel-property-mapping.html mapped onto slider (4317:5239, 313×63) — a scroll-position indicator (scroll-track + thumb + min/max label rows), not the card collection. slider reclassified as the Carousel's scroll-indicator sub-control, not the Carousel itself.

5c. Segmented Control + Bottom Navigation ✅ RESOLVED 2026-06-10

NodeSizeWhat it isNameViewModel
navBar-bottom 4038:1037393×88Global bottom nav — main-section switcher (HOME · JUMPSEAT · KCM · FTDT · MY MEC)Bottom NavigationBottomNavigationViewModel
tab group 4361:8479345×31In-screen single-select segment (NONSTOP · ONE STOP · MULTILEG; Notifications FF/Comms)Segmented ControlSegmentedControlViewModel

D9 amended (2026-06-10): "Segmented Control" adopted as a deliberate scoped exception — it is the clearest name, already the design system's own token vocabulary (Miscellaneous/Segmented Control - Selected Fill), and disambiguates from Bottom Navigation.

5d. Typed Variant + Themeable CSS (D18) ✅ RESOLVED 2026-06-10

  1. Size variants collapse into a typed variant property: card-md/card-lgCard + CardVariant { Small, Medium, Large }; button-smButton + size variant. Variant becomes remotely-configurable data, not a separate component. Aligns with Path 2 (Hybrid SDUI).
  2. Extend the ViewModel surface to carry themeable CSS. Common CSS on the base; variant CSS layered on for custom MEC screens. Blazor Hybrid makes CSS the styling vector; remote MEC themes provide overrides.

Concrete types, no magic strings: CardVariant = a closed enum (SDUI deserializes to it — never a loose string). ComponentStyle = a typed value object of design-token types (ThemeColor, typed scale units) — no CSS strings on the domain VM. MEC theme = IOptionsMonitor<MecThemeOptions> (live-reload). Raw CSS string exists only at the view edge — an IThemeResolver maps (component type, Variant, Style, active MEC theme) → the CSS class a Razor component binds. No free-form inline-Style escape hatch on the VM.

5e. Vendor Strategy (D19) ✅ RESOLVED 2026-06-10

BucketStrategy
Design-system primitives (Figma library, MEC-themeable)Build from scratch — own DOM + CSS variables
Complex generic controls (date/time pickers, combobox, dialog, virtualization)Vendor allowed — but wrapped behind own component + typed VM
ThemingOne vector: CSS custom properties from typed tokens

MudBlazor: keep as an option for complex controls (wrapped); do not adopt MudTheme as the theming system (would fracture MEC theming into two systems). Bridge tokens → Mud palette at the wrapper if needed. Remove Mud from the core design-system path.

Card-family naming (D4 revised): type-first — Card, CardSmall, CardHero, CardText. Dirs renamed: hero-card/→card-hero/, text-card/→card-text/, small-card/→card-small/.

5f. Component Library Scope — MAUI-Free RCL (D20) ✅ RESOLVED 2026-06-10

The design system is a library, not app-shell — a Razor Class Library targeting plain net10.0 (no UseMaui). Nav chrome, page templates, primitives, and their ViewModels all live in it. This is Feature AB#2087 (Presentation Extraction).

Constraints to stay MAUI-free: Typed tokens are library-defined (ThemeColor/ComponentStyle must be our types, not Microsoft.Maui.Graphics.Color) · Platform concerns are injected interfaces (navigation, storage: interface in library, implementation in MAUI host via DI) · Vendor/MudBlazor stays host-side (D19).

5g. New Standalone Components ✅ RESOLVED 2026-06-10

Figma masterNameViewModelNotes
Master Form FieldForm FieldFormFieldViewModel"Master" = Figma main-component artifact, not part of the name. Validated by design tokens (Font Family/Form Field). Unified field: text input / select / expanding textarea / ±icons / states.
card-notificationCard (layout variant)CardViewModelNot a separate component. Differences are image placement + proportion = visual, not structural. Folds into Card as a layout/presentation variant. Axes orthogonal: Size ⟂ Layout ⟂ state.
progress bar & labelsProgress BarProgressBarViewModelGradient fill = a CSS gradient design token, MEC-themeable (D18/D19); not a VM property. VM holds data (value/min/max + label text), not the fill look.
statusBadgeBadgeViewModelShared generic atom: Label + State/Severity variant → CSS token styling. Domain controls compose it via D11. Same Badge used for flight-status and duty-period-status.
profile (4153:8817)Screen (out of library)Full Profile screen — outside the component library per D20.
profile info blockInfo BlockInfoBlockViewModel : ComponentViewModelGeneric label + value pair ("MEMBER NUMBER" / value), no surface chrome. Domain-neutral; distinct from CardText (which is on a surface).
endpointEndpointFlight endpoint atom (airport/time), composed into flight card / flight segment card by their factories (D11). Not a library primitive.

5h. Domain Controls — D11 Composition Confirmed ✅ RESOLVED 2026-06-10

All four are domain controls that compose generic scaffolds + atoms (D11) — none is a new library primitive.

Domain controlNodeComposes (verified)Variants
flight card4348:4002base Card scaffold + Endpoint ×2 + leg/layover collection (DL 302 · AA 1753 · AA 1186) + icons5 (Default/swipe/expanded/Variant4/5) = states, not components
flight segment card4555:7483Endpoint atoms (DEN ✈ MIA) + date/time + carrier/equipment (DL 302 · 757)
flight detail flight info4325:6399Badge ("Delayed 34m") + Info Block (Gate H14) + Buttons (KCM › · Jumpseat Policy ›)Departure/Arrival
card-duty period-alt4617:13876Progress Bar (Max Duty 14:00) + Info Block (Ends/Duty) + Button (Manage Flights & Details)3 (Default/Variant2/delete-demo) = states

5i. Tablet Variants — Deferred-Responsive

The *-tablet masters (navBar-bottom-tablet, template-tablet) and *— TABLET screen frames are non-optimized responsive designs, not distinct components. Handled at implementation time via responsive layout (CSS breakpoints / adaptive layout in Blazor). Do not create separate *Tablet ViewModels/components.

5j. Nav Chrome · Templates · Atoms (Finding A) ✅ CLOSED 2026-06-10

Figma masterNodeSizeWhat it isName / Tier
topNav5419:34168834×110Top utility bar — profile · heart · bell · search + hamburgerTop Navigation — nav chrome
nav controls4084:2871193×38In-screen header row (back/home · title · filter)Nav Controls — nav chrome
hamburger menu4084:2712300×570Slide-out drawer: back/home + nav rowsNavigation Drawer — nav chrome
menu-hamburger4153:8871393×852Full hamburger overlay screenScreen — out of library (D20)
NavItem-primary4020:342950×80Bottom-nav item (vertical icon+label)NavItem atom — variant: Primary
NavItem-top4038:330038×54Top-nav item (icon)NavItem atom — variant: Top
navItem hamburger4057:7542280×48Drawer row (label + chevron)NavItem atom — variant: Drawer
template4436:5299393×852Base page scaffold (status bar · nav · content slot)Page Template — template tier
main view-interior4245:5027300×570Interior screen scaffold (nav controls + title + content slot)Interior Template — template tier
main-feed slot4038:891393×852Home/feed scaffold with content slotFeed Template — template tier
section title4596:11818313×38Section header + optional "View All ›"Section Title — primitive
alpa logo4023:78060×60ALPA brand markLogo — brand-asset atom
back4431:443269×22Back affordance (caret + label)Back — control atom
btn-pulldown4555:6510320×39"VIEW DETAILS ⌄" expandable outlined buttonButton variant (pulldown) per D3
btn-sort&filter4358:4501131×18"⇄ SORT & FILTER" icon+labelButton variant (icon+label, small) per D3

Full tier model: atoms (NavItem, Badge, Info Block, Endpoint, Logo, Back, icons) → primitives (Card, Button, Form Field, Progress Bar, Section Title) → containers (Carousel, List, Button Group) → nav chrome (Top Navigation, Bottom Navigation, Nav Controls, Navigation Drawer, Segmented Control) → page templates (Page/Interior/Feed Template) → domain controls (flight card, flight segment, flight detail, duty period). Screens (profile, menu-hamburger, *— TABLET) compose the above and are out of the library (D20).

6. Designer Developer Notes (Verbatim §6 Annotations)

Extracted from the local .fig archive. Several are architecture-level.

Navigation

Top utility bar: "global. Persistent across all screens. Profile / … — each opens its screen/overlay. Confirmed via wired prototype." → topNav
Bottom tab bar: "global nav. Persistent across all primary screens. Tabs: Home … MEC. Active tab reflects current section. Confirmed via wired prototype." → navBar-bottom

Open designer question: "Hide top navbar in lower levels > reveal on swipe down?" — unresolved interaction proposal.

Cards & List Rows

Swipe-to-reveal state: "This card is offset to the left to depict its swipe-revealed state; the row's action buttons sit in the layer directly beneath it. It's a static representation of a left-swipe gesture, not a fixed layout position. Same convention on the other list cards (Recent / Saved Searches, notifications)."
Hidden expanded state: "This detail frame is the card's expanded view, hidden by default. Toggle its visibility to see the expanded content; every flight card carries one. Hidden here means an alternate state stored in place, not an unused layer."
Variants = card states: "Default (collapsed) / open (expanded). comms (Comms-tab styling vs. flight-status styling). One card component serves both notification tabs; comms is the variant used on the Comms side." → card-notification

Controls

Segmented pill control: "default / selected, single-choice. Drives in-screen tab switching (e.g. the Notifications tabs)." → tab groupSegmented Control

"Note: gradient style for all progress bar fills" → progress bar & labels

Variants = interaction states: "Default / expanded are the card's states. Variant4 / Variant5 are generically named — map these by appearance; the labels don't describe them."

Screens / Architecture

Overlay / modal state: "Frames prefixed overlay- are modal sheets layered over a base screen (filter / sort / notification-filter), shown on invocation and dismissed back to the screen beneath. Build as overlays, not separate routes. Applies to all overlay- frames (flight finder filter, notification filters, KCM filter)."
Notifications — two-tab segmentation: "Flight Finder tab vs. Comms tab. Switching changes the list source; the same card serves both (comms variant on the Comms side). One screen, two filtered feeds — not two screens."
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." → directly supports the SDUI remote-theming direction (Path 2).

7. Audit (2026-06-10)

All audit items resolved 2026-06-10:

Cross-checks passed: Counts reconcile: 15 retained + 19 new = 34 masters · D18 vs D10 (typed chrome → ComponentStyle tokens) ✓ · D19 vs D11 (vendor-free like domain-free) ✓ · D20 vs D6 (greenfield, MAUI-free) ✓ · atoms deriving from ComponentViewModel ✓.

Capture is decision-complete. Applied to COMPONENT-CHANGES.html and figma-component-specs.json (_resync manifest). Per-component spec pages gated on AB#2087.