Updated: 2026-06-26
Audited: 2026-06-26
psH738AqHDxuMyFm897f9r ·
Advocacy (4877:11274), MEC (4684:7914), Flight Finder (4713:25117) · captured 2026-06-26
| Shape | CSS modifier | border-radius | Border width | Instance in app |
|---|---|---|---|---|
| Rectangular | --rect | 0 | 1 px | Advocacy — "DONATE & JOIN" (full-width row) |
| Full pill | --pill-full | 100px | 2 px | MEC — "SIGN UP FOR TEXT ALERTS" (inside dark MEC card) |
| Partial pill | --pill-38 | 38px | 1 px | Flight Finder — "ADVANCED SEARCH"; Duty Period — "MANAGE" |
Note: The notification-flight-status expand button (caret-down only, no label) uses border-radius:38px with no text — it shares the pill-38 shape but is a distinct component (see notification-flight-status-component.html).
Reuse the existing ButtonViewModel from ComponentViewModels.cs — the secondary style is expressed by the ButtonStyle.Secondary discriminator already defined alongside ButtonCardViewModel. Add a ButtonShape enum to ButtonViewModel to drive the three radius variants.
AlpaButtonSecondary.razor component (or a single AlpaButton.razor with a Style discriminator). The shape is CSS-only — pass a Shape parameter that resolves to the appropriate BEM modifier class.--pill-full) uses 2px to visually match the bolder MEC treatment. Rectangular and partial-pill use 1px. Do not flatten these to a single 1px rule.--white modifier to flip to white border+text. The consumer screen/card sets the background; the button adapts via modifier or CSS custom property.notification-flight-status uses the same border-radius:38px shell but has no text label and no letter-spacing. Spec'd separately — do not share this component.ButtonStyle enum is currently only referenced by ButtonCardViewModel. To use it in ButtonViewModel, move it to a shared location or add a separate ButtonViewModelStyle enum. Keep the factory-mapping clean — both enums can coexist until a D-decision resolves the naming.Target home: ALPAMobile.HybridUi. Component file: ButtonSecondary.razor. Extends existing ButtonViewModel.
| Parameter | Type | Required | Description |
|---|---|---|---|
Vm | ButtonViewModel | Yes | Label, icon, link, Style=Secondary, Shape. |
OnTap | EventCallback<ButtonViewModel> | No | Fires on button tap; consumer handles navigation or action. |
@* Advocacy — rectangular outline *@
<AlpaButtonSecondary Vm="@new ButtonViewModel { Label = "DONATE & JOIN", Style = ButtonStyle.Secondary, Shape = ButtonShape.Rect }"
OnTap="@HandleDonateTap" />
@* MEC — full pill, white (inside dark card) *@
<AlpaButtonSecondary Vm="@new ButtonViewModel { Label = "SIGN UP FOR TEXT ALERTS", Style = ButtonStyle.Secondary, Shape = ButtonShape.PillFull }"
OnTap="@HandleSignUpTap" />
@* Flight Finder — partial pill *@
<AlpaButtonSecondary Vm="@new ButtonViewModel { Label = "ADVANCED SEARCH", Style = ButtonStyle.Secondary, Shape = ButtonShape.Pill38 }"
OnTap="@HandleAdvancedSearch" />
Classes will live in ALPAMobile.HybridUi/wwwroot/css/alpa-components.css under the alpa-btn-secondary BEM block.
| Class | Scope | Key rules |
|---|---|---|
.alpa-btn-secondary | Root button | display:inline-flex; align-items:center; justify-content:center; gap:8px; background:transparent; border:1px solid var(--border-dk,#05273e); color:var(--text-primary,#05273e); font-family:var(--font-family/ui); font-size:15px; font-weight:600; letter-spacing:0.6px; text-transform:uppercase; cursor:pointer; padding:12px 24px |
.alpa-btn-secondary--rect | Rectangular shape | border-radius:0 |
.alpa-btn-secondary--pill-full | Full-pill shape | border-radius:100px; border-width:2px |
.alpa-btn-secondary--pill-38 | Partial-pill shape | border-radius:38px |
.alpa-btn-secondary--white | White on dark bg | border-color:white; color:white |