Authenticated product routes use the shared app-page-header primitive from
src/app/components/shared/page-header/. It owns the common route-heading hierarchy, Material theme typography, and
responsive action placement. Import the standalone component directly from a standalone route, or use its export from
SharedModule in an NgModule-owned route.
Use the route variant for a primary workspace heading and the compact variant for embedded workspace context such
as Dashboard Today. The component provides:
title,titleId, andheadingLevelfor the page or section heading.eyebrowandsubtitlefor concise context and data currency.statusfor a consistent pending or warning title state.pageHeaderLeadingfor a leading Material icon or an existing icon action. SetleadingActionfor an icon action to preserve its Material touch target while keeping the title visually compact.pageHeaderContextfor projected, domain-specific status content that replaces the eyebrow without adding a banner.pageHeaderActionsfor existing Material controls. Route actions move to a dedicated full-width row below 800 px; compact headers retain their inline action layout.
The Dashboard, Calendar, Training, Routes, signed-in Compare files, and Settings workspaces use this component. A page should not add route-local heading font sizes, action-row breakpoints, or a second title treatment. Keep page CSS limited to the surrounding layout and domain-specific action groups.
Guest and public marketing views may retain a distinct hero composition. Their heading styles must remain local to that public surface and must not become a new authenticated workspace-header pattern.
Authenticated product workspaces, except Settings, use the shared qs-workspace-page shell from src/styles.scss. It
owns the 1440 px maximum page width, border-box sizing, and common responsive inline gutters. Apply it on the route root
alongside the route-specific class; do not add another outer width, margin, or padding rule in the component stylesheet.
Settings intentionally retains its centered 760 px form column, including its aligned fixed save action, rather than
stretching a form workflow across the workspace width.
Use Angular Material controls for header actions: mat-icon-button for icon-only navigation, mat-button for secondary
route actions, mat-stroked-button for bounded retry or configuration actions, and mat-button-toggle-group for view
modes. The primitive uses Material system color and typography tokens; consumers should not override its internal
elements.
Give each primary route title a stable titleId and reference it from the route main or workspace region with
aria-labelledby. Keep a title status concise and expose failures with the supplied warning status or an equivalent
projected role="alert" state.