Every State. Every Device. One Visual Language.
This board is the acceptance reference for the reusable component layer. Toggle appearance and team identity to confirm that structure, readability, and hierarchy remain stable while accents change.
Compact, Clear, Predictable.
One primary action per decision context. Secondary controls stay visually quieter without sacrificing touch targets.
Buttons and Icon Controls
Workspace Tabs
Faces Are Part of the Information Architecture.
Manager imagery stays prominent in hero moments. Player imagery scales by context. Missing imagery becomes a deliberate identity state.
Centered Units, Clear Consequence.
Labels, values, supporting details, and badges form one centered vertical unit. Calculations stay outside the component.
Never Leave the User Guessing.
Every state explains what happened, what is still safe, and the next useful action. Layout is reserved during loading.
Dart is now starting. Your Week 2 lineup remains complete.
Reserve the final layout and preserve orientation.
Your waiver queue is empty.
Cached roster data remains visible. Changes will wait for a connection.
Your previous lineup is intact. No roster state was lost.
Showing the last valid score while the live provider reconnects.
Action Before Information.
Notifications retain identity, deadline, consequence, and route-to-action. Reversible success uses concise toasts.
Toasts confirm reversible actions without blocking the next task. Durable history remains in the relevant activity surface.
Contained Workflows, Persistent Actions.
Desktop dialogs center. Mobile dialogs center or align to the top safe area—never the bottom. Only the body region scrolls.
Final Package
Both sides, FAAB, roster legality, weekly impact, and expiration remain visible before submission.
Same Capability, Deliberate Form.
Breakpoints respond to usable space and interaction mode, not device marketing names. No critical action disappears.
Large identity, horizontal tab rails, top-aligned dialogs, persistent actions, 44px touch targets.
Metrics and secondary cards may pair; primary identity still dominates.
Folded uses phone structure. Open uses the laptop hierarchy without excessive whitespace.
Use available width for context, not oversized gaps or expanded buttons.
Clear Ownership Prevents Drift.
Each component owns visual and interaction consistency. Domain calculations, network requests, and league rules remain outside.
| Component | Required Inputs | Required States | Responsive Rule | Accessibility Rule | Never Owns |
|---|---|---|---|---|---|
Button |
tone, size, label, icon | default, hover, pressed, disabled, busy | 44px target on touch devices | visible focus and disabled reason | business validation |
Identity |
name, image, fallback, role | loaded, missing, broken, free agent | hero scale preserved on mobile | meaningful adjacent text | profile fetching |
MetricGrid |
label, value, detail, trend | neutral, positive, warning, critical | 4 → 2 → 1 columns | reading order matches visual order | calculation |
FeedbackState |
kind, title, detail, action | loading, empty, offline, error, stale, success | reserves intended layout | status announced without repetition | retry transport |
DialogShell |
title, body, actions, close | open, busy, error, success | center desktop; top/center mobile | focus trap, Escape, restoration | workflow rules |
DataFreshness |
validAt, refreshState, source | current, refreshing, stale, failed | compact copy on narrow widths | time and state conveyed in text | polling |
Toast |
tone, message, undo/action | enter, visible, paused, dismissed | safe-area aware placement | live region with controlled timeout | durable history |
WorkspaceTabs |
items, active id, badge | default, active, focus, overflow | hidden-scroll horizontal rail | arrow keys and ARIA panels | route data |