← Back to Index

Duty Period Card Figma: card-duty period-alt domain control

Updated: 2026-06-26

Audited: 2026-06-26

FTDT duty period list item — composes Progress Bar + key-value rows + Outline Button
Figma node: 4617:13876 (card-duty period-alt, 3 variants) · Section: components ftdt (4543:5876) · file key: psH738AqHDxuMyFm897f9r
Domain control — FTDT-specific. Composes Progress Bar (Max Duty Period limit row) + Info Block-style key-value rows (Ends datetime, Duty total) + an Outline Button ("Manage Flights & Details"). A swipe-to-delete gesture reveals a red trash zone on the trailing edge. The expanded Variant 2 adds flight segment rows, rest duration, notes, and a "CONCLUDE" action — that variant is specced separately under Duty Period Card — Expanded (pending).
Design tokens sourced from Figma file key psH738AqHDxuMyFm897f9r · Component: card-duty period-alt (4617:13876) in components ftdt (4543:5876) · captured 2026-06-26

Live CSS Preview

Property 1 = Default (237 px)
April 28 2026  10:58  -06:00
Max Duty Period 14:00
Duty 16:00
Delete demo — swipe reveal (237 px)
April 28 2026  10:58  -06:00
Max Duty Period 14:00
Duty 16:00
🗑

Variant 2 (expanded — 1051 px, includes flight segments, rest, notes, Conclude button) not previewed here. See Figma node 4617:13920.

Design Tokens

Dimensions

Width
345 px (full-bleed in 393 px screen)
Height — Default
237 px
Height — Variant 2 (expanded)
1051 px
Height — Delete demo
237 px
Card padding
16 px (--xsmall)
Inner gap
8 px (--tiny)
Outline button border-radius
38 px
Outline button padding
12 px vertical (--xxsmall) · 16 px horizontal (--xsmall)
Delete zone width
67 px

Colors

Card background
white/500 #ffffff
Card bottom border
ui/form-borders #e7e7e7
Outline button border
border/blue-dk #05273e
Delete zone background
red/500 #c02126
Progress bar track
Surface/Subtle #dfedf9
Progress bar fill
interactive/blue-lt #007bc2

Typography — Header / Key labels

Font family
Futura PT Heavy (font-family/body, Heavy weight)
Font size
18 px (--font-size/body/m)
Color
text/primary #05273e

Typography — Value / "Ends" labels

Font family
Futura PT Book
Font size
16 px
Color
text/primary #05273e

Typography — Outline Button

Font family
Futura PT Demi
Font size
15 px (--font-size/other/button)
Text transform
uppercase
Letter spacing
0.6 px
Line height
1 (none)

Figma Variants

VariantFigma nodeHeightDescription
Property 1=Default4617:13877237 pxCollapsed view: datetime header + progress bar + duty KV row + outline button
Property 1=Variant24617:139201051 pxExpanded: all Default content + EDIT link + Flight Segments section + segment rows + rest + notes + CONCLUDE button
Property 1=delete demo4617:13962237 pxSame as Default but offset left by 67 px; red trash zone visible on trailing edge — swipe gesture affordance

Layer Tree — Default Variant

└── card-duty period-alt [Default] · 345×237 · white bg · border-b form-borders
    ├── section title · FRAME · pt-4px
    │    └── [StartDatetime] · TEXT · Futura PT Heavy 18px
    ├── progress bar & labels · FRAME · py-8px (→ Progress Bar component)
    │    ├── row · "Max Duty Period" | "14:00" · Afacad SemiBold 18px
    │    ├── progress bar · 5px track · Surface/Subtle
    │    └── flight 01 · "Ends" | "April 29 00:58 -06:00" · Futura PT Book 16px
    ├── section title · FRAME · py-8px · space-between
    │    ├── "Duty" · Futura PT Heavy 18px
    │    └── "16:00" · Futura PT Book 16px
    └── Underline Button (Outline Button) · 320px · border-radius 38px · border/blue-dk
        ├── "MANAGE FLIGHTS & DETAILS" · Futura PT Demi 15px · uppercase · tracking 0.6px
        └── i-caret · 12×12 px

ViewModel

Tier: domain control. Composes ProgressBarViewModel. Data sourced from FTDT domain via factory.

└── CardDutyPeriodViewModel : SurfaceViewModel
    ├── StartDatetime : string — formatted datetime with timezone (e.g. "April 28 2026 10:58 -06:00")
    ├── MaxDutyBar : ProgressBarViewModel — composed progress bar
    ├── EndsDatetime : string — duty period end datetime (footer right of progress bar)
    ├── DutyTotal : string — total duty time (e.g. "16:00")
    ├── ManageCommand : ICommand — navigates to expanded Variant 2 detail
    ├── IsSwipeable : bool — enables delete-demo swipe affordance
    └── DeleteCommand : ICommand? — archives / deletes this duty period

Usage Context

ScreenNodeRole
FTDT — Duty Periods4544:5877Repeating list item (Default + delete-demo variants)
FTDT — Archived Logs4575:9452Repeating list item (Default only — no delete in archived)

Developer Notes

Blazor Component API

Target home: ALPAMobile.HybridUi. Component file: DutyPeriodCard.razor. Composes <AlpaProgressBar> for the Max Duty Period row — do not re-implement the bar inline.

ParameterTypeRequiredDescription
StartDatetimestringYesFormatted duty start datetime with TZ offset (e.g. "April 28 2026 10:58 -06:00").
MaxDutyBarProgressBarViewModelYesComposed Progress Bar data. Passed through to <AlpaProgressBar> — "Ends" datetime is the bar's LimitValue.
DutyTotalstringYesTotal duty time shown in the key-value row (e.g. "16:00").
OnManageEventCallbackYesInvoked by the "MANAGE FLIGHTS & DETAILS" outline button.
IsSwipeableboolNoEnables trailing red delete zone. Default: false. Pass false on Archived Logs screen.
OnDeleteEventCallback?NoArchive/delete action. Only shown when IsSwipeable is true.

Razor Usage (target)

@* Duty Periods screen — swipeable list *@
@foreach (var dp in DutyPeriods)
{
    <AlpaDutyPeriodCard StartDatetime="@dp.StartDatetime"
                        MaxDutyBar="@dp.MaxDutyBar"
                        DutyTotal="@dp.DutyTotal"
                        OnManage="@(() => NavigateToDetail(dp))"
                        IsSwipeable="true"
                        OnDelete="@(() => ArchiveDutyPeriod(dp))" />
}

@* Archived Logs screen — read-only, no delete *@
@foreach (var dp in ArchivedPeriods)
{
    <AlpaDutyPeriodCard StartDatetime="@dp.StartDatetime"
                        MaxDutyBar="@dp.MaxDutyBar"
                        DutyTotal="@dp.DutyTotal"
                        OnManage="@(() => NavigateToDetail(dp))" />
}

CSS Class Reference (target)

Classes will live in ALPAMobile.HybridUi/wwwroot/css/alpa-components.css under the alpa-duty-period-card BEM block. The composed <AlpaProgressBar> is styled by its own alpa-progress-bar block — do not override those classes here.

ClassScopeKey rules
.alpa-duty-period-cardRoot wrapperbackground:white; border-bottom:1px solid var(--ui-form-borders); position:relative; overflow:hidden
.alpa-duty-period-card__innerContent padding areapadding:16px; display:flex; flex-direction:column; gap:8px
.alpa-duty-period-card__headerDatetime headerfont-family:var(--font-family/body); font-weight:var(--font-weight/heavy); font-size:18px; color:var(--text-primary); white-space:nowrap
.alpa-duty-period-card__pb-sectionProgress bar wrapperpadding:8px 0; display:flex; flex-direction:column; gap:8px
.alpa-duty-period-card__kv-rowKey-value row (Duty/total)display:flex; justify-content:space-between; align-items:center; padding:8px 0
.alpa-duty-period-card__kv-keyRow key labelfont-family:var(--font-family/body); font-weight:var(--font-weight/heavy); font-size:18px; color:var(--text-primary)
.alpa-duty-period-card__kv-valRow value labelfont-family:var(--font-family/body); font-weight:400; font-size:16px; color:var(--text-primary)
.alpa-duty-period-card__manage-btnOutline pill buttondisplay:flex; justify-content:space-between; align-items:center; width:100%; padding:12px 16px; border:1px solid var(--border-blue-dk); border-radius:38px; background:transparent; cursor:pointer
.alpa-duty-period-card__manage-btn-labelButton label textfont-family:var(--font-family/body); font-weight:500; font-size:15px; color:var(--text-primary); text-transform:uppercase; letter-spacing:0.6px
.alpa-duty-period-card__swipe-zoneTrailing delete affordanceposition:absolute; right:0; top:0; bottom:0; width:67px; background:var(--status-error); display:flex; align-items:center; justify-content:center
.alpa-duty-period-card--swipingSwipe-revealed state modifierApplied on swipe threshold; translates __inner left by 67px via transform:translateX(-67px)