/*
 * AUTO-GENERATED by tools/performance/build-client-css-bundle.mjs.
 * Edit the source modules listed in tools/performance/client-css-bundle.json.
 */

/* ===== WorkCita.Client/wwwroot/css/workcita-theme.tokens.css ===== */
/*
 * WorkCita global stylesheet module: workcita-theme.tokens.css
 * Ownership layer: tokens (sole owner of theme values).
 * Ownership: --wc-* design tokens, light/dark scopes, and Mud palette bridge.
 * Theme: defines the one universal WorkCita theme; no surface-specific palettes.
 * Load: after _content/MudBlazor/MudBlazor.min.css; before app.base.css (index.html).
 */

/* The money atom's cents lane is the one token that must NOT be re-resolved per
   element. It is a ch value, and an unregistered custom property substitutes its
   tokens at the use site, so an 18px emphasised "Total" row resolved a ~28% wider
   lane than the 14px rows above it and walked its decimal 7px out of column.
   Registering it as a <length> computes the ch once, here at :root, and inherits
   the resulting absolute length, so one page has exactly one decimal column.
   Browsers without @property fall back to the previous per-element behaviour. */
@property --wc-money-cents-lane {
    syntax: "<length>";
    inherits: true;
    initial-value: 0px;
}

/* =============================================================================
   Universal WorkCita design tokens
   ============================================================================= */

:root {
    /* Typography Scale */
    /* One family, two optical sizes. Segoe UI Variable is the Windows 11 UI face;
       its Text and Display cuts share drawing and metrics, so body copy and headings
       read as one voice. Aptos is not listed: it ships as an Office cloud font that
       browsers cannot see, so naming it silently put body copy on the older Segoe UI
       beside Variable Display headings. Other platforms land on their own system UI
       face for both roles. */
    --wc-font-body: "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Arial, sans-serif;
    --wc-font-display: "Segoe UI Variable Display", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Arial, sans-serif;
    /* Code-like data only (error references, tokens, raw payloads). Never a
       stylistic choice — see DESIGN.md typography. */
    --wc-font-mono: "Cascadia Mono", Consolas, "Courier New", Courier, monospace;
    /* The scale is rem against the 16px default, not px, so a reader who raises
       the browser's font size scales the whole product with it. The comments
       carry the px each step resolves to at that default; they are the numbers
       every layout floor and column plan in this codebase was measured with. */
    /* 13px is the reading floor: supporting copy, metadata, labels and captions.
       Only column headers, record-number pills and the chips inside table status
       and type lanes stay at 12px (--text-2xs): short keys that are scanned, not
       read. */
    --text-2xs:  0.75rem;   /* 12px */
    --text-xs:   0.8125rem; /* 13px */
    --text-sm:   0.8125rem; /* 13px */
    --text-base: 0.875rem;  /* 14px */
    --text-lg:   0.9375rem; /* 15px */
    --text-xl:   1.125rem;  /* 18px */
    --text-2xl:  1.25rem;   /* 20px */
    --text-3xl:  1.75rem;   /* 28px */

    /* Font Weights. 700 is the ceiling: the display family carries emphasis by
       size and colour, and heavier faces are a different voice, not a louder
       one. Nothing declares 750, 800, or 900. */
    --font-normal:   400;
    --font-medium:   500;
    --font-semibold: 600;
    --font-bold:     700;

    /* Line Heights */
    --leading-tight:  1.25;
    --leading-normal: 1.5;

    /* Letter Spacing */
    --tracking-normal: 0em;
    --tracking-wide: 0.025em;

    /* Semantic product type roles. Components consume these roles instead of
       selecting raw scale steps, so hierarchy changes remain system-owned. */
    --wc-type-display-family: var(--wc-font-display);
    --wc-type-display-size: var(--text-3xl);
    --wc-type-display-weight: var(--font-bold);
    --wc-type-display-leading: 1.18;
    --wc-type-headline-family: var(--wc-font-display);
    --wc-type-headline-size: var(--text-2xl);
    --wc-type-headline-weight: var(--font-bold);
    --wc-type-headline-leading: 1.2;
    --wc-type-title-family: var(--wc-font-display);
    --wc-type-title-size: var(--text-xl);
    --wc-type-title-weight: var(--font-bold);
    --wc-type-title-leading: 1.18;
    --wc-type-body-family: var(--wc-font-body);
    --wc-type-body-size: var(--text-base);
    --wc-type-body-weight: var(--font-normal);
    --wc-type-body-leading: var(--leading-normal);
    /* Compact/supporting roles keep dense feature layouts semantic. */
    --wc-type-body-compact-size: var(--text-sm);
    --wc-type-body-emphasis-size: var(--text-lg);
    --wc-type-control-size: var(--wc-type-body-emphasis-size);
    --wc-type-caption-size: var(--text-xs);
    --wc-type-title-compact-size: 16px;
    --wc-type-input-size: 16px;
    --wc-type-display-pricing-size: 36px;
    --wc-type-display-pricing-compact-size: 32px;
    --wc-type-display-pricing-office-size: 34px;
    --wc-type-display-metric-size: 22px;
    --wc-type-value-size: var(--wc-type-title-size);
    --wc-type-value-compact-size: var(--wc-type-title-compact-size);
    --wc-type-label-family: var(--wc-font-body);
    --wc-type-label-size: var(--text-xs);
    --wc-type-label-weight: var(--font-bold);
    --wc-type-label-leading: var(--leading-tight);
    --wc-type-display-hero-fluid-size: clamp(36px, 5vw, 66px);
    --wc-type-display-hero-mobile-size: clamp(35px, 12vw, 54px);
    --wc-type-display-lede-size: clamp(17px, 1.9vw, 21px);
    --wc-type-display-section-size: clamp(26px, 3.2vw, 38px);
    --wc-type-display-proof-title-size: clamp(20px, 2.4vw, 26px);
    --wc-type-icon-size: 20px;
    --wc-type-icon-compact-size: 14px;
    --wc-type-icon-medium-size: 18px;
    --wc-type-icon-large-size: 34px;
    --wc-type-meta-family: var(--wc-font-body);
    --wc-type-meta-size: var(--text-xs);
    --wc-type-meta-weight: var(--font-semibold);
    --wc-type-meta-leading: 1.2;
    --wc-type-meta-tracking: var(--tracking-normal);
    --wc-type-table-header-family: var(--wc-font-body);
    --wc-type-table-header-size: var(--text-2xs);
    --wc-type-table-header-weight: var(--font-bold);
    --wc-type-table-header-leading: 1.2;
    --wc-type-table-header-tracking: var(--tracking-normal);

    /* Numeric posture (Ledger Ink). Money is a structure, not a string: WcMoney
       splits every amount into mark / whole / cents so a right-aligned column
       lands its decimal point at a constant offset with no measuring. These two
       tokens are the sole owners of figure posture; call sites never declare
       font-variant-numeric directly. The split is by what the digits MEAN —
       identifiers slash the zero because 0-vs-O costs a dispatcher a phone call;
       money never does, because $0 was never going to be read as $O. */
    --wc-numeric-figures: tabular-nums lining-nums;
    --wc-numeric-identifier-figures: tabular-nums slashed-zero;
    --wc-money-family: var(--wc-font-display);
    --wc-money-tracking: -0.012em;
    /* The atom root's weight is CONSTANT. --wc-money-cents-lane is a ch value and
       grid-template-columns resolves it against the container's font, so dropping
       the root weight for a settled or nil row narrows the lane and walks the
       decimal off its column on exactly the rows that matter. State changes the
       __whole slot only; it sits in an auto column and cannot move the decimal. */
    --wc-money-weight: var(--font-bold);
    --wc-money-weight-settled: var(--font-medium);
    --wc-money-mark-size: max(12px, 0.82em);
    --wc-money-cents-size: max(12px, 0.8em);
    /* Registered above as a <length>: this ch is measured against the root font,
       once, and every atom inherits the same absolute lane. */
    --wc-money-cents-lane: 3ch;
    --wc-money-lead-size: var(--wc-type-value-size);
    --wc-money-lead-size-compact: var(--wc-type-value-compact-size);
    /* Money reads as ink; workflow state is carried by the chip. Money that is
       still someone's problem keeps its ink, settled money loses it. */
    --wc-money-ink: var(--wc-text-strong, var(--mud-palette-text-primary));
    --wc-money-ink-settled: var(--wc-text-soft, var(--mud-palette-text-secondary));
    --wc-money-ink-overdue: var(--wc-tone-error-soft-fg);
    --wc-money-mark-ink: var(--wc-text-soft, var(--mud-palette-text-secondary));
    --wc-money-cents-ink: var(--wc-text-muted, var(--mud-palette-text-secondary));

    /* Spacing Scale (8px base) */
    --space-1:  4px;
    --space-2:  8px;
    --space-3:  12px;
    --space-4:  16px;
    --space-5:  20px;
    --space-6:  24px;
    --space-8:  32px;

    /* Elevation Levels (Shadows) - surfaces stay flat; overlays use Mud/overlay-specific elevation. */
    --shadow-xs: none;
    --shadow-md: none;

    /* Radius. The --wc-* names hold the values; --border-radius-* are legacy
       aliases OF them, not the other way round. The direction was inverted, so
       the namespace the app is migrating TO was downstream of the one it is
       migrating FROM and could never become the single owner. Nothing about the
       computed values moved. Radius and spacing are theme-invariant, so they are
       declared here once - the light and dark scopes used to restate them
       identically three times over. */
    --wc-radius-xs: 4px;
    --wc-radius-sm: 6px;
    --wc-radius-md: 8px;
    --wc-radius-lg: 12px;
    --wc-radius-track: var(--wc-radius-xs);
    --wc-radius-pill: 999px;
    /* Role radii. One name per role: --wc-card-radius / --wc-control-radius /
       --wc-panel-radius. The --wc-card-radius / -control / -panel spellings
       were near-duplicates of these three and are gone. */
    --wc-card-radius: var(--wc-radius-md);
    --wc-control-radius: var(--wc-radius-md);
    --wc-panel-radius: var(--wc-radius-lg);
    --border-radius-sm: var(--wc-radius-sm);
    --border-radius-md: var(--wc-radius-md);
    --border-radius-lg: var(--wc-radius-lg);
    --wc-space-1: var(--space-1);
    --wc-space-2: var(--space-2);
    --wc-space-3: var(--space-3);
    --wc-space-4: var(--space-4);
    --wc-space-5: var(--space-5);
    --wc-space-6: var(--space-6);
    --wc-space-8: var(--space-8);
    --wc-space-sm: var(--space-2);
    --wc-success-rgb: 22, 101, 52;
    --wc-warning-rgb: 180, 83, 9;
    --wc-error-rgb: 185, 28, 28;
    --wc-info-rgb: 29, 78, 216;
    --wc-overlay-scrim: rgba(2, 6, 23, 0.64);

    /* Unified page-header system (WcPageHeader). Office + portal page titles
       converge on --wc-page-title-size; auth and public hero override size only. */
    --wc-page-title-size:         var(--wc-type-display-size);
    --wc-page-title-size-compact: 24px;
    --wc-page-title-size-hero:    40px;
    --wc-page-title-weight:       var(--wc-type-display-weight);
    --wc-page-title-ink:          var(--wc-text-strong);
    --wc-page-title-leading:      var(--wc-type-display-leading);

    /* Motion */
    --wc-motion-fast: 120ms;
    --wc-motion-feedback: 150ms;
    --wc-motion-base: 180ms;
    --wc-motion-state: 220ms;
    --wc-motion-slow: 300ms;
    --wc-motion-loading: 1500ms;
    --wc-ease-out-quart: cubic-bezier(0.25, 1, 0.5, 1);
    --wc-ease-out-quint: cubic-bezier(0.22, 1, 0.36, 1);
    /* Solid, not alpha. A 50%-alpha accent composites to ~2.2:1 in light and
       ~1.7:1 in dark against the surfaces it lands on, which fails WCAG 2.1
       SC 1.4.11 (3:1) wherever a call site applies this without also applying
       --wc-focus-ring. Solid accent measures 5.76:1 light; the dark scope
       overrides this with --wc-accent-strong for the same reason as the ring. */
    --wc-focus-outline: 2px solid var(--wc-accent, #2457E6);
    --wc-signature-pad-inline-cap-default: 400px;
    --wc-signature-pad-block-size-default: 150px;
    --wc-signature-pad-block-size-compact: 140px;
}

.wc-theme {
    min-height: 100%;
    background: var(--wc-page-background, var(--mud-palette-background));
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
}

html.wc-theme-light,
.wc-theme-light {
    color-scheme: light;
    --wc-accent: #2457E6;
    --wc-accent-rgb: 36, 87, 230;
    --wc-accent-strong: #173FB6;
    --wc-accent-deep: #113493;
    /* Accent used as INK rather than as a fill. Light needs no separate value;
       the dark scope has to lift it, because the dark fill accent is tuned down
       so it does not glow and lands at 3.39:1 as text. Fills, borders, and
       strokes keep --wc-accent; anything that renders as a glyph takes this. */
    --wc-accent-ink: var(--wc-accent);
    /* Hover fill for accent-filled controls. Must stay dark enough to keep
       --wc-on-accent above 4.5:1; --wc-accent-strong lightens in dark mode
       (it is a text colour there), so the hover fill needs its own token. */
    --wc-accent-hover: #173FB6;
    /* Operational teal is owned by its rgb triple, like every other semantic
       family here; the Mud bridge below derives the fill from it. */
    --wc-secondary-rgb: 0, 122, 111;
    --wc-secondary-strong: #006057;
    --wc-on-secondary-rgb: 252, 253, 255;
    --wc-success-rgb: 22, 101, 52;
    --wc-warning-rgb: 180, 83, 9;
    --wc-error-rgb: 185, 28, 28;
    --wc-info-rgb: 29, 78, 216;
    --wc-page-background: #EDF2FA;
    --wc-page-background-rgb: 237, 242, 250;
    --wc-surface-1: #FCFDFF;
    --wc-surface-1-rgb: 252, 253, 255;
    --wc-surface-2: #EEF3FA;
    --wc-surface-2-rgb: 238, 243, 250;
    --wc-surface-3: #DCE6F5;
    --wc-surface-3-rgb: 220, 230, 245;
    /* Segmented bands (the office view switcher) sit ON a card and need a field
       one tier away from it in whichever direction has contrast: down in light,
       up in dark. This is the one intentional tier crossing in the system. */
    --wc-band-surface: var(--wc-surface-2);
    --wc-surface-brand-soft: #DDE7FF;
    --wc-surface-operational-soft: #D8F4EF;
    --wc-on-accent: #FCFDFF;
    --wc-on-accent-rgb: 252, 253, 255;
    --wc-shadow-rgb: 15, 23, 42;
    --wc-surface-hover: rgba(36, 87, 230, 0.10);
    --wc-surface-shadow-xs: none;
    --wc-surface-shadow-sm: none;
    --wc-surface-shadow-md: none;
    --wc-surface-shadow-lg: none;
    /* Structural Mud line roles mirror WorkCitaThemeTokens.Light. Keep the
       CSS bridge and the runtime palette on the same named contract. */
    --wc-divider: rgba(var(--wc-shadow-rgb), 0.10);
    --wc-lines-default: var(--wc-divider);
    --wc-lines-inputs: rgba(var(--wc-shadow-rgb), 0.18);
    --wc-table-lines: rgba(var(--wc-shadow-rgb), 0.08);
    --wc-border-soft: rgba(var(--wc-shadow-rgb), 0.12);
    --wc-border-strong: rgba(var(--wc-accent-rgb), 0.28);
    --wc-input-border: rgba(var(--wc-shadow-rgb), 0.18);
    --wc-data-border: rgba(var(--wc-shadow-rgb), 0.09);
    --wc-data-header-bg: #E3ECF8;
    --wc-data-header-bg-strong: #DCE6F5;
    --wc-data-grid-border: rgba(var(--wc-shadow-rgb), 0.13);
    --wc-data-row-hover: rgba(36, 87, 230, 0.10);
    --wc-data-row-selected: rgba(36, 87, 230, 0.16);
    --wc-data-key-bg: rgba(36, 87, 230, 0.08);
    --wc-data-key-fg: #173FB6;
    --wc-data-key-border: rgba(36, 87, 230, 0.16);
    --wc-command-field-bg: #E3ECF8;
    --wc-command-field-border: rgba(36, 87, 230, 0.14);
    --wc-command-header-bg: #FCFDFF;
    --wc-command-header-bg-rgb: 252, 253, 255;
    --wc-command-header-fg: #0F172A;
    --wc-command-header-muted: #526277;
    --wc-command-header-soft: var(--wc-surface-brand-soft);
    --wc-command-header-border: rgba(15, 23, 42, 0.10);
    --wc-text-strong: #0F172A;
    --wc-text-muted: #526277;
    /* Soft ink is painted on four light surfaces, and the tinted ones are the
       binding constraint: at #64748B it measured 4.27 / 4.23 / 3.99 / 3.78:1 on
       surface-2, the page field, the data header, and surface-3 - under AA for
       14px column headers and record labels. #556579 clears all four
       (5.35 / 5.30 / 5.00 / 4.73:1) and 5.59:1 on the tinted numeric cell
       (#F5F8FC), which is why money no longer needs its own faded slate. */
    --wc-text-soft: #556579;
    --wc-text-primary: var(--wc-text-strong);
    --wc-text-secondary: var(--wc-text-muted);
    --wc-surface-subtle: var(--wc-surface-2);
    --wc-border-subtle: var(--wc-border-soft);
    /* Opaque: a translucent bar without blur lets page content ghost through
       behind the brand on scrolled detail and pay pages. */
    --wc-shell-appbar-bg: rgba(var(--wc-surface-1-rgb), 1);
    --wc-shell-appbar-text: #0F172A;
    --wc-shell-appbar-muted: #64748B;
    --wc-shell-appbar-border: rgba(var(--wc-shadow-rgb), 0.08);
    --wc-shell-appbar-shadow: none;
    --wc-shell-appbar-action-bg: rgba(var(--wc-surface-1-rgb), 0.55);
    --wc-shell-appbar-action-border: rgba(var(--wc-shadow-rgb), 0.14);
    --wc-shell-drawer-bg: var(--wc-surface-1);
    --wc-shell-brand-bg: rgba(36, 87, 230, 0.11);
    --wc-shell-brand-fg: #173FB6;
    --wc-shell-brand-border: rgba(36, 87, 230, 0.16);
    /* Mud palette bridge. MudBlazor components read --mud-palette-* directly, so
       these must exist - but they are a projection of the --wc-* layer above, not
       a second palette. Everything with a --wc-*-rgb owner is derived from it so a
       token change propagates instead of silently diverging. The few left as
       literals (appbar, drawer text/icon, document text, disabled, grey, the
       manual info-lighten step) have no --wc-*-rgb owner to derive from. */
    --mud-palette-background: rgba(var(--wc-page-background-rgb), 1);
    --mud-palette-background-rgb: var(--wc-page-background-rgb);
    --mud-palette-background-gray: rgba(var(--wc-surface-2-rgb), 1);
    --mud-palette-background-gray-rgb: var(--wc-surface-2-rgb);
    --mud-palette-background-grey: var(--mud-palette-background-gray);
    --mud-palette-surface: rgba(var(--wc-surface-1-rgb), 1);
    --mud-palette-surface-rgb: var(--wc-surface-1-rgb);
    --mud-palette-appbar-background: rgba(23, 37, 84, 1);
    --mud-palette-drawer-background: rgba(var(--wc-surface-2-rgb), 1);
    --mud-palette-drawer-text: rgba(51, 65, 85, 1);
    --mud-palette-drawer-icon: rgba(82, 98, 119, 1);
    --mud-palette-text-primary: rgba(15, 23, 42, 1);
    --mud-palette-text-primary-rgb: 15, 23, 42;
    --mud-palette-text-secondary: rgba(71, 85, 105, 1);
    --mud-palette-text-secondary-rgb: 71, 85, 105;
    --mud-palette-text-disabled: rgba(148, 163, 184, 1);
    --mud-palette-divider: var(--wc-divider);
    --mud-palette-lines-default: var(--wc-lines-default);
    --mud-palette-lines-inputs: var(--wc-lines-inputs);
    --mud-palette-table-lines: var(--wc-table-lines);
    --mud-palette-action-default-hover: rgba(100, 116, 139, 0.08);
    --mud-palette-grey-default: rgba(148, 163, 184, 1);
    --mud-palette-primary: rgba(var(--wc-accent-rgb), 1);
    --mud-palette-primary-rgb: var(--wc-accent-rgb);
    --mud-palette-primary-hover: rgba(var(--wc-accent-rgb), 0.08);
    --mud-palette-primary-text: rgba(var(--wc-on-accent-rgb), 1);
    --mud-palette-secondary: rgba(var(--wc-secondary-rgb), 1);
    --mud-palette-secondary-rgb: var(--wc-secondary-rgb);
    --mud-palette-secondary-text: rgba(var(--wc-on-secondary-rgb), 1);
    --mud-palette-info: rgba(var(--wc-info-rgb), 1);
    --mud-palette-info-rgb: var(--wc-info-rgb);
    --mud-palette-info-lighten: rgb(53, 100, 227);
    --mud-palette-info-text: rgba(var(--wc-on-accent-rgb), 1);
    --mud-palette-success: rgba(var(--wc-success-rgb), 1);
    --mud-palette-success-rgb: var(--wc-success-rgb);
    --mud-palette-success-text: rgba(var(--wc-on-accent-rgb), 1);
    --mud-palette-warning: rgba(var(--wc-warning-rgb), 1);
    --mud-palette-warning-rgb: var(--wc-warning-rgb);
    --mud-palette-warning-text: rgba(var(--wc-on-accent-rgb), 1);
    --mud-palette-error: rgba(var(--wc-error-rgb), 1);
    --mud-palette-error-rgb: var(--wc-error-rgb);
    --mud-palette-error-text: rgba(var(--wc-on-accent-rgb), 1);
    --wc-focus-ring: 0 0 0 3px var(--wc-accent);
    --wc-error-ring: 0 0 0 3px rgba(var(--wc-error-rgb), 0.12);
    --wc-state-disabled: var(--mud-palette-text-disabled);
    --wc-tone-default-soft-bg: rgba(100, 116, 139, 0.14);
    --wc-tone-default-soft-fg: #475569;
    --wc-tone-default-soft-border: rgba(100, 116, 139, 0.22);
    --wc-tone-primary-soft-bg: #DDE7FF;
    --wc-tone-primary-soft-fg: #173FB6;
    --wc-tone-primary-soft-border: #9FB5F5;
    --wc-tone-secondary-soft-bg: #D8F4EF;
    --wc-tone-secondary-soft-fg: #007A6F;
    --wc-tone-secondary-soft-border: #8FD5CC;
    --wc-tone-info-soft-bg: #E8F0FF;
    --wc-tone-info-soft-fg: #1D4ED8;
    --wc-tone-info-soft-border: #B2C8F7;
    --wc-tone-success-soft-bg: #E7F5EB;
    --wc-tone-success-soft-fg: #166534;
    --wc-tone-success-soft-border: #ACD8BC;
    --wc-tone-warning-soft-bg: #FFF0DA;
    --wc-tone-warning-soft-fg: #92400E;
    --wc-tone-warning-soft-border: #E8C181;
    --wc-tone-error-soft-bg: #FDEBEC;
    --wc-tone-error-soft-fg: #991B1B;
    --wc-tone-error-soft-border: #E9A5A8;
    --wc-avatar-1-bg: #4F46E5;
    --wc-avatar-1-fg: var(--wc-on-accent);
    --wc-avatar-2-bg: #007A6F;
    --wc-avatar-2-fg: var(--wc-on-accent);
    --wc-avatar-3-bg: #BE123C;
    --wc-avatar-3-fg: var(--wc-on-accent);
    --wc-avatar-4-bg: #1D4ED8;
    --wc-avatar-4-fg: var(--wc-on-accent);
    --wc-avatar-5-bg: #B45309;
    --wc-avatar-5-fg: var(--wc-on-accent);
    --wc-avatar-6-bg: #7C3AED;
    --wc-avatar-6-fg: var(--wc-on-accent);
}

html.wc-theme-dark,
.wc-theme-dark {
    color-scheme: dark;
    --wc-accent: #4A63DD;
    --wc-accent-rgb: 74, 99, 221;
    --wc-accent-strong: #8798FF;
    --wc-accent-deep: #D4DBFF;
    /* See the light scope: accent-as-ink lifts to accent-strong here (6.55:1 on
       surface-1, 4.78:1 on the selected nav item) instead of 3.39 / 2.47:1. */
    --wc-accent-ink: var(--wc-accent-strong);
    /* Deepens rather than brightens: --wc-accent already sits at 4.87:1 with
       --wc-on-accent, so there is no headroom to lighten the fill. #3B52C4
       gives 6.29:1 and still reads as an engaged state. */
    --wc-accent-hover: #3B52C4;
    --wc-secondary-rgb: 67, 191, 178;
    --wc-secondary-strong: #7FE0D7;
    --wc-on-secondary-rgb: 7, 27, 26;
    --wc-success-rgb: 38, 117, 83;
    --wc-warning-rgb: 139, 98, 30;
    --wc-error-rgb: 169, 76, 76;
    --wc-info-rgb: 47, 109, 188;
    --wc-page-background: #08111F;
    --wc-page-background-rgb: 8, 17, 31;
    --wc-surface-1: #101B2D;
    --wc-surface-1-rgb: 16, 27, 45;
    --wc-surface-2: #14243A;
    --wc-surface-2-rgb: 20, 36, 58;
    --wc-surface-3: #1D3150;
    --wc-surface-3-rgb: 29, 49, 80;
    --wc-band-surface: var(--wc-surface-3);
    --wc-surface-brand-soft: #222F66;
    --wc-surface-operational-soft: #164640;
    --wc-on-accent: #F8FAFC;
    --wc-on-accent-rgb: 248, 250, 252;
    --wc-shadow-rgb: 2, 6, 23;
    --wc-surface-hover: rgba(74, 99, 221, 0.14);
    --wc-surface-shadow-xs: none;
    --wc-surface-shadow-sm: none;
    --wc-surface-shadow-md: none;
    --wc-surface-shadow-lg: none;
    /* Structural Mud line roles mirror WorkCitaThemeTokens.Dark. */
    --wc-divider: rgba(148, 163, 184, 0.18);
    --wc-lines-default: var(--wc-divider);
    --wc-lines-inputs: rgba(148, 163, 184, 0.24);
    --wc-table-lines: rgba(148, 163, 184, 0.16);
    --wc-border-soft: rgba(148, 163, 184, 0.16);
    --wc-border-strong: rgba(var(--wc-accent-rgb), 0.30);
    --wc-input-border: rgba(148, 163, 184, 0.24);
    --wc-data-border: rgba(148, 163, 184, 0.18);
    --wc-data-header-bg: rgba(var(--wc-surface-3-rgb), 0.78);
    --wc-data-header-bg-strong: rgba(var(--wc-surface-3-rgb), 0.96);
    --wc-data-grid-border: rgba(148, 163, 184, 0.26);
    --wc-data-row-hover: rgba(74, 99, 221, 0.14);
    --wc-data-row-selected: rgba(74, 99, 221, 0.22);
    --wc-data-key-bg: rgba(74, 99, 221, 0.18);
    --wc-data-key-fg: #D4DBFF;
    --wc-data-key-border: rgba(74, 99, 221, 0.32);
    --wc-command-field-bg: #14243A;
    --wc-command-field-border: rgba(148, 163, 184, 0.18);
    --wc-command-header-bg: #101B2D;
    --wc-command-header-bg-rgb: 16, 27, 45;
    --wc-command-header-fg: #E5EDF7;
    --wc-command-header-muted: #B5C1D3;
    --wc-command-header-soft: var(--wc-surface-brand-soft);
    --wc-command-header-border: rgba(148, 163, 184, 0.16);
    --wc-text-strong: #E5EDF7;
    --wc-text-muted: #B5C1D3;
    --wc-text-soft: #94A3B8;
    --wc-text-primary: var(--wc-text-strong);
    --wc-text-secondary: var(--wc-text-muted);
    --wc-surface-subtle: var(--wc-surface-2);
    --wc-border-subtle: var(--wc-border-soft);
    --wc-shell-appbar-bg: rgba(10, 17, 32, 1);
    --wc-shell-appbar-text: #E5EDF7;
    --wc-shell-appbar-muted: #9FB0C8;
    --wc-shell-appbar-border: rgba(148, 163, 184, 0.14);
    --wc-shell-appbar-shadow: none;
    --wc-shell-appbar-action-bg: rgba(148, 163, 184, 0.08);
    --wc-shell-appbar-action-border: rgba(159, 176, 200, 0.24);
    --wc-shell-drawer-bg: var(--wc-surface-1);
    --wc-shell-brand-bg: rgba(var(--wc-accent-rgb), 0.16);
    --wc-shell-brand-fg: #DBE5FF;
    --wc-shell-brand-border: rgba(var(--wc-accent-rgb), 0.24);
    /* Mud palette bridge - see the light scope for why these are derived. */
    --mud-palette-background: rgba(var(--wc-page-background-rgb), 1);
    --mud-palette-background-rgb: var(--wc-page-background-rgb);
    --mud-palette-background-gray: rgba(var(--wc-surface-3-rgb), 1);
    --mud-palette-background-gray-rgb: var(--wc-surface-3-rgb);
    --mud-palette-background-grey: var(--mud-palette-background-gray);
    --mud-palette-surface: rgba(var(--wc-surface-1-rgb), 1);
    --mud-palette-surface-rgb: var(--wc-surface-1-rgb);
    --mud-palette-appbar-background: rgba(10, 17, 32, 1);
    --mud-palette-drawer-background: rgba(var(--wc-surface-2-rgb), 1);
    --mud-palette-drawer-text: rgba(213, 223, 236, 1);
    --mud-palette-drawer-icon: rgba(159, 176, 200, 1);
    --mud-palette-text-primary: rgba(229, 237, 247, 1);
    --mud-palette-text-primary-rgb: 229, 237, 247;
    --mud-palette-text-secondary: rgba(159, 176, 200, 1);
    --mud-palette-text-secondary-rgb: 159, 176, 200;
    --mud-palette-text-disabled: rgba(100, 116, 139, 1);
    --mud-palette-divider: var(--wc-divider);
    --mud-palette-lines-default: var(--wc-lines-default);
    --mud-palette-lines-inputs: var(--wc-lines-inputs);
    --mud-palette-table-lines: var(--wc-table-lines);
    --mud-palette-action-default-hover: rgba(164, 179, 200, 0.08);
    --mud-palette-grey-default: rgba(100, 116, 139, 1);
    --mud-palette-primary: rgba(var(--wc-accent-rgb), 1);
    --mud-palette-primary-rgb: var(--wc-accent-rgb);
    --mud-palette-primary-hover: rgba(var(--wc-accent-rgb), 0.14);
    --mud-palette-primary-text: rgba(var(--wc-on-accent-rgb), 1);
    --mud-palette-secondary: rgba(var(--wc-secondary-rgb), 1);
    --mud-palette-secondary-rgb: var(--wc-secondary-rgb);
    --mud-palette-secondary-text: rgba(var(--wc-on-secondary-rgb), 1);
    --mud-palette-info: rgba(var(--wc-info-rgb), 1);
    --mud-palette-info-rgb: var(--wc-info-rgb);
    --mud-palette-info-lighten: rgb(67, 128, 208);
    --mud-palette-info-text: rgba(var(--wc-on-accent-rgb), 1);
    --mud-palette-success: rgba(var(--wc-success-rgb), 1);
    --mud-palette-success-rgb: var(--wc-success-rgb);
    --mud-palette-success-text: rgba(var(--wc-on-accent-rgb), 1);
    --mud-palette-warning: rgba(var(--wc-warning-rgb), 1);
    --mud-palette-warning-rgb: var(--wc-warning-rgb);
    --mud-palette-warning-text: rgba(var(--wc-on-accent-rgb), 1);
    --mud-palette-error: rgba(var(--wc-error-rgb), 1);
    --mud-palette-error-rgb: var(--wc-error-rgb);
    --mud-palette-error-text: rgba(var(--wc-on-accent-rgb), 1);
    /* The dark fill accent is tuned down so it does not glow, which leaves it at
       2.47:1 against the selected drawer item and 2.64:1 inside a soft primary
       chip - under SC 1.4.11. Accent-strong is the dark-mode ink accent and
       measures 4.78-7.17:1 on every surface a ring can land on. */
    --wc-focus-ring: 0 0 0 3px var(--wc-accent-strong);
    --wc-focus-outline: 2px solid var(--wc-accent-strong);
    --wc-error-ring: 0 0 0 3px rgba(var(--wc-error-rgb), 0.20);
    --wc-state-disabled: var(--mud-palette-text-disabled);
    --wc-tone-default-soft-bg: rgba(148, 163, 184, 0.14);
    --wc-tone-default-soft-fg: #D5DFEC;
    --wc-tone-default-soft-border: rgba(148, 163, 184, 0.24);
    --wc-tone-primary-soft-bg: rgba(74, 99, 221, 0.24);
    --wc-tone-primary-soft-fg: #D4DBFF;
    --wc-tone-primary-soft-border: rgba(74, 99, 221, 0.36);
    --wc-tone-secondary-soft-bg: #164640;
    --wc-tone-secondary-soft-fg: #A5E9E2;
    --wc-tone-secondary-soft-border: rgba(67, 191, 178, 0.36);
    --wc-tone-info-soft-bg: rgba(47, 109, 188, 0.20);
    --wc-tone-info-soft-fg: #AECDFF;
    --wc-tone-info-soft-border: rgba(47, 109, 188, 0.32);
    --wc-tone-success-soft-bg: rgba(38, 117, 83, 0.20);
    --wc-tone-success-soft-fg: #9FE0BF;
    --wc-tone-success-soft-border: rgba(38, 117, 83, 0.32);
    --wc-tone-warning-soft-bg: rgba(139, 98, 30, 0.22);
    --wc-tone-warning-soft-fg: #EFC28C;
    --wc-tone-warning-soft-border: rgba(139, 98, 30, 0.34);
    --wc-tone-error-soft-bg: rgba(169, 76, 76, 0.20);
    --wc-tone-error-soft-fg: #F2BBBB;
    --wc-tone-error-soft-border: rgba(169, 76, 76, 0.32);
    /* Avatar initials render at 12px, so the fill/initial pair is AA text, not
       a 3:1 graphic. Three dark fills sat under it against --wc-on-accent
       (#F8FAFC): 1 at 3.63:1, 2 at 3.84:1, 6 at 4.05:1. Each is darkened along
       its own hue (229 / 152-153 / 258-259 stay put; only S and L move) to
       4.53 / 4.52 / 4.51:1, so the six-way identity palette still reads as six
       distinct people. All six light fills already cleared (4.93-6.58:1). */
    --wc-avatar-1-bg: #5A6DC5;
    --wc-avatar-1-fg: var(--wc-on-accent);
    --wc-avatar-2-bg: #2B825A;
    --wc-avatar-2-fg: var(--wc-on-accent);
    --wc-avatar-3-bg: #A94C4C;
    --wc-avatar-3-fg: var(--wc-on-accent);
    --wc-avatar-4-bg: #2F6DBC;
    --wc-avatar-4-fg: var(--wc-on-accent);
    --wc-avatar-5-bg: #8B621E;
    --wc-avatar-5-fg: var(--wc-on-accent);
    --wc-avatar-6-bg: #8356E7;
    --wc-avatar-6-fg: var(--wc-on-accent);
}

/* ===== WorkCita.Client/wwwroot/css/app.base.css ===== */
/*
 * WorkCita global stylesheet module: app.base.css
 * Ownership layer: base.
 * Ownership: html/body document defaults and page-level overflow contract.
 * Theme: universal --wc-* tokens only; not a separate surface theme.
 * Parent: GitHub #404 mechanical CSS ownership split (no visual redesign).
 * Load: after workcita-theme.tokens.css; before app.shell.css (index.html).
 */

html,
body {
    font-family: var(--wc-font-body);
    height: 100%;
    margin: 0;
    padding: 0;
    overflow: visible;
}

/*
 * Pre-boot theme paint: js/bootstrap-theme.js stamps wc-theme-dark/-light on
 * <html> before first paint so the boot screen matches the resolved theme
 * (stored choice, else OS prefers-color-scheme) instead of flashing light.
 * Both scopes paint the document element, not just the app wrapper: overscroll
 * and the pre-boot screen render outside the wrapper, so a light document left
 * unpainted falls through to browser white instead of the page field.
 */
html.wc-theme-dark,
html.wc-theme-dark body,
html.wc-theme-light,
html.wc-theme-light body {
    background: var(--wc-page-background, var(--mud-palette-background));
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
}

h1,
h2,
h3,
h4,
h5,
h6,
.mud-typography-h1,
.mud-typography-h2,
.mud-typography-h3,
.mud-typography-h4,
.mud-typography-h5,
.mud-typography-h6 {
    font-family: var(--wc-font-display);
}

/*
 * App-wide keyboard focus indicator — the floor under every interactive control.
 *
 * MudBlazor 9 zeroes the user-agent outline globally (a:focus-visible,
 * button:focus, .mud-button-root, .mud-list-item-clickable) and substitutes a
 * background tint that measures ~1.1:1, so any control this app has not
 * explicitly ringed shows no keyboard indicator at all: dialog Save/Cancel,
 * form action bars, row actions, filter controls, and every portal page.
 *
 * The specificity split is deliberate and load-bearing. The element selectors
 * are (0,1,1) because that is exactly what it takes to beat Mud's own
 * `a:focus-visible` and `button:focus` — the zero-specificity `:where(...)`
 * form loses to both and would be inert on the buttons that matter. The class
 * targets stay inside :where() at (0,1,0) so they beat `.mud-button-root`
 * (same weight, this module loads later) without out-ranking anything of ours.
 * Every zone that owns a ring instead of an outline carries at least one class
 * AND lives in a later bundle module, so the ~26 `outline: none;
 * box-shadow: var(--wc-focus-ring)` zones keep winning: one indicator, never
 * a ring and an outline together.
 *
 * The outline resolves to solid accent, never an alpha wash: 4.66:1 at its
 * worst light surface (--wc-surface-3) and 4.01:1 at its worst dark surface
 * (--wc-surface-operational-soft), against the 3:1 SC 1.4.11 asks for.
 */
a:focus-visible,
button:focus-visible,
summary:focus-visible,
:where([role="button"], .mud-button-root, .mud-icon-button):focus-visible {
    outline: var(--wc-focus-outline);
    outline-offset: 2px;
}

/*
 * Focus modality (js/utils.js). Scripts move focus for assistive technology, and browsers paint
 * :focus-visible for it on page load and after pointer-driven navigation, so mouse and touch
 * users saw rings they never asked for. While <html data-wc-input-modality="pointer"> no
 * indicator paints except on text entry; pressing a key switches to "keyboard" and every
 * indicator returns. !important because several ring zones are more specific than any
 * general selector, and this only ever applies to a focused element in pointer mode.
 */
html[data-wc-input-modality="pointer"] :focus-visible:not(input, textarea, select, [contenteditable="true"]) {
    outline: none !important;
    box-shadow: none !important;
}

/* Headings focused for screen readers are not controls, so they never draw an indicator. */
:is(h1, h2, h3, h4, h5, h6)[tabindex="-1"]:not([role]):focus {
    outline: none;
    box-shadow: none;
}

/*
 * Global motion-safety contract.
 * Honors prefers-reduced-motion app-wide by collapsing motion tokens and
 * neutralizing any transition/animation across every module, so motion safety
 * is systemic rather than per-feature.
 */
@media (prefers-reduced-motion: reduce) {
    :root {
        --wc-motion-fast: 1ms;
        --wc-motion-feedback: 1ms;
        --wc-motion-base: 1ms;
        --wc-motion-state: 1ms;
        --wc-motion-slow: 1ms;
        --wc-motion-loading: 1ms;
    }

    *,
    *::before,
    *::after {
        animation-duration: 1ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 1ms !important;
        scroll-behavior: auto !important;
    }

    .wc-motion-state-change.is-changing,
    .skeleton-shimmer,
    .mud-skeleton-pulse,
    .mud-skeleton-wave,
    .block-calendar--slide-forward,
    .block-calendar--slide-backward {
        animation: none !important;
        transform: none !important;
    }

    /*
     * Busy indicators are the exception to the blanket collapse above.
     * Rotation is the motion a reduced-motion user asked us to remove; the
     * "still working" signal is not. Left alone, animation-iteration-count: 1
     * freezes every indeterminate MudBlazor spinner mid-arc after one cycle,
     * including the WASM boot spinner, so a slow load is indistinguishable
     * from a hang. Stop the spin, keep a slow opacity pulse well under the
     * three-flashes-per-second threshold.
     */
    .mud-progress-circular.mud-progress-indeterminate,
    .mud-progress-circular-indeterminate-child,
    .mud-progress-circular-circle.mud-progress-indeterminate,
    .mud-progress-linear .mud-progress-linear-bar,
    .mud-progress-linear .mud-progress-linear-dashed {
        animation: none !important;
        transform: none !important;
    }

    .mud-progress-circular.mud-progress-indeterminate,
    .mud-progress-linear.mud-progress-indeterminate {
        animation: wc-busy-pulse 2s ease-in-out infinite !important;
        animation-duration: 2s !important;
        animation-iteration-count: infinite !important;
    }

    /* An indeterminate linear bar has no width once its keyframes stop, so
       give it a full track to pulse. */
    .mud-progress-linear.mud-progress-indeterminate.horizontal .mud-progress-linear-bar {
        width: 100% !important;
    }

    .mud-progress-linear.mud-progress-indeterminate.vertical .mud-progress-linear-bar {
        height: 100% !important;
    }

    /* A circular indeterminate arc keeps its dash gap so the ring still reads
       as partial progress rather than a completed circle. */
    .mud-progress-circular-circle.mud-progress-indeterminate {
        stroke-dasharray: 80px, 200px;
        stroke-dashoffset: 0px;
    }
}

@keyframes wc-busy-pulse {
    0%,
    100% {
        opacity: 1;
    }

    50% {
        opacity: 0.45;
    }
}

/* ===== WorkCita.Client/wwwroot/css/app.shell.css ===== */
/*
 * WorkCita global stylesheet module: app.shell.css
 * Ownership layer: shell core.
 * Ownership: Mud layout scroll contract, public shell layout modes, appbar,
 *   user menu, snackbar, and global feedback chrome.
 * Theme: universal --wc-* tokens only; not a separate surface theme.
 * Parent: GitHub #404 mechanical CSS ownership split (no visual redesign).
 * Load: after app.base.css; before app.shell.navigation.css (index.html).
 */

/* MudLayout scroll container - ensures content scrolls within layout, not the body */
.mud-layout {
    height: 100vh;
    max-height: 100vh;
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

@supports (height: 100dvh) {
    .mud-layout {
        height: 100dvh;
        max-height: 100dvh;
    }
}

.mud-main-content {
    flex: 1 1 auto;
    overflow-y: auto;
    min-height: 0; /* Critical: allows flex child to shrink below content size */
    -webkit-overflow-scrolling: touch; /* Smooth scroll on iOS */
}

/* Office shell content padding changes should not be treated as route-enter motion. */
.wc-shell-layout--office .mud-main-content {
    transition-property: none !important;
}

/* Ensure MudBlazor fixed appbar stays fixed on mobile */
.mud-appbar.mud-appbar-fixed-top {
    position: fixed !important;
    top: 0 !important;
    left: 0 !important;
    right: 0 !important;
    z-index: 1100 !important;
    padding-top: env(safe-area-inset-top, 0px);
}

.auth-degraded-banner,
.shell-offline-banner {
    /* Docks as a full-width status strip at the top of the authenticated content
       region, directly beneath the fixed app bar (rendered as the first child of
       MudMainContent in each authenticated shell). It previously sat outside the
       shell as position:sticky;top:0;z-index:1301, which overlapped the fixed app
       bar layer and put its Retry action on top of the app-bar avatar. As a docked
       strip it reads as its own layer: square edges, a 2px bottom divider, and no
       elevation competing with the bar above it. */
    margin: 0 !important;
    border-width: 0 0 2px !important;
    border-bottom-color: var(--wc-tone-warning-soft-border) !important;
    border-radius: 0 !important;
    box-shadow: none !important;
}

.auth-degraded-banner-content {
    flex-wrap: wrap;
}

/* Auth entry pages lay main content out as a flex row (app.auth.css). The auth
   layout renders the offline strip and the PWA update strip as siblings ahead of
   the auth stage, so either one present must stack above the stage at full width
   rather than sitting beside it as a squashed full-height column; scoping through
   :has keeps the normal single-child auth layout untouched. */
.wc-shell-main-content--auth:has(> .shell-offline-banner),
.wc-shell-main-content--auth:has(> .shell-update-banner) {
    flex-wrap: wrap;
}

.wc-shell-main-content--auth > .shell-offline-banner,
.wc-shell-main-content--auth > .shell-update-banner {
    flex: 1 0 100%;
    align-self: flex-start;
}

/* Snackbar / toast surface: align MudBlazor's default toast to WorkCita's flat,
   token-driven surface system (softer radius, restrained functional elevation,
   WorkCita surface + structural border) instead of the Material default (4px
   radius, heavy three-layer shadow). Position is set to bottom-center in
   ClientStartupComposition so transient toasts no longer pile onto the top strip
   shared by the app bar and the docked status band. */
.mud-snackbar.mud-snackbar-surface {
    background: var(--wc-surface-1) !important;
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-card-radius, 8px);
    box-shadow: 0 6px 20px rgba(var(--wc-shadow-rgb), 0.16);
    max-width: 460px;
}

/* Keep bottom-anchored toasts clear of the mobile bottom navigation bar. */
@media (max-width: 959.98px) {
    .mud-snackbar-location-bottom-center,
    .mud-snackbar-location-bottom-left,
    .mud-snackbar-location-bottom-right {
        bottom: calc(var(--wc-mobile-bottom-nav-reserved-space, 84px) + 16px) !important;
    }

    body:has(.job-detail-shell--mobile-fab .mobile-fab-bar) .mud-snackbar-location-bottom-center,
    body:has(.job-detail-shell--mobile-fab .mobile-fab-bar) .mud-snackbar-location-bottom-left,
    body:has(.job-detail-shell--mobile-fab .mobile-fab-bar) .mud-snackbar-location-bottom-right {
        bottom: calc(var(--wc-mobile-bottom-nav-reserved-space, 84px) + var(--wc-job-detail-fab-clearance, 88px) + 16px) !important;
    }

    body:has(.form-action-bar, .document-editor-page .office-form-shell-action-bar) .mud-snackbar-location-bottom-center,
    body:has(.form-action-bar, .document-editor-page .office-form-shell-action-bar) .mud-snackbar-location-bottom-left,
    body:has(.form-action-bar, .document-editor-page .office-form-shell-action-bar) .mud-snackbar-location-bottom-right {
        --wc-mobile-form-action-bar-reserved-space: 128px;
        bottom: calc(var(--wc-mobile-bottom-nav-reserved-space, 84px) + var(--wc-mobile-form-action-bar-reserved-space) + 16px) !important;
    }
}

.subscription-status-chip {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    gap: 6px;
    min-width: 0;
    min-height: 34px;
    max-width: min(280px, 38vw);
    padding: 0 10px !important;
    border-radius: var(--wc-radius-pill) !important;
    border: 1px solid var(--wc-shell-appbar-action-border);
    background: var(--wc-shell-appbar-action-bg) !important;
    color: var(--wc-shell-appbar-text) !important;
    font-size: var(--wc-type-body-compact-size);
    font-weight: 600;
    line-height: 1;
    white-space: nowrap;
    text-transform: none !important;
}

.subscription-status-chip--static {
    cursor: default;
}

.subscription-status-chip.mud-button-root {
    min-height: 44px;
}

.subscription-status-chip .mud-button-label {
    display: inline-flex;
    align-items: center;
    gap: 3px;
    min-width: 0;
    text-transform: none !important;
}

.subscription-status-chip .mud-icon-root {
    flex: 0 0 auto;
    opacity: 0.78;
}

.subscription-status-chip__label {
    color: var(--wc-shell-appbar-muted);
}

.subscription-status-chip__value,
.subscription-status-chip__action {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
}

.subscription-status-chip__value--compact {
    display: none;
}

.subscription-status-chip__action {
    color: var(--wc-accent-ink, var(--mud-palette-primary));
}

.subscription-status-chip__separator {
    flex: 0 0 auto;
    color: var(--wc-shell-appbar-muted);
}

.subscription-status-chip__separator--action {
    margin-inline: 2px;
}

@media (max-width: 599.98px) {
    .subscription-status-chip {
        max-width: 112px;
        min-height: 32px;
        padding-inline: 8px !important;
        gap: 4px;
        font-size: var(--wc-type-caption-size);
    }

    .subscription-status-chip__label,
    .subscription-status-chip__value--wide,
    .subscription-status-chip__separator,
    .subscription-status-chip__action {
        display: none;
    }

    .subscription-status-chip__value--compact {
        display: inline;
    }
}

.provider-readiness-chips {
    flex-wrap: wrap;
}

.provider-readiness-panel {
    display: grid;
    gap: var(--wc-space-2, 8px);
    width: 100%;
}

.provider-readiness-panel__row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: var(--wc-space-2, 8px) var(--wc-space-3, 12px);
    align-items: start;
    padding: var(--wc-space-3, 12px);
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-radius-md, 8px);
    background: var(--wc-surface-1);
}

.provider-readiness-panel__main {
    display: inline-flex;
    min-width: 0;
    align-items: flex-start;
    gap: var(--wc-space-2, 8px);
}

.provider-readiness-panel__copy,
.provider-readiness-panel__detail {
    min-width: 0;
}

.provider-readiness-panel__provider {
    overflow-wrap: anywhere;
}

.provider-readiness-panel__detail {
    grid-column: 1 / -1;
    display: grid;
    gap: 2px;
}

@media (min-width: 720px) {
    .provider-readiness-panel__row {
        grid-template-columns: minmax(160px, 0.8fr) auto minmax(220px, 1.2fr);
        align-items: center;
    }

    /* A row with nothing to explain renders no detail column; without this the reserved
       third column strands the state chip in the middle of the row. */
    .provider-readiness-panel__row:not(:has(.provider-readiness-panel__detail)) {
        grid-template-columns: minmax(0, 1fr) auto;
    }

    .provider-readiness-panel__detail {
        grid-column: auto;
    }
}

.wc-notification-menu-card {
    display: flex;
    flex-direction: column;
    width: min(360px, calc(100vw - 24px - env(safe-area-inset-left, 0px) - env(safe-area-inset-right, 0px)));
    max-width: 360px;
    max-height: min(calc(100dvh - 88px), 420px);
    padding: 0;
    overflow: hidden;
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-radius-lg, 12px);
    background: var(--wc-surface-1);
    /* True overlay, so it is the documented exception to the Flat Task Surface
       rule and carries real elevation. It is declared literally rather than
       through --wc-surface-shadow-md because every --wc-surface-shadow-* token
       is deliberately `none` - those own resting surfaces, not floating ones. */
    box-shadow: 0 10px 26px rgba(var(--wc-shadow-rgb), 0.075);
}

.wc-notification-menu-header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--wc-space-3, 12px);
    padding: var(--wc-space-4, 16px) var(--wc-space-4, 16px) var(--wc-space-3, 12px);
    border-bottom: 1px solid var(--wc-border-soft);
    margin-bottom: 0;
}

.wc-notification-menu-header__copy {
    min-width: 0;
}

.wc-notification-menu-title {
    color: var(--wc-text-strong, var(--wc-shell-appbar-text));
    font-weight: 700;
    line-height: 1.25;
}

.wc-notification-menu-summary {
    display: block;
    margin-top: 2px;
}

.wc-notification-menu-header__actions {
    display: inline-flex;
    align-items: center;
    flex: 0 0 auto;
    gap: 2px;
}

.wc-notification-menu-icon-action.mud-icon-button {
    min-width: 44px;
    min-height: 44px;
}

.wc-notification-menu-body {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    overscroll-behavior: contain;
    padding: var(--wc-space-2, 8px);
}

.wc-notification-loading,
.wc-notification-menu-state {
    padding: var(--wc-space-4, 16px) var(--wc-space-2, 8px);
}

.wc-notification-menu-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--wc-space-2, 8px);
    padding: var(--wc-space-6, 24px) var(--wc-space-4, 16px);
    text-align: center;
}

.wc-notification-menu-empty__title {
    font-weight: 700;
}

.wc-notification-menu-list {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.wc-notification-menu-item {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto auto;
    align-items: center;
    gap: 10px;
    min-height: 44px;
    padding: 10px 12px;
    border-radius: var(--wc-radius-md, 8px);
    color: var(--wc-text-strong, inherit);
    transition:
        background-color var(--wc-motion-feedback, 160ms) var(--wc-ease-out-quart, ease-out),
        box-shadow var(--wc-motion-feedback, 160ms) var(--wc-ease-out-quart, ease-out);
}

.wc-notification-menu-item:hover,
.wc-notification-menu-item:focus-visible {
    background: var(--wc-surface-hover, var(--wc-surface-2));
    outline: none;
    box-shadow: var(--wc-focus-ring);
}

.wc-notification-menu-item__icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border-radius: var(--wc-radius-sm, 6px);
    flex-shrink: 0;
}

.wc-notification-menu-item__label {
    min-width: 0;
    font-size: var(--wc-type-body-size);
    font-weight: 600;
    line-height: 1.3;
    overflow-wrap: anywhere;
}

.wc-notification-menu-item__count {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 1.5rem;
    height: 1.5rem;
    padding: 0 6px;
    border-radius: var(--wc-radius-pill);
    font-size: var(--wc-type-caption-size);
    font-weight: 700;
    line-height: 1;
    flex-shrink: 0;
}

.wc-notification-menu-item__chevron {
    opacity: 0.55;
    flex-shrink: 0;
}

.wc-notification-menu-item--error .wc-notification-menu-item__icon {
    background: var(--wc-tone-error-soft-bg);
    color: var(--wc-tone-error-soft-fg);
}

.wc-notification-menu-item--error .wc-notification-menu-item__count {
    background: var(--wc-tone-error-soft-bg);
    color: var(--wc-tone-error-soft-fg);
}

.wc-notification-menu-item--warning .wc-notification-menu-item__icon {
    background: var(--wc-tone-warning-soft-bg);
    color: var(--wc-tone-warning-soft-fg);
}

.wc-notification-menu-item--warning .wc-notification-menu-item__count {
    background: var(--wc-tone-warning-soft-bg);
    color: var(--wc-tone-warning-soft-fg);
}

.wc-notification-menu-item--accent .wc-notification-menu-item__icon {
    background: var(--wc-tone-primary-soft-bg);
    color: var(--wc-tone-primary-soft-fg);
}

.wc-notification-menu-item--accent .wc-notification-menu-item__count {
    background: var(--wc-tone-primary-soft-bg);
    color: var(--wc-tone-primary-soft-fg);
}

.wc-notification-menu-footer {
    padding: var(--wc-space-2, 8px) var(--wc-space-4, 16px) var(--wc-space-4, 16px);
    border-top: 1px solid var(--wc-border-soft);
}

.wc-notification-menu-footer-action.mud-button-root {
    min-height: 44px;
}

@media (min-width: 960px) {
    .wc-notification-menu-card {
        width: 360px;
    }
}

.mud-popover:has(.wc-notification-menu-card) {
    max-width: calc(100vw - 12px);
}

/* The dvh pair is not decoration here: this element also carries .mud-layout,
   whose height/max-height the @supports block above already switches to 100dvh.
   min-height is resolved last, so a bare 100vh floor silently re-inflates the
   layout to the URL-bar-expanded viewport and puts the bottom ~60-115px of a
   phone page out of reach until the bar retracts. The unprefixed declaration
   stays first as the fallback for engines without dvh. */
.wc-shell-layout {
    min-height: 100vh;
    min-height: 100dvh;
    background: var(--wc-page-background);
}

.wc-shell-appbar {
    background: var(--wc-shell-appbar-bg) !important;
    color: var(--wc-shell-appbar-text) !important;
    border-bottom: 1px solid var(--wc-shell-appbar-border);
    box-shadow: var(--wc-shell-appbar-shadow);
}

.user-menu-profile-summary {
    padding: var(--wc-space-2, 8px);
}

@media (min-width: 960px) {
    .user-menu-profile-summary {
        padding: var(--wc-space-3, 12px);
    }
}

/* Theme toggle row inside the avatar menu: aligned with menu-item padding. */
.user-menu-theme-toggle {
    display: flex;
    align-items: center;
    padding: var(--wc-space-1, 4px) var(--wc-space-4, 16px);
}

.user-menu-theme-toggle .mud-switch {
    margin-inline-end: 0;
}

.user-menu-theme-toggle .mud-switch .mud-typography {
    white-space: nowrap;
}

.wc-shell-appbar .mud-toolbar {
    color: inherit;
    overflow: visible;
    padding-inline-end: max(var(--wc-space-3, 12px), env(safe-area-inset-right, 0px));
}

.wc-shell-appbar .mud-button-root,
.wc-shell-appbar .mud-link,
.wc-shell-appbar .mud-icon-button {
    color: inherit !important;
}

.wc-shell-appbar-actions {
    display: inline-flex;
    align-items: center;
    flex: 0 0 auto;
    gap: 2px;
    min-width: 0;
    margin-inline-start: var(--wc-space-2, 8px);
}

.wc-shell-appbar-action {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    min-width: 44px;
    min-height: 44px;
    overflow: visible;
    border-radius: var(--wc-radius-md, 8px);
}

.wc-shell-appbar-action .mud-icon-button {
    margin: 0 !important;
}

.wc-shell-appbar-action:focus-within,
.wc-shell-user-menu-trigger:focus-visible {
    outline: var(--wc-focus-outline);
    outline-offset: 2px;
    box-shadow: var(--wc-focus-ring);
}

.wc-shell-notification-action .mud-badge-root,
.wc-shell-notification-badge {
    overflow: visible;
}

.wc-shell-mobile-search-action .mud-icon-button {
    margin: 0 !important;
}

.wc-shell-mobile-search-panel {
    width: min(calc(100vw - 32px), 360px);
    padding: var(--wc-space-2, 8px);
}

.wc-shell-global-search-wrap--mobile,
.wc-shell-global-search-wrap--mobile .wc-shell-global-search {
    width: 100%;
    max-width: 100%;
    margin-right: 0;
}

.wc-shell-notification-action .wc-shell-notification-badge .mud-badge-wrapper .mud-badge,
.wc-shell-notification-action .mud-badge-content {
    inset: 5px 5px auto auto;
    min-width: 1.125rem;
    height: 1.125rem;
    padding: 0 4px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: var(--wc-type-meta-size);
    font-weight: 700;
    line-height: 1;
    border: 2px solid var(--wc-shell-appbar-bg);
    box-sizing: border-box;
}

.wc-shell-user-menu-trigger {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 44px;
    min-height: 44px;
    padding: 0;
    border: 0;
    border-radius: var(--wc-radius-md, 8px);
    background: transparent;
    color: inherit;
    cursor: pointer;
}

.wc-shell-user-menu-trigger:hover {
    background: var(--wc-shell-appbar-action-bg);
}

.mud-menu.wc-shell-user-menu > .mud-menu-button-activator {
    width: 44px;
    min-width: 44px;
    height: 44px;
    min-height: 44px;
    padding: 0;
    background: var(--wc-shell-appbar-action-bg) !important;
    color: var(--wc-shell-appbar-text) !important;
    border: 1px solid var(--wc-shell-appbar-action-border);
    border-radius: 50%;
    font-size: var(--wc-type-caption-size);
    font-weight: 700;
    letter-spacing: 0.02em;
}

@media (min-width: 600px) {
    .wc-shell-appbar-actions {
        gap: var(--wc-space-1, 4px);
    }

    .wc-shell-appbar .mud-toolbar {
        padding-inline-end: max(var(--wc-space-4, 16px), env(safe-area-inset-right, 0px));
    }
}

@media (min-width: 960px) {
    .wc-shell-appbar-actions {
        gap: var(--wc-space-2, 8px);
        margin-inline-start: var(--wc-space-3, 12px);
    }
}

.wc-shell-brand-link {
    display: inline-flex;
    align-items: center;
    min-height: 44px;
    min-width: 44px;
}

.wc-shell-brand-stack {
    min-width: 0;
}

.wc-shell-brand-text {
    white-space: nowrap;
}

.wc-shell-public-nav {
    min-width: 0;
}

.wc-shell-public-nav-link {
    display: inline-flex;
    align-items: center;
    min-height: 44px;
    padding-inline: 10px;
    border-radius: var(--wc-radius-pill);
    font-weight: 700;
    white-space: nowrap;
}

.wc-shell-public-nav-link:hover,
.wc-shell-public-nav-link:focus-visible,
.wc-shell-public-nav-link[aria-current="page"] {
    background: var(--wc-shell-appbar-action-bg);
}

/* App-bar controls carry the same visible focus ring as the rest of the app. A
   background tint alone is not an indicator (SC 2.4.7), and the brand link had
   nothing at all. The offset is 2px, not the in-page 3px: these controls sit
   against the viewport edge in the app bar, where a wider ring would clip. */
.wc-shell-brand-link:focus-visible,
.wc-shell-public-nav-link:focus-visible {
    outline: var(--wc-focus-outline);
    outline-offset: 2px;
}
.wc-shell-status-region {
    display: contents;
}

/* ===== WorkCita.Client/wwwroot/css/app.shell.navigation.css ===== */
/*
 * WorkCita global stylesheet module: app.shell.navigation.css
 * Ownership: drawer, tenant identity, desktop navigation, and mobile navigation.
 * Theme: universal --wc-* tokens only.
 * Load: after app.shell.css; before app.shell.support.css.
 */

.wc-shell-drawer {
    border-right: 1px solid var(--wc-border-soft);
}

.wc-shell-drawer .mud-drawer-content {
    background: var(--wc-shell-drawer-bg);
}

/* NOTE: a `.wc-shell-drawer--temporary { width: min(304px, 100vw - 48px) }` rule
   used to live here. It never applied — MudBlazor's own
   `.mud-drawer.mud-drawer-temporary.mud-drawer-pos-left` (three classes) sets the
   width from --mud-drawer-width-left, so the theme's 260px is and always was the
   real mobile drawer width. The 100vw-48px clamp only bit below a 308px viewport,
   under the supported floor. Removed rather than promoted: widening the mobile
   drawer to 304px would be a visual change, not a fix. */
.wc-shell-drawer.mud-drawer-temporary.mud-drawer-pos-left.mud-drawer--closed {
    left: calc(var(--mud-drawer-width-left, 260px) * -1) !important;
}

.wc-shell-drawer--temporary .mud-drawer-content {
    width: 100%;
}

/* Tablet rail (Sm, 600-959px): collapsed, only the icons show; the section labels, tenant name,
   and close chevron would be clipped to fragments at the mini width, so they wait for the
   expanded state. MudBlazor already hides the link labels. */
.wc-shell-drawer--rail.mud-drawer--closed .wc-nav-section,
.wc-shell-drawer--rail.mud-drawer--closed .wc-shell-drawer-identity,
.wc-shell-drawer--rail.mud-drawer--closed .wc-shell-drawer-close {
    display: none;
}

.wc-shell-drawer--rail.mud-drawer--closed .wc-shell-drawer-header {
    justify-content: center;
}

/* Temporary shell drawer motion (Impeccable product register): animate menu open only.
   Slide-out on nav dismiss stays instant so main content is not read as a route enter. */
@keyframes wc-drawer-slide-in-left {
    from {
        transform: translateX(-100%);
    }

    to {
        transform: translateX(0);
    }
}

.wc-shell-drawer.mud-drawer-temporary.mud-drawer-pos-left.mud-drawer--open:not(.mud-drawer--initial) {
    animation: wc-drawer-slide-in-left var(--wc-motion-base) var(--wc-ease-out-quint) forwards;
}

.wc-shell-drawer.mud-drawer-temporary.mud-drawer-pos-left.mud-drawer--closed:not(.mud-drawer--initial) {
    animation: none !important;
    transition: none !important;
}

.wc-shell-brand-avatar {
    background: var(--wc-shell-brand-bg) !important;
    color: var(--wc-shell-brand-fg) !important;
    border: 1px solid var(--wc-shell-brand-border);
    box-shadow: none;
}

/* Brand chip: kept compact (34px) so it anchors the header without dominating it. */
.wc-shell-brand-avatar {
    width: 34px !important;
    height: 34px !important;
}

/* Company monogram: a solid accent chip so the tenant identity reads as identity, not a tint. */
.wc-shell-brand-avatar--monogram {
    background: var(--wc-accent, var(--mud-palette-primary)) !important;
    color: var(--wc-on-accent, var(--mud-palette-primary-text)) !important;
    border: none !important;
    font-size: var(--wc-type-body-compact-size);
    font-weight: 700;
    letter-spacing: 0.01em;
}


/* Drawer header: close affordance sits at the left edge (under the app-bar menu button it
   replaces, so the open/close control does not jump sides), then brand avatar + tenant identity. */
.wc-shell-drawer-header {
    width: 100%;
}

.wc-shell-drawer-header .wc-shell-drawer-identity {
    flex: 1;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.wc-shell-auth-button {
    min-height: 44px;
    padding: 8px 18px;
    border-radius: var(--wc-radius-pill);
    background: var(--wc-shell-appbar-action-bg);
    border-color: var(--wc-shell-appbar-action-border) !important;
}

/* MudBlazor gives an outlined button no focus-visible treatment of its own, so the
   app-bar Sign in control focused identically to how it rested. Same ring and the
   same 2px app-bar offset as the sibling nav controls in app.shell.css. */
.wc-shell-auth-button:focus-visible {
    outline: var(--wc-focus-outline);
    outline-offset: 2px;
}

.wc-shell-auth-button-label--mobile {
    display: none;
}

.page-breadcrumbs {
    padding: 0 !important;
    margin-bottom: 0 !important;
    font-size: var(--wc-type-body-size);
}

.page-breadcrumbs .mud-breadcrumb-item,
.page-breadcrumbs .mud-breadcrumb-separator,
.page-breadcrumbs .mud-disabled {
    color: var(--wc-text-muted, var(--mud-palette-text-secondary)) !important;
    opacity: 1;
}

.page-breadcrumbs a {
    color: var(--wc-text-primary, var(--mud-palette-text-primary)) !important;
}

@media (max-width: 440px) {
    .wc-shell-appbar--welcome .mud-toolbar {
        gap: 0.5rem;
    }

    .wc-shell-appbar--welcome .wc-shell-brand-text {
        display: none;
    }

    .wc-shell-appbar--welcome .wc-shell-public-nav {
        gap: 0.25rem;
    }

    .wc-shell-appbar--welcome .wc-shell-public-nav-link {
        padding-inline: 8px;
        font-size: var(--wc-type-body-compact-size);
    }

    .wc-shell-appbar--welcome .wc-shell-auth-button {
        min-width: 0;
        min-height: 44px;
        padding: 6px 14px;
        font-size: var(--wc-type-caption-size);
        white-space: nowrap;
    }

    .wc-shell-appbar--welcome .wc-shell-auth-button-label--desktop {
        display: none;
    }

    .wc-shell-appbar--welcome .wc-shell-auth-button-label--mobile {
        display: inline;
    }
}

.wc-shell-footer {
    flex: 0 0 auto;
    background: var(--wc-surface-1);
    border-top: 1px solid var(--wc-border-soft);
}

.wc-shell-footer-container {
    padding-top: var(--wc-space-4, 16px);
    padding-bottom: var(--wc-space-4, 16px);
}

.wc-shell-footer-container--auth {
    padding-top: var(--wc-space-2, 8px);
    padding-bottom: var(--wc-space-2, 8px);
}

.wc-shell-footer-links {
    flex-wrap: wrap;
}

/* The 44px height carries the tap target. A 44px min-width centred short words
   ("Terms") in extra space, so the gaps around the separators came out uneven. */
.wc-shell-footer-links .mud-link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 44px;
    padding-inline: var(--wc-space-1, 4px);
}

.wc-shell-layout--public:not(.wc-shell-layout--auth):not(.wc-shell-layout--public-capability) {
    overflow-y: auto;
}

.wc-shell-layout--public:not(.wc-shell-layout--auth):not(.wc-shell-layout--public-capability) .wc-shell-main-content {
    flex: 0 0 auto;
    overflow: visible;
}

/* The whole page scrolls and the footer follows the content at every width; on a short
   page the content grows into the viewport so the footer still meets the bottom edge. */
.wc-shell-layout--public-capability {
    overflow-x: hidden;
    overflow-y: auto;
}

.wc-shell-layout--public-capability .wc-shell-main-content--public-capability {
    flex: 1 0 auto;
    padding-bottom: max(1.25rem, env(safe-area-inset-bottom, 0px));
}

.wc-shell-footer--public-capability {
    flex: 0 0 auto;
}

.wc-shell-footer--public-capability .wc-shell-footer-container {
    padding-top: 0.75rem !important;
    padding-bottom: 0.85rem !important;
}

/* Mobile bottom navigation bar */
:root {
    --wc-mobile-bottom-nav-height: 84px;
    --wc-mobile-bottom-nav-reserved-space: calc(var(--wc-mobile-bottom-nav-height) + env(safe-area-inset-bottom, 0px));
}

/* The tab bar is for phones only; from 600px the side rail navigates, so nothing reserves room. */
@media (min-width: 600px) {
    :root {
        --wc-mobile-bottom-nav-height: 0px;
        --wc-mobile-bottom-nav-reserved-space: 0px;
    }
}

@media (max-width: 959.98px) {
    .wc-shell-layout--office .mud-main-content {
        margin-bottom: var(--wc-mobile-bottom-nav-reserved-space);
        scroll-padding-bottom: var(--wc-mobile-bottom-nav-reserved-space);
    }
}

.mobile-bottom-nav {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 1050;
    box-sizing: border-box;
    height: var(--wc-mobile-bottom-nav-reserved-space);
    min-height: var(--wc-mobile-bottom-nav-height);
    background: var(--wc-surface-1, var(--mud-palette-surface));
    border-top: 1px solid var(--wc-border-soft);
    padding-bottom: max(0px, env(safe-area-inset-bottom, 0px));
}

.mobile-bottom-nav-content {
    box-sizing: border-box;
    display: flex;
    justify-content: space-around;
    align-items: center;
    height: 100%;
    padding: 8px 0;
}

.mobile-bottom-nav-item {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 2px;
    flex: 1;
    padding: 4px;
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    text-decoration: none;
    min-height: 44px;
    justify-content: center;
    position: relative;
    transition: color var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

/* The More item is a native button; strip default chrome so it matches the link items. */
button.mobile-bottom-nav-item {
    appearance: none;
    -webkit-appearance: none;
    background: transparent;
    border: 0;
    font: inherit;
    cursor: pointer;
}

.mobile-bottom-nav-item::after {
    content: "";
    position: absolute;
    top: 2px;
    width: 24px;
    height: 3px;
    border-radius: var(--wc-radius-pill);
    background: var(--wc-accent, var(--mud-palette-primary));
    opacity: 0;
    transition: opacity var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

@media (hover: hover) {
    .mobile-bottom-nav-item:hover {
        color: var(--wc-text-strong, var(--mud-palette-text-primary));
    }
}

.mobile-bottom-nav-item.active {
    color: var(--wc-accent-ink, var(--mud-palette-primary));
    background: var(--wc-surface-brand-soft);
    border-radius: var(--wc-control-radius, var(--border-radius-md));
}

.mobile-bottom-nav-item.active::after {
    opacity: 1;
}

.mobile-bottom-nav-item:focus-visible {
    outline: var(--wc-focus-outline);
    outline-offset: -2px;
    border-radius: var(--wc-radius-md, 8px);
}

.mobile-bottom-nav-label {
    font-size: var(--wc-type-caption-size);
    font-weight: 500;
    line-height: 1.15;
    max-width: 100%;
    overflow-wrap: anywhere;
    text-align: center;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* More item: aggregate operational-alert badge over the icon. */
.mobile-bottom-nav-icon-wrap {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}

.mobile-bottom-nav-badge {
    position: absolute;
    bottom: calc(100% - 8px);
    left: calc(100% - 8px);
    box-sizing: border-box;
    min-width: 1rem;
    height: 1rem;
    padding: 0 0.25rem;
    border-radius: var(--wc-radius-pill);
    background: rgba(var(--wc-info-rgb), 1);
    color: var(--wc-on-accent, var(--mud-palette-info-text));
    font-size: var(--wc-type-meta-size);
    font-weight: 700;
    line-height: 1rem;
    text-align: center;
    pointer-events: none;
}

.mobile-bottom-nav-badge--critical {
    background: rgba(var(--wc-warning-rgb), 1);
    color: var(--wc-on-accent, var(--mud-palette-warning-text));
}

/* Shared mobile action surface contract. Bottom nav, FABs, and bottom sheets
   keep feature-specific geometry, but share safe-area and target-size defaults. */
.wc-mobile-action-surface {
    --wc-mobile-action-safe-bottom: env(safe-area-inset-bottom, 0px);
    --wc-mobile-action-min-target: 44px;
    --wc-mobile-action-gap: var(--wc-space-2, 8px);
}

.wc-mobile-action-surface :is(button, a, .mud-button-root, .mud-icon-button) {
    min-width: var(--wc-mobile-action-min-target);
    min-height: var(--wc-mobile-action-min-target);
}

.wc-mobile-action-surface--sheet {
    padding-bottom: max(var(--wc-space-4, 16px), var(--wc-mobile-action-safe-bottom));
}

/* Dark-mode tertiary actions: the base dark accent is tuned down so fills
   don't glow, which leaves a primary text button near 3:1 on dark surfaces.
   --wc-accent-ink is the accent-as-text owner; .mud-*-text typography and links
   are handled once in app.shared-controls.css. */
.wc-theme-dark .mud-button-root.mud-button-text.mud-button-text-primary {
    color: var(--wc-accent-ink);
}

/* ===== WorkCita.Client/wwwroot/css/app.shell.support.css ===== */
/*
 * WorkCita global stylesheet module: app.shell.support.css
 * Ownership: skip links, shell content helpers, subscription chrome, and global search.
 * Theme: universal --wc-* tokens only.
 * Load: after app.shell.navigation.css; before app.mudblazor.css.
 */

/* Skip to main content link - visually hidden but accessible for screen readers */
.skip-to-main-content {
    position: absolute;
    left: -9999px;
    z-index: 999;
    padding: 0.5rem 1rem;
    background-color: var(--wc-accent, var(--mud-palette-primary));
    color: var(--wc-on-accent, var(--mud-palette-primary-text));
    text-decoration: none;
}

.skip-to-main-content:focus {
    left: 0;
    top: 0;
}

/* Unstyled links for clickable cards/rows (preserve surrounding typography/layout) */
.wc-link-unstyled,
.wc-link-unstyled:hover,
.wc-link-unstyled:focus,
.wc-link-unstyled:active {
    color: inherit;
    text-decoration: none;
}

.content {
    padding-top: 1.1rem;
}

#blazor-error-ui {
    background: var(--wc-tone-warning-soft-bg, var(--wc-surface-2));
    border-top: 1px solid var(--wc-tone-warning-soft-border, var(--wc-border-soft));
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(var(--wc-shadow-rgb), 0.2);
    color: var(--wc-tone-warning-soft-fg, var(--wc-text-strong));
    display: none;
    left: 0;
    padding: 0.6rem 3.25rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
}

#blazor-error-ui #blazor-error-message {
    margin: 0;
    display: inline;
    font-family: var(--wc-font-display);
}

#blazor-error-ui .dismiss,
#blazor-error-ui button.dismiss {
    align-items: center;
    appearance: none;
    background: var(--wc-surface-1);
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--border-radius-md);
    color: var(--wc-text-strong);
    cursor: pointer;
    display: inline-flex;
    font: inherit;
    font-size: var(--wc-type-title-size);
    justify-content: center;
    line-height: 1;
    min-height: 44px;
    min-width: 44px;
    padding: 0;
    position: absolute;
    right: 0.5rem;
    text-decoration: none;
    top: 50%;
    transform: translateY(-50%);
}

#blazor-error-ui .dismiss:hover,
#blazor-error-ui button.dismiss:hover {
    background: var(--wc-surface-hover, var(--wc-surface-2));
    border-color: var(--wc-tone-warning-soft-border);
}

#blazor-error-ui .dismiss:focus-visible,
#blazor-error-ui button.dismiss:focus-visible {
    outline: var(--wc-focus-outline);
    outline-offset: 2px;
    box-shadow: var(--wc-focus-ring);
}

/* Touch-first devices get the 44px reload target at any width; see app.shared-controls.css. */
@media (max-width: 959.98px), (pointer: coarse) {
    #blazor-error-ui #blazor-error-reload {
        display: inline-flex;
        align-items: center;
        min-height: 44px;
        padding-inline: 8px;
    }
}

.blazor-error-boundary {
    background: rgba(var(--wc-error-rgb), 1) url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem;
    padding: 1rem 1rem 1rem 3.7rem;
    color: var(--wc-on-accent, var(--mud-palette-error-text));
}

.blazor-error-boundary::after {
    content: "An error has occurred."
}

.loading-progress {
    position: relative;
    display: block;
    width: 8rem;
    height: 8rem;
    margin: 20vh auto 1rem auto;
}

.loading-progress circle {
    fill: none;
    stroke: var(--wc-border-soft, var(--mud-palette-lines-default));
    stroke-width: 0.6rem;
    transform-origin: 50% 50%;
    transform: rotate(-90deg);
}

.loading-progress circle:last-child {
    stroke: var(--wc-accent, var(--mud-palette-primary));
    stroke-dasharray: calc(3.141 * var(--blazor-load-percentage, 0%) * 0.8), 500%;
    transition: stroke-dasharray var(--wc-motion-fast) var(--wc-ease-out-quart);
}

.loading-progress-text {
    position: absolute;
    text-align: center;
    font-family: var(--wc-font-display);
    font-weight: bold;
    inset: calc(20vh + 3.25rem) 0 auto 0.2rem;
}

.loading-progress-text:after {
    content: var(--blazor-load-percentage-text, "Loading");
}

.app-loading-container {
    min-height: 100vh;
    min-height: 100dvh;
}

.company-selector-option {
    width: 100%;
}

.invoice-payment-installment-row {
    border: 1px solid var(--wc-border-subtle, var(--mud-palette-lines-default));
    border-radius: var(--wc-radius-sm, 6px);
    background: var(--wc-surface-1, var(--mud-palette-surface));
    padding: var(--wc-space-3, 12px);
}

.invoice-payment-installment-action {
    margin-top: 4px;
}

.photo-markup-dialog {
    max-width: 95vw;
}

.photo-markup-toolbar {
    align-items: center;
    flex-wrap: wrap;
    margin-bottom: var(--wc-space-3, 12px);
}

.photo-markup-canvas-shell {
    width: min(100%, 800px);
    max-height: min(70vh, 600px);
    overflow: hidden;
    margin-inline: auto;
    border: 1px solid var(--wc-border-subtle, var(--mud-palette-lines-default));
    background: var(--wc-surface-1, var(--mud-palette-surface));
}

.photo-markup-canvas-shell .canvas-container,
.photo-markup-canvas-shell .lower-canvas,
.photo-markup-canvas-shell .upper-canvas,
.photo-markup-canvas {
    display: block;
    max-width: 100%;
    margin-inline: auto;
    touch-action: none;
}

/* App-bar global record search (G8): keep the lookup compact in the shell. */
.wc-shell-global-search {
    width: 320px;
    max-width: 34vw;
    margin-right: 8px;
}

.wc-shell-global-search .mud-input-control-input-container .mud-input {
    background: var(--wc-surface-1, var(--mud-palette-surface));
}

/* Anchor for the keyboard-shortcut hint overlayed on the search box. */
.wc-shell-global-search-wrap {
    position: relative;
    display: inline-flex;
    align-items: center;
}

/* Ctrl+K / Cmd+K keycap hint: decorative overlay, never intercepts clicks. */
.wc-shell-global-search-hint {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    inset-inline-end: 44px;
    display: inline-flex;
    align-items: center;
    gap: 2px;
    pointer-events: none;
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
}

.wc-shell-global-search-hint kbd {
    font-family: var(--wc-type-meta-family);
    font-size: var(--wc-type-meta-size);
    font-weight: var(--wc-type-meta-weight);
    line-height: var(--wc-type-meta-leading);
    padding: 3px 5px;
    border: 1px solid var(--wc-border-subtle, var(--mud-palette-lines-default));
    border-bottom-width: 2px;
    border-radius: var(--border-radius-sm, 6px);
    background: var(--wc-surface-2, var(--mud-palette-background-gray));
    color: inherit;
}

/* Keep the idle placeholder clear of the keycaps; normal padding returns on focus. */
.wc-shell-global-search-wrap:not(:focus-within) .wc-shell-global-search .mud-input > input.mud-input-slot {
    padding-inline-end: 92px;
    text-overflow: ellipsis;
}

/* The hint is an idle affordance: hide it while interacting or once text exists. */
.wc-shell-global-search-wrap:focus-within .wc-shell-global-search-hint,
.wc-shell-global-search-wrap:has(input:not(:placeholder-shown)) .wc-shell-global-search-hint {
    display: none;
}

/* Touch-first pointers get no keyboard hint. */
@media (hover: none), (pointer: coarse) {
    .wc-shell-global-search-hint {
        display: none;
    }
}

/* ===== WorkCita.Client/wwwroot/css/app.mudblazor.css ===== */
/*
 * WorkCita global stylesheet module: app.mudblazor.css
 * Ownership layer: Mud bridge.
 * Ownership: MudBlazor component overflow fixes and semantic Mud background tint utilities.
 * Theme: universal --wc-* tokens only; not a separate surface theme.
 * Parent: GitHub #404 mechanical CSS ownership split (no visual redesign).
 * Load: after app.shell.support.css; before app.shared-primitives.css (index.html).
 */


/* =============================================================================
   Text Overflow Prevention (Mobile Responsive)
   ============================================================================= */

/*
 * Prevent long unbreakable strings (emails, URLs, addresses) from causing
 * horizontal overflow on mobile devices.
 *
 * Applied automatically to all MudText components via CSS specificity.
 * This ensures emails like "mitchell.l.chesne@gmail.com" and long addresses
 * wrap properly instead of causing horizontal scrolling.
 *
 * Properties explained:
 * - overflow-wrap: anywhere     ? Break long strings only when needed to prevent overflow
 * - word-break: normal          ? Avoid mid-word splits in ordinary labels and copy
 * - word-wrap: break-word      ? Legacy property for older browsers
 * - hyphens: none              ? Avoid inserted hyphens in product UI labels
 * - max-width: 100%            ? Never exceed parent container width
 * - overflow: visible          ? Preserve glyph ascenders/descenders while text wraps
 */

.mud-typography,
.mud-typography-body1,
.mud-typography-body2,
.mud-typography-caption,
.mud-typography-subtitle1,
.mud-typography-subtitle2 {
    overflow-wrap: anywhere;
    word-break: normal;
    word-wrap: break-word;
    hyphens: none;
    max-width: 100%;
    overflow: visible;
}

/* Text truncation with ellipsis for DataGrid columns */
.mud-typography-nowrap {
    white-space: nowrap !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    max-width: 100%;
}

/* Specific fix for long text in grid columns on mobile */
.mud-grid-item .mud-typography {
    overflow-wrap: anywhere;
    word-break: normal;
}

/* Ensure tables on mobile don't overflow with long text in cells */
.mud-table-cell .mud-typography {
    overflow-wrap: anywhere;
    word-break: normal;
    max-width: 100%;
}

/* Ensure DataGrid rows don't overflow parent container */
.mud-table-row {
    max-width: 100%;
}

/* WorkCita table wrappers own min-width, scroll, and responsive row behavior. */
.mud-table-root {
    table-layout: auto;
    width: 100%;
}

/* WorkCita uses sentence-case product controls across office, portal, auth,
   public, and platform surfaces. Route CSS should not redefine button text. */
.mud-button-root {
    text-transform: none;
    letter-spacing: 0;
    font-weight: 600;
}

/* Tabs follow the same sentence case; Mud capitalises them ("STOCK ON HAND"). */
.mud-tab {
    text-transform: none;
    letter-spacing: 0;
}

/* A neutral outlined button borders like the outlined field beside it. MudBlazor
   strokes it in full text ink, which read as a heavy black box next to the soft
   field borders and the accent-outlined buttons. Hover darkens it the way a
   field's border does. */
.mud-button-outlined.mud-button-outlined-default {
    border-color: var(--mud-palette-lines-inputs);
}

.mud-button-outlined.mud-button-outlined-default:hover {
    border-color: var(--mud-palette-text-primary);
}

/* Keep remaining vendor alerts visually aligned with WcNoticeBand while
   preserving MudBlazor alert semantics in legacy dialogs and provider panels. */
.mud-alert {
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    box-shadow: none;
}

.mud-alert-outlined {
    border-color: var(--wc-border-soft, var(--mud-palette-divider));
    background: var(--wc-surface-1, var(--mud-palette-surface));
}

.mud-alert-filled {
    box-shadow: none;
}

.mud-alert-message {
    letter-spacing: 0;
}

/* Dialog content text overflow prevention */
.mud-dialog-content .mud-typography {
    overflow-wrap: anywhere;
    word-break: normal;
    hyphens: none;
}

.dialog-action-buttons__full-width,
.dialog-action-buttons__mobile-stack {
    width: 100%;
}

.confirm-action-dialog {
    width: min(520px, calc(100vw - 48px));
}

@media (max-width: 599.98px) {
    .confirm-action-dialog {
        width: calc(100vw - 32px);
        max-width: calc(100vw - 32px);
    }
}

.confirm-action-dialog__preview {
    padding: 12px;
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--border-radius-md);
    background: var(--wc-surface-2);
}

@media (max-width: 599.98px) {
    .document-action-dialog .mud-dialog-content {
        max-height: calc(100dvh - 190px);
        overflow-y: auto;
        padding-bottom: var(--wc-space-3, 12px);
    }

    .document-action-dialog .mud-dialog-actions {
        padding-top: var(--wc-space-2, 8px);
        background: var(--wc-surface-1, var(--mud-palette-surface));
    }

    .workcita-large-dialog .mud-dialog-content {
        max-height: calc(100dvh - 190px);
        overflow-y: auto;
        padding-bottom: var(--wc-space-3, 12px);
    }

    .workcita-large-dialog .mud-dialog-actions {
        position: sticky;
        bottom: 0;
        z-index: 1;
        padding-top: var(--wc-space-2, 8px);
        background: var(--wc-surface-1, var(--mud-palette-surface));
    }
}

/* =============================================================================
   End Text Overflow Prevention
   ============================================================================= */

/* =============================================================================
   Saved views menu panel (OfficeSavedViewsMenu)
   ============================================================================= */

/* Bound the popover panel so the inline name field has room without letting
   long view names stretch the menu; names truncate with ellipsis instead. */
.wc-saved-views-menu {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
}

.wc-saved-views-menu__button {
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
    text-transform: none;
}

.wc-saved-views-menu__label {
    font-size: var(--wc-type-body-compact-size);
    line-height: 1.4;
    white-space: nowrap;
}

.wc-saved-views-panel {
    min-width: 250px;
    max-width: 340px;
}

.wc-saved-views-panel .wc-saved-views-apply {
    min-width: 0;
}

.wc-saved-views-panel .wc-saved-views-apply .mud-button-label {
    display: block;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

@media (max-width: 599.98px) {
    .wc-saved-views-menu__label {
        display: none;
    }

    .wc-saved-views-menu__button .mud-button-icon-start {
        margin-inline: 0;
    }
}

/* Mud's invisible notch label must not add scroll overflow while its width is zero. */
.mud-input-outlined-border > legend {
    overflow: hidden;
    white-space: nowrap;
}

/* Inside a form, outlined labels stay floated whether or not the field holds a value. Mud floats
   a label only for filled, focused, adorned, or placeholder fields, so one form mixed two label
   states ("Phone" above the border, "First name" inside it). Same transform and notch as Mud's
   own shrink state, applied to text, select, numeric, and date inputs alike. */
.mud-form .mud-input.mud-input-outlined > .mud-input-outlined-border legend {
    width: auto;
    padding: 0 5px;
}

.mud-form .mud-input.mud-input-outlined ~ label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-outlined {
    transform: translate(14px, -6px) scale(0.75);
    transform-origin: top left;
    max-width: calc((100% - 14px) / 0.75);
}

.mud-application-layout-rtl .mud-form .mud-input.mud-input-outlined ~ label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-outlined {
    transform: translate(-14px, -6px) scale(0.75);
    transform-origin: top right;
}

/* ===== WorkCita.Client/wwwroot/css/app.shared-primitives.css ===== */
/*
 * WorkCita global stylesheet module: app.shared-primitives.css
 * Ownership layer: shared primitives.
 * Ownership: anonymous-safe accessibility, disclosure, header actions,
 *   pagination, navigation, and segmented controls.
 * Theme: universal --wc-* tokens only; not a separate surface theme.
 * Parent: GitHub #404 mechanical CSS ownership split (no visual redesign).
 * Load: after app.mudblazor.css; before app.shared-controls.css (index.html).
 */


/* =============================================================================
   Screen Reader Utility
   ============================================================================= */

.wc-sr-only {
    position: absolute;
    /* Pin to the containing block's origin: without this the span keeps its static
       inline position, and sr-only text inside horizontally scrolled content (money
       cells in wide tables) extends ancestors' scrollWidth, tripping page-level
       overflow checks. Clipped to zero, so placement is invisible either way. */
    left: 0;
    top: 0;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* =============================================================================
   Shared Disclosure Panels
   ============================================================================= */

.wc-disclosure-list {
    display: flex;
    flex-direction: column;
    gap: var(--wc-space-2, 8px);
}

.wc-disclosure-panel {
    overflow: hidden;
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    box-shadow: none;
}

.wc-disclosure-panel__header {
    display: flex;
    width: 100%;
    min-height: 44px;
    align-items: center;
    justify-content: space-between;
    gap: var(--wc-space-3, 12px);
    padding: var(--wc-space-3, 12px) var(--wc-card-padding-inline, 16px);
    border: 0;
    background: transparent;
    color: var(--wc-text-primary, var(--mud-palette-text-primary));
    font: inherit;
    text-align: left;
    cursor: pointer;
}

.wc-disclosure-panel__header:hover {
    background: rgba(var(--wc-accent-rgb), 0.045);
}

.wc-disclosure-panel__header:focus-visible {
    outline: var(--wc-focus-outline);
    outline-offset: -2px;
    box-shadow: var(--wc-focus-ring);
}

.wc-disclosure-panel__header-main {
    display: inline-flex;
    min-width: 0;
    align-items: center;
    gap: var(--wc-space-2, 8px);
}

.wc-disclosure-panel__title {
    min-width: 0;
    overflow-wrap: anywhere;
    font-weight: 600;
    line-height: 1.3;
}

.wc-disclosure-panel__chevron {
    flex: 0 0 auto;
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    transition: transform var(--wc-motion-base) var(--wc-ease-out-quart);
}

.wc-disclosure-panel__chevron--open {
    transform: rotate(180deg);
}

.wc-disclosure-panel__body {
    padding: 0 var(--wc-card-padding-inline, 16px) var(--wc-card-padding-block, 16px);
}

/* =============================================================================
   Unified Page Header (WcPageHeader)
   Shared structure + token-driven title. Per-surface chrome (padding,
   background, ownership line) stays on the command-center-header* /
   portal-page-header* / auth-form-card* compatibility classes the component
   also emits, so feature overrides and E2E selectors keep binding.
   ============================================================================= */

.wc-page-header {
    display: flex;
    flex-direction: column;
    gap: var(--space-2);
}

.wc-page-header__bar {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--space-4);
    min-width: 0;
}

.wc-page-header__copy {
    display: flex;
    flex-direction: column;
    gap: var(--space-1);
    min-width: 0;
    flex: 1 1 18rem;
}

.wc-page-header__title-line {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--space-2);
    min-width: 0;
}

.wc-page-header__title {
    margin: 0;
    font-family: var(--wc-type-display-family);
    font-size: var(--wc-page-title-size);
    font-weight: var(--wc-page-title-weight);
    line-height: var(--wc-page-title-leading);
    letter-spacing: 0;
    color: var(--wc-page-title-ink);
}

.wc-page-header__subtitle {
    margin: 0;
    font-family: var(--wc-type-body-family);
    font-size: var(--wc-type-body-size);
    line-height: var(--wc-type-body-leading);
}

/* Meta line: subtitle + status chips share one wrapping row directly under the
   title, so status reads as page metadata instead of a stranded band below the
   bar. Applies to every office and portal header at once. */
.wc-page-header__meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    column-gap: var(--space-3);
    row-gap: var(--space-1);
    min-width: 0;
}

.wc-page-header__meta .wc-page-header__subtitle,
.wc-page-header__meta .wc-page-header__status {
    margin: 0;
}

.wc-page-header__actions,
.wc-page-header__status,
.wc-page-header__filters {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--space-2);
    min-width: 0;
}

.wc-page-header__actions {
    position: relative;
    z-index: 1;
    flex: 0 1 auto;
    justify-content: flex-end;
}

/* Header status reads as quiet metadata: a small semantic dot plus a compact
   label, never a loud outlined pill band. The dot inherits the chip's state
   color, so status stays non-color-only (dot + text). */
.wc-page-header__status .wc-chip {
    display: inline-flex;
    align-items: center;
    min-height: 0;
    height: auto;
    margin: 0;
    padding: 0;
    border: 0;
    background: transparent;
    font-size: var(--wc-type-body-compact-size);
    font-weight: 500;
}

.wc-page-header__status .wc-chip .mud-chip-content {
    padding: 0;
}

.wc-page-header__status .wc-chip::before {
    content: "";
    flex: 0 0 auto;
    width: 7px;
    height: 7px;
    margin-right: 7px;
    border-radius: 50%;
    background: currentColor;
}

/* The dot is the header's status marker. A chip's own state icon beside it doubled
   the marker (dot, people icon, "In progress"). */
.wc-page-header__status .wc-chip .mud-chip-icon {
    display: none;
}

/* -----------------------------------------------------------------------------
   WcHeaderActions - the owned page-header action zone.
   One Filled/Primary command button leads (btn-command-primary); secondaries are
   quiet ghosts that collapse into an overflow menu past the threshold; Back is a
   ghost with a leading arrow. Pages no longer hand-roll header button styling.
   ----------------------------------------------------------------------------- */
.wc-header-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-end;
    gap: var(--space-2, 8px);
}

/* Every header action shares ONE height so primary, secondary, back, and overflow
   align on a single baseline regardless of variant padding (the primary pill keeps
   its wide horizontal padding but drops its taller vertical padding to match). */
.wc-header-actions .wc-header-action,
.wc-header-actions .mud-menu.wc-header-action > .mud-menu-button-activator,
.wc-header-actions .mud-menu.wc-header-action > .mud-menu-icon-button-activator {
    height: 44px;
    min-height: 44px;
}

.wc-header-actions .wc-header-action.btn-command-primary:not(.mud-menu),
.wc-header-actions .mud-menu.wc-header-action.btn-command-primary > .mud-menu-button-activator {
    padding-block: 0;
}

.wc-header-actions .wc-header-action--secondary,
.wc-header-actions .wc-header-action--back,
.wc-header-actions .wc-header-action--overflow,
.wc-header-actions .mud-menu.wc-header-action--overflow > .mud-menu-icon-button-activator {
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
}

.wc-header-actions .wc-header-action--secondary:hover,
.wc-header-actions .wc-header-action--back:hover,
.wc-header-actions .wc-header-action--overflow:not(.mud-menu):hover,
.wc-header-actions .mud-menu.wc-header-action--overflow > .mud-menu-icon-button-activator:hover {
    background: var(--wc-surface-2, rgba(15, 23, 42, 0.05));
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
}

/* The action zone owns the focus ring for everything placed in it, the same way
   .wc-section-card-actions does. Controls relocated here (a saved-views menu, a
   page's leading content) otherwise land with no indicator at all: MudBlazor
   removes the UA outline and there is no app-wide button:focus-visible fallback. */
.wc-header-actions :is(a, button, .mud-button-root, .mud-icon-button):focus-visible {
    outline: none;
    box-shadow: var(--wc-focus-ring);
}

@media (max-width: 599.98px) {
    /* Span the action zone so the buttons right-align to the edge like desktop, then
       wrap as a compact group when they do not all fit. Uniform at every width and
       independent of tooltip/menu wrappers (no per-variant flex special-casing). */
    .wc-header-actions {
        width: 100%;
    }
}

.wc-page-header--hero .wc-page-header__title {
    font-size: var(--wc-page-title-size-hero);
}

.wc-page-header--centered {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: var(--space-2);
}

.wc-page-header__copy--centered {
    flex: 0 1 auto;
    align-items: center;
    gap: var(--space-1);
}

/* Contextual Help: a compact icon pinned to the header's top-right corner. It is
   small and out of the action flow, so it never strands on a list page (which has
   no breadcrumb) nor orphans below a full-width mobile primary action. */
.wc-page-header__utility {
    position: absolute;
    top: var(--space-3);
    right: var(--space-3);
    z-index: 3;
    display: flex;
    align-items: center;
}

.wc-page-header--has-utility .wc-page-header__title-line {
    padding-right: 48px;
}

@media (min-width: 600px) {
    .wc-page-header--has-utility .wc-page-header__bar {
        padding-right: 48px;
    }

    .wc-page-header--has-utility .wc-page-header__title-line {
        padding-right: 0;
    }
}

/* =============================================================================
   Action Signal Lists
   Compact action rows for operational attention surfaces. These preserve real
   link semantics and provide a shared vocabulary for dashboard, reports, and
   schedule triage without introducing page-local card systems.
   ============================================================================= */

.wc-action-signal-list {
    display: flex;
    flex-direction: column;
    gap: 0;
    min-width: 0;
    margin: 0;
    padding: 0;
    list-style: none;
}

.wc-action-signal-list__item {
    min-width: 0;
    /* Query container: a narrow row (Schedule sidebar, aside rails, mobile) reflows
       its action onto its own line below the body instead of cramping the title. */
    container-type: inline-size;
}

.wc-action-signal-row {
    --wc-action-signal-soft-bg: var(--wc-tone-primary-soft-bg);
    --wc-action-signal-soft-fg: var(--wc-tone-primary-soft-fg);
    --wc-action-signal-soft-border: var(--wc-tone-primary-soft-border);
    display: flex;
    align-items: center;
    gap: var(--wc-space-3, 12px);
    min-width: 0;
    min-height: 66px;
    padding: var(--wc-space-3, 12px);
    border: 0;
    border-bottom: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: 0;
    background: transparent;
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    text-decoration: none;
    box-shadow: none;
    transition:
        background-color var(--wc-motion-base) var(--wc-ease-out-quart),
        border-color var(--wc-motion-base) var(--wc-ease-out-quart);
}

button.wc-action-signal-row {
    width: 100%;
    font: inherit;
    text-align: left;
    cursor: pointer;
}

a.wc-action-signal-row:hover,
button.wc-action-signal-row:hover:not(:disabled) {
    background: var(--wc-surface-2, var(--mud-palette-background-gray));
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    text-decoration: none;
}

a.wc-action-signal-row:focus-visible {
    outline: 2px solid var(--wc-accent, var(--mud-palette-primary));
    outline-offset: -2px;
}

button.wc-action-signal-row:focus-visible {
    outline: 2px solid var(--wc-accent, var(--mud-palette-primary));
    outline-offset: -2px;
}

.wc-action-signal-row--disabled {
    cursor: default;
    opacity: 0.62;
}

.wc-action-signal-row--resolved {
    --wc-action-signal-soft-bg: var(--wc-tone-success-soft-bg);
    --wc-action-signal-soft-fg: var(--wc-tone-success-soft-fg);
    --wc-action-signal-soft-border: var(--wc-tone-success-soft-border);
}

.wc-action-signal-row__lead {
    display: flex;
    align-items: center;
    min-width: 44px;
    flex: 0 0 auto;
}

.wc-action-signal-row__lead--prominent {
    min-width: 88px;
}

.wc-action-signal-row__lead-value {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 36px;
    width: auto;
    min-height: 36px;
    padding-inline: var(--wc-space-1, 4px);
    white-space: nowrap;
    background: transparent;
    color: var(--wc-action-signal-soft-fg);
    font-size: var(--wc-type-body-emphasis-size);
    font-weight: 700;
    line-height: 1;
}

.wc-action-signal-row__lead-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 36px;
    width: 36px;
    height: 36px;
    background: transparent;
    color: var(--wc-action-signal-soft-fg);
}

/* Prominent leads are headline money values, so they take the money posture:
   ink rather than the row's tone colour, the display family, tabular figures.
   Urgency is carried by the row's icon and copy, never by the figure. */
.wc-action-signal-row__lead-value--prominent {
    display: inline;
    min-height: 0;
    padding-inline: 0;
    min-width: 0;
    width: auto;
    height: auto;
    border-radius: 0;
    background: transparent;
    font-family: var(--wc-money-family);
    font-size: var(--wc-money-lead-size);
    font-variant-numeric: var(--wc-numeric-figures);
    letter-spacing: var(--wc-money-tracking);
    color: var(--wc-money-ink);
    line-height: 1.1;
}

.wc-action-signal-row__body {
    display: grid;
    flex: 1 1 auto;
    gap: var(--wc-space-1, 4px);
    min-width: 0;
    overflow-wrap: anywhere;
}

.wc-action-signal-row__record {
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-size: var(--wc-type-body-size);
    font-weight: var(--font-bold, 700);
    font-variant-numeric: var(--wc-numeric-identifier-figures);
    line-height: 1.5;
}

.wc-action-signal-row__title {
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-size: var(--wc-type-body-size);
    font-weight: 600;
    line-height: 1.4;
}

.wc-action-signal-row__description {
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-caption-size);
    line-height: 1.5;
}

/* Label + chevron travel together as one group so they can reflow as a unit
   (see the narrow-row container query below). margin-left:auto keeps the group
   right-aligned on the inline (wide) layout. */
.wc-action-signal-row__action {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    flex: 0 0 auto;
    margin-left: auto;
    min-width: 0;
}

.wc-action-signal-row__action-label {
    /* Must NOT shrink: a shrinkable flex item with overflow:hidden gets an
       automatic min-size of 0, so in narrow rows (Reports panels, Schedule
       sidebar) the label was crushed to a sliver ("View" -> "V."). The title
       body (flex: 1 1 auto, min-width: 0) wraps to absorb the squeeze instead.
       Past the max-width a long (often Spanish) label takes a second line rather
       than clipping to "Facturar los trabajos completa…". */
    flex: 0 0 auto;
    max-width: min(12rem, 35vw);
    color: var(--wc-tone-primary-soft-fg, var(--mud-palette-primary));
    font-size: var(--wc-type-caption-size);
    font-weight: 700;
    line-height: 1.2;
    text-align: end;
    overflow-wrap: break-word;
}

.wc-action-signal-row__chevron {
    flex: 0 0 auto;
}

/* Narrow rows can't fit the title and a full action label side by side without
   crushing the title (Schedule sidebar ~185px, aside rails ~273px, mobile cards).
   Reflow the action group onto its own right-aligned line so the body keeps full
   width and every label stays whole. Queries the .wc-action-signal-list__item. */
@container (max-width: 360px) {
    /* Only rows WITH a label need to reflow. A label-less row (chevron only) must
       stay inline -- a lone chevron dropped onto its own line reads as a stray
       glyph. :has() scopes the stack to labelled rows. */
    .wc-action-signal-row:has(.wc-action-signal-row__action-label) {
        flex-wrap: wrap;
        row-gap: 6px;
    }

    .wc-action-signal-row:has(.wc-action-signal-row__action-label) .wc-action-signal-row__action {
        flex-basis: 100%;
        margin-left: 0;
        justify-content: flex-end;
    }

    .wc-action-signal-row__action-label {
        max-width: 100%;
    }
}

.wc-action-signal-row-tone-default {
    --wc-action-signal-soft-bg: var(--wc-tone-default-soft-bg);
    --wc-action-signal-soft-fg: var(--wc-tone-default-soft-fg);
    --wc-action-signal-soft-border: var(--wc-tone-default-soft-border);
}

.wc-action-signal-row-tone-secondary {
    --wc-action-signal-soft-bg: var(--wc-tone-secondary-soft-bg);
    --wc-action-signal-soft-fg: var(--wc-tone-secondary-soft-fg);
    --wc-action-signal-soft-border: var(--wc-tone-secondary-soft-border);
}

.wc-action-signal-row-tone-primary {
    --wc-action-signal-soft-bg: var(--wc-tone-primary-soft-bg);
    --wc-action-signal-soft-fg: var(--wc-tone-primary-soft-fg);
    --wc-action-signal-soft-border: var(--wc-tone-primary-soft-border);
}

.wc-action-signal-row-tone-info {
    --wc-action-signal-soft-bg: var(--wc-tone-info-soft-bg);
    --wc-action-signal-soft-fg: var(--wc-tone-info-soft-fg);
    --wc-action-signal-soft-border: var(--wc-tone-info-soft-border);
}

.wc-action-signal-row-tone-success {
    --wc-action-signal-soft-bg: var(--wc-tone-success-soft-bg);
    --wc-action-signal-soft-fg: var(--wc-tone-success-soft-fg);
    --wc-action-signal-soft-border: var(--wc-tone-success-soft-border);
}

.wc-action-signal-row-tone-warning {
    --wc-action-signal-soft-bg: var(--wc-tone-warning-soft-bg);
    --wc-action-signal-soft-fg: var(--wc-tone-warning-soft-fg);
    --wc-action-signal-soft-border: var(--wc-tone-warning-soft-border);
}

.wc-action-signal-row-tone-error {
    --wc-action-signal-soft-bg: var(--wc-tone-error-soft-bg);
    --wc-action-signal-soft-fg: var(--wc-tone-error-soft-fg);
    --wc-action-signal-soft-border: var(--wc-tone-error-soft-border);
}

@media (max-width: 599.98px) {
    .wc-action-signal-row {
        gap: 12px;
        padding: 12px 14px;
    }

    .wc-action-signal-row__lead--prominent {
        min-width: 72px;
    }

    .wc-action-signal-row__lead-value--prominent {
        font-size: var(--wc-money-lead-size-compact);
    }
}

/* =============================================================================
   Empty States (Engaging Illustrations)
   ============================================================================= */

.empty-state {
    min-height: 280px;
    padding: var(--space-6);
    width: min(100%, 520px);
    margin-inline: auto;
    text-align: center;
}

@media (max-width: 599.98px) {
    .empty-state {
        min-height: 220px;
        padding: var(--space-5);
    }
}

.empty-state-illustration {
    width: 76px;
    height: 76px;
    border-radius: 50%;
    background: var(--wc-surface-2, var(--mud-palette-background-grey));
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    display: flex;
    align-items: center;
    justify-content: center;
}

.empty-state-illustration .mud-icon-root {
    font-size: var(--wc-type-icon-large-size);
}

/* Money-bearing empty states put the figure where the medallion was: the zero is
   the illustration, and it is auditable rather than decorative. Opt-in per state;
   icon-bearing empty states elsewhere are unchanged. */
.empty-state-nil-figure {
    margin: 0;
}

.empty-state-nil-figure .wc-money {
    font-size: var(--wc-type-display-metric-size);
}

.empty-state-title {
    margin-top: var(--space-4);
    font-weight: var(--font-bold);
}

.empty-state-message {
    margin-bottom: var(--space-4);
}

.empty-state-secondary-action {
    margin-top: var(--space-2);
}

.error-alert-retry-button {
    white-space: nowrap;
}

.error-alert {
    background: var(--wc-surface-1, var(--mud-palette-surface)) !important;
    border-color: rgba(var(--wc-error-rgb), 0.28) !important;
    color: var(--wc-text-strong, var(--mud-palette-text-primary)) !important;
}

.error-alert .mud-alert-message {
    width: 100%;
}

.error-alert-retrying-label {
    margin-left: var(--wc-space-2, 8px);
}

@media (max-width: 599.98px) {
    .error-alert .mud-alert-message > .flex-row {
        flex-direction: column !important;
        align-items: stretch !important;
    }

    .error-alert-retry-button {
        width: 100%;
    }
}

/* =============================================================================
   Shared Page State Primitives
   ============================================================================= */

.page-state-shell,
.page-not-authorized-shell {
    min-height: min(720px, calc(100vh - 64px));
    display: grid;
    align-content: center;
}

.page-state-card,
.page-not-authorized-card {
    max-width: 720px;
    margin-inline: auto;
    width: 100%;
}

.page-state-content,
.page-not-authorized-content {
    padding: clamp(24px, 5vw, 48px);
}

.page-state-icon-shell,
.page-not-authorized-icon-shell {
    padding: 12px;
    border-radius: var(--wc-radius-pill);
}

.page-state-icon-shell--error,
.page-not-authorized-icon-shell {
    background: var(--wc-tone-error-soft-bg);
}

.page-state-icon-shell--info {
    background: var(--wc-tone-info-soft-bg);
}

.page-state-title {
    line-height: 1.12;
    font-weight: var(--wc-page-title-weight);
    color: var(--wc-page-title-ink);
}

.page-state-copy,
.page-not-authorized-copy,
.page-not-authorized-actions {
    max-width: 520px;
}

.page-state-actions {
    width: 100%;
}

.page-state-actions .mud-button-root {
    min-width: 0;
    min-height: 44px;
}

@media (max-width: 599.98px) {
    .page-state-content,
    .page-not-authorized-content {
        padding: 22px 18px;
    }

    .page-state-title {
        font-size: var(--wc-type-title-size);
    }

    .page-state-actions {
        flex-direction: column !important;
        align-items: stretch !important;
    }

    .page-state-actions .mud-button-root {
        width: 100%;
    }
}

/* =============================================================================
   Shared Command Center Background Primitive
   ============================================================================= */

/* Office route wrapper. This used to paint a tinted header band through a
   ::before layer; the band ran to a fixed height across content unrelated to
   where the header actually ends, so it was suppressed globally in
   app.office.css and headers now sit on the plain canvas. The band and its
   suppression are both removed here — what the class still owns is the page
   field and horizontal overflow containment. */
.command-center-bg {
    position: relative;
    overflow-x: hidden;
    background: var(--wc-page-background, var(--mud-palette-background));
}

/* =============================================================================
   Shared Segmented Control
   ============================================================================= */

.wc-segmented-control {
    display: flex;
    flex-wrap: wrap;
    gap: 4px;
    width: fit-content;
    max-width: 100%;
    padding: 4px;
    border: 1px solid var(--wc-data-grid-border, var(--wc-border-soft, var(--mud-palette-divider)));
    border-radius: var(--wc-control-radius, var(--border-radius-md));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    box-shadow: none;
}

.wc-segmented-control--equal {
    display: grid;
    grid-template-columns: repeat(var(--wc-segmented-control-columns, 4), minmax(0, 1fr));
    width: 100%;
}

/* Content-sized pills move to a new row whole; a single pill wider than the control wraps inside. */
:where(.wc-segmented-control:not(.wc-segmented-control--equal)) > .wc-segmented-control__option {
    flex: 0 0 auto;
    max-width: 100%;
}

.wc-segmented-control__option {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--wc-space-1, 4px);
    min-height: 44px;
    min-width: 0;
    padding: 8px 14px;
    border: 1px solid transparent;
    border-radius: calc(var(--wc-control-radius, var(--border-radius-md)) - 2px);
    background: transparent;
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font: inherit;
    font-size: var(--wc-type-body-size);
    font-weight: 700;
    line-height: 1.2;
    text-align: center;
    /* Localized labels (Spanish runs ~30% longer) take a second line rather than clipping. */
    white-space: normal;
    overflow-wrap: break-word;
    cursor: pointer;
    transition: background-color var(--wc-motion-feedback) var(--wc-ease-out-quart),
        border-color var(--wc-motion-feedback) var(--wc-ease-out-quart),
        color var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

.wc-segmented-control__option:hover:not(:disabled):not(.is-active) {
    background: var(--wc-surface-hover, rgba(var(--wc-accent-rgb), 0.05));
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
}

.wc-segmented-control__option.is-active {
    background: var(--wc-accent, var(--mud-palette-primary));
    border-color: var(--wc-accent, var(--mud-palette-primary));
    color: var(--wc-on-accent, var(--mud-palette-primary-text));
    box-shadow: none;
}

.wc-segmented-control__option:focus-visible {
    outline: none;
    box-shadow: var(--wc-focus-ring);
}

.wc-segmented-control__option:disabled {
    cursor: default;
    opacity: 0.64;
}

.wc-segmented-control__label {
    min-width: 0;
}

.wc-segmented-control__count {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 1.375rem;
    min-height: 1.375rem;
    padding-inline: 0.375rem;
    border-radius: var(--wc-radius-pill, 999px);
    background: var(--wc-tone-default-soft-bg);
    color: var(--wc-tone-default-soft-fg);
    font-size: var(--wc-type-caption-size);
    font-weight: var(--font-bold);
    line-height: 1;
    font-variant-numeric: var(--wc-numeric-figures);
}

.wc-segmented-control__option.is-active .wc-segmented-control__count {
    background: rgba(var(--wc-surface-1-rgb), 0.18);
    color: var(--wc-on-accent, var(--mud-palette-primary-text));
}

.wc-segmented-control__count--primary {
    background: var(--wc-tone-primary-soft-bg);
    color: var(--wc-tone-primary-soft-fg);
}

.wc-segmented-control__count--info {
    background: var(--wc-tone-info-soft-bg);
    color: var(--wc-tone-info-soft-fg);
}

.wc-segmented-control__count--success {
    background: var(--wc-tone-success-soft-bg);
    color: var(--wc-tone-success-soft-fg);
}

.wc-segmented-control__count--warning {
    background: var(--wc-tone-warning-soft-bg);
    color: var(--wc-tone-warning-soft-fg);
}

.wc-segmented-control__count--error {
    background: var(--wc-tone-error-soft-bg);
    color: var(--wc-tone-error-soft-fg);
}

@media (max-width: 599.98px) {
    .wc-segmented-control {
        width: 100%;
    }

    .wc-segmented-control__option {
        padding-inline: 10px;
    }
}

/* ===== WorkCita.Client/wwwroot/css/app.shared-controls.css ===== */
/*
 * WorkCita global stylesheet module: app.shared-controls.css
 * Ownership: shared inline surfaces, chips, utilities, buttons, meters, and form controls.
 * Theme: universal --wc-* tokens only.
 * Load: after app.shared-primitives.css; before app.shared-surfaces.css.
 */

/* =============================================================================
   Shared Inline Surface
   ============================================================================= */

.wc-inline-surface {
    min-width: 0;
    border: 1px solid var(--wc-data-grid-border, var(--wc-border-soft, var(--mud-palette-divider)));
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: transparent;
    box-shadow: none;
}

/* =============================================================================
   Shared Chip Utilities
   ============================================================================= */

.wc-chip {
    width: fit-content;
    max-width: 100%;
    min-height: 24px;
    margin: 0;
    padding-inline: 8px;
    font-weight: 600;
    letter-spacing: 0;
    border-width: 1px;
    line-height: 1.15;
}

/* Chips carry the label role (13px). MudBlazor sets small chips, which most status
   chips are, to its own 12px. Table lanes keep 12px (app.index-grid.table.css). */
.wc-chip.mud-chip-size-small {
    font-size: var(--wc-type-label-size);
}

/*
 * MudBlazor's Secondary color historically carries muted supporting copy in
 * WorkCita. Keep that typography contract neutral while allowing secondary
 * controls, chips, avatars, and workflow tones to use operational teal.
 */
.mud-typography.mud-secondary-text,
.mud-link.mud-secondary-text {
    color: var(--mud-palette-text-secondary) !important;
}

/*
 * MudBlazor's semantic Color values are FILL colors, and .mud-*-text paints them
 * straight onto a surface as ink. That is fine in light mode, but the dark palette
 * deliberately desaturates its fills so they do not glow, which lands them at
 * 3.08-3.39:1 as text - under AA. The --wc-tone-*-soft-fg tokens are the ink half
 * of the same semantic pair and measure 7.8-11.4:1 on every dark surface, so map
 * dark semantic typography onto them. Fills, chips, and borders are untouched.
 */
.wc-theme-dark .mud-typography.mud-primary-text,
.wc-theme-dark .mud-link.mud-primary-text {
    color: var(--wc-accent-ink) !important;
}

.wc-theme-dark .mud-typography.mud-error-text,
.wc-theme-dark .mud-link.mud-error-text {
    color: var(--wc-tone-error-soft-fg) !important;
}

.wc-theme-dark .mud-typography.mud-success-text,
.wc-theme-dark .mud-link.mud-success-text {
    color: var(--wc-tone-success-soft-fg) !important;
}

.wc-theme-dark .mud-typography.mud-warning-text,
.wc-theme-dark .mud-link.mud-warning-text {
    color: var(--wc-tone-warning-soft-fg) !important;
}

.wc-theme-dark .mud-typography.mud-info-text,
.wc-theme-dark .mud-link.mud-info-text {
    color: var(--wc-tone-info-soft-fg) !important;
}

.wc-chip--role-status,
.wc-chip--role-filter,
.wc-chip--role-count,
.wc-chip--role-provider,
.wc-chip--role-tag,
.wc-chip--role-type {
    /* Truncation caps are expressed against the root font size so a reader who
       raises the browser's default text size gets a wider cap instead of a
       tighter clip. 13.75rem = 220px at the 16px root default. */
    max-width: min(100%, 13.75rem);
}

.wc-chip--role-record {
    font-variant-numeric: var(--wc-numeric-identifier-figures);
}

/* Toggle role. A reversible control, so WcChip renders a real <button> carrying
   aria-pressed rather than a MudChip div with a colour change. MudBlazor's own
   `button` reset already supplies inline-flex, align-items, cursor, margin: 0 and
   font inheritance, and zeroes the border and radius, so this rule adds only what
   makes the button read as a chip.

   It deliberately owns no touch floor and no focus rule: `.wc-chip--interactive`
   below gives every interactive chip the 44px coarse/narrow target, and the
   app-wide :focus-visible rule in app.base.css gives it the same outline every
   other control gets. Tone - rest, hover, and the pressed fill - stays with the
   call site: this role is the shape, not the meaning. */
.wc-chip--role-toggle {
    gap: 4px;
    padding: 4px 10px;
    border: 1px solid transparent;
    border-radius: var(--wc-radius-pill);
    background: transparent;
    font-size: var(--wc-type-body-compact-size);
    line-height: 1.2;
    -webkit-tap-highlight-color: transparent;
    transition:
        background-color var(--wc-motion-state, 120ms) var(--wc-ease-out-quint, ease),
        border-color var(--wc-motion-state, 120ms) var(--wc-ease-out-quint, ease),
        box-shadow var(--wc-motion-state, 120ms) var(--wc-ease-out-quint, ease);
}

.wc-chip--role-toggle .mud-icon-root {
    font-size: var(--wc-type-icon-compact-size);
}

.wc-chip .mud-chip-content {
    min-width: 0;
    /* Center the visible capitals across Segoe and system-font fallbacks. */
    text-box: trim-both cap alphabetic;
}

/* A real text box inside icon-bearing flex controls lets the browser trim font
   leading without moving the icon or changing the shared type sizes. */
.wc-control-label {
    display: block;
    text-box: trim-both cap alphabetic;
}

.wc-chip--truncate {
    /* 12.5rem = 200px at the 16px root default; see the role cap above. */
    max-width: 12.5rem;
}

/* Block display lets the label ellipsize, but MudBlazor also gives the content
   height: 100%, which pinned the text to the top of the chip. With an auto height
   the chip's own flex centring places it. */
.wc-chip--truncate .mud-chip-content {
    display: block;
    height: auto;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Bulk-review explanations need readable sentences, not single-line badges. */
.wc-chip.wc-chip--multiline-status {
    height: auto;
    max-width: 100%;
    padding-block: 4px;
}

.wc-chip--multiline-status .mud-chip-content {
    white-space: normal;
    overflow-wrap: anywhere;
    text-overflow: clip;
}
.wc-avatar-token--1 {
    background: var(--wc-avatar-1-bg) !important;
    color: var(--wc-avatar-1-fg) !important;
}

.wc-avatar-token--2 {
    background: var(--wc-avatar-2-bg) !important;
    color: var(--wc-avatar-2-fg) !important;
}

.wc-avatar-token--3 {
    background: var(--wc-avatar-3-bg) !important;
    color: var(--wc-avatar-3-fg) !important;
}

.wc-avatar-token--4 {
    background: var(--wc-avatar-4-bg) !important;
    color: var(--wc-avatar-4-fg) !important;
}

.wc-avatar-token--5 {
    background: var(--wc-avatar-5-bg) !important;
    color: var(--wc-avatar-5-fg) !important;
}

.wc-avatar-token--6 {
    background: var(--wc-avatar-6-bg) !important;
    color: var(--wc-avatar-6-fg) !important;
}

.wc-chip .mud-icon-root {
    color: currentColor !important;
}

.wc-chip--soft {
    box-shadow: none;
}

.wc-chip--soft.mud-chip-color-default,
.wc-chip--soft.mud-chip-color-dark {
    background: var(--wc-tone-default-soft-bg) !important;
    color: var(--wc-tone-default-soft-fg) !important;
    border-color: var(--wc-tone-default-soft-border) !important;
}

.wc-chip--soft.mud-chip-color-primary {
    background: var(--wc-tone-primary-soft-bg) !important;
    color: var(--wc-tone-primary-soft-fg) !important;
    border-color: var(--wc-tone-primary-soft-border) !important;
}

.wc-chip--soft.mud-chip-color-secondary {
    background: var(--wc-tone-secondary-soft-bg) !important;
    color: var(--wc-tone-secondary-soft-fg) !important;
    border-color: var(--wc-tone-secondary-soft-border) !important;
}

.wc-chip--soft.mud-chip-color-info {
    background: var(--wc-tone-info-soft-bg) !important;
    color: var(--wc-tone-info-soft-fg) !important;
    border-color: var(--wc-tone-info-soft-border) !important;
}

.wc-chip--soft.mud-chip-color-success {
    background: var(--wc-tone-success-soft-bg) !important;
    color: var(--wc-tone-success-soft-fg) !important;
    border-color: var(--wc-tone-success-soft-border) !important;
}

.wc-chip--soft.mud-chip-color-warning {
    background: var(--wc-tone-warning-soft-bg) !important;
    color: var(--wc-tone-warning-soft-fg) !important;
    border-color: var(--wc-tone-warning-soft-border) !important;
}

.wc-chip--soft.mud-chip-color-error {
    background: var(--wc-tone-error-soft-bg) !important;
    color: var(--wc-tone-error-soft-fg) !important;
    border-color: var(--wc-tone-error-soft-border) !important;
}

.wc-chip--outlined.mud-chip-color-default,
.wc-chip--outlined.mud-chip-color-dark {
    color: var(--wc-tone-default-soft-fg) !important;
    border-color: var(--wc-tone-default-soft-border) !important;
}

.wc-chip--outlined.mud-chip-color-primary {
    color: var(--wc-tone-primary-soft-fg) !important;
    border-color: var(--wc-tone-primary-soft-border) !important;
}

.wc-chip--outlined.mud-chip-color-secondary {
    color: var(--wc-tone-secondary-soft-fg) !important;
    border-color: var(--wc-tone-secondary-soft-border) !important;
}

.wc-chip--outlined.mud-chip-color-info {
    color: var(--wc-tone-info-soft-fg) !important;
    border-color: var(--wc-tone-info-soft-border) !important;
}

.wc-chip--outlined.mud-chip-color-success {
    color: var(--wc-tone-success-soft-fg) !important;
    border-color: var(--wc-tone-success-soft-border) !important;
}

.wc-chip--outlined.mud-chip-color-warning {
    color: var(--wc-tone-warning-soft-fg) !important;
    border-color: var(--wc-tone-warning-soft-border) !important;
}

.wc-chip--outlined.mud-chip-color-error {
    color: var(--wc-tone-error-soft-fg) !important;
    border-color: var(--wc-tone-error-soft-border) !important;
}

.wc-chipset {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
}

.wc-chipset--filter .mud-chip {
    margin: 0;
    background: var(--wc-surface-1);
}

/* Text truncation utility (MudBlazor doesn't provide this) */
.text-truncate {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Multi-line text truncation (2 lines max) */
.text-truncate-2 {
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* Text alignment utilities */
.text-center {
    text-align: center;
}

/* (Removed) DataGrid header alignment overrides — now handled inline on columns */

/* Monospace font for code/error displays */
.monospace {
    font-family: var(--wc-font-mono);
}

/* Height utility */
.h-100 {
    height: 100%;
}

/* Min-height utilities (responsive spacing) */
.min-h-280 {
    min-height: 280px;
}

/* Width utility */
.w-100 {
    width: 100%;
}

/* Cursor utility */
.cursor-pointer {
    cursor: pointer;
}

/* Opacity utilities for text de-emphasis (used in captions/labels) */
.opacity-90 {
    opacity: 0.9;
}

.opacity-70 {
    opacity: 0.7;
}

/* Layout utilities */
.full-width {
    width: 100%;
}

.text-nowrap {
    white-space: nowrap;
}

.w-fit {
    width: fit-content;
}

.min-vh-80 {
    min-height: 80vh;
}

.min-vh-100 {
    min-height: 100vh;
    min-height: 100dvh;
}

.btn-rounded-lg {
    border-radius: var(--wc-card-radius, var(--border-radius-md));
}

/* =============================================================================
   Touch Target Utilities (WCAG Accessibility)
   ============================================================================= */

/*
 * Minimum 44x44px touch targets for mobile accessibility (WCAG 2.1 Success Criterion 2.5.5)
 * Applied to buttons, icon buttons, and interactive elements.
 *
 * Usage: <MudButton Class="btn-touch">Action</MudButton>
 */

.btn-touch,
.mud-menu.btn-touch > .mud-menu-button-activator {
    min-height: 44px !important;
    min-width: 44px !important;
}

/* Icon button touch target (already 44px by default, but explicit for consistency) */
.icon-touch,
.mud-menu.icon-touch > .mud-menu-icon-button-activator {
    min-height: 44px !important;
    min-width: 44px !important;
}

/* Tablet/phone interaction contract. Mud keeps the visual glyph and label
   compact; the root hit area grows to the product's 44px touch floor. Desktop
   operational queues retain their denser control geometry.

   `pointer: coarse` reports the PRIMARY input mechanism, so this also covers
   touch-first devices above 960px (iPad landscape, tablet-mode 2-in-1s) without
   catching a mouse-driven laptop that merely has a touchscreen — those still
   report `pointer: fine` and keep the dense desktop geometry above. */
@media (max-width: 959.98px), (pointer: coarse) {
    .mud-button-root,
    .mud-icon-button,
    .mud-icon-button-root {
        min-width: 44px !important;
        min-height: 44px !important;
    }

    .wc-chip--interactive {
        min-width: 44px;
        min-height: 44px;
    }
    /* Numeric steppers are two absolutely positioned controls within one field.
       Preserve Mud's compact pair instead of forcing each half to 44px tall. */
    .mud-input-control.mud-input-number-control .mud-input-numeric-spin button {
        min-width: unset !important;
        min-height: unset !important;
    }


    .wc-chip--interactive .mud-chip-close-button {
        min-width: 44px;
        min-height: 44px;
    }

    a.wc-touch-link,
    a.wc-record-link,
    a.wc-record-id--link,
    a.wc-customer-link,
    a.wc-table-secondary-text {
        display: inline-flex;
        align-items: center;
        min-width: 44px !important;
        min-height: 44px !important;
        max-width: 100%;
        overflow-wrap: anywhere;
    }

    /* An id pill keeps its compact shape: stretched to 44px it became a tall oval.
       An invisible band above and below carries the tap target to 44px instead. */
    a.wc-record-id--link {
        position: relative;
        min-height: 28px !important;
    }

    a.wc-record-id--link::after {
        content: "";
        position: absolute;
        inset: -8px 0;
    }

    /* MudBlazor calendar day cells are `.mud-icon-button`s, so the floor above
       lands on them too. Mud ships a 36px cell with `margin: 0 2px`, which the
       floor pushes to a 48px column pitch — 7 x 48px = 336px no longer fits the
       picker's fixed 310px calendar container, so the wrapping flex row drops to
       six cells while the weekday labels stay at their own 40px pitch and the
       whole grid shears. Take the margins to 0 and match the labels so every
       column is exactly one 44px target: 7 x 44px = 308px, inside 310px.
       `.mud-day.mud-range` already carries `margin: 0`, so range pickers land on
       the same pitch and keep their continuous between-days background. */
    .mud-picker-calendar .mud-day.mud-picker-calendar-day {
        width: 44px;
        height: 44px;
        margin: 0;
    }

    .mud-picker-calendar-header-day .mud-day-label {
        width: 44px;
        margin: 0;
    }

    /* Six rows of 44px day targets need more space than Mud's 216px grid. */
    .mud-picker-calendar-transition {
        min-height: 264px;
    }

    .mud-picker-calendar-container {
        min-height: 360px;
    }
}

/* On phones and touch screens the stepper pair is two ~20px targets beside a field that
   already opens a numeric keypad; typing is the input there, so the steppers stand down. */
@media (max-width: 599.98px), (pointer: coarse) {
    .mud-input-control.mud-input-number-control .mud-input-numeric-spin {
        display: none;
    }
}

@media (max-width: 359.98px) {
    /* Keep single-date and stacked range calendars inside a narrow viewport,
       including month and year views, instead of anchoring beyond the edge. */
    .mud-picker-popover.mud-popover-fixed:has(.mud-picker-calendar-content) {
        left: 50% !important;
        translate: -50% 0;
    }
}

/* =============================================================================
   Typography Utilities
   ============================================================================= */

.font-weight-medium {
    font-weight: var(--font-medium) !important;
}

.font-weight-semibold {
    font-weight: var(--font-semibold) !important;
}

.font-weight-bold {
    font-weight: var(--font-bold) !important;
}

/* =============================================================================
   Flexbox Utilities (Complement MudBlazor's flex system)
   ============================================================================= */

/* Flex grow/shrink utilities */
.flex-grow-1 {
    flex-grow: 1 !important;
}

/* =============================================================================
   Button System
   ============================================================================= */

.btn-command-primary:not(.mud-menu),
.mud-menu.btn-command-primary > .mud-menu-button-activator {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    padding: 14px 28px;
    border-radius: var(--wc-panel-radius);
    font-size: var(--wc-type-body-size);
    font-weight: 700;
    letter-spacing: 0;
    background: var(--wc-accent, var(--mud-palette-primary));
    color: var(--wc-on-accent, var(--mud-palette-primary-text));
    border: none;
    box-shadow: none !important;
    cursor: pointer;
    transition: background-color var(--wc-motion-base) var(--wc-ease-out-quart), color var(--wc-motion-base) var(--wc-ease-out-quart);
}

.btn-command-primary.mud-button-root,
.mud-button-root.btn-command-primary,
.btn-command-primary.mud-button-filled,
.mud-button-filled.btn-command-primary,
.mud-menu.btn-command-primary > .mud-menu-button-activator {
    box-shadow: none !important;
}

.btn-command-primary:not(.mud-menu):hover,
.mud-menu.btn-command-primary > .mud-menu-button-activator:hover {
    background: var(--wc-accent-hover, var(--wc-accent-strong));
    box-shadow: none !important;
}

.btn-command-primary:not(.mud-menu):active,
.mud-menu.btn-command-primary > .mud-menu-button-activator:active {
    box-shadow: none !important;
}

/* =============================================================================
   Shared Action Feedback Primitives
   ============================================================================= */

.wc-motion-state-change {
    display: inline-flex;
    align-items: inherit;
    max-width: 100%;
    vertical-align: inherit;
}

.wc-motion-state-change.is-changing {
    animation: wc-state-change-enter var(--wc-motion-state) var(--wc-ease-out-quint);
}

.wc-meter-fill {
    width: var(--wc-meter-fill-percent, 0%);
}

.wc-action-button__content {
    display: inline-grid;
    grid-template-areas: "content";
    align-items: center;
    justify-items: center;
    /* 8ch is the reserve that keeps a button from resizing when its label swaps
       for the busy/done state. It was written as a var() fallback against a token
       nothing ever declared. */
    min-inline-size: 8ch;
}

.wc-action-button__state {
    grid-area: content;
    /* Preserve the original control height while centering the trimmed label. */
    min-block-size: 1lh;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    opacity: 0;
    transform: translateY(2px);
    white-space: nowrap;
    transition:
        opacity var(--wc-motion-feedback) var(--wc-ease-out-quart),
        transform var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

.wc-action-button__state--idle,
.wc-action-button__content.is-loading .wc-action-button__state--loading {
    opacity: 1;
    transform: translateY(0);
}

.wc-action-button__content.is-loading .wc-action-button__state--idle {
    opacity: 0;
    transform: translateY(-2px);
}

.wc-action-button__spinner {
    margin-right: var(--space-2);
}

@keyframes wc-state-change-enter {
    from {
        opacity: 0;
        transform: translateY(8px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* =============================================================================
   Form System
   ============================================================================= */

.wc-field-grid {
    min-width: 0;
}

.wc-field-grid > * {
    min-width: 0;
}

.wc-field-grid--mobile-compact {
    --wc-field-grid-mobile-gap: var(--wc-space-2, 8px);
}

@media (max-width: 599.98px) {
    .wc-field-grid--mobile-compact.mud-grid {
        width: calc(100% + var(--wc-field-grid-mobile-gap));
        margin-top: calc(var(--wc-field-grid-mobile-gap) * -1);
        margin-left: calc(var(--wc-field-grid-mobile-gap) * -1);
    }

    .wc-field-grid--mobile-compact.mud-grid > .mud-grid-item {
        padding-top: var(--wc-field-grid-mobile-gap);
        padding-left: var(--wc-field-grid-mobile-gap);
    }
}

/* Form Input Enhancements */
.mud-input-root {
    transition:
        border-color var(--wc-motion-feedback) var(--wc-ease-out-quart),
        box-shadow var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

.mud-input-root:hover .mud-input-control {
    border-color: var(--wc-accent, var(--mud-palette-primary));
}

.mud-input-root-outlined .mud-input-control-input-container {
    padding: 12px 16px;
}

/* Focus Ring Styling */
.mud-input-root.mud-input-outlined.mud-focused .mud-input-control {
    border-color: var(--wc-accent);
    box-shadow: var(--wc-focus-ring);
}

/* Error State */
.mud-input-root.mud-input-error .mud-input-control {
    border-color: var(--wc-tone-error-soft-fg, var(--mud-palette-error));
}

.mud-input-root.mud-input-error.mud-focused .mud-input-control {
    box-shadow: var(--wc-error-ring);
}

/* Form Labels */
.mud-input-label {
    font-size: var(--wc-type-body-compact-size);
    font-weight: var(--font-medium);
    color: var(--wc-text-soft);
}

/* Helper Text */
.mud-input-helper-text {
    font-size: var(--wc-type-caption-size);
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
}

/* Keep the counter together when a translated helper wraps beside it. */
.mud-input-helper-text > .ms-auto {
    flex-shrink: 0;
    white-space: nowrap;
    padding-inline-start: var(--wc-space-2, 8px);
}
/* Error Text */
.mud-input-error .mud-input-helper-text {
    font-size: var(--wc-type-caption-size);
    color: var(--wc-tone-error-soft-fg);
    font-weight: var(--font-medium);
}

/* =============================================================================
   End Form System
   ============================================================================= */

/* =============================================================================
   Money (Ledger Ink)
   ============================================================================= */

/*
 * The sole owner of money presentation, the way .wc-chip owns chip presentation.
 * WcMoney emits three slots — mark / whole / cents — into a fixed inline grid so
 * that right-aligning the atom puts the decimal point at a constant x-offset on
 * every row, with no JavaScript and no measuring. The cents lane is always
 * occupied, even by a blank, which is what holds the column.
 *
 * The root weight is CONSTANT. --wc-money-cents-lane is a ch value and an
 * unregistered ch would resolve against this element's font, so a state modifier
 * on the root narrows the lane and walks the decimal ~1px off column on exactly
 * the settled and nil rows. State changes the __whole slot (auto column, cannot
 * move the decimal) and ink only. No call site may set weight on the atom.
 *
 * Font-size is the same escape hatch one order of magnitude larger: an 18px lead
 * row resolved a ~28% wider lane than the 14px rows in the same summary table and
 * put its decimal 7px to their left. The lane is therefore a REGISTERED custom
 * property (see @property in workcita-theme.tokens.css) whose ch is computed once
 * at :root, so every atom on the page - lead or body, light or dark - carries the
 * same absolute lane and one decimal column.
 *
 * nowrap lives on the atom, never on the cell: body numeric cells deliberately
 * wrap multi-word fallback labels ("Billed per visit") instead of bleeding into
 * Actions. A money lane that substitutes such a label for an amount routes it
 * through .wc-money--label below, which leaves the decimal spine entirely.
 */
.wc-money {
    display: inline-grid;
    grid-template-columns: auto auto var(--wc-money-cents-lane);
    align-items: baseline;
    justify-items: start;
    font-family: var(--wc-money-family);
    font-weight: var(--wc-money-weight);
    font-variant-numeric: var(--wc-numeric-figures);
    letter-spacing: var(--wc-money-tracking);
    color: var(--wc-money-ink);
    line-height: 1.2;
    white-space: nowrap;
}

.wc-money__mark {
    font-size: var(--wc-money-mark-size);
    color: var(--wc-money-mark-ink);
}

.wc-money__cents {
    font-size: var(--wc-money-cents-size);
    font-weight: var(--font-semibold);
    color: var(--wc-money-cents-ink);
}

/* A negative amount promotes its whole prefix - the sign and the currency symbol
   arrive as one run in the mark slot - back to full size and full ink, so a credit
   or a discount cannot be misread as the positive amount it mirrors. Declared on
   the root as token overrides rather than as a slot rule, so the settled/overdue
   slot rules below still win the colour for those states. */
.wc-money--negative {
    --wc-money-mark-size: 1em;
    --wc-money-mark-ink: var(--wc-money-ink);
}

/* Settled money loses ink instead of gaining green: after a scan, what is left at
   full contrast is exactly what is unresolved. */
.wc-money--settled .wc-money__whole {
    font-weight: var(--wc-money-weight-settled);
    color: var(--wc-money-ink-settled);
}

.wc-money--settled .wc-money__mark,
.wc-money--settled .wc-money__cents {
    color: var(--wc-money-ink-settled);
}

/* Overdue recolours the whole atom, the way settled does: recolouring only the
   integer breaks the amount in two at the decimal point. */
.wc-money--overdue .wc-money__whole,
.wc-money--overdue .wc-money__mark,
.wc-money--overdue .wc-money__cents {
    color: var(--wc-money-ink-overdue);
}

/* A zero balance renders as a ruled dash with the cents lane held open, the way a
   printed ledger does, so a settled row is visually empty in the money lane. The
   dash carries its own screen-reader clarifier. */
.wc-money--nil .wc-money__whole {
    font-weight: var(--wc-money-weight-settled);
    color: var(--wc-money-ink-settled);
}

/* A digit-free fallback label ("Awaiting estimate") has nothing to align on, so it
   leaves the decimal spine: no mark lane, no reserved cents lane (which alone cost
   ~24px of a 112px column), and it clamps with an ellipsis rather than being cut
   mid-word by the cell's overflow guard. Numeric rows keep the grid untouched.
   It reads as a state, not an amount: body weight in muted ink, so the bold figures
   in the lane stay the only money on it. */
.wc-money--label {
    display: block;
    grid-template-columns: none;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    font-weight: var(--font-normal);
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
}

.wc-money--lead {
    font-size: var(--wc-money-lead-size);
    line-height: 1.1;
}

@media (max-width: 599.98px) {
    .wc-money--lead {
        font-size: var(--wc-money-lead-size-compact);
    }
}

/* ===== WorkCita.Client/wwwroot/css/app.shared-surfaces.css ===== */
/*
 * WorkCita global stylesheet module: app.shared-surfaces.css
 * Ownership: page shells, universal Wc surfaces, state cards, dialogs, and metric rows.
 * Theme: universal --wc-* tokens only.
 * Load: after app.shared-controls.css; before index-grid modules.
 */

/* =============================================================================
   Premium Card Hierarchy System (Phase 1 Redesign)
   ============================================================================= */

.page-shell {
    position: relative;
    width: 100%;
    padding: 16px;
    /* Surface contract: shells own outer page rhythm; cards own only internal spacing. */
    --wc-shell-lane-gap: 16px;
    --wc-content-section-gap: 12px;
    --wc-page-section-gap: var(--wc-shell-lane-gap);
    --wc-card-section-gap: 12px;
    --wc-card-padding-block: 16px;
    --wc-card-padding-inline: 16px;
    --wc-list-section-gap: 12px;
}

.page-shell.d-flex {
    gap: var(--wc-shell-lane-gap) !important;
}

.page-shell > * {
    position: relative;
    z-index: 1;
    min-width: 0;
    max-width: 100%;
}

@media (min-width: 600px) {
    .page-shell {
        --wc-shell-lane-gap: 20px;
        --wc-content-section-gap: 14px;
    }
}

@media (min-width: 960px) {
    /* A wide monitor centres the page in a readable lane instead of stretching it
       edge to edge: at 2560px a dashboard row's action sat 1,300px from its label.
       Up to ~1920px the lane is narrower than the cap, so nothing changes there. A
       page that needs the full width (the dispatch board) raises the cap. */
    .page-shell {
        --wc-page-max-width: 1600px;
        padding: 24px;
        padding-inline: max(24px, calc((100% - var(--wc-page-max-width)) / 2));
        --wc-shell-lane-gap: 24px;
        --wc-content-section-gap: 16px;
        --wc-card-padding-block: 18px;
        --wc-card-padding-inline: 18px;
    }
}

/* Presentation profiles distinguish workflow density and rhythm without
   becoming alternate palettes. Keep them after the generic breakpoint rules
   so the selected profile remains authoritative at 768px and desktop widths. */
.wc-presentation--operational {
    --wc-content-section-gap: 12px;
    --wc-card-section-gap: 10px;
    --wc-card-padding-block: 14px;
    --wc-card-padding-inline: 14px;
}

.wc-presentation--task {
    --wc-content-section-gap: 14px;
    --wc-card-section-gap: 12px;
    --wc-card-padding-block: 16px;
    --wc-card-padding-inline: 16px;
}

.wc-presentation--trust {
    --wc-content-section-gap: 16px;
    --wc-card-section-gap: 14px;
    --wc-card-padding-block: 18px;
    --wc-card-padding-inline: 18px;
}

.company-selector-dialog-intro {
    margin-bottom: var(--space-4);
}

.page-context-band {
    padding: 10px 12px;
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-2, var(--mud-palette-background-grey));
    box-shadow: none;
}

.page-context-band-title {
    font-family: var(--wc-type-label-family);
    font-size: var(--wc-type-label-size);
    font-weight: var(--wc-type-label-weight);
    line-height: var(--wc-type-label-leading);
    letter-spacing: 0;
    text-transform: none;
}

/* =============================================================================
   Universal visual primitives (Wc*)
   ============================================================================= */

.wc-section-card-layout {
    gap: var(--wc-card-section-gap, 12px);
}

.wc-section-card {
    position: relative;
    overflow: clip;
    border: 1px solid var(--wc-data-grid-border, var(--wc-border-soft));
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1);
    box-shadow: none;
}

.wc-section-card-default,
.wc-section-card-data {
    background: var(--wc-surface-1);
    box-shadow: none;
}

.wc-section-card-aside {
    background: var(--wc-surface-2);
    box-shadow: none;
}

/* Aside titles stay ink like every other card heading; the surface tint already marks the rail. */
.wc-section-card-aside .wc-section-card-leading-icon {
    color: var(--wc-secondary-strong) !important;
}

.wc-section-card-subtle,
.wc-section-card-state {
    background: var(--wc-surface-2);
    box-shadow: none;
}

.wc-section-card.mud-paper,
.wc-section-card .mud-card-content {
    padding: var(--wc-card-padding-block, 16px) var(--wc-card-padding-inline, 16px);
}

.wc-section-card-dense.mud-paper,
.wc-section-card-dense .mud-card-content {
    padding: calc(var(--wc-card-padding-block, 16px) - 2px) var(--wc-card-padding-inline, 16px);
}

.wc-section-card-header {
    position: relative;
    z-index: 1;
    gap: 12px;
    flex-wrap: wrap;
    padding-bottom: 14px;
    border-bottom: 1px solid var(--wc-data-grid-border, var(--wc-border-soft));
}

.wc-section-card.wc-section-card--header-only .wc-section-card-header {
    padding-bottom: 0;
    border-bottom: 0;
}

.wc-section-card-heading,
.wc-section-card-title-block,
.wc-section-card-body,
.wc-section-card-top,
.wc-section-card-actions {
    flex-wrap: wrap;
    min-width: 0;
}

.wc-section-card-title-block {
    flex: 1 1 auto;
}

.wc-section-card-leading-icon {
    flex: 0 0 auto;
    margin-top: 2px;
}

.wc-section-card-heading {
    display: grid;
    gap: 2px;
}

.wc-section-card-title {
    margin: 0;
    font-family: var(--wc-type-title-family);
    font-size: var(--wc-type-title-size);
    font-weight: var(--wc-type-title-weight);
    line-height: var(--wc-type-title-leading);
    color: var(--wc-text-strong);
}

.wc-section-card-subtitle {
    margin: 0;
    font-family: var(--wc-type-body-family);
    font-size: var(--wc-type-body-size);
    font-weight: var(--wc-type-body-weight);
    line-height: var(--wc-type-body-leading);
    color: var(--wc-text-soft);
}

.wc-section-card-top {
    position: relative;
    z-index: 1;
    display: grid;
    gap: var(--wc-card-section-gap, 12px);
}

.wc-section-card-body,
.wc-section-card-actions {
    position: relative;
    z-index: 1;
}

.wc-section-card-top + .wc-section-card-body {
    padding-top: 2px;
}

.wc-section-card-title:focus-visible {
    outline: var(--wc-focus-outline);
    outline-offset: 4px;
    border-radius: var(--wc-radius-track);
    box-shadow: none;
}

.wc-section-card-title[tabindex="-1"]:focus {
    outline: none;
    box-shadow: none;
}

.wc-section-card-actions :is(a, button, .mud-button-root, .mud-icon-button):focus-visible {
    outline: none;
    box-shadow: var(--wc-focus-ring);
}

/* Touch-first devices get the 44px floor at any width; see app.shared-controls.css. */
@media (max-width: 959.98px), (pointer: coarse) {
    .wc-section-card-actions :is(a, button, .mud-button-root, .mud-icon-button) {
        min-height: 44px;
        min-width: 44px;
    }
}

.wc-state-card {
    --wc-card-section-gap: var(--wc-space-3, 12px);
}

.wc-state-card.wc-state-card--inline.wc-inline-surface {
    display: grid;
    gap: var(--wc-card-section-gap, 12px);
    width: 100%;
    margin: 0;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: transparent;
    box-shadow: none;
}

.wc-state-card-body {
    display: grid;
    gap: var(--wc-card-section-gap, 12px);
}

.wc-notice-band {
    border: 1px solid var(--wc-tone-default-soft-border);
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-tone-default-soft-bg);
    box-shadow: var(--wc-surface-shadow-xs);
}

.wc-notice-band.mud-paper {
    padding: 12px 14px;
}

.wc-notice-band-layout {
    gap: 12px;
}

.wc-notice-band-copy {
    min-width: 0;
    flex: 1 1 auto;
}

.wc-notice-band-icon {
    margin-top: 3px;
    flex-shrink: 0;
}

.wc-notice-band-body {
    min-width: 0;
}

.wc-notice-band-title {
    margin: 0 0 4px;
    font-family: var(--wc-type-label-family);
    font-size: var(--wc-type-label-size);
    font-weight: var(--wc-type-label-weight);
    line-height: var(--wc-type-label-leading);
    color: var(--wc-text-strong);
}

.wc-notice-band-message {
    font-family: var(--wc-type-body-family);
    font-size: var(--wc-type-body-size);
    line-height: var(--wc-type-body-leading);
    color: var(--wc-text-muted);
}

.wc-notice-band-actions {
    flex-wrap: wrap;
}

.wc-notice-band-tone-default {
    border-color: var(--wc-tone-default-soft-border);
    background: var(--wc-tone-default-soft-bg);
}

.wc-notice-band-tone-primary {
    border-color: var(--wc-tone-primary-soft-border);
    background: var(--wc-tone-primary-soft-bg);
}

.wc-notice-band-tone-secondary {
    border-color: var(--wc-tone-secondary-soft-border);
    background: var(--wc-tone-secondary-soft-bg);
}

.wc-notice-band-tone-info {
    border-color: var(--wc-tone-info-soft-border);
    background: var(--wc-tone-info-soft-bg);
}

.wc-notice-band-tone-success {
    border-color: var(--wc-tone-success-soft-border);
    background: var(--wc-tone-success-soft-bg);
}

.wc-notice-band-tone-warning {
    border-color: var(--wc-tone-warning-soft-border);
    background: var(--wc-tone-warning-soft-bg);
}

.wc-notice-band-tone-error {
    border-color: var(--wc-tone-error-soft-border);
    background: var(--wc-tone-error-soft-bg);
}

.wc-notice-band-tone-default .wc-notice-band-title,
.wc-notice-band-tone-default .wc-notice-band-message {
    color: var(--wc-tone-default-soft-fg);
}

.wc-notice-band-tone-primary .wc-notice-band-title,
.wc-notice-band-tone-primary .wc-notice-band-message {
    color: var(--wc-tone-primary-soft-fg);
}

.wc-notice-band-tone-secondary .wc-notice-band-title,
.wc-notice-band-tone-secondary .wc-notice-band-message {
    color: var(--wc-tone-secondary-soft-fg);
}

.wc-notice-band-tone-info .wc-notice-band-title,
.wc-notice-band-tone-info .wc-notice-band-message {
    color: var(--wc-tone-info-soft-fg);
}

.wc-notice-band-tone-success .wc-notice-band-title,
.wc-notice-band-tone-success .wc-notice-band-message {
    color: var(--wc-tone-success-soft-fg);
}

.wc-notice-band-tone-warning .wc-notice-band-title,
.wc-notice-band-tone-warning .wc-notice-band-message {
    color: var(--wc-tone-warning-soft-fg);
}

.wc-notice-band-tone-error .wc-notice-band-title,
.wc-notice-band-tone-error .wc-notice-band-message {
    color: var(--wc-tone-error-soft-fg);
}

.wc-notice-band-actions :is(a, button, .mud-button-root, .mud-icon-button):focus-visible {
    outline: none;
    box-shadow: var(--wc-focus-ring);
}

/* Touch-first devices get the 44px floor at any width; see app.shared-controls.css. */
@media (max-width: 959.98px), (pointer: coarse) {
    .wc-notice-band-actions :is(a, button, .mud-button-root, .mud-icon-button) {
        min-width: 44px;
        min-height: 44px;
    }
}

.wc-state-card-permission {
    padding-block: 8px;
}

.wc-state-card-permission-message {
    max-width: 42rem;
}

.wc-state-card-permission-content {
    display: grid;
    gap: var(--wc-card-section-gap, 12px);
    width: min(100%, 42rem);
    min-width: 0;
}

.wc-state-card-permission-actions-divider {
    width: 100%;
    margin-top: 4px;
}

/* =============================================================================
   Cross-Page Utility Classes
   ============================================================================= */

.skeleton-shimmer {
    background: linear-gradient(
        90deg,
        var(--wc-surface-1, var(--mud-palette-surface)) 0%,
        rgba(var(--wc-accent-rgb), 0.08) 50%,
        var(--wc-surface-1, var(--mud-palette-surface)) 100%
    );
    background-size: 200% 100%;
    animation: shimmer var(--wc-motion-loading) var(--wc-ease-out-quart) infinite;
}

@keyframes shimmer {
    0% { background-position: 200% 0; }
    100% { background-position: -200% 0; }
}

.text-readable {
    max-width: 320px;
}

@media (max-width: 599.98px) {
    .text-readable {
        max-width: 100%;
    }
}

.truncate-300 {
    max-width: 300px;
}

@media (max-width: 599.98px) {
    .truncate-300 {
        max-width: 100%;
    }
}

.opacity-60 {
    opacity: 0.6;
}

.text-italic {
    font-style: italic;
}

.markup-color-picker {
    width: 44px;
    min-width: 44px;
    min-height: 44px;
}

/* Guarded editor dialog title: stretch so the close icon hugs the edge. */
.wc-guarded-dialog-title {
    width: 100%;
}

/* Shared dialog shell. Feature dialogs own their fields and workflow copy; this
   frame owns title alignment, notice/error rhythm, and action-slot wrapping. */
.wc-dialog-shell__title-row,
.wc-dialog-shell__title-block {
    display: flex;
    min-width: 0;
    align-items: center;
    gap: var(--wc-space-2, 8px);
}

.wc-dialog-shell__title-row {
    width: 100%;
    justify-content: space-between;
}

/* Touch-first devices get the 44px floor at any width; see app.shared-controls.css. */
@media (max-width: 959.98px), (pointer: coarse) {
    .wc-guarded-dialog-title > :is(.mud-icon-button, .mud-icon-button-root),
    .wc-dialog-shell__title-row > :is(.mud-icon-button, .mud-icon-button-root) {
        min-width: 44px;
        min-height: 44px;
    }
}

.wc-dialog-shell__title-block {
    flex: 1 1 auto;
}

.wc-dialog-shell__title-copy {
    display: grid;
    min-width: 0;
    gap: 2px;
}

.wc-dialog-shell__title,
.wc-dialog-shell__subtitle {
    overflow-wrap: anywhere;
}

.wc-dialog-shell__title-icon {
    flex: 0 0 auto;
}

.wc-dialog-shell__content {
    display: grid;
    gap: var(--wc-space-3, 12px);
    min-width: 0;
}

.wc-dialog-shell__content--dense {
    gap: var(--wc-space-2, 8px);
}

.wc-dialog-shell__notice,
.wc-dialog-shell__error-actions,
.wc-dialog-shell__actions {
    min-width: 0;
}

.wc-dialog-shell__error-actions {
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-end;
    gap: var(--wc-space-2, 8px);
}

.wc-dialog-shell__actions {
    width: 100%;
}

@media (max-width: 599.98px) {
    .wc-dialog-shell__error-actions {
        display: grid;
        justify-content: stretch;
    }
}

/* Shared in-card metric row (WcMetricGrid). Borderless label-over-value figures that
   sit inside a section card without becoming nested cards. Owns the pattern previously
   duplicated as page-local job-costing and report-margin metric tiles. */
.wc-metric-grid {
    display: grid;
    /* The component is commonly nested in narrow cards on wide screens. Size
       from the actual container instead of the viewport so those cards use two
       readable lanes while full-width surfaces can still show four or more. */
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 120px), 1fr));
    gap: var(--wc-space-4, 16px);
    margin: 0;
}

.wc-metric {
    min-width: 0;
    display: grid;
    gap: var(--wc-space-1, 4px);
}

.wc-metric__label {
    margin: 0;
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-caption-size);
    line-height: 1.3;
}

.wc-metric__value {
    margin: 0;
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-size: var(--wc-type-body-size);
    font-weight: 700;
    line-height: 1.25;
    overflow-wrap: anywhere;
    font-variant-numeric: var(--wc-numeric-figures);
}

.wc-metric--success .wc-metric__value {
    color: var(--wc-tone-success-soft-fg, var(--mud-palette-success));
}

.wc-metric--error .wc-metric__value {
    color: var(--wc-tone-error-soft-fg, var(--mud-palette-error));
}

.wc-metric--warning .wc-metric__value {
    color: var(--wc-tone-warning-soft-fg, var(--mud-palette-warning));
}

/* A toned amount takes the tone in all three slots, the way overdue money recolours
   the whole atom: the soft mark and cents inks would split a green margin in two. */
.wc-metric--success .wc-money,
.wc-metric--error .wc-money,
.wc-metric--warning .wc-money {
    --wc-money-ink: currentColor;
    --wc-money-mark-ink: currentColor;
    --wc-money-cents-ink: currentColor;
}

/* The money atom's reserved cents lane already leaves air after the amount. */
.wc-metric__note {
    margin-inline-start: 0.15em;
}

.human-verification-challenge {
    display: grid;
    gap: 0.35rem;
    justify-items: center;
}

.human-verification-challenge__widget {
    min-height: 65px;
    /* The provider widget wants 300px, but a hard floor pushes the auth card past
       the viewport on a 320px phone. Ask for 300px only when the lane can give it. */
    min-width: min(300px, 100%);
}

/* Preserve intentional field breaks in plain-text message dialogs. */
.mud-message-box .mud-dialog-content {
    white-space: pre-line;
    overflow-wrap: anywhere;
}

/* ===== WorkCita.Client/wwwroot/css/app.index-grid.css ===== */
/*
 * WorkCita global stylesheet module: app.index-grid.css
 * Ownership: page list state shells, narrow/mobile list fallbacks, and
 *   index empty-state preview cards.
 * Theme: universal --wc-* tokens only.
 * Load: after app.shared-surfaces.css; before app.index-grid.table.css.
 */

/* =============================================================================
   Shared Data And Mobile List Primitives
   ============================================================================= */

.page-data-state-shell {
    min-height: 0;
}

.page-list-header {
    margin-bottom: 0;
}

.page-list-mobile-stack {
    display: flex;
    flex-direction: column;
    gap: var(--wc-list-section-gap);
}

.page-list-narrow-stack {
    display: flex;
    flex-direction: column;
    gap: var(--wc-list-section-gap);
}

.page-list-mobile-item {
    display: block;
    content-visibility: auto;
    contain-intrinsic-size: auto 120px;
}

.page-list-narrow-item {
    display: block;
    content-visibility: auto;
    contain-intrinsic-size: auto 120px;
}

.wc-mobile-list-card {
    width: 100%;
    min-width: 0;
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    box-shadow: none;
    overflow: hidden;
    transition: border-color var(--wc-motion-feedback) var(--wc-ease-out-quart), background-color var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

.wc-mobile-list-card:is(button) {
    appearance: none;
    padding: 0;
    color: inherit;
    cursor: pointer;
    font: inherit;
    text-align: inherit;
}

.wc-mobile-list-card__activation {
    width: 100%;
    min-height: 44px;
    appearance: none;
    padding: 0;
    border: 0;
    background: transparent;
    color: inherit;
    cursor: pointer;
    font: inherit;
    text-align: inherit;
}

.wc-mobile-list-card:is(button):focus-visible,
.wc-mobile-list-card:has(> .wc-mobile-list-card__activation:focus-visible) {
    border-color: rgba(var(--wc-accent-rgb), 0.32);
    box-shadow: var(--wc-focus-ring);
    outline: var(--wc-focus-outline);
    outline-offset: 2px;
}

.wc-mobile-list-card__activation:focus-visible {
    outline: none;
}

@media (hover: hover) {
    .wc-mobile-list-card:is(button):hover,
    .wc-mobile-list-card:has(> .wc-mobile-list-card__activation:hover),
    .item-card:hover {
        transform: none;
        border-color: rgba(var(--wc-accent-rgb), 0.32);
        box-shadow: none;
        outline: none;
    }
}

.wc-mobile-list-card-content {
    min-width: 0;
    padding: var(--wc-card-padding-block) var(--wc-card-padding-inline);
}

.wc-mobile-list-card-content--roomy {
    padding: calc(var(--wc-card-padding-block) + 2px) calc(var(--wc-card-padding-inline) + 2px);
}

.skeleton-card {
    margin-bottom: var(--space-3);
}

.skeleton-card--metric,
.skeleton-card--data {
    padding: var(--space-4);
}

.skeleton-card--data {
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
}

.skeleton-card-title-stack,
.error-alert-message {
    flex: 1 1 auto;
    min-width: 0;
}

.skeleton-card--table {
    padding: 0;
    overflow: hidden;
}

.wc-mobile-list-card-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-end;
    gap: 8px;
    min-width: 0;
    padding: 0 var(--wc-card-padding-inline) var(--wc-card-padding-block);
}

.wc-mobile-list-card-actions:empty {
    display: none;
}

.wc-mobile-list-card-actions .mud-button-root,
.wc-mobile-list-card-actions .mud-icon-button {
    min-height: 44px;
}

.item-card .mud-stack {
    min-width: 0;
}

.item-card__menu-button.mud-icon-button {
    min-width: 44px;
    min-height: 44px;
}

.page-list-footer,
.page-list-load-more.mud-button-root,
.page-list-pagination,
.wc-pagination {
    margin-top: var(--wc-card-section-gap);
}

.page-list-pagination-control,
.wc-pagination-control {
    padding: 0;
}

.wc-pagination {
    flex-wrap: wrap;
    gap: var(--wc-space-3, 12px);
}

.wc-pagination--with-summary {
    justify-content: space-between;
}

.wc-pagination-summary {
    min-width: 0;
}

.wc-data-grid-pager {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--wc-space-2, 8px);
    min-width: 0;
    padding-top: var(--wc-space-1, 4px);
}

.wc-data-grid-pager--controlled {
    flex-wrap: wrap;
}

.wc-data-grid-pager__status {
    min-width: 7rem;
    text-align: center;
}

/* Controlled pagers that own their page size read like the grid pager: size, range, then arrows,
   right-aligned. */
.wc-data-grid-pager--with-size {
    justify-content: flex-end;
}

.wc-data-grid-pager__size {
    display: inline-flex;
    align-items: center;
    gap: var(--wc-space-2, 8px);
}

.wc-data-grid-pager__size-select {
    flex: 0 0 auto;
    min-width: 4.5rem;
}

@media (max-width: 599.98px) {
    .wc-data-grid-pager--controlled {
        display: grid;
        grid-template-columns: 44px minmax(0, 1fr) 44px;
        width: 100%;
    }

    .wc-data-grid-pager--controlled .wc-data-grid-pager__status {
        min-width: 0;
    }

    .wc-data-grid-pager--controlled .wc-data-grid-pager__size {
        grid-column: 1 / -1;
        justify-self: center;
    }

    .wc-data-grid-pager--controlled .mud-button-root {
        width: 44px;
        min-width: 44px !important;
        min-height: 44px;
        padding: 0;
    }

    .wc-data-grid-pager--controlled .wc-data-grid-pager__button-label {
        display: none;
    }

    .wc-data-grid-pager--controlled .mud-button-icon-start,
    .wc-data-grid-pager--controlled .mud-button-icon-end {
        margin: 0;
    }
}

/* =============================================================================
   Office Index Empty State
   ============================================================================= */

.office-index-empty-state {
    width: min(100%, 580px);
    min-height: 220px;
    margin-inline: auto;
    padding: clamp(20px, 4vw, 32px);
    display: grid;
    gap: var(--wc-space-4, 16px);
    justify-items: center;
    align-content: center;
    text-align: center;
    box-sizing: border-box;
}

.office-index-empty-state--with-preview {
    width: min(100%, 900px);
    min-height: 240px;
    grid-template-columns: minmax(220px, 0.85fr) minmax(320px, 1.15fr);
    grid-template-areas:
        "lead preview"
        "actions preview";
    align-items: center;
    justify-items: stretch;
    column-gap: clamp(24px, 4vw, 44px);
    row-gap: var(--wc-space-4, 16px);
    text-align: left;
}

/* The two-column form needs 220 + 320 track minimums plus a 24px minimum gap and
   2 x 20px minimum padding = 604px before it can honour `width: min(100%, …)`.
   The office lane is under that from ~680px of viewport down, so the stack has to
   start well above the phone breakpoint or the preview column punches out of the
   card between 600 and 680px. */
@media (max-width: 719.98px) {
    .office-index-empty-state--with-preview {
        grid-template-columns: minmax(0, 1fr);
        grid-template-areas:
            "lead"
            "actions"
            "preview";
        justify-items: center;
        text-align: center;
        row-gap: var(--wc-space-3, 12px);
    }

    .office-index-empty-state--with-preview .office-index-empty-state__lead {
        justify-content: center;
    }
}

.office-index-empty-state__lead {
    width: min(100%, 560px);
    display: flex;
    align-items: flex-start;
    justify-content: center;
    gap: var(--wc-space-4, 16px);
    text-align: left;
}

.office-index-empty-state--with-preview .office-index-empty-state__lead {
    grid-area: lead;
    width: 100%;
    justify-content: flex-start;
}

.office-index-empty-state__icon {
    flex: 0 0 auto;
    width: 40px;
    height: 40px;
    border-radius: var(--border-radius-md);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--wc-tone-primary-soft-fg, var(--mud-palette-primary));
    background: var(--wc-tone-primary-soft-bg);
    border: 1px solid var(--wc-tone-primary-soft-border);
}

.office-index-empty-state__copy {
    min-width: 0;
}

.office-index-empty-state__title {
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-weight: var(--font-semibold);
}

.office-index-empty-state__message {
    max-width: 58ch;
    margin-top: var(--wc-space-1, 4px);
}

.office-index-empty-state__preview {
    width: 100%;
    min-width: 0;
    border-radius: var(--border-radius-md);
    background: var(--wc-surface-2, var(--mud-palette-background-grey));
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    text-align: left;
    overflow: hidden;
}

.office-index-empty-state__preview-title {
    display: block;
    padding: var(--wc-space-3, 12px) var(--wc-space-3, 12px) 0;
    margin-bottom: var(--wc-space-2, 8px);
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font-weight: var(--font-semibold);
}

.office-index-empty-state--with-preview .office-index-empty-state__preview {
    grid-area: preview;
}

.office-index-empty-state__preview-table {
    width: 100%;
    min-width: 0;
}

.office-index-empty-state__preview-header,
.office-index-empty-state__preview-row {
    display: grid;
    grid-template-columns: repeat(var(--office-index-empty-state-preview-columns, 4), minmax(0, 1fr));
}

.office-index-empty-state__preview--columns-1 {
    --office-index-empty-state-preview-columns: 1;
}

.office-index-empty-state__preview--columns-2 {
    --office-index-empty-state-preview-columns: 2;
}

.office-index-empty-state__preview--columns-3 {
    --office-index-empty-state-preview-columns: 3;
}

.office-index-empty-state__preview--columns-4 {
    --office-index-empty-state-preview-columns: 4;
}

.office-index-empty-state__preview--mobile-columns-1 {
    --office-index-empty-state-preview-columns-mobile: 1;
}

.office-index-empty-state__preview--mobile-columns-2 {
    --office-index-empty-state-preview-columns-mobile: 2;
}

.office-index-empty-state__preview--mobile-columns-3 {
    --office-index-empty-state-preview-columns-mobile: 3;
}

.office-index-empty-state__preview-header {
    min-height: 38px;
    align-items: center;
    padding: 0 var(--wc-space-3, 12px);
    border-bottom: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    background: var(--wc-data-header-bg);
}

.office-index-empty-state__preview-column {
    min-width: 0;
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-body-compact-size);
    font-weight: var(--font-semibold);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.office-index-empty-state__preview-row {
    min-height: 38px;
    align-items: center;
    padding: 0 var(--wc-space-3, 12px);
    border-bottom: 1px solid var(--wc-data-border);
}

.office-index-empty-state__preview-row:last-child {
    border-bottom: 0;
}

.office-index-empty-state__preview-cell {
    min-width: 0;
    display: flex;
    align-items: center;
    padding-right: var(--wc-space-3, 12px);
}

.office-index-empty-state__preview-cell:last-child {
    padding-right: 0;
}

.office-index-empty-state__preview-cell-bar {
    display: block;
    width: 68%;
    height: 8px;
    border-radius: var(--wc-radius-pill);
    background: var(--wc-border-soft);
}

.office-index-empty-state__preview-row:nth-child(1) .office-index-empty-state__preview-cell:nth-child(2) .office-index-empty-state__preview-cell-bar,
.office-index-empty-state__preview-row:nth-child(2) .office-index-empty-state__preview-cell:nth-child(3) .office-index-empty-state__preview-cell-bar,
.office-index-empty-state__preview-row:nth-child(3) .office-index-empty-state__preview-cell:nth-child(1) .office-index-empty-state__preview-cell-bar {
    width: 48%;
}

.office-index-empty-state__preview-row:nth-child(1) .office-index-empty-state__preview-cell:nth-child(4) .office-index-empty-state__preview-cell-bar,
.office-index-empty-state__preview-row:nth-child(2) .office-index-empty-state__preview-cell:nth-child(1) .office-index-empty-state__preview-cell-bar,
.office-index-empty-state__preview-row:nth-child(3) .office-index-empty-state__preview-cell:nth-child(3) .office-index-empty-state__preview-cell-bar {
    width: 82%;
}

.office-index-empty-state__actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: var(--wc-space-2, 8px);
}

.office-index-empty-state--with-preview .office-index-empty-state__actions {
    grid-area: actions;
    justify-content: flex-start;
}

.office-index-empty-state__action,
.office-index-empty-state__secondary-action {
    white-space: nowrap;
}

@media (max-width: 599.98px) {
    .office-index-empty-state {
        width: min(100%, 280px);
        min-height: 0;
        padding: var(--wc-space-5, 20px) var(--wc-space-4, 16px);
    }

    /* The single-column form for this variant now starts at 719.98px; only the
       phone-specific lead stacking stays here. */
    .office-index-empty-state__lead {
        align-items: center;
        flex-direction: column;
        text-align: center;
        gap: var(--wc-space-2, 8px);
    }

    .office-index-empty-state__message {
        max-width: 34ch;
        margin-top: 2px;
    }

    .office-index-empty-state__preview {
        width: 100%;
        text-align: center;
    }

    .office-index-empty-state__actions {
        width: 100%;
        align-items: stretch;
        flex-direction: column;
    }

    .office-index-empty-state--with-preview .office-index-empty-state__actions {
        justify-content: center;
    }

    .office-index-empty-state__action,
    .office-index-empty-state__secondary-action {
        width: 100%;
    }

    .office-index-empty-state__preview-header,
    .office-index-empty-state__preview-row {
        grid-template-columns: repeat(var(--office-index-empty-state-preview-columns-mobile, var(--office-index-empty-state-preview-columns, 3)), minmax(0, 1fr));
        padding-inline: var(--wc-space-2, 8px);
    }

    .office-index-empty-state__preview-header {
        min-height: 32px;
    }

    .office-index-empty-state__preview-row {
        min-height: 30px;
    }

    .office-index-empty-state__preview-column {
        font-size: var(--wc-type-caption-size);
    }

    /* Hide columns beyond MobilePreviewColumnCap (3); DOM may still render MaxPreviewColumns (4) for desktop. */
    .office-index-empty-state__preview-column:nth-child(n + 4),
    .office-index-empty-state__preview-cell:nth-child(n + 4) {
        display: none;
    }

    .office-index-empty-state__preview-cell {
        padding-right: var(--wc-space-2, 8px);
    }

    .office-index-empty-state__preview-cell-bar {
        height: 7px;
    }
}

/* ===== WorkCita.Client/wwwroot/css/app.index-grid.table.css ===== */
/*
 * WorkCita global stylesheet module: app.index-grid.table.css
 * Ownership: Mud table baseline and shared data-cell presentation.
 * Theme: universal --wc-* tokens only.
 * Load: after app.index-grid.css; before app.index-grid.layout.css.
 */

/* =============================================================================
   Table Utilities
   ============================================================================= */

/* MudBlazor table baseline. WorkCita product tables should be rendered through
   WorkCitaIndexGrid/page-data-grid; the page-data-grid rules later in the index-grid module sequence
   intentionally win over this framework-level baseline. */
.mud-table {
    background: var(--wc-surface-1);
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    overflow: hidden;
    box-shadow: var(--wc-surface-shadow-xs);
}

/* Table Header Styling */
.mud-table-head {
    background: var(--wc-surface-2);
    border-bottom: 1px solid var(--wc-border-soft);
}

.mud-table-head .mud-table-cell {
    padding: 16px 20px;
    font-size: var(--wc-type-body-compact-size);
    font-weight: var(--font-semibold);
    color: var(--wc-text-soft);
    text-align: left;
    letter-spacing: var(--tracking-wide);
    border-left: none !important;
    border-right: none !important;
}

/* Table Body Styling */
.mud-table-body .mud-table-row {
    border-bottom: 1px solid var(--wc-border-soft);
    transition: background-color var(--wc-motion-fast) var(--wc-ease-out-quart);
}

.mud-table-body .mud-table-row:hover {
    background: rgba(var(--wc-accent-rgb), 0.04) !important;
}

.mud-table-body .mud-table-row:last-child {
    border-bottom: none;
}

.mud-table-body .mud-table-cell {
    padding: 20px;
    font-size: var(--wc-type-body-compact-size);
    color: var(--wc-text-muted);
    border-left: none !important;
    border-right: none !important;
    vertical-align: middle;
    min-height: 56px;
}

/* Remove ALL vertical borders from tables */
.mud-table .mud-table-cell {
    border-left: none !important;
    border-right: none !important;
}

.mud-table-cell {
    padding: 16px !important;
}

/* WorkCita data-grid cell primitives */
/* Record identifiers slash the zero: 0-vs-O confusion on JOB-10402 / INV-2291
   costs a dispatcher a phone call. Money never does — see .wc-money. */
.wc-record-id,
.wc-record-link {
    font-weight: var(--font-bold);
    white-space: nowrap;
    font-variant-numeric: var(--wc-numeric-identifier-figures);
}

/* Record links also carry names, which wrap at natural breaks inside the lane. */
.page-data-grid .wc-record-link {
    min-width: 0;
    max-width: 100%;
    white-space: normal;
    overflow-wrap: anywhere;
    word-break: normal;
}

/* Identifier pills are compared by eye across rows, so they never wrap:
   "INV-2026-/00001" reads as two values. Record lanes are sized to hold a standard
   identifier (--wc-data-queue-compact-record and the per-grid plans), so nowrap
   stays inside the column instead of painting into the next one. */
.page-data-grid .wc-record-id {
    min-width: 0;
    max-width: 100%;
    white-space: nowrap;
}
.wc-record-id {
    display: inline-flex;
    align-items: center;
    /* The record cell is a flex column (MudStack) that stretches its children to
       full width by default; without this the id pill inflates to the whole column
       (a bordered pill full of dead space). fit-content + flex-start make it hug
       the id text wherever pills appear. */
    align-self: flex-start;
    width: fit-content;
    max-width: 100%;
    min-height: 24px;
    padding: 2px 8px;
    border: 1px solid var(--wc-data-key-border);
    border-radius: var(--wc-radius-pill);
    background: var(--wc-data-key-bg);
    color: var(--wc-data-key-fg);
    /* A bold key, scanned like a column header, so it shares the header's 12px: at
       the 13px caption size a full id (JOB-2026-00019) outgrew its column lane and
       ran into the pill's right edge. */
    font-size: var(--wc-type-table-header-size);
    line-height: 1.2;
}

.wc-record-link {
    color: var(--wc-accent-ink, var(--mud-palette-primary));
}

.wc-record-id--link {
    text-decoration: none;
}

.wc-record-cell {
    min-width: 0;
}

.wc-record-primary {
    font-weight: 700;
    min-width: 0;
}

/* Customer cell: a secondary accent link (deliberately lighter than the 750
   .wc-record-link, since the customer is not the row's primary record). One owner
   for the customer-column weight/color so every table reads identically. */
.wc-customer-link,
.wc-customer-name {
    font-weight: 600;
    min-width: 0;
}

.wc-customer-link {
    color: var(--wc-accent-ink, var(--mud-palette-primary));
}

/* Date cell: tight primary date line + optional muted caption. */
.wc-date-cell {
    min-width: 0;
}

/* Account-access cell: a localized role label stacked over its status chip. The
   role line truncates within the column (long localized roles such as es
   "Miembro del equipo") instead of bleeding into the next column, and the chip
   keeps its content width on its own line so it never clips to a bare icon. */
.wc-access-cell {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 4px;
    min-width: 0;
    max-width: 100%;
}

.wc-access-cell > .mud-typography,
.wc-access-cell .mud-tooltip-root,
.wc-access-cell .mud-tooltip-root > .mud-typography {
    min-width: 0;
    max-width: 100%;
}

/* Block, because the caption it usually renders is an inline span, and ellipsis does
   nothing on an inline box: a long address ran on into the next column. */
.wc-table-secondary-text {
    display: block;
    min-width: 0;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Secondary content that stacks its own lines ellipsizes each line; text-overflow
   on the wrapper alone reaches only its direct text, so nested lines were cut mid-word. */
.wc-table-secondary-text .mud-typography {
    overflow: hidden;
    text-overflow: ellipsis;
}

/* An activity's description is the event itself ("Checklist item … was completed"),
   so it wraps in full instead of trailing off. */
.page-data-grid--activity-timeline .wc-data-cell--description .wc-table-secondary-text {
    white-space: normal;
}

/* A date lane's second line ("Enviado 31/8/2026", "9:00 - 10:30 a. m.") wraps rather than
   losing the date or time to an ellipsis. */
.wc-data-cell--date .wc-table-secondary-text {
    white-space: normal;
    text-overflow: clip;
}

.wc-data-cell--date,
.wc-data-cell--status,
.wc-data-cell--type,
.wc-data-cell--actions,
.wc-data-column--date,
.wc-data-column--numeric,
.wc-data-column--status,
.wc-data-column--type,
.wc-data-column--actions {
    white-space: nowrap;
}

.wc-data-cell--record,
.wc-data-column--record,
.wc-data-cell--description,
.wc-data-column--description {
    overflow-wrap: anywhere;
    white-space: normal;
}

.wc-data-cell--numeric,
.wc-data-column--numeric {
    text-align: right;
    font-variant-numeric: var(--wc-numeric-figures);
}

/* The value lane is sized for money: a single unbreakable token that stays on one
   line. Some rows substitute a multi-word fallback label (e.g. "Billed per visit",
   "No estimate") for an amount; that text must WRAP inside the lane instead of
   bleeding into Actions. overflow:hidden is the final guard so even an unbreakable
   token can never paint outside the column. The header stays nowrap (above). */
.mud-table-body .wc-data-cell--numeric {
    white-space: normal;
    overflow: hidden;
    overflow-wrap: normal;
    word-break: normal;
}

/* Status and type chips never paint outside their column lane, in ANY grid. The
   chip box is clipped to the lane, so a long localized label (e.g. "Awaiting
   approval", es "Pagado parcialmente") can never bleed into the neighbouring column.
   One shared owner; do not re-declare this per page. */
.page-data-grid .wc-data-cell--status .wc-chip,
.page-data-grid .wc-data-cell--type .wc-chip {
    max-width: 100%;
    overflow: hidden;
}

/* Localized labels in narrow lanes take a second line instead of clipping to a
   stub ("Trabaj…", "En progr…") or painting into the next column. The lane width
   never changes; only the row grows. Dates, money and identifiers are single tokens,
   so they still sit on one line. */
.page-data-grid .mud-table-body .wc-data-cell--status .wc-chip {
    height: auto;
    min-height: 24px;
    padding-block: 2px;
    padding-inline: 4px;
}

/* Chips elsewhere carry the 13px label role; inside a table lane they stay at the 12px
   the status and type column plans were measured with, like the column headers. */
.page-data-grid .mud-table-body .wc-data-cell--status .wc-chip,
.page-data-grid .mud-table-body .wc-data-cell--type .wc-chip {
    font-size: var(--text-2xs);
}

/* A 14px icon matches the 12px label (the default 18px glyph costs a status word its
   room). A single word still longer than the lane breaks rather than being cut off. */
.page-data-grid .mud-table-body .wc-data-cell--status .wc-chip .mud-chip-icon {
    width: 14px;
    height: 14px;
    margin-inline-end: 3px;
}

.page-data-grid .mud-table-body .wc-data-cell--status .wc-chip .mud-chip-content {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
    overflow: hidden;
    white-space: normal;
    overflow-wrap: anywhere;
    hyphens: auto;
    text-align: start;
}

/* A grid without a column plan sizes its lanes from content, and a label allowed to
   wrap offers only its longest word: the table starved the lane and "Needs
   attention" stacked inside its chip. One line makes the label the lane's minimum. */
.page-data-grid:not(.page-data-grid--has-column-plan) .mud-table-body .wc-data-cell--status .wc-chip .mud-chip-content {
    white-space: nowrap;
}

.page-data-grid .mud-table-body .wc-data-cell--date {
    white-space: normal;
    overflow-wrap: normal;
}

/* A date is one token and never breaks inside ("10/30/202" over "6"). Date lanes
   hold a full short date (71px at 14px, so 96px with padding); only a fallback
   phrase such as "No due date" may wrap, and only between words. */
.page-data-grid .mud-table-body .wc-date-cell .mud-typography {
    overflow-wrap: normal;
}

/* Contact details are what a contact column is for: an email address takes a second
   line rather than an ellipsis. Phone numbers fit their lane on one line. */
.page-data-grid .mud-table-body .wc-data-cell--email .wc-data-icon-line .mud-typography {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
    white-space: normal;
    overflow-wrap: anywhere;
}

/* The numeric column HEADER must right-align over its right-aligned values. The base
   .mud-table-head left-align (higher specificity) otherwise wins, pinning the label
   left while the value sits right — the wide header-to-value gap on money columns. */
/* Right-align the numeric column HEADER over its right-aligned values. Match BOTH
   the header class (wc-data-column--numeric) AND the cell class (wc-data-cell--numeric):
   pages commonly put the cell class on the header by mistake, and a numeric cell class
   on a header always means a numeric column, so right-aligning it is always correct and
   keeps the header glued to its values regardless of which class the page used. */
.page-data-grid .mud-table-head .mud-table-cell.wc-data-column--numeric,
.page-data-grid .mud-table-head .mud-table-cell.wc-data-cell--numeric {
    text-align: right;
    white-space: nowrap;
    overflow: visible;
}

/* SORTABLE headers wrap the title in a flex .column-header (title + sort icon)
   that ignores text-align, pinning the label at flex-start. Right-align that flex
   row for numeric and actions columns so a sortable money/count header sits over
   its right-aligned values instead of floating at the column's left edge. The sort
   arrow leads the title there, so the title's last letter lines up with the values'
   last digit instead of stopping an invisible arrow's width short of it. */
.mud-table-head .wc-data-column--numeric .column-header,
.mud-table-head .wc-data-cell--numeric .column-header {
    flex-direction: row-reverse;
    justify-content: flex-start;
}

.mud-table-head .wc-data-column--numeric .column-header .sortable-column-header,
.mud-table-head .wc-data-cell--numeric .column-header .sortable-column-header {
    width: auto;
}

/* The sort arrow is hidden until hover or an active sort, yet it holds its place so
   the title never shifts. Keep that reserved slot to the glyph itself. */
.page-data-grid .mud-table-head .column-header .sort-direction-icon {
    padding: 1px;
    margin-inline-start: 0;
}

/* A title still too long for a narrow flex lane ends in an ellipsis instead of losing
   its last letters at the cell edge ("DESCRIPTIO"). Titles wrap between words first. */
.page-data-grid .mud-table-head .column-header .sortable-column-header {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
}

.mud-table-head .wc-data-column--numeric .column-header .sort-direction-icon,
.mud-table-head .wc-data-cell--numeric .column-header .sort-direction-icon {
    margin-inline: 0 2px;
}

/* Center the row-action cluster in its column. The actions column holds a small
   icon/overflow group, so centering it under a centered header reads as a balanced,
   intentional control group instead of being shoved to one edge with dead space on
   the other. */
.mud-table-body .wc-data-cell--actions,
.mud-table-head .wc-data-cell--actions {
    text-align: center;
}

.mud-table-head .wc-data-cell--actions .column-header {
    justify-content: center;
}

.mud-table-body .wc-data-cell--actions .wc-row-actions {
    justify-content: center;
    margin-inline: auto;
}

.wc-data-cell--actions,
.wc-data-column--actions {
    width: 1%;
}

.wc-data-cell--record,
.wc-data-column--record {
    min-width: 128px;
}

.wc-data-cell--date,
.wc-data-column--date {
    min-width: 112px;
}

.wc-data-cell--type,
.wc-data-column--type {
    min-width: 112px;
}

.wc-data-cell--numeric,
.wc-data-column--numeric {
    min-width: 120px;
}

.wc-data-cell--status,
.wc-data-column--status {
    min-width: 112px;
}

.wc-data-cell--actions,
.wc-data-column--actions {
    min-width: 96px;
}

.wc-data-cell--description,
.wc-data-column--description {
    min-width: 160px;
}

.wc-table-numeric-text {
    display: inline-block;
    width: max-content;
    max-width: 100%;
    font-variant-numeric: var(--wc-numeric-figures);
    overflow-wrap: normal;
    word-break: normal;
}

/* A multi-word fallback in the value lane ("Awaiting estimate", es "En espera de
   presupuesto") wraps inside the lane. As max-content it overflowed leftward from
   the right-aligned cell and painted over the date beside it. */
.mud-table-body .wc-data-cell--numeric .wc-table-numeric-text {
    width: auto;
}

/* The fallback renders through the money atom's label variant, which inherits the
   atom's nowrap; in a table lane it wraps like any other label. Amounts are untouched. */
.mud-table-body .wc-data-cell--numeric .wc-money--label,
.mud-table-body .wc-data-cell--numeric .wc-money--label .wc-money__whole {
    white-space: normal;
    overflow-wrap: normal;
    text-overflow: clip;
}

/* Every cell shares the row's vertical centre. MudTooltip and MudText render
   inline-block wrappers, and an inline-block on the default baseline leaves the
   line's descender space below it, so type labels and value fallbacks rode 3-4px
   above their neighbours on every grid. */
.page-data-grid .mud-table-body .mud-table-cell > .mud-tooltip-root,
.page-data-grid .mud-table-body .mud-table-cell > .mud-typography {
    vertical-align: middle;
}

.page-data-grid .wc-data-cell--type .mud-stack {
    flex-wrap: nowrap;
    min-width: 0;
    max-width: 100%;
}

/* MudTooltip adds a wrapper around custom type content. That wrapper must
   participate in the column's min-width contract or its intrinsic label width
   can paint into the adjacent customer lane even when the inner stack truncates. */
.page-data-grid .wc-data-cell--type .mud-tooltip-root {
    min-width: 0;
    max-width: 100%;
    overflow: hidden;
}

.page-data-grid .wc-data-cell--type .mud-typography {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
    min-width: 0;
    overflow: hidden;
    white-space: normal;
    overflow-wrap: normal;
    hyphens: auto;
}

.wc-row-actions {
    min-width: max-content;
}

.wc-row-actions .mud-icon-button,
.wc-row-actions .mud-icon-button-root,
.wc-row-actions .mud-button-root {
    flex: 0 0 auto;
}

.wc-row-actions__overflow,
.wc-row-actions__overflow-button,
.wc-row-actions__overflow-button > .mud-menu-button-activator,
.wc-row-actions__overflow-button > .mud-menu-icon-button-activator {
    flex: 0 0 auto;
}

.wc-data-description {
    display: block;
    max-width: min(34ch, 100%);
}

.wc-data-icon-line {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    max-width: 100%;
    min-width: 0;
}

.wc-data-icon-line .mud-icon-root {
    flex: 0 0 auto;
    opacity: 0.72;
}

.wc-data-icon-line .mud-typography {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Truncation caps are expressed against the root font size so a reader who raises
   the browser's default text size gets a wider cap instead of a tighter clip.
   18.75rem = 300px and 12.5rem = 200px at the 16px root default. */
.text-truncate-cell {
    max-width: 18.75rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

@media (max-width: 1280px) {
    .text-truncate-cell {
        max-width: 12.5rem;
    }
}

@media (min-width: 960px) {
    .page-data-state-shell {
        min-height: clamp(360px, 46vh, 520px);
    }
}

/* WcIdentifierText: overrides the description lane's overflow-wrap:anywhere, which let ids break
   mid-token ("invoice.payment_fa|iled"); breaks now fall at the <wbr> after each separator. */
.wc-identifier-text {
    font-family: var(--wc-font-mono);
    font-size: 0.92em;
    overflow-wrap: break-word;
    word-break: normal;
}

/* ===== WorkCita.Client/wwwroot/css/app.index-grid.layout.css ===== */
/*
 * WorkCita global stylesheet module: app.index-grid.layout.css
 * Ownership: grid loading states, column plans, table geometry, and row chrome.
 * Theme: universal --wc-* tokens only.
 * Load: after app.index-grid.table.css; before app.index-grid.responsive.css.
 */

/* Index-grid loading states. First load swaps the grid for skeleton rows;
   refilters keep the rows mounted but veil and de-activate them so users
   cannot act on stale rows while fresh data is in flight. */
.page-data-grid-shell {
    min-width: 0;
}

.page-data-grid-shell--first-load .page-data-grid {
    display: none;
}

.page-data-grid-shell--refreshing .page-data-grid .mud-table-body {
    opacity: 0.55;
    pointer-events: none;
    transition: opacity var(--wc-motion-fast, 150ms) var(--wc-ease-out-quart, ease-out);
}

.page-data-grid-skeleton {
    border: 1px solid var(--wc-data-border, var(--mud-palette-divider));
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    overflow: hidden;
}

.page-data-grid-skeleton__header,
.page-data-grid-skeleton__row {
    display: grid;
    grid-template-columns: repeat(var(--wc-data-skeleton-columns, 5), minmax(0, 1fr));
    column-gap: var(--wc-space-4, 16px);
    align-items: center;
    min-height: 44px;
    padding: 10px 12px;
    border-bottom: 1px solid var(--wc-data-border);
}

.page-data-grid-skeleton--columns-1 {
    --wc-data-skeleton-columns: 1;
}

.page-data-grid-skeleton--columns-2 {
    --wc-data-skeleton-columns: 2;
}

.page-data-grid-skeleton--columns-3 {
    --wc-data-skeleton-columns: 3;
}

.page-data-grid-skeleton--columns-4 {
    --wc-data-skeleton-columns: 4;
}

.page-data-grid-skeleton--columns-5 {
    --wc-data-skeleton-columns: 5;
}

.page-data-grid-skeleton--columns-6 {
    --wc-data-skeleton-columns: 6;
}

.page-data-grid-skeleton--columns-7 {
    --wc-data-skeleton-columns: 7;
}

.page-data-grid-skeleton--columns-8 {
    --wc-data-skeleton-columns: 8;
}

.page-data-grid-skeleton__header {
    min-height: 38px;
    background: var(--wc-data-header-bg, var(--wc-surface-2));
}

.page-data-grid-skeleton__row:last-child {
    border-bottom: 0;
}

.page-data-grid-skeleton__bar {
    max-width: 82%;
}

.page-data-grid-skeleton__header .page-data-grid-skeleton__bar {
    max-width: 56%;
}

@media (max-width: 599.98px) {
    .page-data-grid-skeleton__header,
    .page-data-grid-skeleton__row {
        grid-template-columns: repeat(min(var(--wc-data-skeleton-columns, 5), 3), minmax(0, 1fr));
    }

    .page-data-grid-skeleton__header .page-data-grid-skeleton__bar:nth-child(n + 4),
    .page-data-grid-skeleton__row .page-data-grid-skeleton__bar:nth-child(n + 4) {
        display: none;
    }
}

.page-data-grid {
    --wc-data-row-height: 44px;
    --wc-data-cell-block: 10px;
    --wc-data-cell-inline: 12px;
    --wc-data-grid-min-width: 0px;
    --wc-data-grid-horizontal-min-width: 840px;
    --wc-data-grid-column-plan-min-width: 0px;
    --wc-data-grid-compact-fit-min-width: 0px;
    --wc-data-actions-min-width: 96px;
    --wc-data-col-select: 44px;
    --wc-data-col-record: 142px;
    --wc-data-col-type: 118px;
    --wc-data-col-customer: 148px;
    --wc-data-col-contact: 170px;
    --wc-data-col-email: 198px;
    /* A formatted US number ("(555) 010-1003", 95px) beside the phone icon. */
    --wc-data-col-phone: 148px;
    --wc-data-col-description: 260px;
    --wc-data-col-status: 124px;
    --wc-data-col-portal-status: 140px;
    --wc-data-col-date: 116px;
    --wc-data-col-numeric: 128px;
    --wc-data-col-actions: 104px;
    --wc-data-queue-compact-actions-min-width: 84px;
    --wc-data-queue-compact-select: 38px;
    /* A full id pill ("JOB-2026-00019", 110px) inside 8px compact cell padding. */
    --wc-data-queue-compact-record: 128px;
    --wc-data-queue-compact-type: 112px;
    --wc-data-queue-compact-customer: 118px;
    --wc-data-queue-compact-contact: 132px;
    --wc-data-queue-compact-email: 156px;
    --wc-data-queue-compact-phone: 116px;
    --wc-data-queue-compact-description: 170px;
    /* Holds the longest single localized status word (es "Presupuestado", 83px)
       beside the chip icon; multi-word labels take a second line. */
    --wc-data-queue-compact-status: 132px;
    --wc-data-queue-compact-portal-status: 112px;
    --wc-data-queue-compact-date: 104px;
    --wc-data-queue-compact-numeric: 126px;
    --wc-data-queue-compact-actions: 88px;
    container-name: wc-data-grid;
    container-type: inline-size;
}

/* The generic fallback pair, inherited by any ColGroup grid that does not
   calibrate its own floors. It is deliberately BELOW the ~955px office lane (see
   the derivation in the calibrated-floors banner below), because these two are
   the failure mode of an uncalibrated grid, not a target for it: the table's
   min-width comes from the first, so a floor above the lane guarantees overflow,
   and the second gates whether the compact tier may be tried at all, so a floor
   above the lane refuses compact and drops a desktop straight to phone cards.
   940/900 means the worst an uncalibrated grid can do is render its own columns
   and, if they overrun, fall back through compact first. */
.page-data-grid--has-column-plan {
    --wc-data-grid-column-plan-min-width: 940px;
    --wc-data-grid-compact-fit-min-width: 900px;
}

/* Queue-specific column-plan width floors stay in the shared table layer so
   responsive table policy has one owner. Feature CSS may style cell content,
   but it must not redefine grid min-width gates. */
.page-data-grid--estimates.page-data-grid--has-column-plan {
    --wc-data-grid-column-plan-min-width: 1016px;
    --wc-data-grid-compact-fit-min-width: 860px;
}

/* The sent date carries "Waiting 3 days" beneath it (90px at 13px); 112px holds
   it on one line inside compact padding. */
.page-data-grid--estimates.page-data-grid--compact-fit {
    --wc-data-col-date: 112px;
}

.page-data-grid--reconciliation.page-data-grid--has-column-plan {
    --wc-data-col-record: 124px;
    --wc-data-col-customer: 132px;
    --wc-data-col-numeric: 108px;
    --wc-data-col-status: 152px;
    --wc-data-grid-column-plan-min-width: 1084px;
    --wc-data-grid-compact-fit-min-width: 948px;
}

.page-data-grid--reconciliation.page-data-grid--compact-fit {
    /* Both record lanes hold identifier pills; status labels wrap to two lines. */
    --wc-data-col-record: 128px;
    --wc-data-col-customer: 108px;
    --wc-data-col-numeric: 104px;
    --wc-data-col-status: 124px;
    --wc-data-col-date: 90px;
}

/* Customers preserve the existing plan floors while giving long email addresses
   more room than phone values and portal status a readable semantic lane. The full
   email lane holds a typical address (~175px) beside its icon on one line; the name
   stays the flex column.
   Full: 44+138+228+148+116+160+104 = 938px.
   Compact: 38+108+180+116+118+152+88 = 800px. */
.page-data-grid--customers.page-data-grid--has-column-plan {
    --wc-data-col-record: 138px;
    --wc-data-col-email: 228px;
    --wc-data-col-numeric: 116px;
    --wc-data-col-portal-status: 160px;
    --wc-data-grid-column-plan-min-width: 938px;
    --wc-data-grid-compact-fit-min-width: 800px;
    --wc-data-queue-compact-portal-status: 152px;
}

.page-data-grid--customers.page-data-grid--compact-fit {
    --wc-data-col-record: 108px;
    --wc-data-col-email: 180px;
    --wc-data-col-numeric: 118px;
}

/* Customer jobs compact uses the queue-compact lanes: record 128 + description 170 +
   status 132 + numeric 126 + actions 88 = 644, so the 690px main column of a
   customer page at 1280 keeps a table instead of stacked rows. */
.page-data-grid--customer-jobs.page-data-grid--has-column-plan {
    --wc-data-grid-column-plan-min-width: 754px;
    --wc-data-grid-compact-fit-min-width: 660px;
}

/* Activity feeds are compact detail tables, not routed queues. Give their five
   stable columns a smaller shared plan so desktop detail pages do not collapse
   into responsive rows just because the generic queue plan is too wide. The type
   lane holds a category icon plus one word such as es "Asignaciones".
   Full: 160 + 136 + 280 + 116 + 172 = 864. Compact: 120 + 140 + 160 + 116 + 132 = 668; at 128 the
   compact type lane clipped "Assignments" after its icon and padding, and a 112 record lane
   clipped the id pill ("JOB-2026-00017"). The date lane stacks date over time. */
.page-data-grid--activity-timeline.page-data-grid--has-column-plan {
    --wc-data-col-date: 160px;
    --wc-data-col-type: 136px;
    --wc-data-col-description: 280px;
    --wc-data-col-status: 116px;
    --wc-data-col-record: 172px;
    --wc-data-grid-column-plan-min-width: 864px;
    --wc-data-grid-compact-fit-min-width: 676px;
}

.page-data-grid--activity-timeline.page-data-grid--compact-fit {
    --wc-data-col-date: 120px;
    --wc-data-col-type: 140px;
    --wc-data-col-description: 160px;
    --wc-data-col-status: 116px;
    --wc-data-col-record: 132px;
    --wc-data-grid-column-plan-min-width: var(--wc-data-grid-compact-fit-min-width);
}

/* Employees: select 44 + record(flex) + access 160 + activity 116 + actions 112.
   The Account Access column stacks a localized role over a status chip, so it
   needs more room than the generic 124px queue default (which clipped the chip to
   a bare icon); Last Activity stacks date over time and keeps the standard date
   width instead of bleeding the time into Actions. */
.page-data-grid--employees.page-data-grid--has-column-plan {
    --wc-data-col-status: 160px;
    --wc-data-grid-column-plan-min-width: 660px;
    --wc-data-grid-compact-fit-min-width: 540px;
}

.page-data-grid--employees.page-data-grid--compact-fit {
    --wc-data-col-status: 140px;
}

/* The jobs queue keeps one flex Description lane. Its full plan reserves 970px
   for fixed columns and 222px for Description, preserving the 1192px laptop floor.
   Compact fixed lanes total 952px:
   select 38 + record 128 + type 120 + customer 118 + status 132 + date 96 +
   value 132 + actions 88. Description needs another 116px for its sortable header.
   Below the 1068px compact floor the shared responsive-row owner takes over;
   admitting the old 920px floor starved Description and clipped its header. */
.page-data-grid--jobs.page-data-grid--has-column-plan {
    --wc-data-col-type: 132px;
    --wc-data-col-date: 124px;
    --wc-data-col-numeric: 144px;
    --wc-data-col-actions: 112px;
    --wc-data-actions-min-width: 112px;
    --wc-data-grid-column-plan-min-width: 1192px;
    --wc-data-grid-compact-fit-min-width: 1068px;
}

/* Compact labels wrap to two lines instead of truncating (app.index-grid.table.css),
   so each lane only has to hold its longest single word: Type 120px for es
   "presupuesto" beside the type icon, Status 132px for es "Presupuestado" beside the
   chip icon, value 132px for the 116px label + 16px padding. Customer names wrap at
   118px, and Description keeps at least 116px at the compact floor. */
.page-data-grid--jobs.page-data-grid--compact-fit {
    --wc-data-col-record: 128px;
    --wc-data-col-type: 120px;
    --wc-data-col-customer: 118px;
    --wc-data-col-status: 132px;
    --wc-data-col-date: 96px;
    --wc-data-col-numeric: 132px;
    --wc-data-col-actions: 88px;
    --wc-data-actions-min-width: 88px;
}

/* -----------------------------------------------------------------------------
   Calibrated floors for the remaining ColGroup grids.

   The generic pair above used to be a routed-office-queue plan (1184/1040), and
   every grid that ships a ColGroup inherits it: 1040 refused the compact tier and
   the 1184px table overflowed the clipped container, so an uncalibrated grid fell
   all the way to phone cards ON A DESKTOP and returned to a table only near
   1440px. It is now 940/900. See the note there for why below-the-lane is the
   correct direction for a fallback.

   The lane those floors clear, at 1280px on an office route:

       1280 - 260 (permanent drawer) - 2x24 (shell padding) - ~15 (scrollbar)
       = ~955px

   Card padding is NOT in that subtraction. A command surface bleeds its grid body
   to the card edge (app.office.css, `.office-command-surface
   .office-section-card-body` margin-inline: -1 * --wc-card-padding-inline), so
   the card's 16px cancels. An earlier version of this comment subtracted 2x18px
   of card padding and omitted the scrollbar, landing on ~936px. The jobs queue
   uses its own surface without the bleed, so its lane is 955 - 2x16 = ~923px;
   it uses responsive rows there because its readable compact plan needs 1068px.
   Every floor below was calibrated against the conservative 936 figure,
   so they all still clear the real lane - the number was wrong, none of the
   decisions were. Each block states the sum its floors come from; the compact
   sum is what has to clear the lane.
   ----------------------------------------------------------------------------- */

/* Field checklists: name(flex) 142 + items 128 + required 128 + status 124 +
   updated 116 + actions 104 = 742. Compact: 124 + 126 + 126 + 132 + 104 + 88 = 700. */
.page-data-grid--field-checklists.page-data-grid--has-column-plan {
    --wc-data-grid-column-plan-min-width: 742px;
    --wc-data-grid-compact-fit-min-width: 700px;
}

/* Pricebook catalog sections run TableMode.Catalog, whose --wc-data-col-type:150px
   also outranks the compact tier (same specificity, later source order), so the
   type lane is 150px in both plans.
   Full: name 142 + description(flex) 260 + type 150 + actions 104 = 656.
   Compact: 124 + 170 + 150 + 88 = 532. */
.page-data-grid--pricebook-catalog.page-data-grid--has-column-plan {
    --wc-data-grid-column-plan-min-width: 656px;
    --wc-data-grid-compact-fit-min-width: 532px;
}

/* Inventory admin sections share one grid modifier. The floors take the widest
   of the six (Balances: item 142 + location 118 + five counts at 128 = 900;
   compact 124 + 112 + five at 126 = 866), so the narrower sections are simply
   wider than they need to be rather than collapsing early. Both clear the lane. */
.page-data-grid--inventory.page-data-grid--has-column-plan {
    --wc-data-grid-column-plan-min-width: 900px;
    --wc-data-grid-compact-fit-min-width: 866px;
}

/* Platform companies: name(flex) 142 + email 198 + phone 148 + subscription 124 +
   created 116 + 2FA 118 + actions 104 = 950 — just past the lane, so 1280px runs
   the compact plan: 124 + 156 + 116 + 132 + 104 + 112 + 88 = 832. */
.page-data-grid--platform-companies.page-data-grid--has-column-plan {
    --wc-data-grid-column-plan-min-width: 950px;
    --wc-data-grid-compact-fit-min-width: 832px;
}

/* Platform users: name(flex) 142 + email 170 + role 118 + memberships 128 +
   verified 140 + created 116 + actions 104 = 918, which fits the lane outright.
   Compact: 124 + 132 + 112 + 126 + 132 + 104 + 88 = 818. */
.page-data-grid--platform-users.page-data-grid--has-column-plan {
    /* "Email verified" plus its icon remains whole with the Linux fallback font. */
    --wc-data-col-status: 140px;
    --wc-data-grid-column-plan-min-width: 918px;
    --wc-data-grid-compact-fit-min-width: 818px;
}

.page-data-grid--platform-users.page-data-grid--compact-fit {
    --wc-data-col-status: 132px;
}

/* Platform user memberships sit inside a detail section card:
   company(flex) 142 + role 118 + status 124 + actions 104 = 488.
   Compact: 124 + 112 + 132 + 88 = 456. */
.page-data-grid--platform-user-memberships.page-data-grid--has-column-plan {
    --wc-data-grid-column-plan-min-width: 488px;
    --wc-data-grid-compact-fit-min-width: 456px;
}

/* Platform outbox dead letters carry eight lanes (actions render conditionally).
   Retry count is a small integer, so it takes a narrower numeric lane than the
   money default in both plans.
   Full: company 142 + message(flex) 260 + retries 96 + category 118 + code 118 +
   last failure 116 + created 116 + actions 104 = 1070.
   Compact: 112 + 140 + 84 + 104 + 104 + 92 + 92 + 84 = 812. */
.page-data-grid--platform-outbox-dead-letters.page-data-grid--has-column-plan {
    --wc-data-col-numeric: 96px;
    --wc-data-grid-column-plan-min-width: 1070px;
    --wc-data-grid-compact-fit-min-width: 812px;
}

.page-data-grid--platform-outbox-dead-letters.page-data-grid--compact-fit {
    --wc-data-col-record: 112px;
    --wc-data-col-description: 140px;
    --wc-data-col-numeric: 84px;
    --wc-data-col-type: 104px;
    --wc-data-col-date: 92px;
    --wc-data-col-actions: 84px;
    --wc-data-actions-min-width: 84px;
}

/* Platform webhook dead letters are the widest grid in the client at nine lanes,
   so both plans are hand-cut rather than inherited. The flex event-id lane is
   reserved but not declared (width:auto absorbs the slack).
   Full: company 142 + event id(flex) 200 + event type 200 + retries 96 +
   last attempt 116 + category 124 + payload 112 + updated 116 + actions 104 = 1210.
   Compact: 104 + 120 + 140 + 76 + 88 + 100 + 92 + 88 + 84 = 892 — the tightest
   honest fit for nine lanes in the ~936px lane. */
.page-data-grid--platform-webhook-dead-letters.page-data-grid--has-column-plan {
    --wc-data-col-description: 200px;
    --wc-data-col-numeric: 96px;
    --wc-data-col-status: 112px;
    --wc-data-grid-column-plan-min-width: 1210px;
    --wc-data-grid-compact-fit-min-width: 892px;
}

.page-data-grid--platform-webhook-dead-letters.page-data-grid--compact-fit {
    --wc-data-col-record: 104px;
    --wc-data-col-description: 140px;
    --wc-data-col-numeric: 76px;
    --wc-data-col-date: 88px;
    --wc-data-col-type: 100px;
    --wc-data-col-status: 92px;
    --wc-data-col-actions: 84px;
    --wc-data-actions-min-width: 84px;
}

/* Customer portal queues run the same drawer + shell + card chrome as the office,
   so they share the ~936px lane budget. Each floor is the plain sum of its
   ColGroup at the shared standard / compact widths. */

/* record(flex) 142 + status 124 + visit 136 + total 128 + actions 104 = 634;
   compact 124 + 132 + 124 + 126 + 88 = 594. The visit lane holds the date over a time
   range, which in Spanish ("9:00 - 10:30 a. m.") needs ~121px with padding. */
.page-data-grid--portal-jobs.page-data-grid--has-column-plan {
    --wc-data-col-date: 136px;
    --wc-data-queue-compact-date: 124px;
    --wc-data-grid-column-plan-min-width: 634px;
    --wc-data-grid-compact-fit-min-width: 594px;
}

/* record 142 + record 142 + description(flex) 260 + date 116 + status 124 +
   total 128 + actions 104 = 1016; compact 124 + 124 + 170 + 104 + 132 + 126 + 88 = 868. */
.page-data-grid--portal-estimates.page-data-grid--has-column-plan {
    --wc-data-grid-column-plan-min-width: 1016px;
    --wc-data-grid-compact-fit-min-width: 868px;
}

/* record(flex) 142 + issued 116 + due 116 + total 128 + balance 128 + status 124 +
   actions 104 = 858; compact 124 + 104 + 104 + 126 + 126 + 132 + 88 = 804. */
.page-data-grid--portal-invoices.page-data-grid--has-column-plan {
    --wc-data-grid-column-plan-min-width: 858px;
    --wc-data-grid-compact-fit-min-width: 804px;
}

/* date 136 + description(flex) 260 + status 124 + record 142 + actions 104 = 766;
   compact 124 + 170 + 132 + 124 + 88 = 638. The date lane carries "Enviado 31/8/2026". */
.page-data-grid--portal-job-requests.page-data-grid--has-column-plan {
    --wc-data-col-date: 136px;
    --wc-data-queue-compact-date: 124px;
    --wc-data-grid-column-plan-min-width: 766px;
    --wc-data-grid-compact-fit-min-width: 638px;
}

/* date 192 + description(flex) 260 + description 260 + status 124 + actions 104 = 940;
   compact 192 + 170 + 170 + 132 + 88 = 752. */
.page-data-grid--portal-notification-history.page-data-grid--has-column-plan {
    --wc-data-col-date: 192px;
    --wc-data-grid-column-plan-min-width: 940px;
    --wc-data-grid-compact-fit-min-width: 752px;
}

/* record 142 + description(flex) 260 + status 124 + type 118 + date 116 +
   total 128 + actions 104 = 992; compact 124 + 170 + 132 + 112 + 104 + 126 + 88 = 856. */
.page-data-grid--portal-recurring-services.page-data-grid--has-column-plan {
    --wc-data-grid-column-plan-min-width: 992px;
    --wc-data-grid-compact-fit-min-width: 856px;
}

.page-data-grid--mode-queue.page-data-grid--has-pager .mud-table-container {
    border-right: 0;
    border-bottom: 0;
    border-left: 0;
    border-radius: 0 0 var(--wc-card-radius, var(--border-radius-md)) var(--wc-card-radius, var(--border-radius-md));
    box-shadow: none;
}

.page-data-grid--mode-queue.page-data-grid--has-pager .mud-table-head .mud-table-cell,
.page-data-grid--mode-queue.page-data-grid--has-pager .mud-data-grid-header .mud-table-cell {
    background: var(--wc-surface-2);
}

.page-data-grid--mode-queue.page-data-grid--action-rail .wc-data-cell--actions,
.page-data-grid--mode-queue.page-data-grid--office-list .wc-data-cell--actions {
    box-shadow: none;
}

.page-data-grid--mode-queue .wc-row-actions__primary--labeled.mud-button-root {
    min-width: 128px;
    min-height: 34px;
    padding: 0 12px;
    border: 1px solid var(--wc-tone-primary-soft-border);
    border-radius: var(--wc-panel-radius);
    background: var(--wc-tone-primary-soft-bg);
    color: var(--wc-tone-primary-soft-fg, var(--mud-palette-primary));
    font-size: var(--wc-type-caption-size);
    font-weight: var(--font-bold);
    line-height: 1.1;
    letter-spacing: 0;
    text-transform: none;
    box-shadow: none;
}

.page-data-grid--mode-queue .wc-row-actions__primary--labeled.mud-button-root:hover {
    border-color: var(--wc-accent, var(--mud-palette-primary));
    background: var(--wc-tone-primary-soft-bg);
    color: var(--wc-accent-strong, var(--mud-palette-primary));
}

.page-data-grid--mode-queue .wc-row-actions__primary--labeled .mud-button-icon-start {
    margin-inline-end: 6px;
}

.page-data-grid--mode-queue .wc-row-actions__overflow-button,
.page-data-grid--mode-queue .wc-row-actions__overflow-button > .mud-menu-button-activator,
.page-data-grid--mode-queue .wc-row-actions__overflow-button > .mud-menu-icon-button-activator {
    border-radius: var(--wc-panel-radius);
}

@media (max-width: 959.98px) {
    .page-data-grid--mode-queue.page-data-grid--has-pager .mud-table-container {
        border: 0;
        border-radius: 0;
        background: transparent;
    }
}

@media (max-width: 599.98px) {
    .page-data-grid--mode-queue .wc-row-actions__primary--labeled.mud-button-root {
        flex: 1 1 auto;
        min-width: min(100%, 9rem) !important;
    }
}

.page-data-grid--job-requests.page-data-grid--has-column-plan {
    --wc-data-grid-column-plan-min-width: 902px;
    --wc-data-grid-compact-fit-min-width: 694px;
}

.page-data-grid--recurring-services.page-data-grid--has-column-plan {
    --wc-data-grid-column-plan-min-width: 970px;
    --wc-data-grid-compact-fit-min-width: 772px;
    /* Visits is a short count; its lane goes to Next visit ("Due in 14 days") and
       Status ("Awaiting approval"), which wrapped. Service stays the flex column. */
    --wc-data-col-numeric: 88px;
    --wc-data-col-date: 132px;
    --wc-data-col-status: 160px;
}

.page-data-grid--recurring-services.page-data-grid--compact-fit {
    --wc-data-col-numeric: 72px;
    --wc-data-col-date: 120px;
    --wc-data-col-status: 152px;
}

/* The invoices queue carries nine visible lanes, including two money columns.
   Its compact record lanes must still fit full business numbers and its action
   lane must fit the compact icon controls; otherwise identifiers and actions
   paint into their neighbours even when the table itself reports no overflow. */
.page-data-grid--invoices.page-data-grid--has-column-plan {
    --wc-data-grid-column-plan-min-width: 1184px;
    --wc-data-grid-compact-fit-min-width: 920px;
}

/* Both record lanes hold an identifier pill (~104px + 16px padding). Status uses the
   shared compact lane. Customer is the flex column and absorbs the difference:
   38 + 128 + 128 + 132 + 102 + 102 + 96 + 96 = 822px fixed, ~146px customer at 1280.
   The 96px date lane holds a full short date (71px) and its header (79px) on one
   line each. */
.page-data-grid--invoices.page-data-grid--compact-fit {
    --wc-data-col-record: 128px;
    --wc-data-col-customer: 104px;
    --wc-data-col-status: 132px;
    --wc-data-col-numeric: 102px;
    --wc-data-col-date: 96px;
    --wc-data-col-actions: 96px;
    --wc-data-actions-min-width: 96px;
}

/* Pricebook is a catalog-shaped office queue. Keep it on the shared record /
   type / type / numeric / actions rhythm instead of restoring the old sparse
   three-content-column recipe. */
.page-data-grid--pricebook.page-data-grid--has-column-plan {
    --wc-data-col-record: 320px;
    --wc-data-col-type: 140px;
    --wc-data-col-numeric: 124px;
    --wc-data-col-actions: 112px;
    --wc-data-grid-column-plan-min-width: 836px;
    --wc-data-grid-compact-fit-min-width: 712px;
}

.page-data-grid--pricebook.page-data-grid--compact-fit {
    --wc-data-col-record: 260px;
    --wc-data-col-type: 120px;
    --wc-data-col-numeric: 112px;
    --wc-data-col-actions: 100px;
}

.page-data-grid--mode-catalog .mud-table-pagination {
    padding-top: var(--wc-space-2, 8px);
    padding-bottom: var(--wc-space-1, 4px);
}

.page-data-grid--mode-catalog .wc-data-cell--actions {
    width: 1%;
    white-space: nowrap;
}

.page-data-grid--density-compact {
    --wc-data-cell-block: 8px;
    --wc-data-cell-inline: 10px;
}

.page-data-grid--mode-queue {
    --wc-data-grid-horizontal-min-width: 840px;
}

.page-data-grid--mode-compact {
    --wc-data-grid-horizontal-min-width: 32rem;
}

.page-data-grid--mode-ledger {
    --wc-data-grid-horizontal-min-width: 42.5rem;
}

.page-data-grid--mode-catalog {
    --wc-data-grid-horizontal-min-width: 34rem;
}

.page-data-grid--mode-editable {
    --wc-data-grid-horizontal-min-width: 47.5rem;
    --wc-data-row-height: 48px;
}

.page-data-grid--mode-report {
    --wc-data-grid-horizontal-min-width: 54rem;
}

.page-data-grid--financial-summary {
    --wc-data-row-height: 38px;
    --wc-data-cell-block: 8px;
    --wc-data-grid-horizontal-min-width: 20rem;
}

.page-data-grid--financial-summary .mud-table-head {
    display: none;
}

.page-data-grid--financial-summary .wc-financial-summary-table__row--emphasis .mud-table-cell {
    background: var(--wc-surface-2, var(--mud-palette-background-grey));
}

.page-data-grid--allow-horizontal-scroll {
    --wc-data-grid-min-width: var(--wc-data-grid-horizontal-min-width);
}

.page-data-grid--compact-fit {
    --wc-data-cell-block: 8px;
    --wc-data-cell-inline: 8px;
    --wc-data-actions-min-width: var(--wc-data-queue-compact-actions-min-width);
    --wc-data-col-select: var(--wc-data-queue-compact-select);
    --wc-data-col-record: var(--wc-data-queue-compact-record);
    --wc-data-col-type: var(--wc-data-queue-compact-type);
    --wc-data-col-customer: var(--wc-data-queue-compact-customer);
    --wc-data-col-contact: var(--wc-data-queue-compact-contact);
    --wc-data-col-email: var(--wc-data-queue-compact-email);
    --wc-data-col-phone: var(--wc-data-queue-compact-phone);
    --wc-data-col-description: var(--wc-data-queue-compact-description);
    --wc-data-col-status: var(--wc-data-queue-compact-status);
    --wc-data-col-portal-status: var(--wc-data-queue-compact-portal-status);
    --wc-data-col-date: var(--wc-data-queue-compact-date);
    --wc-data-col-numeric: var(--wc-data-queue-compact-numeric);
    --wc-data-col-actions: var(--wc-data-queue-compact-actions);
    --wc-data-grid-column-plan-min-width: var(--wc-data-grid-compact-fit-min-width);
}

.page-data-grid--has-column-plan.page-data-grid--compact-fit {
    --wc-data-grid-column-plan-min-width: var(--wc-data-grid-compact-fit-min-width);
}

.page-data-grid col.wc-data-col--select {
    width: var(--wc-data-col-select);
}

.page-data-grid col.wc-data-col--record {
    width: var(--wc-data-col-record);
}

.page-data-grid col.wc-data-col--type {
    width: var(--wc-data-col-type);
}

.page-data-grid col.wc-data-col--customer {
    width: var(--wc-data-col-customer);
}

.page-data-grid col.wc-data-col--contact {
    width: var(--wc-data-col-contact);
}

.page-data-grid col.wc-data-col--email {
    width: var(--wc-data-col-email);
}

.page-data-grid col.wc-data-col--phone {
    width: var(--wc-data-col-phone);
}

.page-data-grid col.wc-data-col--description {
    width: var(--wc-data-col-description);
}

.page-data-grid col.wc-data-col--status {
    width: var(--wc-data-col-status);
}

.page-data-grid col.wc-data-col--portal-status {
    width: var(--wc-data-col-portal-status);
}

.page-data-grid col.wc-data-col--date {
    width: var(--wc-data-col-date);
}

.page-data-grid col.wc-data-col--numeric {
    width: var(--wc-data-col-numeric);
}

/* "Internal unit cost" (121px in 12px caps) is the longest money title; a shared
   numeric lane let it run left into "Price". */
.page-data-grid--pricebook col.wc-data-col--unit-cost {
    width: calc(var(--wc-data-col-numeric) + 32px);
}

.page-data-grid col.wc-data-col--actions {
    width: var(--wc-data-col-actions);
}

/* Single flexible content column per grid. Under table-layout:fixed, surplus lane
   width (lane minus the sum of declared <col> widths) is split PROPORTIONALLY across
   every column that has a fixed width — which inflated actions/numeric/status/date
   inconsistently from table to table (actions measured 96-210px). Giving exactly one
   content column width:auto makes it absorb ALL surplus, so the control columns hold
   their planned --wc-data-col-* widths identically on every table. The auto column is
   the description where present, else the customer/record name column. */
.page-data-grid--jobs col.wc-data-col--description,
.page-data-grid--job-requests col.wc-data-col--description,
.page-data-grid--recurring-services col.wc-data-col--description,
.page-data-grid--invoices col.wc-data-col--customer,
.page-data-grid--estimates col.wc-data-col--customer,
.page-data-grid--reconciliation col.wc-data-col--customer,
.page-data-grid--customers col.wc-data-col--record,
.page-data-grid--employees col.wc-data-col--record,
.page-data-grid--pricebook col.wc-data-col--record {
    width: auto;
}

/* Reusable flex-column marker: any ColGroup can tag its single content <col> with
   wc-data-col--flex to make it the slack absorber, instead of enumerating the grid
   per modifier above. Used by the catalog, portal, and platform ColGroups. */
.page-data-grid col.wc-data-col--flex {
    width: auto;
}

/* Catalog now runs a fixed column plan (ColGroup added). Give its Type classifier
   column room for "System default" and let Description be the flex column. */
.page-data-grid--mode-catalog {
    --wc-data-col-type: 150px;
}

.page-data-grid .mud-table-container {
    max-width: 100%;
    border-radius: var(--wc-panel-radius, var(--wc-card-radius, var(--border-radius-md)));
    border: 1px solid var(--wc-data-grid-border, var(--wc-data-border, var(--mud-palette-divider)));
    overflow-x: hidden;
    background: var(--wc-surface-1, var(--mud-palette-surface));
    box-shadow: var(--wc-surface-shadow-xs, var(--shadow-xs));
}

.wc-section-card-body .page-data-grid .mud-table-container {
    border-radius: 0;
    border-right: 0;
    border-left: 0;
    border-bottom: 0;
    box-shadow: none;
}

.page-data-grid--allow-horizontal-scroll .mud-table-container {
    overflow-x: auto;
}

.page-data-grid .mud-table,
.page-data-grid .mud-table-root {
    width: 100%;
    min-width: var(--wc-data-grid-min-width);
    border-collapse: separate;
    border-spacing: 0;
    table-layout: auto;
}

.page-data-grid--has-column-plan .mud-table,
.page-data-grid--has-column-plan .mud-table-root {
    width: max(100%, var(--wc-data-grid-min-width), var(--wc-data-grid-column-plan-min-width));
    min-width: max(var(--wc-data-grid-min-width), var(--wc-data-grid-column-plan-min-width));
    table-layout: fixed;
}

.page-data-grid .mud-table-head .mud-table-cell,
.page-data-grid .mud-data-grid-header .mud-table-cell {
    /* Important for the same reason the body cells are: the global 16px
       .mud-table-cell padding is !important, and it pushed every column title
       4-8px right of the values beneath it. */
    padding: 9px var(--wc-data-cell-inline) !important;
    border-bottom: 1px solid var(--wc-data-grid-border, var(--wc-data-border, var(--mud-palette-divider)));
    background: var(--wc-data-header-bg-strong, var(--wc-data-header-bg, var(--wc-surface-2)));
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font-family: var(--wc-type-table-header-family);
    font-size: var(--wc-type-table-header-size);
    /* 700 keeps headers scannable without out-shouting cell content; 800 read
       louder than the product's quiet type register. */
    font-weight: var(--wc-type-table-header-weight);
    letter-spacing: var(--wc-type-table-header-tracking);
    line-height: var(--wc-type-table-header-leading);
    text-transform: uppercase;
    white-space: normal;
    overflow-wrap: normal;
    word-break: normal;
    hyphens: none;
}

.page-data-grid .mud-table-body .mud-table-cell,
.page-data-grid .mud-table .mud-table-cell,
.page-data-grid .mud-data-grid-cell {
    min-height: var(--wc-data-row-height);
    padding: var(--wc-data-cell-block) var(--wc-data-cell-inline) !important;
    border-bottom: 1px solid var(--wc-data-border);
    overflow-wrap: anywhere;
    vertical-align: middle;
}

.page-data-grid .mud-table-body .mud-table-row:nth-child(even) > .mud-table-cell,
.page-data-grid .mud-data-grid-row:nth-child(even) > .mud-data-grid-cell {
    background: rgba(var(--wc-surface-2-rgb), 0.52);
}

.page-data-grid .mud-table-body .mud-table-row:last-child .mud-table-cell {
    border-bottom-color: transparent;
}

.page-data-grid .mud-table-row:hover > .mud-table-cell,
.page-data-grid .mud-table-row.mud-table-row-hover:hover > .mud-table-cell,
.page-data-grid .mud-data-grid-row:hover > .mud-data-grid-cell {
    background: var(--wc-data-row-hover) !important;
}

.page-data-grid .mud-table-row.mud-selected > .mud-table-cell,
.page-data-grid .mud-data-grid-row.mud-selected > .mud-data-grid-cell {
    background: var(--wc-data-row-selected);
}

.page-data-grid .mud-table-pagination,
.page-data-grid .mud-data-grid-footer {
    min-height: 48px;
    border-top: 1px solid var(--wc-data-border, var(--mud-palette-divider));
}

/* ===== WorkCita.Client/wwwroot/css/app.index-grid.responsive.css ===== */
/*
 * WorkCita global stylesheet module: app.index-grid.responsive.css
 * Ownership: compact-fit controls, pager alignment, responsive row stacking, and empty teardown.
 * Theme: universal --wc-* tokens only.
 * Load: after app.index-grid.layout.css; before stat-strip modules.
 */

/* Right-align the office pager toolbar explicitly (owner-controlled, not left to the
   MudBlazor default) so it matches the right-aligned WcPagination on portal/platform. */
.page-data-grid .mud-table-pagination-toolbar {
    justify-content: flex-end;
}

.page-data-grid .mud-pagination {
    margin-top: 12px;
}

.page-data-grid--compact-fit .wc-record-id {
    padding-inline: 6px;
}

.page-data-grid--compact-fit .wc-chip {
    padding-inline: 6px;
}

.page-data-grid--compact-fit .wc-data-description {
    max-width: min(30ch, 100%);
}

.page-data-grid--compact-fit .wc-row-actions {
    min-width: 0;
    gap: 0 !important;
}

/* MudMenu puts the overflow class on its wrapper div as well as the activator, so
   the wrapper is listed only through its activator child: sizing and padding the
   wrapper too dropped the kebab 6px below the primary icon beside it. */
.page-data-grid--compact-fit .wc-row-actions .mud-icon-button,
.page-data-grid--compact-fit .wc-row-actions .mud-icon-button-root,
.page-data-grid--compact-fit .wc-row-actions .wc-row-actions__overflow-button.mud-button-root,
.page-data-grid--compact-fit .wc-row-actions .wc-row-actions__overflow-button > .mud-menu-button-activator,
.page-data-grid--compact-fit .wc-row-actions .wc-row-actions__overflow-button > .mud-menu-icon-button-activator {
    width: 36px;
    min-width: 36px;
    height: 36px;
    min-height: 36px;
    padding: 6px;
}

/* Compact desktop plans keep action names in the accessibility tree through
   their aria-labels while rendering the same icon-first rail used by the Jobs
   reference queue. Labeled MudButtons otherwise retain a 128px visual floor
   and paint across adjacent invoice columns even though the rail is only 96px. */
.page-data-grid--compact-fit .wc-row-actions__primary--labeled.mud-button-root {
    width: 36px;
    min-width: 36px;
    height: 36px;
    min-height: 36px;
    padding: 6px;
}

.page-data-grid--compact-fit .wc-row-actions__primary--labeled .mud-button-label,
.page-data-grid--compact-fit .wc-row-actions__overflow-button .mud-button-label {
    font-size: 0;
}

.page-data-grid--compact-fit .wc-row-actions__primary--labeled .mud-button-icon-start,
.page-data-grid--compact-fit .wc-row-actions__overflow-button .mud-button-icon-end {
    margin-inline: 0;
}

.page-data-grid--jobs .wc-data-cell--record {
    min-width: 128px;
}

.page-data-grid--jobs .wc-data-column--type,
.page-data-grid--jobs .wc-data-cell--type {
    min-width: 112px;
}

.page-data-grid--jobs .wc-data-column--date,
.page-data-grid--jobs .wc-data-cell--date {
    min-width: 116px;
}

.page-data-grid--jobs .wc-data-cell--status {
    min-width: 112px;
}

.page-data-grid--jobs .wc-data-column--numeric,
.page-data-grid--jobs .wc-data-cell--numeric {
    min-width: 120px;
}

.page-data-grid--jobs .wc-data-cell--actions {
    min-width: 96px;
}

.page-data-grid--compact-fit .wc-data-cell--record,
.page-data-grid--compact-fit .wc-data-column--record {
    min-width: var(--wc-data-col-record);
}

.page-data-grid--compact-fit .wc-data-cell--customer,
.page-data-grid--compact-fit .wc-data-column--customer {
    min-width: var(--wc-data-col-customer);
}

.page-data-grid--compact-fit .wc-data-cell--type,
.page-data-grid--compact-fit .wc-data-column--type {
    min-width: var(--wc-data-col-type);
}

.page-data-grid--compact-fit .wc-data-cell--status,
.page-data-grid--compact-fit .wc-data-column--status {
    min-width: var(--wc-data-col-status);
}

.page-data-grid--compact-fit .wc-data-cell--date,
.page-data-grid--compact-fit .wc-data-column--date {
    min-width: var(--wc-data-col-date);
}

.page-data-grid--compact-fit .wc-data-cell--numeric,
.page-data-grid--compact-fit .wc-data-column--numeric {
    min-width: var(--wc-data-col-numeric);
}

.page-data-grid--compact-fit .wc-data-cell--description,
.page-data-grid--compact-fit .wc-data-column--description {
    min-width: min(120px, var(--wc-data-col-description));
}

.page-data-grid--compact-fit .wc-data-cell--actions,
.page-data-grid--compact-fit .wc-data-column--actions {
    min-width: var(--wc-data-col-actions);
}

.page-data-grid .wc-data-cell--description .mud-tooltip-root {
    max-width: 100%;
    min-width: 0;
}

.page-data-grid--manual-tax-rates .wc-data-cell--record {
    min-width: 180px;
}

.page-data-grid--manual-tax-rates .wc-data-cell--status {
    min-width: 116px;
}

.page-data-grid--manual-tax-rates .wc-data-cell--manual-tax-components {
    min-width: 128px;
}

.page-data-grid--manual-tax-rates .wc-data-cell--actions {
    min-width: 104px;
}

.page-data-grid--action-rail .wc-data-cell--actions,
.page-data-grid--office-list .wc-data-cell--actions {
    position: static;
    background: var(--wc-surface-1, var(--mud-palette-surface));
    box-shadow: inset 1px 0 0 var(--wc-data-border, var(--mud-palette-divider));
}

.page-data-grid--inline-fit.page-data-grid--action-rail .wc-data-cell--actions,
.page-data-grid--inline-fit.page-data-grid--office-list .wc-data-cell--actions {
    position: sticky;
    right: 0;
    z-index: 2;
    box-shadow: inset 1px 0 0 var(--wc-data-border, var(--mud-palette-divider));
}

.page-data-grid--action-rail .mud-table-head .wc-data-cell--actions,
.page-data-grid--action-rail .mud-data-grid-header .wc-data-cell--actions,
.page-data-grid--office-list .mud-table-head .wc-data-cell--actions,
.page-data-grid--office-list .mud-data-grid-header .wc-data-cell--actions {
    background: var(--wc-data-header-bg-strong, var(--wc-data-header-bg, var(--wc-surface-2)));
}

.page-data-grid--inline-fit.page-data-grid--action-rail .mud-table-head .wc-data-cell--actions,
.page-data-grid--inline-fit.page-data-grid--action-rail .mud-data-grid-header .wc-data-cell--actions,
.page-data-grid--inline-fit.page-data-grid--office-list .mud-table-head .wc-data-cell--actions,
.page-data-grid--inline-fit.page-data-grid--office-list .mud-data-grid-header .wc-data-cell--actions {
    z-index: 4;
}

.page-data-grid--inline-fit.page-data-grid--action-rail .mud-table-row:hover > .wc-data-cell--actions,
.page-data-grid--inline-fit.page-data-grid--action-rail .mud-data-grid-row:hover > .wc-data-cell--actions,
.page-data-grid--inline-fit.page-data-grid--action-rail .mud-table-row.mud-selected > .wc-data-cell--actions,
.page-data-grid--inline-fit.page-data-grid--action-rail .mud-data-grid-row.mud-selected > .wc-data-cell--actions,
.page-data-grid--inline-fit.page-data-grid--office-list .mud-table-row:hover > .wc-data-cell--actions,
.page-data-grid--inline-fit.page-data-grid--office-list .mud-data-grid-row:hover > .wc-data-cell--actions,
.page-data-grid--inline-fit.page-data-grid--office-list .mud-table-row.mud-selected > .wc-data-cell--actions,
.page-data-grid--inline-fit.page-data-grid--office-list .mud-data-grid-row.mud-selected > .wc-data-cell--actions {
    background: var(--wc-data-row-hover, var(--wc-surface-1));
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active {
    --wc-data-grid-min-width: 0px;
    --wc-data-cell-block: 9px;
    --wc-data-cell-inline: 12px;
    --wc-data-responsive-divider: var(--wc-data-border);
    --wc-data-responsive-summary-bg: var(--wc-data-header-bg);
    --wc-data-responsive-footer-bg: var(--wc-data-header-bg);
    --wc-data-responsive-fact-bg: var(--wc-surface-1, var(--mud-palette-surface));
    --wc-data-responsive-label-color: var(--wc-text-soft, var(--mud-palette-text-secondary));
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-container {
    overflow-x: visible;
    border: 0;
    background: transparent;
    box-shadow: none;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-root,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-drop,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-body {
    display: block;
    width: 100%;
    max-width: 100%;
    min-width: 0;
    box-sizing: border-box;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-smalldevices-sortselect {
    padding: 0 0 var(--wc-space-2, 8px);
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-head,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-data-grid-header {
    display: none;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-body {
    display: grid;
    gap: 12px;
    border-top: 0;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-row {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    width: 100%;
    max-width: 100%;
    min-width: 0;
    box-sizing: border-box;
    overflow: hidden;
    border: 1px solid var(--wc-data-grid-border, var(--wc-data-border, var(--mud-palette-divider)));
    border-radius: var(--wc-panel-radius, var(--wc-card-radius, var(--border-radius-md)));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    box-shadow: var(--wc-surface-shadow-xs, var(--shadow-xs));
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-body .mud-table-row + .mud-table-row {
    border-top: 1px solid var(--wc-data-grid-border, var(--wc-data-border, var(--mud-palette-divider)));
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-cell {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    align-content: center;
    align-items: start;
    justify-items: start;
    row-gap: 4px;
    order: 30;
    grid-column: auto;
    width: 100%;
    max-width: 100%;
    min-width: 0;
    min-height: 52px;
    box-sizing: border-box;
    padding-block: var(--wc-data-cell-block) !important;
    padding-inline: var(--wc-data-cell-inline) !important;
    text-align: left;
    white-space: normal;
    background: var(--wc-data-responsive-fact-bg);
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-body .mud-table-row > .mud-table-cell {
    border-bottom: 1px solid var(--wc-data-responsive-divider, var(--wc-data-border, var(--mud-palette-divider)));
}

.page-data-grid--responsive-rows.page-data-grid.page-data-grid--responsive-active .mud-table-body .mud-table-row:last-child > .mud-table-cell {
    border-bottom-color: var(--wc-data-responsive-divider, var(--wc-data-border, var(--mud-palette-divider)));
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-cell::before {
    content: attr(data-label);
    min-width: 0;
    /* MudBlazor's small-device table pads every label 16px on the right; the fact
       rows already space label and value with their column gap. */
    padding: 0;
    color: var(--wc-data-responsive-label-color);
    font-family: var(--wc-type-meta-family);
    font-size: var(--wc-type-meta-size);
    font-weight: var(--wc-type-meta-weight);
    letter-spacing: var(--wc-type-meta-tracking);
    line-height: var(--wc-type-meta-leading);
    text-align: left;
    text-transform: uppercase;
    overflow-wrap: normal;
    word-break: normal;
    hyphens: none;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-cell[data-label=""]::before {
    content: none;
    padding: 0;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-cell[data-label=""]:not(.wc-data-cell--actions) {
    display: none;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-cell:not([data-label]):not(.wc-data-cell--actions) {
    display: none;
}

/* MudBlazor 8 SelectColumn does not accept CellClass/HeaderClass, so selectable
   grids mark themselves with page-data-grid--selectable and the leading
   selection cell is targeted structurally. SelectColumn must stay the first
   declared column (guardrail-enforced); these rules sit after the hide rules
   so source order restores visibility at equal specificity. */
.page-data-grid--selectable.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-cell:first-child {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    align-items: center;
    justify-items: start;
    order: 998;
    grid-column: 1;
    min-height: 52px;
    background: var(--wc-data-responsive-footer-bg);
    border-top: 1px solid var(--wc-data-responsive-divider, var(--wc-data-border, var(--mud-palette-divider)));
    border-bottom: 0;
}

.page-data-grid--selectable.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-cell:first-child::before {
    content: none;
    padding: 0;
}

.page-data-grid--selectable.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-row:has(> .wc-data-cell--actions) {
    position: relative;
}

.page-data-grid--selectable.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-row:has(> .wc-data-cell--actions) > .mud-table-cell:first-child {
    position: absolute;
    inset-inline-start: 0;
    inset-block-end: 0;
    z-index: 3;
    width: 52px;
    min-width: 52px;
    height: 60px;
    /* The actions footer draws the band; this cell only floats the checkbox over its reserved start
       padding, so a taller (wrapped) footer never shows a separate tinted block. */
    background: transparent;
    border-top-color: transparent;
}

.page-data-grid--selectable.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-row:not(:has(> .wc-data-cell--actions)) > .mud-table-cell:first-child {
    grid-column: 1 / -1;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-cell:not(.wc-data-cell--actions) > * {
    justify-self: start;
    min-width: 0;
    max-width: 100%;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--responsive-primary,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--status {
    min-height: 56px;
    background: var(--wc-data-responsive-summary-bg);
    /* Labels share one line across the summary band; a 28px id pill beside a 24px
       status chip would otherwise centre each label at a different height. */
    align-content: start;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--responsive-primary {
    order: 1;
    grid-column: 1 / -1;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-row:has(> .wc-data-cell--status) > .wc-data-cell--responsive-primary {
    grid-column: 1;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--status {
    order: 2;
    grid-column: 2;
    justify-items: start;
    text-align: left;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--status::before {
    text-align: left;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--status > * {
    justify-self: start;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--status.wc-data-cell--responsive-primary {
    grid-column: 1 / -1;
    justify-items: start;
    text-align: left;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--status.wc-data-cell--responsive-primary::before {
    text-align: left;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--status.wc-data-cell--responsive-primary > * {
    justify-self: start;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--responsive-secondary {
    order: 3;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--customer {
    order: 4;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--contact {
    order: 5;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--type {
    order: 6;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--date {
    order: 7;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--numeric {
    order: 8;
    text-align: left;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--numeric::before {
    text-align: left;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--numeric > * {
    justify-self: start;
}

/* Compact fact tier: demoted facts (secondary/contact/customer/type/date/numeric) render
   their data-label inline beside the value at reduced height, so a stacked row
   costs roughly half the vertical space on phones. Row and cell structure are
   unchanged — this is density only, never a card conversion. */
.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--responsive-secondary,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--contact,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--customer:not(.wc-data-cell--responsive-primary),
.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--type,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--date,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--numeric {
    /* One label track for every fact row, so values form a single column instead
       of starting wherever each label happened to end. 5.5rem holds the common
       English fact labels ("Last activity", 88px); a longer one wraps between words. */
    grid-template-columns: 5.5rem minmax(0, 1fr);
    column-gap: 10px;
    row-gap: 2px;
    align-content: center;
    align-items: center;
    min-height: 36px;
    padding-block: 5px !important;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--responsive-secondary > *,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--contact > *,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--customer:not(.wc-data-cell--responsive-primary) > *,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--type > *,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--date > *,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--numeric > * {
    grid-column: 2;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-record-id,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-record-link,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-customer-link,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-chip {
    width: fit-content;
    max-width: 100%;
    justify-self: start;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-chip {
    overflow: hidden;
    text-overflow: ellipsis;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--description,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--wide {
    order: 90;
    grid-column: 1 / -1;
    align-items: flex-start;
    white-space: normal;
    overflow-wrap: anywhere;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--wide > * {
    overflow-wrap: anywhere;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .mud-table-cell.wc-data-cell--responsive-primary {
    order: 1;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-description {
    max-width: min(44ch, 100%);
    white-space: normal;
    text-align: left;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--actions,
.page-data-grid--responsive-rows.page-data-grid--action-rail.page-data-grid--responsive-active .wc-data-cell--actions,
.page-data-grid--responsive-rows.page-data-grid--office-list.page-data-grid--responsive-active .wc-data-cell--actions {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    position: static;
    z-index: 0;
    order: 999;
    grid-column: 1 / -1;
    width: 100%;
    max-width: 100%;
    min-width: 0;
    min-height: 46px;
    box-sizing: border-box;
    background: var(--wc-data-responsive-footer-bg);
    border-top: 1px solid var(--wc-data-responsive-divider, var(--wc-data-border, var(--mud-palette-divider)));
    border-bottom: 0;
    box-shadow: none;
    padding-block: 7px !important;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--actions::before {
    content: none;
    padding: 0;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-data-cell--actions .wc-row-actions {
    width: auto;
    max-width: 100%;
    min-width: 0;
    flex-wrap: nowrap;
    gap: var(--wc-space-2, 8px);
    margin-inline: auto 0;
    margin-left: auto;
    margin-inline-start: auto;
    margin-right: 0;
    margin-inline-end: 0;
    justify-content: flex-end;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-row-actions .mud-button-root {
    min-height: 44px !important;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-row-actions__primary--labeled.mud-button-root,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-row-actions__overflow-button--labeled.mud-button-root,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-row-actions__overflow-button--labeled > .mud-menu-button-activator {
    min-width: 76px !important;
    min-height: 44px !important;
    padding: 0 10px;
    border-radius: var(--border-radius-md);
    font-size: var(--wc-type-body-compact-size);
    font-weight: 700;
    letter-spacing: 0;
    line-height: 1;
    text-transform: none;
    white-space: nowrap;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-row-actions__primary:not(.wc-row-actions__primary--labeled)[data-responsive-label] {
    width: auto !important;
    max-width: 100%;
    min-width: 88px !important;
    min-height: 44px !important;
    padding: 0 10px !important;
    gap: var(--wc-space-2, 8px);
    border-radius: var(--border-radius-md);
    font-size: var(--wc-type-body-compact-size);
    font-weight: 700;
    letter-spacing: 0;
    line-height: 1;
    text-transform: none;
    white-space: nowrap;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-row-actions__overflow-button:not(.wc-row-actions__overflow-button--labeled)[data-responsive-label] {
    position: relative;
    width: auto !important;
    max-width: 100%;
    min-width: 108px !important;
    min-height: 44px !important;
    padding: 0 10px !important;
    gap: var(--wc-space-2, 8px);
    border-radius: var(--border-radius-md);
    font-size: var(--wc-type-body-compact-size);
    font-weight: 700;
    letter-spacing: 0;
    line-height: 1;
    text-transform: none;
    white-space: nowrap;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-row-actions__overflow-button:not(.wc-row-actions__overflow-button--labeled)[data-responsive-label] > .mud-menu-icon-button-activator {
    width: 100% !important;
    min-width: 100% !important;
    height: 44px !important;
    min-height: 44px !important;
    padding: 0 10px !important;
    justify-content: flex-start;
    border-radius: inherit;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-row-actions__primary--labeled.mud-button-root {
    min-width: 88px !important;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-row-actions__overflow-button--labeled.mud-button-root,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-row-actions__overflow-button--labeled > .mud-menu-button-activator {
    min-width: 108px !important;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-row-actions__primary:not(.wc-row-actions__primary--labeled)[data-responsive-label]::before,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-row-actions__overflow-button:not(.wc-row-actions__overflow-button--labeled)[data-responsive-label]::before {
    content: attr(data-responsive-label);
    order: 1;
    flex: 0 0 auto;
    min-width: max-content;
    overflow: visible;
    text-overflow: clip;
    white-space: nowrap;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-row-actions__overflow-button:not(.wc-row-actions__overflow-button--labeled)[data-responsive-label]::before {
    position: absolute;
    z-index: 1;
    inset-block: 0;
    inset-inline: 42px 10px;
    display: flex;
    align-items: center;
    pointer-events: none;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-row-actions__primary--labeled.mud-button-root {
    border: 1px solid var(--wc-tone-primary-soft-border);
    background: var(--wc-tone-primary-soft-bg);
    color: var(--wc-tone-primary-soft-fg);
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-row-actions__primary:not(.wc-row-actions__primary--labeled)[data-responsive-label] {
    border: 1px solid var(--wc-tone-primary-soft-border);
    background: var(--wc-tone-primary-soft-bg);
    color: var(--wc-tone-primary-soft-fg);
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-row-actions__overflow-button--labeled.mud-button-root,
.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-row-actions__overflow-button--labeled > .mud-menu-button-activator {
    border: 1px solid var(--wc-data-border, var(--mud-palette-divider));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active .wc-row-actions__overflow-button:not(.wc-row-actions__overflow-button--labeled)[data-responsive-label] > .mud-menu-icon-button-activator {
    border: 1px solid var(--wc-data-border, var(--mud-palette-divider));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
}

.page-data-grid--responsive-rows.page-data-grid--responsive-active:not(.page-data-grid--responsive-phone) .wc-data-cell--actions {
    grid-column: 1 / -1;
}

.page-data-grid--selectable.page-data-grid--responsive-rows.page-data-grid--responsive-active:not(.page-data-grid--responsive-phone) .mud-table-cell:first-child {
    grid-column: 1;
}

.page-data-grid--selectable.page-data-grid--responsive-rows.page-data-grid--responsive-active:not(.page-data-grid--responsive-phone) .wc-data-cell--actions {
    grid-column: 1 / -1;
    padding-inline-start: 56px !important;
}

/* Two tracks on phones so the record and its status share the summary row; every other fact spans
   both. One row per fact made a job card about 450px tall. */
.page-data-grid--responsive-rows.page-data-grid--responsive-phone .mud-table-row {
    grid-template-columns: repeat(2, minmax(0, 1fr));
}

.page-data-grid--responsive-rows.page-data-grid--responsive-phone .mud-table-cell {
    grid-column: 1 / -1;
    min-height: 46px;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-phone .wc-data-cell--responsive-primary {
    grid-column: 1 / -1;
}

/* Keep the compact fact tier compact on phones too — this must follow the
   generic phone min-height above so source order resolves the tie. */
.page-data-grid--responsive-rows.page-data-grid--responsive-phone .wc-data-cell--responsive-secondary,
.page-data-grid--responsive-rows.page-data-grid--responsive-phone .wc-data-cell--contact,
.page-data-grid--responsive-rows.page-data-grid--responsive-phone .wc-data-cell--customer:not(.wc-data-cell--responsive-primary),
.page-data-grid--responsive-rows.page-data-grid--responsive-phone .wc-data-cell--type,
.page-data-grid--responsive-rows.page-data-grid--responsive-phone .wc-data-cell--date,
.page-data-grid--responsive-rows.page-data-grid--responsive-phone .wc-data-cell--numeric {
    min-height: 34px;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-phone .mud-table-row:has(> .wc-data-cell--status) > .wc-data-cell--responsive-primary {
    grid-column: 1;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-phone .mud-table-row:has(> .wc-data-cell--responsive-primary) > .wc-data-cell--status:not(.wc-data-cell--responsive-primary) {
    grid-column: 2;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-phone .wc-data-cell--description,
.page-data-grid--responsive-rows.page-data-grid--responsive-phone .wc-data-cell--wide {
    grid-column: 1 / -1;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-phone .wc-data-cell--status {
    grid-column: 1 / -1;
    justify-items: start;
    text-align: left;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-phone .wc-data-cell--status::before {
    text-align: left;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-phone .wc-data-cell--status > * {
    justify-self: start;
}

/* Phone invoice queues keep the facts needed to compare and act: invoice,
   status, customer, balance, due date, and row actions. Type, linked job, and
   original total remain available through the invoice/detail action. The
   underlying table row is preserved; only comparison-irrelevant cells are
   suppressed at the phone layout tier. */
.page-data-grid--invoices.page-data-grid--responsive-phone .wc-data-cell--type,
.page-data-grid--invoices.page-data-grid--responsive-phone .invoice-job-cell,
.page-data-grid--invoices.page-data-grid--responsive-phone .invoice-total-cell {
    display: none;
}

/* The invoice queue keeps six comparison/action cells on a 390px phone. Tighten
   only this queue's cell rhythm so the preserved table row remains scannable
   without shrinking the 44px action targets. */
.page-data-grid--invoices.page-data-grid--responsive-phone .mud-table-cell {
    min-height: 30px;
    padding-block: 3px !important;
}

.page-data-grid--invoices.page-data-grid--responsive-phone .wc-data-cell--responsive-primary {
    min-height: 38px;
}

.page-data-grid--invoices.page-data-grid--responsive-phone .wc-data-cell--actions {
    min-height: 50px;
    padding-block: 3px !important;
}

/* The tax-rate catalog keeps name, rate, and status on a phone — those are the
   facts a rate is chosen by. The component count is editor detail and is
   restated inside the edit form, so it stands down at the phone tier only. */
.page-data-grid--manual-tax-rates.page-data-grid--responsive-phone .wc-data-cell--manual-tax-components {
    display: none;
}

.page-data-grid--selectable.page-data-grid--responsive-rows.page-data-grid--responsive-phone .mud-table-cell:first-child {
    grid-column: 1;
}

.page-data-grid--selectable.page-data-grid--responsive-rows.page-data-grid--responsive-phone .mud-table-row:not(:has(> .wc-data-cell--actions)) > .mud-table-cell:first-child {
    grid-column: 1 / -1;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-phone .wc-data-cell--actions,
.page-data-grid--responsive-rows.page-data-grid--action-rail.page-data-grid--responsive-phone .wc-data-cell--actions,
.page-data-grid--responsive-rows.page-data-grid--office-list.page-data-grid--responsive-phone .wc-data-cell--actions {
    box-shadow: none;
}

.page-data-grid--selectable.page-data-grid--responsive-rows.page-data-grid--responsive-phone .wc-data-cell--actions {
    grid-column: 1 / -1;
    padding-inline-start: 56px !important;
}

.page-data-grid--responsive-rows.page-data-grid--responsive-phone .wc-data-cell--actions .wc-row-actions {
    width: 100%;
    flex-wrap: wrap;
}

.page-data-grid--action-rail .wc-data-cell--actions {
    min-width: var(--wc-data-actions-min-width);
}

.message-wrap {
    white-space: pre-wrap;
    overflow-wrap: anywhere;
    word-break: break-word;
    min-width: 0;
    max-width: 100%;
}

.actions-column {
    width: var(--wc-data-actions-min-width, 96px);
    min-width: var(--wc-data-actions-min-width, 96px);
}

@media (max-width: 959.98px) {
    .actions-column {
        width: var(--wc-data-actions-min-width, 88px);
        min-width: var(--wc-data-actions-min-width, 88px);
    }
}

/* Index grid empty-state table teardown */
.page-data-grid:has(.page-data-grid__no-records) .mud-table-container {
    overflow-x: hidden;
}

.page-data-grid:has(.page-data-grid__no-records),
.page-data-grid:has(.page-data-grid__no-records) .mud-table-root {
    width: 100%;
    min-width: 100%;
}

.page-data-grid:has(.page-data-grid__no-records) .mud-table-root {
    table-layout: auto;
}

.page-data-grid:has(.page-data-grid__no-records) .mud-table-head {
    display: none;
}

.page-data-grid__no-records {
    width: 100%;
    min-width: 0;
    max-width: 100%;
    display: flex;
    justify-content: center;
    box-sizing: border-box;
}

.page-data-grid:has(.page-data-grid__no-records) .mud-table-body tr:has(.page-data-grid__no-records) {
    display: table-row;
    width: 100%;
}

.page-data-grid:has(.page-data-grid__no-records) .mud-table-empty-row,
.page-data-grid:has(.page-data-grid__no-records) .mud-table-body .mud-table-cell[colspan] {
    display: table-cell;
    width: 100%;
    min-width: 0;
    max-width: 100%;
    box-sizing: border-box;
    padding: 0 !important;
    border-bottom-color: transparent;
    background: var(--wc-surface-1, var(--mud-palette-surface));
}

@media (max-width: 599.98px) {
    .page-data-grid--responsive-rows:has(.page-data-grid__no-records) .mud-table-empty-row,
    .page-data-grid--responsive-rows:has(.page-data-grid__no-records) .mud-table-body .mud-table-cell[colspan] {
        display: block;
        width: 100%;
    }

    .page-data-grid--responsive-rows:has(.page-data-grid__no-records) .mud-table-empty-row::before,
    .page-data-grid--responsive-rows:has(.page-data-grid__no-records) .mud-table-body .mud-table-cell[colspan]::before {
        content: none;
    }
}

/* Responsive rows have room for complete secondary descriptions, including nested content. */
.page-data-grid--responsive-active .wc-table-secondary-text {
    white-space: normal;
    overflow-wrap: anywhere;
    overflow: visible;
    text-overflow: clip;
}

/* ===== WorkCita.Client/wwwroot/css/app.components.stat-strip.css ===== */
/*
 * WorkCita global stylesheet module: app.components.stat-strip.css
 * Ownership: WcStatStrip / digest presentation primitives.
 * Theme: universal --wc-* tokens only.
 * Load: after app.index-grid.responsive.css; before app.components.filter-toolbar.css (index.html).
 */

.wc-stat-strip {
    border: 1px solid var(--wc-data-grid-border, var(--wc-border-soft));
    border-radius: var(--wc-panel-radius, var(--wc-card-radius, var(--border-radius-md)));
    background: var(--wc-surface-1);
    box-shadow: var(--wc-surface-shadow-xs);
    container-type: inline-size;
}

.wc-stat-strip-label {
    font-family: var(--wc-type-label-family);
    font-size: var(--wc-type-label-size);
    font-weight: var(--wc-type-label-weight);
    line-height: var(--wc-type-label-leading);
    letter-spacing: 0;
    text-transform: none;
    color: var(--wc-text-muted);
}

.wc-stat-strip-digest {
    display: none;
}

.wc-stat-strip-digest-enabled {
    padding: 10px 12px;
}

.wc-stat-strip-digest-enabled.wc-stat-strip-dense {
    padding: 8px 10px;
}

.wc-stat-strip-digest-metricband {
    overflow: hidden;
}

.wc-stat-strip-digest-enabled.wc-stat-strip-digest-metricband {
    padding: 0;
}

.wc-stat-strip-metric-band {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
    min-width: 0;
}

.wc-stat-strip-metric-cell {
    display: grid;
    /* Labels share one top line across the band. Centred, a cell whose support text
       wrapped to a second line lifted its label above its neighbours'. */
    align-content: start;
    min-width: 0;
    min-height: 70px;
    gap: 7px;
    padding: 14px 18px;
    border-left: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
}

.wc-stat-strip-metric-cell:first-child {
    border-left: 0;
}

.wc-stat-strip-metric-cell-link {
    transition:
        background-color var(--wc-motion-feedback) var(--wc-ease-out-quart),
        color var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

.wc-stat-strip-metric-cell-link:hover {
    background: var(--wc-surface-hover);
}

.wc-stat-strip-metric-cell-link:focus-visible {
    outline: none;
    box-shadow: inset 0 0 0 2px var(--wc-accent, var(--mud-palette-primary));
}

.wc-stat-strip-metric-label {
    min-width: 0;
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font-family: var(--wc-type-label-family);
    font-size: var(--wc-type-label-size);
    font-weight: var(--wc-type-label-weight);
    letter-spacing: 0;
    line-height: var(--wc-type-label-leading);
    text-transform: none;
}

.wc-stat-strip-metric-main {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 6px;
    min-width: 0;
}

.wc-stat-strip-metric-value {
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-family: var(--wc-type-headline-family);
    font-size: var(--wc-type-headline-size);
    font-weight: var(--wc-type-headline-weight);
    line-height: var(--wc-type-headline-leading);
    overflow-wrap: anywhere;
}

.wc-stat-strip-metric-support {
    min-width: 0;
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font-family: var(--wc-type-body-family);
    font-size: var(--wc-type-body-size);
    line-height: var(--wc-type-body-leading);
    overflow-wrap: anywhere;
}

.wc-stat-strip-metric-cell-success .wc-stat-strip-metric-value {
    color: var(--wc-tone-success-soft-fg);
}

.wc-stat-strip-metric-cell-warning .wc-stat-strip-metric-value {
    color: var(--wc-tone-warning-soft-fg);
}

.wc-stat-strip-metric-cell-error .wc-stat-strip-metric-value {
    color: var(--wc-tone-error-soft-fg);
}

.wc-stat-strip-metric-cell-accent .wc-stat-strip-metric-value {
    color: var(--wc-tone-primary-soft-fg);
}

.wc-stat-strip-metric-cell-loading {
    gap: 6px;
}

/* Overview emphasis (WcStatStrip Emphasis="Overview"). The settings overview band
   is a page's headline metric row: taller cells, values stepped up to the
   display-metric size. This lives here, on the strip's own modifier, because the
   page stylesheet that used to carry it reached into eleven wc-stat-strip
   internals from .company-settings-page — a second owner for this component's
   geometry. A page that wants a louder band now asks the component for one. */
.wc-stat-strip--overview .wc-stat-strip-metric-cell {
    min-height: 96px;
}

.wc-stat-strip--overview .wc-stat-strip-metric-value {
    font-size: var(--wc-type-display-metric-size);
    line-height: 1.15;
    overflow-wrap: anywhere;
}

.wc-stat-strip--overview .wc-stat-strip-metric-support {
    max-width: 18rem;
    line-height: 1.25;
}

.wc-stat-strip-digest-enabled .wc-stat-strip-digest {
    display: grid;
    grid-template-columns: minmax(0, auto) minmax(min(100%, 16rem), 1fr);
    align-items: center;
    gap: 8px 14px;
    width: 100%;
    min-width: 0;
}

.wc-stat-strip-digest-enabled .wc-stat-strip-label {
    letter-spacing: normal;
    text-transform: none;
    font-weight: inherit;
}

.wc-stat-strip-digest-lead {
    display: inline-flex;
    align-items: center;
    width: fit-content;
    max-width: 100%;
    min-width: 0;
    gap: 8px;
    padding: 6px 11px;
    border: 1px solid var(--wc-data-grid-border, var(--wc-border-soft));
    border-radius: var(--wc-control-radius, var(--border-radius-md));
    background: var(--wc-surface-1);
    box-shadow: var(--wc-surface-shadow-xs);
}

.wc-stat-strip-digest-lead-shell-action-signal {
    border-color: var(--wc-tone-primary-soft-border);
    background: var(--wc-tone-primary-soft-bg);
}

.wc-stat-strip-digest-lead-shell-success {
    border-color: var(--wc-tone-success-soft-border);
    background: var(--wc-tone-success-soft-bg);
}

.wc-stat-strip-digest-lead-shell-warning {
    border-color: var(--wc-tone-warning-soft-border);
    background: var(--wc-tone-warning-soft-bg);
}

.wc-stat-strip-digest-lead-shell-error {
    border-color: var(--wc-tone-error-soft-border);
    background: var(--wc-tone-error-soft-bg);
}

.wc-stat-strip-digest-lead-shell-accent {
    border-color: var(--wc-tone-primary-soft-border);
    background: var(--wc-tone-primary-soft-bg);
}

.wc-stat-strip-digest-marker {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 1.35rem;
    height: 1.35rem;
    border-radius: var(--wc-radius-pill, 999px);
    background: var(--wc-surface-1);
    color: var(--wc-text-muted);
}

/* Intent colors come first so a semantic tone below wins: an overdue action signal
   reads red like its shell, not blue. */
.wc-stat-strip-digest-marker-accent,
.wc-stat-strip-digest-marker-action-signal {
    color: var(--wc-tone-primary-soft-fg);
    background: var(--wc-tone-primary-soft-bg);
}

.wc-stat-strip-digest-marker-success {
    color: var(--wc-tone-success-soft-fg);
    background: var(--wc-tone-success-soft-bg);
}

.wc-stat-strip-digest-marker-warning {
    color: var(--wc-tone-warning-soft-fg);
    background: var(--wc-tone-warning-soft-bg);
}

.wc-stat-strip-digest-marker-error {
    color: var(--wc-tone-error-soft-fg);
    background: var(--wc-tone-error-soft-bg);
}

.wc-stat-strip-digest-lead-copy {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 3px 8px;
    min-width: 0;
}

.wc-stat-strip-digest-lead-main {
    display: inline-flex;
    align-items: baseline;
    min-width: 0;
    gap: 4px;
}

.wc-stat-strip-digest-lead-value {
    color: var(--wc-text-strong);
    font-family: var(--wc-type-headline-family);
    font-size: var(--wc-type-headline-size);
    font-weight: var(--wc-type-headline-weight);
    line-height: var(--wc-type-headline-leading);
    overflow-wrap: anywhere;
}

.wc-stat-strip-digest-lead-label {
    color: var(--wc-text-muted);
    font-family: var(--wc-type-label-family);
    font-size: var(--wc-type-label-size);
    font-weight: var(--wc-type-label-weight);
    line-height: var(--wc-type-label-leading);
    overflow-wrap: anywhere;
}

.wc-stat-strip-digest-lead-support {
    display: inline-flex;
    align-items: center;
    min-width: 0;
    padding-left: 8px;
    border-left: 1px solid var(--wc-border-soft);
    color: var(--wc-text-muted);
    font-family: var(--wc-type-body-family);
    font-size: var(--wc-type-body-size);
    line-height: var(--wc-type-body-leading);
    overflow-wrap: anywhere;
}

.wc-stat-strip-digest-lead-accent .wc-stat-strip-digest-lead-value,
.wc-stat-strip-digest-lead-action-signal .wc-stat-strip-digest-lead-value {
    color: var(--wc-tone-primary-soft-fg);
}

.wc-stat-strip-digest-lead-success .wc-stat-strip-digest-lead-value {
    color: var(--wc-tone-success-soft-fg);
}

.wc-stat-strip-digest-lead-warning .wc-stat-strip-digest-lead-value {
    color: var(--wc-tone-warning-soft-fg);
}

.wc-stat-strip-digest-lead-error .wc-stat-strip-digest-lead-value {
    color: var(--wc-tone-error-soft-fg);
}

.wc-stat-strip-digest-lead-link {
    transition: color var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

.wc-stat-strip-digest-lead-link:hover {
    color: var(--wc-text-strong);
}

.wc-stat-strip-digest-lead-link:focus-visible {
    outline: none;
    border-radius: var(--border-radius-sm);
    box-shadow: var(--wc-focus-ring);
}

.wc-stat-strip-digest-support {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px 12px;
    color: var(--wc-text-muted);
    min-width: 0;
}

.wc-stat-strip-digest-support-item {
    display: inline-flex;
    align-items: baseline;
    min-width: 0;
    gap: 5px;
    font-family: var(--wc-type-body-family);
    font-size: var(--wc-type-body-size);
    line-height: var(--wc-type-body-leading);
}

/* Trailing separator (not leading): when the support row wraps, the dot stays
   at the end of the previous line instead of orphaning at the start of the next
   ("· Mon, Jun 15 Busiest day"). */
.wc-stat-strip-digest-support-item:not(:last-child)::after {
    content: "·";
    margin-left: 7px;
    color: var(--wc-text-soft);
    font-weight: var(--font-bold);
}

.wc-stat-strip-digest-support-value {
    color: var(--wc-text-strong);
    font-weight: var(--wc-type-label-weight);
}

.wc-stat-strip-digest-support-item-success .wc-stat-strip-digest-support-value {
    color: var(--wc-tone-success-soft-fg);
}

.wc-stat-strip-digest-support-item-warning .wc-stat-strip-digest-support-value {
    color: var(--wc-tone-warning-soft-fg);
}

.wc-stat-strip-digest-support-item-error .wc-stat-strip-digest-support-value {
    color: var(--wc-tone-error-soft-fg);
}

.wc-stat-strip-digest-support-label {
    min-width: 0;
}

.wc-stat-strip-digest-support-item-link {
    transition: color var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

.wc-stat-strip-digest-support-item-link:hover {
    color: var(--wc-text-strong);
}

.wc-stat-strip-digest-support-item-link:focus-visible {
    outline: none;
    border-radius: var(--border-radius-sm);
    box-shadow: var(--wc-focus-ring);
}

.wc-stat-strip-digest-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    grid-column: 1 / -1;
}

.wc-stat-strip-digest-action {
    /* No min-width:0 here: the pills sit in a flex-wrap row, so they should keep
       their content width and wrap to a new line rather than shrink and clip
       their short action labels (e.g. "View", "Approve"). */
    display: inline-flex;
    align-items: center;
    min-height: 32px;
    gap: 5px;
    padding: 5px 9px;
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-radius-pill, 999px);
    background: var(--wc-surface-2);
    color: var(--wc-text-muted);
    font-family: var(--wc-type-label-family);
    font-size: var(--wc-type-label-size);
    line-height: var(--wc-type-label-leading);
}

.wc-stat-strip-digest-action-value {
    color: var(--wc-text-strong);
    font-weight: var(--font-bold);
}

.wc-stat-strip-digest-action-label {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.wc-stat-strip-digest-action-primary {
    font-weight: 700;
}

.wc-stat-strip-digest-action-accent {
    border-color: var(--wc-tone-primary-soft-border);
    background: var(--wc-tone-primary-soft-bg);
}

.wc-stat-strip-digest-action-success {
    border-color: var(--wc-tone-success-soft-border);
    background: var(--wc-tone-success-soft-bg);
}

.wc-stat-strip-digest-action-warning {
    border-color: var(--wc-tone-warning-soft-border);
    background: var(--wc-tone-warning-soft-bg);
}

.wc-stat-strip-digest-action-error {
    border-color: var(--wc-tone-error-soft-border);
    background: var(--wc-tone-error-soft-bg);
}

.wc-stat-strip-digest-action[href]:hover {
    border-color: var(--wc-tone-primary-soft-border);
    background: var(--wc-surface-hover);
}

.wc-stat-strip-digest-action[href]:focus-visible {
    outline: none;
    border-color: var(--wc-tone-primary-soft-border);
    box-shadow: var(--wc-focus-ring);
}

/* Touch-first devices get the 44px digest targets at any width; see the
   interaction contract comment in app.shared-controls.css. */
@media (max-width: 959.98px), (pointer: coarse) {
    .wc-stat-strip-digest-action[href],
    .wc-stat-strip-digest-lead-link,
    .wc-stat-strip-digest-support-item-link,
    .wc-stat-strip-digest-details > summary {
        min-height: 44px;
    }
}

.wc-stat-strip-digest-details {
    grid-column: 1 / -1;
    margin-top: 0;
    padding-top: 6px;
    border-top: 1px solid var(--wc-border-soft);
}

/* padding-block is the target-size floor for fine pointers, where the 44px gate
   above deliberately does not reach: a 12px label at 1.25 leading is a 15px
   pointer target, under the 24px SC 2.5.8 minimum. 15 + 6 + 6 = 27px clears it
   without spending the 29px of vertical rhythm a blanket 44px would cost every
   digest on desktop. Touch and narrow still get the full 44px from the gate. */
.wc-stat-strip-digest-details > summary {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    width: fit-content;
    padding-block: 6px;
    cursor: pointer;
    color: var(--wc-accent-strong);
    font-family: var(--wc-type-label-family);
    font-size: var(--wc-type-label-size);
    font-weight: var(--wc-type-label-weight);
    line-height: var(--wc-type-label-leading);
    list-style: none;
}

.wc-stat-strip-digest-details > summary::-webkit-details-marker {
    display: none;
}

.wc-stat-strip-digest-details > summary::after {
    content: "";
    flex-shrink: 0;
    width: 8px;
    height: 8px;
    background: currentColor;
    clip-path: polygon(0 22%, 50% 72%, 100% 22%, 100% 50%, 50% 100%, 0 50%);
    transform: translateY(1px);
    transition: transform var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

.wc-stat-strip-digest-details[open] > summary::after {
    transform: translateY(-1px) rotate(180deg);
}

.wc-stat-strip-digest-details > summary:focus-visible {
    outline: none;
    border-radius: var(--border-radius-sm);
    box-shadow: var(--wc-focus-ring);
}

.wc-stat-strip-digest-details-grid {
    display: grid;
    gap: 6px;
    margin-top: 8px;
}

.wc-stat-strip-digest-detail-row {
    display: grid;
    grid-template-columns: minmax(0, auto) auto minmax(0, 1fr);
    gap: 2px 8px;
    padding: 8px 0;
    border-top: 1px solid var(--wc-border-soft);
}

.wc-stat-strip-digest-detail-row-context {
    grid-template-columns: minmax(0, 1fr);
}

.wc-stat-strip-digest-detail-label,
.wc-stat-strip-digest-detail-support {
    min-width: 0;
    color: var(--wc-text-muted);
    font-family: var(--wc-type-label-family);
    font-size: var(--wc-type-label-size);
    line-height: var(--wc-type-label-leading);
}

.wc-stat-strip-digest-detail-row-context .wc-stat-strip-digest-detail-label {
    color: var(--wc-text-strong);
    font-weight: 700;
}

.wc-stat-strip-digest-detail-value {
    color: var(--wc-text-strong);
    font-family: var(--wc-type-body-family);
    font-size: var(--wc-type-body-size);
    font-weight: var(--font-bold);
    line-height: var(--wc-type-body-leading);
}

.wc-stat-strip-digest-detail-support {
    grid-column: 1 / -1;
}

/* Detail summaries are reading surfaces; keep supporting facts at body size. */
.wc-stat-strip-digest-detaildigest .wc-stat-strip-digest-lead-label,
.wc-stat-strip-digest-detaildigest .wc-stat-strip-digest-lead-support,
.wc-stat-strip-digest-detaildigest .wc-stat-strip-digest-support-label,
.wc-stat-strip-digest-detaildigest .wc-stat-strip-digest-details > summary,
.wc-stat-strip-digest-detaildigest .wc-stat-strip-digest-detail-label,
.wc-stat-strip-digest-detaildigest .wc-stat-strip-digest-detail-support {
    font-size: var(--wc-type-body-size);
    line-height: var(--wc-type-body-leading);
}

.wc-stat-strip-digest-embeddeddigest .wc-stat-strip-digest-lead {
    width: 100%;
    max-width: 100%;
    padding: 8px 12px;
    box-sizing: border-box;
}

.wc-stat-strip-digest-embeddeddigest .wc-stat-strip-digest-support {
    gap: 8px 14px;
    padding-top: 2px;
}

.wc-stat-strip-digest-embeddeddigest .wc-stat-strip-digest-details > summary {
    padding-inline: 2px;
}

.wc-stat-strip-digest-supportdigest .wc-stat-strip-digest-support-value {
    font-size: var(--wc-type-body-emphasis-size);
    font-weight: var(--font-bold);
}

.wc-stat-strip-digest-supportdigest .wc-stat-strip-digest-support {
    grid-column: 1 / -1;
    padding: 4px 2px 0;
}

.wc-stat-strip-digest-detaildigest .wc-stat-strip-digest-actions {
    margin-top: 2px;
}

@container (max-width: 560px) {
    .wc-stat-strip-metric-band {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .wc-stat-strip-metric-cell {
        min-height: 62px;
        padding: 12px 14px;
    }

    .wc-stat-strip-metric-cell:nth-child(odd) {
        border-left: 0;
    }

    .wc-stat-strip-metric-cell:nth-child(n + 3) {
        border-top: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    }

    .wc-stat-strip-digest-enabled .wc-stat-strip-digest {
        grid-template-columns: minmax(0, 1fr);
    }

    .wc-stat-strip-digest-lead {
        width: 100%;
        border-radius: var(--wc-control-radius, var(--border-radius-md));
    }

    .wc-stat-strip-digest-support {
        grid-column: 1;
    }

    /* Overview keeps a full-width lead cell above the 2-up remainder, so its
       divider positions are offset one place from the generic band's and it
       needs its own set rather than the nth-child rules above. The first-child
       reset must stay AFTER :nth-child(odd): both are (0,3,0), so source order
       is what stops the lead cell from drawing a left divider against nothing.
       This tier was a `@media (max-width: 719.98px)` page rule; as the strip's
       own rule it is a container query, so an overview band in a narrow column
       breaks the same way it does on a narrow phone. */
    .wc-stat-strip--overview .wc-stat-strip-metric-band {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .wc-stat-strip--overview .wc-stat-strip-metric-cell {
        min-height: 74px;
        padding: 10px 12px;
    }

    .wc-stat-strip--overview .wc-stat-strip-metric-cell:nth-child(odd) {
        border-left: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    }

    .wc-stat-strip--overview .wc-stat-strip-metric-cell:nth-child(2n) {
        border-left: 0;
    }

    .wc-stat-strip--overview .wc-stat-strip-metric-cell:first-child {
        grid-column: 1 / -1;
        border-left: 0;
    }

    .wc-stat-strip--overview .wc-stat-strip-metric-cell:nth-child(n + 2) {
        border-top: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    }

    .wc-stat-strip--overview .wc-stat-strip-metric-value {
        font-size: var(--wc-type-body-emphasis-size);
    }
}

@container (max-width: 360px) {
    .wc-stat-strip-metric-band {
        grid-template-columns: minmax(0, 1fr);
    }

    .wc-stat-strip-metric-cell {
        border-left: 0;
        border-top: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    }

    .wc-stat-strip-metric-cell:first-child {
        border-top: 0;
    }
}

/* ===== WorkCita.Client/wwwroot/css/app.components.filter-toolbar.css ===== */
/*
 * WorkCita product-layout stylesheet module: app.components.filter-toolbar.css
 * Ownership: FilterBar and OfficeListToolbar presentation for office, platform, and portal list routes.
 * Theme: universal --wc-* tokens only.
 * Load: product layouts only; public/auth routes do not render these controls.
 */

.page-control-band {
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-2, var(--mud-palette-surface));
    box-shadow: var(--wc-surface-shadow-xs, var(--shadow-xs));
}

.page-control-band.mud-paper,
.page-control-band .mud-card-content {
    padding: 12px 14px;
}

@media (min-width: 960px) {
    .page-control-band.mud-paper,
    .page-control-band .mud-card-content {
        padding: 14px 16px;
    }
}

.page-control-band-title {
    letter-spacing: 0.05em;
    text-transform: uppercase;
}

.filter-bar.filter-bar-compact.mud-paper,
.filter-bar.filter-bar-compact .mud-card-content {
    padding-top: 10px;
    padding-bottom: 10px;
}

.filter-bar.filter-bar-compact .page-control-band-title {
    margin-bottom: 2px;
}

.filter-bar-title-row {
    flex-wrap: wrap;
}

.filter-bar-compact-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    align-items: center;
    margin-bottom: 8px;
}

.filter-bar-compact-actions:empty {
    display: none;
    margin-bottom: 0;
}

.filter-bar-search-compact .mud-input-slot {
    min-height: 44px;
}

.filter-bar-search-row {
    display: flex;
    gap: 8px;
    align-items: center;
}

.filter-bar-search-row .mud-input-control {
    flex: 1 1 auto;
    min-width: 0;
}

.filter-bar-search-end {
    display: flex;
    flex: 0 0 auto;
    align-items: center;
    gap: 8px;
}

.filter-bar-search-end .mud-button-root,
.filter-bar-search-end .mud-icon-button {
    min-height: 44px;
}

.filter-bar-filter-button,
.filter-bar-filter-button > .mud-menu-button-activator {
    min-height: 44px;
    justify-content: space-between;
    text-transform: none;
}

.filter-bar-filter-button--compact,
.filter-bar-filter-button--compact > .mud-menu-button-activator {
    min-height: 44px;
}

.filter-bar-filter-button--compact > .mud-menu-button-activator {
    padding-block: var(--space-2);
    padding-inline: var(--space-3);
}

.filter-bar-filter-button--active > .mud-menu-button-activator {
    font-weight: 700;
}

.filter-bar-filter-button--full-width,
.filter-bar-filter-button--full-width > .mud-menu-button-activator {
    width: 100%;
}

.filter-bar-filter-button.jobs-filters-button > .mud-menu-button-activator {
    white-space: nowrap;
}

.popover-menu {
    min-width: 200px;
}

@media (max-width: 599.98px) {
    /* A single Filters control stays beside search when search keeps a usable width;
       wider end content (saved views + Filters) wraps to its own right-aligned row. */
    .filter-bar-search-row {
        flex-wrap: wrap;
    }

    .filter-bar-search-row > .mud-input-control {
        flex: 1 1 12rem;
    }

    .filter-bar-search-end {
        margin-inline-start: auto;
    }

    .popover-menu {
        min-width: 180px;
    }
}

.filter-bar-popover-menu {
    padding: var(--space-3);
}

.filter-bar-menu-hint {
    margin-bottom: var(--space-2);
}

.filter-bar-menu-divider {
    margin-block: var(--space-2);
}

.filter-bar-menu-button {
    justify-content: flex-start;
    text-transform: none;
    padding: var(--space-2) var(--space-3);
}

.office-menu-section-label.mud-list-item {
    min-height: 30px;
    padding-block: 6px;
    pointer-events: none;
}

.office-menu-section-label .mud-typography {
    font-weight: 700;
    text-transform: none;
}

.office-list-toolbar {
    /* One control height for every toolbar field and button, so search, selects,
       date ranges and the buttons beside them share top and bottom edges. */
    --wc-list-toolbar-control-height: 44px;
    --wc-list-toolbar-control-radius: 12px;
    --wc-list-toolbar-control-font-size: var(--wc-type-body-emphasis-size);
}

.office-list-toolbar-document-queue {
    --wc-list-toolbar-control-radius: 10px;
}

.office-list-toolbar.filter-bar.filter-bar-compact.mud-paper,
.office-list-toolbar.filter-bar.filter-bar-compact .mud-card-content {
    padding: 10px 12px;
}

.office-list-toolbar .mud-grid {
    align-items: stretch;
}

.office-list-toolbar .mud-grid-item {
    display: flex;
    align-items: stretch;
}

.office-list-toolbar .mud-grid-item > * {
    width: 100%;
}

.office-list-toolbar .office-list-toolbar-search-field.mud-input-control,
.office-list-toolbar .office-list-toolbar-select.mud-input-control,
.office-list-toolbar .office-list-toolbar-date-range .mud-input-control,
.office-list-toolbar .office-list-toolbar-item .mud-input-control,
.office-list-toolbar-document-queue .status-filter-select.mud-input-control,
.office-list-toolbar-document-queue .date-range-filter .mud-input-control {
    margin: 0;
}

.office-list-toolbar .office-list-toolbar-search-field .mud-input.mud-input-outlined,
.office-list-toolbar .office-list-toolbar-select .mud-input.mud-input-outlined,
.office-list-toolbar .office-list-toolbar-date-range .mud-input.mud-input-outlined,
.office-list-toolbar .office-list-toolbar-item .mud-input.mud-input-outlined,
.office-list-toolbar-document-queue .status-filter-select .mud-input.mud-input-outlined,
.office-list-toolbar-document-queue .date-range-filter .mud-input.mud-input-outlined {
    /* min-height only: the fixed `height` twin clipped the select's own value text
       once the user raised the browser text size, because the control could not
       grow past the toolbar rhythm. The floor still sets the rhythm. */
    min-height: var(--wc-list-toolbar-control-height);
    border-radius: var(--wc-list-toolbar-control-radius);
    font-size: var(--wc-list-toolbar-control-font-size);
}

.office-list-toolbar .office-list-toolbar-search-field .mud-input-outlined-border,
.office-list-toolbar .office-list-toolbar-select .mud-input-outlined-border,
.office-list-toolbar .office-list-toolbar-date-range .mud-input-outlined-border,
.office-list-toolbar .office-list-toolbar-item .mud-input-outlined-border,
.office-list-toolbar-document-queue .status-filter-select .mud-input-outlined-border,
.office-list-toolbar-document-queue .date-range-filter .mud-input-outlined-border {
    border-radius: var(--wc-list-toolbar-control-radius);
}

.office-list-toolbar .office-list-toolbar-search-field .mud-input-slot,
.office-list-toolbar .office-list-toolbar-select .mud-input-slot,
.office-list-toolbar .office-list-toolbar-date-range .mud-input-slot,
.office-list-toolbar .office-list-toolbar-item .mud-input-slot,
.office-list-toolbar-document-queue .status-filter-select .mud-input-slot,
.office-list-toolbar-document-queue .date-range-filter .mud-input-slot {
    box-sizing: border-box;
    min-height: var(--wc-list-toolbar-control-height);
    padding-top: 0;
    padding-bottom: 0;
    border-radius: var(--wc-list-toolbar-control-radius);
    font-size: var(--wc-list-toolbar-control-font-size);
    line-height: 1.2;
}

.office-list-toolbar .office-list-toolbar-select .mud-input-slot,
.office-list-toolbar .office-list-toolbar-date-range .mud-input-slot,
.office-list-toolbar-document-queue .status-filter-select .mud-input-slot,
.office-list-toolbar-document-queue .date-range-filter .mud-input-slot {
    padding-left: 12px;
}

.office-list-toolbar .mud-input-outlined-with-label:not(.mud-shrink) ~ .mud-input-label-inputcontrol {
    top: 50%;
    transform: translateY(-50%);
    margin-top: 0;
    font-size: var(--wc-list-toolbar-control-font-size);
    line-height: 1.15;
}

.office-list-toolbar .office-list-toolbar-search-field .mud-input-adornment,
.office-list-toolbar .office-list-toolbar-item .mud-input-adornment {
    margin-top: 0;
}

.office-list-toolbar .office-list-toolbar-search-field .mud-input-adornment-start,
.office-list-toolbar .office-list-toolbar-item .mud-input-adornment-end {
    display: flex;
    align-items: center;
    margin-inline-start: 12px;
    margin-inline-end: 10px;
}

.office-list-toolbar .office-list-toolbar-search-field .mud-icon-root,
.office-list-toolbar .office-list-toolbar-item .mud-icon-root,
.office-list-toolbar .office-list-toolbar-item .mud-select-icon,
.office-list-toolbar-document-queue .status-filter-select .mud-icon-root,
.office-list-toolbar-document-queue .status-filter-select .mud-select-icon {
    width: 20px;
    height: 20px;
    font-size: var(--wc-type-icon-size);
}

.office-list-toolbar .office-list-toolbar-date-range .mud-icon-button,
.office-list-toolbar-document-queue .date-range-filter .mud-icon-button {
    width: 32px;
    height: 32px;
    padding: 6px;
}

/* Touch-first devices get the 44px date-range control at any width; see the
   interaction contract comment in app.shared-controls.css. */
@media (max-width: 959.98px), (pointer: coarse) {
    .office-list-toolbar .office-list-toolbar-date-range .mud-icon-button,
    .office-list-toolbar-document-queue .date-range-filter .mud-icon-button {
        width: 44px;
        min-width: 44px;
        height: 44px;
        min-height: 44px;
        padding: 8px;
    }
}

.office-list-toolbar .filter-bar-search-end .mud-button-root,
.office-list-toolbar .filter-bar-search-end .mud-icon-button {
    min-width: 44px;
    border-radius: var(--wc-card-radius, var(--border-radius-md));
}

@media (min-width: 960px) {
    .office-list-toolbar .office-list-toolbar-search-item.mud-grid-item {
        flex: 1 1 0;
        width: auto;
        max-width: none;
        /* Search keeps a usable width; filters that no longer fit beside it wrap to
           the next row instead of crushing it to "Search e". */
        min-width: min(100%, 320px);
    }

    .office-list-toolbar .office-list-toolbar-item--compact.mud-grid-item {
        flex: 0 0 184px;
        width: 184px;
        max-width: 184px;
    }

    .office-list-toolbar .office-list-toolbar-item--wide.mud-grid-item {
        flex: 0 0 224px;
        width: 224px;
        max-width: 224px;
    }
}

.office-list-toolbar-item--inline.mud-grid-item {
    display: flex;
    align-items: center;
    /* Related switches share one item so they wrap as a pair. */
    gap: 16px;
}

.office-list-toolbar-item--inline.mud-grid-item > * {
    width: auto;
}

/* An inline switch is a label, not a field: it takes its own width instead of the
   184px compact slot, which broke "Portal access only" onto two lines. */
.office-list-toolbar-item--inline .mud-switch {
    white-space: nowrap;
}

/* Mud sets switch labels in body1 (16px); in the toolbar they match the field text. */
.office-list-toolbar-item--inline .mud-switch .mud-typography {
    font-size: var(--wc-list-toolbar-control-font-size);
}

@media (min-width: 960px) {
    .office-list-toolbar .office-list-toolbar-item--compact.office-list-toolbar-item--inline.mud-grid-item {
        flex: 0 0 auto;
        width: auto;
        max-width: none;
    }
}

.office-list-toolbar-item--inline-end.mud-grid-item {
    display: flex;
    align-items: center;
    justify-content: flex-end;
}

/* ===== WorkCita.Client/wwwroot/css/app.office.css ===== */
/*
 * WorkCita global stylesheet module: app.office.css
 * Ownership layer: feature geometry (office workflow layout).
 * Ownership: office shell lane primitives (command center, detail, form), product shell
 *   navigation, page flow grids, command headers, page facts, workflow media/confirmation utilities, office controls,
 *   and office-owned surface width/ownership accents.
 * Theme: universal --wc-* tokens only; not a separate office theme.
 * Parent: GitHub #404 mechanical CSS ownership split (no visual redesign).
 * Load: after app.shared-primitives.css; before app.public.css (index.html).
 */

/* =============================================================================
   Record Fact Grid Primitive
   ============================================================================= */

.record-fact-grid {
    --wc-record-fact-columns: 4;
    container-type: inline-size;
}

.record-fact-grid-layout {
    display: grid;
    grid-template-columns: repeat(var(--wc-record-fact-columns), minmax(0, 1fr));
    gap: 8px;
}

.record-fact-grid-count-1 {
    --wc-record-fact-columns: 1;
}

.record-fact-grid-count-2 {
    --wc-record-fact-columns: 2;
}

.record-fact-grid-count-3 {
    --wc-record-fact-columns: 3;
}

.record-fact-grid-count-many .record-fact-grid-layout {
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
}

.record-fact-item {
    display: flex;
    flex-direction: column;
    min-width: 0;
    padding: 12px 14px;
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--border-radius-md);
    background: var(--wc-surface-2, var(--mud-palette-background));
}

.record-fact-grid-dense .record-fact-item {
    padding: 10px 12px;
}

.record-fact-grid-dense .record-fact-grid-layout {
    gap: 6px;
}

.record-fact-item-link {
    transition: background var(--wc-motion-feedback) var(--wc-ease-out-quart), border-color var(--wc-motion-feedback) var(--wc-ease-out-quart), box-shadow var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

.record-fact-item-link:hover {
    border-color: rgba(var(--wc-accent-rgb), 0.16);
    background: var(--wc-surface-hover, rgba(var(--wc-accent-rgb), 0.05));
}

.record-fact-item-link:focus-visible {
    outline: none;
    border-color: rgba(var(--wc-accent-rgb), 0.26);
    box-shadow: var(--wc-focus-ring);
}

.record-fact-label {
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font-weight: 700;
    letter-spacing: 0;
    text-transform: uppercase;
}

.record-fact-value {
    margin-top: 4px;
    color: var(--wc-text-primary, var(--mud-palette-text-primary));
    font-weight: 700;
    overflow-wrap: break-word;
    word-break: normal;
}

.record-fact-support {
    margin-top: 4px;
    line-height: 1.4;
}

/* The count-many variant declares its own auto-fit track list at .record-fact-grid-count-many
   .record-fact-grid-layout (two classes), so a bare .record-fact-grid-layout rule
   inside these queries loses on specificity and both narrow tiers were unreachable
   for it. Matching the variant selector puts the tiers back in play; the 420px
   query wins over the 680px one on source order at equal specificity. */
@container (max-width: 680px) {
    .record-fact-grid-layout,
    .record-fact-grid-count-many .record-fact-grid-layout {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@container (max-width: 420px) {
    .record-fact-grid-layout,
    .record-fact-grid-count-many .record-fact-grid-layout {
        grid-template-columns: 1fr;
    }
}

/* ============================================================================= */

/* ==========================================================================
   COMMAND CENTER HEADER - Unified header component for list pages
   ========================================================================== */

.command-center-header {
    position: relative;
    overflow: visible;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: transparent;
    color: var(--wc-command-header-fg, var(--wc-text-strong));
    box-shadow: none;
    margin: 0;
}

/* Unified header contract (style B): one calm, contained card on every office
   and portal surface. Surface-1 fill, 1px hairline border, lg radius, and no
   shadow, so the header reads as quiet structure, never a heavy floating card. */

@media (min-width: 960px) {
    .command-center-header {
        padding: 0;
    }
}

.command-center-header .header-title {
    font-size: var(--wc-page-title-size);
    font-weight: var(--wc-page-title-weight);
    letter-spacing: 0;
    color: var(--wc-command-header-fg, var(--wc-page-title-ink));
}

.command-center-header-copy {
    min-width: 0;
    max-width: 62ch;
}

/* Guarantee a breathing gutter between the copy block and the action cluster
   so the primary action never crowds the title at mid-desktop widths. The copy
   keeps its intrinsic size; the actions hold their content width. */
.command-center-header-row {
    column-gap: 16px;
}

.command-center-header .command-center-header-breadcrumbs {
    margin-bottom: 6px;
}

.command-center-header-subtitle {
    max-width: 58ch;
    margin-top: 3px;
    font-size: var(--wc-type-body-size);
    font-weight: 500;
    line-height: 1.4;
    color: var(--wc-command-header-muted, var(--wc-text-muted, var(--mud-palette-text-secondary)));
    font-variant-numeric: var(--wc-numeric-figures);
}

/* Inline stats: the connective words stay muted while the figures (count and
   value) read as emphasized data tokens so the eye lands on the numbers. */
.command-center-header-subtitle-stats {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
}

.command-center-header-actions {
    position: relative;
    z-index: 1;
    flex-wrap: wrap;
}

.command-center-header-status {
    position: relative;
    z-index: 1;
    flex-wrap: wrap;
}

.command-center-header-filters {
    position: relative;
    z-index: 1;
    padding-top: 4px;
}

.command-center-header .wc-page-header__title {
    color: var(--wc-command-header-fg, var(--wc-page-title-ink));
}

.command-center-header .wc-page-header__subtitle,
.command-center-header .mud-typography-color-secondary {
    color: var(--wc-command-header-muted, var(--wc-text-muted)) !important;
}

.command-center-header .wc-page-header__actions .mud-button-outlined:not(.btn-command-primary),
.command-center-header .mud-button-outlined:not(.btn-command-primary) {
    border-color: var(--wc-command-header-soft);
    background: var(--wc-command-header-soft);
    color: var(--wc-command-header-fg, var(--wc-text-strong));
}

.command-center-header .wc-page-header__actions .mud-button-outlined:not(.btn-command-primary):hover,
.command-center-header .mud-button-outlined:not(.btn-command-primary):hover {
    border-color: rgba(var(--wc-on-accent-rgb), 0.34);
    background: rgba(var(--wc-on-accent-rgb), 0.16);
    color: var(--wc-command-header-fg, var(--wc-text-strong));
}

.command-center-header .mud-icon-button,
.command-center-header .mud-button-text:not(.mud-icon-button) {
    color: var(--wc-command-header-muted, var(--wc-text-muted));
}

.command-center-header .mud-icon-button:hover,
.command-center-header .mud-button-text:not(.mud-icon-button):hover {
    background: var(--wc-command-header-soft);
    color: var(--wc-command-header-fg, var(--wc-text-strong));
}

.command-center-header-compact .command-center-header-status {
    padding-top: 2px;
}

.command-center-header-compact .command-center-header-filters {
    padding-top: 2px;
}

/* On phones the lone primary action becomes a full-width, thumb-friendly CTA
   instead of an orphaned intrinsic-width button. Multi-button action groups
   (rendered as a nested stack) keep their own row/wrap behavior. */
@media (max-width: 599.98px) {
    .command-center-header-actions {
        width: 100%;
    }

    .command-center-header-actions > .mud-button-root {
        width: 100%;
    }

    /* Tighten the phone rhythm: pull the full-width CTA closer to the metric
       line so the title, metric, and action read as one tight cluster. */
    .command-center-header-row {
        gap: 10px;
    }
}

/* =============================================================================
   Job Unified Layout Enhancements
   ============================================================================= */

.customer-delete-preview {
    margin-top: var(--wc-space-3, 12px);
}

.customer-delete-blocked {
    margin-top: var(--wc-space-2, 8px);
}

/* =============================================================================
   Office Form Shell Primitives
   ============================================================================= */

.form-action-bar {
    background: var(--wc-surface-1, var(--mud-palette-surface)) !important;
    border-top: 1px solid var(--wc-border-soft, var(--mud-palette-lines-default));
    padding: var(--space-3) !important;
    padding-bottom: max(12px, env(safe-area-inset-bottom)) !important;
}

.form-footer-spacer {
    height: 80px;
    height: calc(80px + env(safe-area-inset-bottom, 0px));
}

.form-action-bar-mobile-leading {
    display: flex;
    justify-content: flex-start;
    min-width: 0;
    margin-bottom: 8px;
    padding-bottom: 8px;
    border-bottom: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
}

.form-action-bar-mobile-row {
    min-width: 0;
}

@media (max-width: 959.98px) {
    .form-action-bar {
        bottom: calc(var(--wc-mobile-bottom-nav-height, 84px) + env(safe-area-inset-bottom, 0px)) !important;
    }

    .form-action-bar > .mud-toolbar {
        height: auto;
        min-height: 0;
    }

    .form-footer-spacer {
        height: 72px;
        height: calc(72px + env(safe-area-inset-bottom, 0px));
    }

    .form-footer-spacer:has(+ .form-action-bar .form-action-bar-mobile-leading) {
        height: calc(140px + env(safe-area-inset-bottom, 0px));
    }
}

.form-section {
    border-radius: var(--wc-card-radius, var(--border-radius-md));
}

.office-form-section-stack,
.office-form-section-inner-flow {
    display: grid;
    gap: var(--wc-content-section-gap);
    min-width: 0;
}

.office-form-section-inner-flow--collapsible {
    padding-top: var(--wc-space-2, 8px);
}

.office-form-section-stack > *,
.office-form-section-inner-flow > * {
    min-width: 0;
}

.office-detail-inline-surface {
    display: flex;
    flex-direction: column;
    gap: var(--wc-space-3);
    padding: var(--wc-space-4);
    box-shadow: none;
}

.form-section-collapsible {
    gap: 0;
}

.form-section-collapsible .wc-disclosure-panel {
    overflow: hidden;
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    box-shadow: none;
}

.form-section-collapsible .wc-disclosure-panel__header {
    min-height: auto;
    padding: var(--wc-card-padding-block) var(--wc-card-padding-inline);
}

.form-section-collapsible .wc-disclosure-panel__body {
    padding: 0 var(--wc-card-padding-inline) var(--wc-card-padding-block);
}

/* A top-level collapsible section titles like the section cards it sits between
   ("Tax details" read as a field label beside "Job location"). Nested disclosures
   inside a section keep the smaller label. */
.form-section-expansion-panel:not(.wc-disclosure-panel__body .form-section-expansion-panel) > .wc-disclosure-panel__header .wc-disclosure-panel__title {
    font-family: var(--wc-type-title-family);
    font-size: var(--wc-type-title-size);
    font-weight: var(--wc-type-title-weight);
    line-height: var(--wc-type-title-leading);
    color: var(--wc-text-strong);
}

.office-permission-actions-divider {
    margin-block: var(--wc-space-3, 12px);
}

.office-narrow-state-shell {
    width: 100%;
    max-width: 640px;
    margin-inline: auto;
}

/* =============================================================================
   Product Shell Navigation
   ============================================================================= */

.mud-nav-link {
    border-radius: var(--border-radius-md);
    transition:
        background-color var(--wc-motion-fast) var(--wc-ease-out-quart),
        color var(--wc-motion-fast) var(--wc-ease-out-quart),
        border-color var(--wc-motion-fast) var(--wc-ease-out-quart);
    min-height: 44px;
    display: flex;
    align-items: center;
}

.mud-nav-link:hover {
    background: var(--wc-surface-hover, var(--mud-palette-action-default-hover));
}

.mud-nav-link:focus-visible {
    outline: var(--wc-focus-outline);
    outline-offset: -2px;
}

/* Quiet section label that zones the flat drawer list (Workspace, Customers & money). */
.wc-nav-section {
    padding: 0.75rem 1rem 0.25rem;
    font-size: var(--wc-type-caption-size);
    font-weight: 600;
    line-height: 1.25;
    letter-spacing: 0;
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
}

.mud-nav-link-active {
    background: var(--wc-surface-brand-soft) !important;
    color: var(--wc-accent-deep) !important;
    box-shadow: inset 0 0 0 1px var(--wc-tone-primary-soft-border);
}

.mud-nav-link-active .mud-icon-root {
    color: var(--wc-accent-strong) !important;
}

.mud-nav-link .mud-icon-root {
    width: 20px;
    height: 20px;
    font-size: var(--wc-type-icon-size);
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
}

/* =============================================================================
   Shared Office Utility Primitives
   ============================================================================= */

.office-wrap-row {
    flex-wrap: wrap;
}

.office-nowrap-actions {
    flex-wrap: nowrap;
}

.office-section-title-offset {
    margin-top: var(--wc-space-2, 8px);
}

.office-dialog-content-flow {
    padding-top: var(--wc-space-2, 8px);
}

.office-dialog-field-hint {
    margin-top: calc(var(--wc-space-1, 4px) * -1);
}

.office-dialog-support-indent {
    margin-left: var(--wc-space-8, 32px);
}

.office-dialog-alert-spaced {
    margin-bottom: var(--wc-space-3, 12px);
}

.office-dialog-summary-surface {
    padding: var(--wc-space-3, 12px);
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-2);
}

.office-button-leading-icon {
    margin-right: var(--wc-space-2, 8px);
}

/* =============================================================================
   Office View Switcher
   ============================================================================= */

.office-view-switcher-band {
    display: flex;
    gap: 8px;
    padding: 5px;
    /* The band's field deliberately crosses surface tiers: surface-2 in light,
       surface-3 in dark, because a light-tier fill in dark mode disappears into
       the card behind it. That intent used to be expressed by leading with
       --mud-palette-background-gray, which is the only Mud-first background in
       the app; --wc-band-surface now names it, and resolves to exactly the same
       two colours. */
    background: var(--wc-band-surface, var(--mud-palette-background-gray));
    border-radius: var(--wc-control-radius, var(--border-radius-md));
    border: 1px solid var(--wc-data-grid-border, var(--wc-border-soft, var(--mud-palette-lines-default)));
    box-shadow: var(--wc-surface-shadow-xs, var(--shadow-xs));
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    /* The band scrolls when the pills outrun their lane, so it keeps a scrollbar
       as the affordance. `thin` only paints when there is something to scroll —
       hiding it entirely left an overflowing band looking like a clipped one. */
    scrollbar-width: thin;
}

.office-view-switcher {
    container-name: wc-view-switcher;
    container-type: inline-size;
    min-width: 0;
    max-width: 100%;
}

.office-view-switcher-band-shell {
    display: block;
    min-width: 0;
}

.office-view-switcher-select-shell {
    display: none;
    min-width: 0;
    width: 100%;
}

.office-view-switcher-select {
    width: 100%;
}

.office-view-switcher-pill {
    padding: 8px 14px;
    border-radius: var(--wc-control-radius, var(--border-radius-md));
    font-size: var(--wc-type-body-size);
    font-weight: 700;
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    background: transparent;
    border: 1px solid transparent;
    cursor: pointer;
    white-space: nowrap;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    gap: 8px;
    font-family: inherit;
    line-height: 1;
    min-height: 44px;
    position: relative;
    transition:
        background-color var(--wc-motion-base) var(--wc-ease-out-quart),
        box-shadow var(--wc-motion-base) var(--wc-ease-out-quart),
        color var(--wc-motion-base) var(--wc-ease-out-quart);
}

.office-view-switcher-pill:hover {
    background: var(--wc-surface-hover, var(--mud-palette-action-default-hover));
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
}

.office-view-switcher-pill:focus-visible {
    outline: none;
    box-shadow: var(--wc-focus-ring);
}

.office-view-switcher-pill.is-active {
    background: var(--wc-accent, var(--mud-palette-primary));
    color: var(--wc-on-accent, var(--mud-palette-primary-text));
    box-shadow: none;
    transform: translateY(0);
}

/* The switcher uses a roving tabindex, so the selected pill is the ONLY one Tab can
   land on - and .is-active clears the box-shadow the ring is drawn with. This
   selector outranks it so keyboard entry into the switcher shows a ring. */
.office-view-switcher-pill.is-active:focus-visible {
    box-shadow: var(--wc-focus-ring);
}

.office-view-switcher-pill-count {
    padding: 3px 8px;
    border-radius: var(--wc-radius-pill, 999px);
    font-size: var(--wc-type-caption-size);
    font-weight: 700;
    background: var(--wc-border-soft, var(--mud-palette-lines-default));
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    min-width: 24px;
    text-align: center;
}

.office-view-switcher-pill.is-active .office-view-switcher-pill-count,
.office-view-switcher-pill.is-active.is-highlighted .office-view-switcher-pill-count {
    background: rgba(var(--wc-on-accent-rgb), 0.25);
    color: var(--wc-on-accent, var(--mud-palette-primary-text));
}

/* Attention hairline, NOT an alert box. The count badge below already carries the
   signal at full strength, so the border only has to say "look here" - it must not
   outrank the selected pill, which is the primary state in this radiogroup and wins
   with an accent FILL and no border at all. A full-opacity error border made an
   UNSELECTED option the loudest thing in the row, and made the pill louder than the
   "N overdue" signal chip beneath it even though that chip is the more urgent
   control. Full-strength error is reserved for a pressed/active signal chip
   (.jobs-signal-chip--overdue.is-active); this shares that chip's resting hairline
   token so the lane reads as one tone ladder. */
.office-view-switcher-pill.is-highlighted {
    border-color: var(--wc-tone-error-soft-border, rgba(var(--mud-palette-error-rgb), 0.32));
}

/* Highlight is not always an error tone: the quote-follow-up option highlights with
   an INFO count. The border follows the badge's tone instead of hardcoding red. */
.office-view-switcher-pill.is-highlighted:has(.office-view-switcher-pill-count.tone-info) {
    border-color: var(--wc-tone-info-soft-border, rgba(var(--mud-palette-info-rgb), 0.32));
}

.office-view-switcher-pill.is-highlighted:has(.office-view-switcher-pill-count.tone-warning) {
    border-color: var(--wc-tone-warning-soft-border, rgba(var(--mud-palette-warning-rgb), 0.38));
}

.office-view-switcher-pill.is-highlighted:has(.office-view-switcher-pill-count.tone-success) {
    border-color: var(--wc-tone-success-soft-border, rgba(var(--mud-palette-success-rgb), 0.32));
}

/* When the highlighted view IS the selected view, the accent fill owns the pill.
   The count badge already drops its tone here (see .is-active .. -pill-count above);
   the border follows it instead of ringing a filled pill in a clashing hue. */
.office-view-switcher-pill.is-active.is-highlighted {
    border-color: transparent;
}

.office-view-switcher-pill.is-highlighted .office-view-switcher-pill-count,
.office-view-switcher-pill-count.tone-error {
    background: rgba(var(--wc-error-rgb), 1);
    color: var(--wc-on-accent, var(--mud-palette-error-text));
}

.office-view-switcher-pill-count.tone-warning {
    background: rgba(var(--wc-warning-rgb), 1);
    color: var(--wc-on-accent, var(--mud-palette-warning-text));
}

.office-view-switcher-pill-count.tone-success {
    background: rgba(var(--wc-success-rgb), 1);
    color: var(--wc-on-accent, var(--mud-palette-success-text));
}

.office-view-switcher-pill-count.tone-info {
    background: rgba(var(--wc-info-rgb), 1);
    color: var(--wc-on-accent, var(--mud-palette-info-text));
}

@container wc-view-switcher (max-width: 920px) {
    .office-view-switcher-band {
        flex-wrap: wrap;
        overflow-x: visible;
    }

    .office-view-switcher-pill {
        flex: 1 1 96px;
        justify-content: center;
        padding: 8px 10px;
        font-size: var(--wc-type-body-compact-size);
    }

    .office-view-switcher-pill-count {
        padding: 2px 6px;
        font-size: var(--wc-type-meta-size);
    }
}

@container wc-view-switcher (max-width: 390px) {
    .office-view-switcher-pill {
        padding: 8px 12px;
        font-size: var(--wc-type-body-compact-size);
    }

    .office-view-switcher-pill-count {
        padding: 2px 6px;
        font-size: var(--wc-type-meta-size);
    }
}

.office-view-switcher--select-only {
    width: 100%;
    min-width: 9rem;
}

.office-view-switcher--select-only .office-view-switcher-select-shell {
    display: block;
}

@media (max-width: 599.98px) {
    .office-view-switcher--mobile-select {
        width: 100%;
        min-width: 9rem;
    }

    .office-view-switcher--mobile-select .office-view-switcher-select-shell {
        display: block;
        min-width: 9rem;
    }

    .office-view-switcher--mobile-select .office-view-switcher-band-shell {
        display: none;
    }
}

.office-command-center-shell,
.office-detail-shell,
.office-form-shell {
    width: 100%;
    min-width: 0;
}

.office-command-center-shell,
.office-detail-shell,
.office-form-shell {
    gap: var(--wc-shell-lane-gap) !important;
}

.office-command-center-shell > *,
.office-detail-shell > *,
.office-form-shell > * {
    min-width: 0;
}

.page-section-flow {
    display: grid;
    align-content: start;
    gap: var(--wc-content-section-gap);
    min-width: 0;
}

.page-list-flow {
    display: grid;
    align-content: start;
    gap: var(--wc-shell-lane-gap);
    width: 100%;
    min-width: 0;
}

.page-list-flow--compact {
    gap: var(--wc-content-section-gap);
}

.page-list-responsive-slot {
    display: block;
    min-width: 0;
}

.page-section-flow > *,
.page-list-flow > * {
    min-width: 0;
}

.office-command-center-shell-content,
.office-detail-shell-main,
.office-detail-shell-aside,
.office-form-shell-body {
    width: 100%;
    min-width: 0;
}

.office-detail-shell-content {
    display: grid;
    align-content: start;
    gap: var(--wc-shell-lane-gap);
    min-width: 0;
}

/* The customer quick actions sit in the narrow (3/12) aside. A bare icon needs no
   36px tile, so its lane and the row padding tighten and two-word labels
   ("Delete customer") stay on one line beside the chevron. */
.customer-detail-action-list .wc-action-signal-row {
    padding-inline: var(--wc-space-2, 8px);
}

.customer-detail-action-list .wc-action-signal-row__lead {
    min-width: 24px;
}

.customer-detail-action-list .wc-action-signal-row__lead-icon {
    min-width: 24px;
    width: 24px;
}

.office-detail-shell .wc-section-card,
.office-form-shell .wc-section-card,
.office-detail-shell .wc-inline-surface,
.office-form-shell .wc-inline-surface {
    box-shadow: none;
}

.office-detail-shell .wc-section-card-aside,
.office-form-shell .wc-section-card-aside,
.office-detail-shell .wc-section-card-subtle,
.office-form-shell .wc-section-card-subtle,
.office-detail-shell .wc-section-card-state,
.office-form-shell .wc-section-card-state {
    background: var(--wc-surface-2, var(--mud-palette-background));
}

.office-detail-shell .wc-section-card-header,
.office-form-shell .wc-section-card-header {
    padding-bottom: 12px;
}

.office-detail-shell .wc-page-header__actions .mud-button-root,
.office-form-shell .wc-page-header__actions .mud-button-root {
    min-height: 44px;
}

.office-detail-shell .wc-page-header__actions .mud-button-filled-primary,
.office-form-shell .wc-page-header__actions .mud-button-filled-primary {
    min-width: 11rem;
}

.office-form-shell-action-bar {
    width: 100%;
    min-width: 0;
    margin-top: var(--wc-shell-lane-gap);
}

.office-form-shell-action-bar > .form-action-bar {
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: 0;
    box-shadow: none;
}

/* =============================================================================
   Office Command Surface
   ============================================================================= */

/* This surface used to set --wc-data-col-actions / --wc-data-actions-min-width for
   the grid it wraps. It never reached it: WorkCitaTableOptions always stamps
   `page-data-grid` on the grid root, and app.index-grid.layout.css declares both
   properties on `.page-data-grid` itself, so a value on the element always beat the
   one inherited from here. The action-column width is owned there. */

.office-command-surface.office-section-card.mud-paper {
    box-shadow: var(--wc-surface-shadow-xs);
}

.office-command-surface .office-section-card-header {
    align-items: flex-start;
    padding-bottom: 14px;
}

.office-command-surface .office-section-card-title {
    font-size: var(--wc-type-title-size);
}

.office-command-surface-controls {
    display: grid;
    gap: 12px;
    min-width: 0;
}

/* The metric band is part of the one command surface, not a framed sub-card.
   De-chrome it to match the sibling toolbar (border/fill stripped) so it reads as
   an inline metric strip instead of a card-in-card. */
.office-command-surface-stat-strip.wc-stat-strip {
    border: 0;
    background: transparent;
    box-shadow: none;
    padding-left: 0;
    padding-right: 0;
}

.office-command-surface-toolbar.filter-bar.filter-bar-compact.mud-paper {
    padding: 0;
    border: 0;
    background: transparent;
    box-shadow: none;
}

.office-command-surface-toolbar.filter-bar.filter-bar-compact .mud-stack-root {
    gap: 8px;
}

.office-command-surface-toolbar .filter-bar-compact-actions {
    margin-bottom: 0;
}

.office-command-surface .office-section-card-body {
    margin-inline: calc(var(--wc-card-padding-inline, 16px) * -1);
    margin-bottom: calc(var(--wc-card-padding-block, 16px) * -1);
}

@media (max-width: 959.98px) {
    .office-command-surface .office-section-card-body {
        margin-inline: 0;
        margin-bottom: 0;
    }
}

/* A command surface that nests labeled regions (multiple grids under one stat
   band, e.g. inventory) flattens those inner section cards so they read as
   regions of the one surface, not framed sub-cards. No nested cards. */
.office-command-surface .wc-section-card {
    border: 0;
    box-shadow: none;
    background: transparent;
}

/* The grid body bleeds horizontally to the surface edge (like every office grid),
   but must NOT pull the following section up onto it: drop only the bleed's
   bottom margin so vertical rhythm between sections is preserved. */
.office-command-surface .wc-section-card .office-section-card-body {
    margin-bottom: 0;
}

/* The grid is a sibling of the section toolbar/selector inside one section body,
   so (unlike the office controls-band/body split) nothing separates them. Give
   the grid the office gap above it. */
.office-command-surface .wc-section-card .page-data-grid-shell {
    margin-top: 14px;
}

/* A MudGrid (e.g. the restock-plan location picker) carries a negative gutter
   margin that pulls it up into the section header. Cancel the top pull so it
   clears the header; the grid below it already has its own top gap. */
.office-command-surface .wc-section-card .office-section-card-body .mud-grid {
    margin-top: 0;
}

/* Collapsible sections render as bare MudExpansionPanels with no margin, so two
   adjacent ones (restock templates, import) touch. Give them the section gap. */
.office-command-surface .form-section-collapsible {
    margin-top: 16px;
}

/* =============================================================================
   Office Activity Timeline
   ============================================================================= */

.activity-timeline-panel {
    display: grid;
    gap: 16px;
    min-width: 0;
}

.activity-timeline-panel__filters {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    align-items: center;
    min-width: 0;
}

.activity-timeline-state {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding: 16px;
    border: 1px dashed var(--wc-border-soft, var(--mud-palette-divider));
    background: var(--wc-surface-2, var(--mud-palette-background-gray));
    min-width: 0;
}

.activity-timeline-state--permission {
    border-style: solid;
    background: var(--wc-tone-warning-soft-bg);
}

@media (max-width: 599.98px) {
    .activity-timeline-panel__filters {
        gap: 6px;
    }
}

@media (max-width: 599.98px) {
    .form-section .office-section-card-title-block {
        flex-wrap: nowrap;
    }
}

/* ===== WorkCita.Client/wwwroot/css/app.public.css ===== */
/*
 * WorkCita global stylesheet module: app.public.css
 * Ownership layer: feature geometry (public workflow layout).
 * Ownership: marketing/public entry shells, pricing page surfaces, and public support flows.
 * Theme: universal --wc-* tokens only; not a separate public theme.
 * Parent: GitHub #404 mechanical CSS ownership split (no visual redesign).
 * Load: after app.office.css; before app.features.css (index.html).
 */


.public-page-flow,
.public-content-section-flow {
    display: grid;
    align-content: start;
    width: 100%;
    min-width: 0;
}
.public-page-flow {
    gap: var(--wc-shell-lane-gap);
}

.public-content-section-flow {
    gap: var(--wc-content-section-gap);
}

.public-page-flow > *,
.public-content-section-flow > * {
    min-width: 0;
}

.public-page-shell {
    display: grid;
    align-content: start;
    gap: var(--wc-shell-lane-gap);
    width: 100%;
    margin-inline: auto;
}

.public-page-shell--focus {
    max-width: 720px;
}

.public-entry-shell {
    padding-top: max(24px, var(--wc-shell-lane-gap));
    padding-bottom: max(24px, var(--wc-shell-lane-gap));
    width: 100%;
    max-width: 760px;
    margin-inline: auto;
    box-sizing: border-box;
}

.public-entry-shell--wide {
    max-width: 1120px;
}

.public-entry-shell--documents {
    max-width: 980px;
}

.wc-shell-layout--public-capability .public-entry-shell {
    min-height: 100%;
    align-content: start;
    padding-bottom: max(24px, var(--wc-shell-lane-gap));
}

@media (max-width: 599.98px) {
    .public-entry-shell {
        padding-bottom: max(152px, calc(var(--wc-shell-lane-gap) + 112px + env(safe-area-inset-bottom, 0px)));
    }
}

.public-entry-layout {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(280px, 0.42fr);
    gap: clamp(18px, 3vw, 32px);
    align-items: start;
}

.public-entry-layout--booking > .public-entry-main:only-child {
    grid-column: 1 / -1;
    width: 100%;
    max-width: 740px;
    justify-self: center;
}

.public-entry-layout--booking-form {
    grid-template-areas: "booking-form booking-progress";
}

.public-entry-layout--booking-form > .public-entry-main {
    grid-area: booking-form;
}

.public-entry-layout--booking-form > .public-entry-aside {
    grid-area: booking-progress;
}

.public-entry-main,
.public-entry-aside {
    min-width: 0;
}

.public-entry-aside {
    position: sticky;
    top: 28px;
}

.pricing-page {
    padding-top: clamp(18px, 2.6vw, 32px);
    padding-bottom: clamp(48px, 6vw, 72px);
}

.pricing-page .mud-button-root,
.public-entry-shell .mud-button-root:not(.mud-icon-button) {
    min-height: 44px;
}

.pricing-hero-section {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: clamp(20px, 3vw, 30px);
    align-items: start;
    padding-block: 0 clamp(28px, 4.5vw, 52px);
    border-bottom: 1px solid var(--wc-border-soft);
}

.pricing-hero-copy {
    max-width: 760px;
}

.pricing-hero-decision {
    min-width: 0;
    width: 100%;
}

.pricing-title {
    margin: 0;
    line-height: 1.06;
    font-weight: var(--wc-page-title-weight);
    color: var(--wc-page-title-ink);
}

.pricing-lede {
    max-width: 660px;
    margin-top: 12px;
    line-height: 1.58;
}

.pricing-plans-panel {
    display: grid;
    gap: 20px;
}

.pricing-plans-panel__intro {
    max-width: 42rem;
}

.pricing-decision-assurances--grid {
    margin-top: 4px;
}

.pricing-decision-assurances span {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    min-height: 34px;
    padding: 7px 10px;
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-radius-pill);
    background: var(--wc-surface-1, var(--mud-palette-surface));
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-body-compact-size);
    font-weight: 600;
}

.pricing-decision-assurances .mud-icon-root {
    color: var(--wc-accent-ink, var(--mud-palette-primary));
}

.pricing-workflow-map {
    display: grid;
    gap: 18px;
    padding: clamp(18px, 3vw, 26px);
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    box-shadow: none;
}

.pricing-proof-section {
    padding-block: clamp(22px, 4vw, 40px);
    border-bottom: 1px solid var(--wc-border-soft);
}

.pricing-proof-section .pricing-workflow-map {
    grid-template-columns: minmax(230px, 0.32fr) minmax(0, 0.68fr);
    align-items: start;
}

.pricing-proof-section .pricing-proof-list {
    grid-column: 1 / -1;
    grid-template-columns: repeat(3, minmax(0, 1fr));
}

.pricing-workflow-map__header {
    display: grid;
    grid-template-columns: 38px minmax(0, 1fr);
    gap: 12px;
    align-items: start;
}

.pricing-workflow-map__header > .mud-icon-root {
    width: 38px;
    height: 38px;
    padding: 8px;
    border-radius: var(--wc-control-radius, var(--border-radius-md));
    border: 1px solid rgba(var(--wc-accent-rgb), 0.16);
    background: rgba(var(--wc-accent-rgb), 0.07);
}

.pricing-workflow-lane {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 8px;
}

/* A read-only sequence, not a row of buttons: no boxed tiles, a chevron between steps. */
.pricing-workflow-step {
    position: relative;
    display: grid;
    justify-items: center;
    align-content: start;
    gap: 8px;
    padding: 8px 6px;
    text-align: center;
    font-weight: var(--font-semibold, 600);
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
}

.pricing-workflow-step:not(:last-child)::after {
    content: "\203A";
    position: absolute;
    top: 12px;
    right: -9px;
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font-size: 1.25rem;
    line-height: 1;
}

.pricing-workflow-step .mud-icon-root {
    width: 32px;
    height: 32px;
    padding: 6px;
    border-radius: var(--wc-control-radius, var(--border-radius-md));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    border: 1px solid var(--wc-border-soft);
}

.pricing-state-card,
.public-support-faq-card {
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    border: 1px solid var(--wc-border-soft);
    background: var(--wc-surface-1, var(--mud-palette-surface));
    box-shadow: none;
}

.pricing-proof-list {
    display: grid;
    gap: 14px;
    padding-top: 14px;
    border-top: 1px solid var(--wc-border-soft);
}

.pricing-proof-item {
    display: grid;
    grid-template-columns: 34px minmax(0, 1fr);
    gap: 12px;
    align-items: start;
}

.pricing-proof-item > .mud-icon-root {
    width: 34px;
    height: 34px;
    padding: 7px;
    border-radius: var(--wc-control-radius, var(--border-radius-md));
    background: rgba(var(--wc-accent-rgb), 0.08);
    border: 1px solid rgba(var(--wc-accent-rgb), 0.12);
}

.pricing-state-card {
    max-width: 820px;
}

.pricing-state-card .mud-button-root {
    align-self: flex-start;
}

.pricing-state-card--error {
    border-color: rgba(var(--wc-error-rgb), 0.24);
}

.pricing-decision-assurances {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}

.pricing-fit-section {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: 24px;
    align-items: center;
    padding: 22px 0;
    border-bottom: 1px solid var(--wc-border-soft);
}

.pricing-cta-title {
    margin: 0 0 8px;
    color: var(--wc-text-strong);
}

.pricing-cta-copy {
    max-width: 640px;
    color: var(--wc-text-muted);
}

.pricing-contact-button {
    padding: 12px 28px;
}

.public-entry-context-card,
.public-booking-form-card {
    border-radius: var(--wc-panel-radius, var(--wc-card-radius, var(--border-radius-md)));
    border: 1px solid var(--wc-data-grid-border, var(--wc-border-soft));
    box-shadow: none;
}

/* The form card opens like a card header: title, the one-line promise under it, then
   room before the welcome note or divider. Without it the three lines ran together. */
.public-booking-form-card .page-state-title {
    margin-bottom: 4px;
}

.public-booking-form-card .page-state-title + .mud-typography {
    margin-bottom: 16px;
}

.public-entry-context-card {
    border-color: var(--wc-tone-primary-soft-border);
    background: var(--wc-surface-1);
    color: var(--wc-command-header-fg, var(--wc-text-strong));
}

.public-entry-context-card .mud-typography-color-secondary,
.public-entry-context-card .public-footer-contact-text,
.public-entry-context-card .public-booking-context-contact,
.public-entry-context-card .public-booking-context-reference {
    color: var(--wc-command-header-muted, var(--wc-text-muted)) !important;
}

.public-capability-state-card--primary {
    border-color: var(--wc-tone-primary-soft-border);
}

.public-capability-state-card--info {
    border-color: var(--wc-tone-info-soft-border);
}

.public-capability-state-card--success {
    border-color: var(--wc-tone-success-soft-border);
}

.public-capability-state-card--warning {
    border-color: var(--wc-tone-warning-soft-border);
}

.public-capability-state-card--error {
    border-color: var(--wc-tone-error-soft-border);
}

/* Public page/capability card wrappers delegate base visuals to Wc* (app.shared-primitives.css). */

.public-card-interactive {
    display: block;
    width: 100%;
    padding: 0;
    border: 0;
    background: transparent;
    color: inherit;
    font: inherit;
    text-align: inherit;
    text-decoration: none;
}

.public-page-card--document {
    height: 100%;
}

.public-page-card-clickable {
    cursor: pointer;
    transition: border-color var(--wc-motion-base) var(--wc-ease-out-quart), background-color var(--wc-motion-base) var(--wc-ease-out-quart);
}

.public-page-card-clickable:hover,
.public-card-interactive:focus-visible .public-page-card-clickable {
    border-color: rgba(var(--wc-accent-rgb), 0.30);
    box-shadow: none;
    transform: none;
    outline: none;
}

.public-capability-card-header {
    position: relative;
    z-index: 1;
}

.public-capability-card-header-row {
    gap: var(--wc-card-section-gap);
    flex-wrap: wrap;
}

.public-capability-card-heading,
.public-capability-card-actions,
.public-capability-card-top,
.public-capability-card-body {
    position: relative;
    z-index: 1;
    min-width: 0;
    overflow-wrap: anywhere;
}

.public-capability-card-title {
    margin: 0;
    line-height: 1.18;
    font-weight: var(--wc-page-title-weight);
    color: var(--wc-page-title-ink);
}

.public-capability-card-actions {
    flex-wrap: wrap;
}

.public-state-content {
    margin-bottom: 16px;
}

.public-capability-loading {
    width: 100%;
}

.public-state-focus-target {
    outline: none;
}

.public-state-focus-target:focus-visible {
    outline: var(--wc-focus-outline);
    outline-offset: 4px;
    border-radius: var(--border-radius-sm);
}

/* The one surface guaranteed to render with JS off, so it cannot rely on the
   theme scope. Every token it paints with lives under .wc-theme-light /
   .wc-theme-dark, and that class is stamped by js/bootstrap-theme.js — with
   scripting disabled none of them resolve and the card rendered as bare text on
   the browser's default background. The literals are the light-scope values, the
   correct choice for an unthemed document. Radius stays a bare token: the radius
   scale is declared at :root and resolves either way. */
.public-noscript-fallback {
    max-width: 40rem;
    margin: 12vh auto;
    padding: 24px;
    border: 1px solid var(--wc-border-soft, rgba(15, 23, 42, 0.12));
    border-radius: var(--border-radius-md);
    background: var(--wc-surface-1, #FCFDFF);
    color: var(--wc-text-strong, #0F172A);
    box-shadow: var(--wc-surface-shadow-sm, none);
}

.public-noscript-fallback h1 {
    margin: 0 0 12px;
    font-size: var(--wc-type-title-size);
    line-height: 1.2;
}

.public-noscript-fallback p {
    margin: 0 0 8px;
}

/* The Spanish notice starts its own block under a rule, not on the English
   notice's last line. */
.public-noscript-fallback > [lang] + [lang] {
    margin-top: 16px;
    padding-top: 16px;
    border-top: 1px solid var(--wc-border-soft, rgba(15, 23, 42, 0.12));
}

.public-preboot-app > .loading-progress,
.public-preboot-app > .loading-progress-text {
    display: none;
}

/* Server-rendered first paint for public acquisition pages (SpaStaticAssetCachePolicy).
   It stands in for the marketing shell until the app mounts, and it is the page a
   crawler without JavaScript reads. Colour tokens live in the theme scope that
   js/bootstrap-theme.js stamps, so each one carries its light-scope literal for
   that no-script read, as .public-noscript-fallback does. The home hero reuses
   the welcome page's own classes, so the headline does not move when the live
   page replaces this one. */
.public-preboot {
    display: flex;
    flex-direction: column;
    min-height: 100vh;
    background: var(--wc-surface-2, #EEF3FA);
    color: var(--wc-text-strong, #0F172A);
    font-family: var(--wc-font-body);
    font-size: var(--text-base);
}

.public-preboot a {
    color: inherit;
    text-decoration: none;
}

.public-preboot a:focus-visible {
    outline: var(--wc-focus-outline, 2px solid #2457E6);
    outline-offset: 2px;
}

/* Matches the live app bar: 64px, flat surface, hairline rule, brand chip left,
   marketing links and both calls to action right. */
.public-preboot-bar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    min-height: 64px;
    padding-inline: 24px 16px;
    background: var(--wc-shell-appbar-bg, #FCFDFF);
    border-bottom: 1px solid var(--wc-shell-appbar-border, rgba(15, 23, 42, 0.08));
}

.public-preboot-brand {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    min-height: 44px;
}

.public-preboot-brand-mark {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border: 1px solid var(--wc-shell-brand-border, rgba(36, 87, 230, 0.16));
    border-radius: 50%;
    background: var(--wc-shell-brand-bg, rgba(36, 87, 230, 0.11));
    color: var(--wc-shell-brand-fg, #173FB6);
}

.public-preboot-brand-mark svg {
    width: 22px;
    height: 22px;
    fill: currentColor;
}

.public-preboot-brand-text {
    font-family: var(--wc-font-display);
    font-size: 1.25rem;
    font-weight: var(--font-medium);
    white-space: nowrap;
}

.public-preboot-nav {
    display: flex;
    align-items: center;
    gap: 4px;
    min-width: 0;
}

.public-preboot-nav-link,
.public-preboot-signin,
.public-preboot-cta {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 44px;
    font-size: var(--text-base);
    white-space: nowrap;
}

.public-preboot-nav-link {
    padding-inline: 10px;
    border-radius: var(--wc-radius-pill);
    font-weight: var(--font-bold);
}

.public-preboot-signin {
    padding: 8px 18px;
    border: 1px solid var(--wc-shell-appbar-action-border, rgba(15, 23, 42, 0.14));
    border-radius: var(--wc-radius-pill);
    font-weight: var(--font-semibold);
}

.public-preboot-cta {
    min-height: 40px;
    margin-inline-start: 4px;
    padding-inline: 18px;
    border-radius: var(--border-radius-md);
    background: var(--wc-accent, #2457E6);
    color: var(--wc-on-accent, #FCFDFF) !important;
    font-weight: var(--font-semibold);
}

.public-preboot-nav-link:hover,
.public-preboot-signin:hover {
    background: var(--wc-shell-appbar-action-bg, rgba(252, 253, 255, 0.55));
}

.public-preboot-cta:hover,
.public-preboot-button:hover {
    background: var(--wc-accent-hover, #173FB6);
}

.public-preboot-main {
    flex: 1 0 auto;
}

/* The welcome hero's colours resolve through MudBlazor's palette as their second
   choice, and that palette does not exist before the app mounts. */
.public-preboot .welcome-band--hero {
    background: var(--wc-surface-2, #EEF3FA);
}

.public-preboot .welcome-hero-title {
    color: var(--wc-text-strong, #0F172A);
}

.public-preboot .welcome-hero-title-accent,
.public-preboot .welcome-cta-link {
    color: var(--wc-accent-ink, #2457E6);
}

.public-preboot .welcome-hero-lede {
    color: var(--wc-text-secondary, #526277);
}

.public-preboot-button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    min-width: 196px;
    min-height: 50px;
    padding: 12px 24px;
    border-radius: var(--border-radius-md);
    background: var(--wc-accent, #2457E6);
    color: var(--wc-on-accent, #FCFDFF) !important;
    font-size: var(--text-lg);
    font-weight: var(--font-bold);
}

.public-preboot-button svg {
    width: 22px;
    height: 22px;
    fill: currentColor;
}

.public-preboot-note {
    max-width: 52ch;
    margin: 0;
    color: var(--wc-text-muted, #526277);
    font-size: var(--text-sm);
    line-height: 1.5;
}

.public-preboot-document {
    width: 100%;
    max-width: 46rem;
    margin-inline: auto;
    padding: clamp(32px, 6vw, 64px) clamp(16px, 4vw, 40px);
    line-height: 1.6;
}

.public-preboot-document h1 {
    margin: 0 0 16px;
    font-family: var(--wc-font-display);
    font-size: var(--wc-page-title-size, 1.75rem);
    line-height: 1.2;
}

.public-preboot-document h2 {
    margin: 32px 0 8px;
    font-family: var(--wc-font-display);
    font-size: var(--text-xl);
    line-height: 1.3;
}

.public-preboot-document p,
.public-preboot-document ul {
    margin: 0 0 12px;
    color: var(--wc-text-secondary, #526277);
}

.public-preboot-document ul {
    padding-inline-start: 20px;
}

.public-preboot-footer {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
    gap: 4px 12px;
    padding: 24px 16px;
    border-top: 1px solid var(--wc-border-soft, rgba(15, 23, 42, 0.12));
    background: var(--wc-surface-1, #FCFDFF);
    color: var(--wc-text-muted, #526277);
    font-size: var(--text-base);
}

.public-preboot-footer a:hover {
    text-decoration: underline;
}

@media (max-width: 599.98px) {
    .public-preboot-bar {
        min-height: 56px;
        padding-inline: 16px 12px;
    }

    .public-preboot-nav-link--support {
        display: none;
    }

    .public-preboot-cta {
        min-height: 44px;
        padding-inline: 12px;
        font-size: var(--wc-type-caption-size, 0.8125rem);
    }

    .public-preboot-button {
        width: 100%;
    }
}

@media (max-width: 440px) {
    .public-preboot-brand-text {
        display: none;
    }

    .public-preboot-nav-link {
        padding-inline: 8px;
        font-size: var(--text-sm);
    }

    .public-preboot-signin {
        padding: 6px 14px;
        font-size: var(--wc-type-caption-size, 0.8125rem);
    }
}

.public-capability-card-top {
    display: grid;
    gap: var(--wc-card-section-gap);
}

.public-booking-context-avatar {
    font-weight: var(--font-bold);
}

.public-booking-context-steps {
    display: grid;
    gap: 16px;
    margin: 0;
    padding: 0;
    list-style: none;
}

.public-booking-context-step {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: 12px;
    align-items: start;
}

.public-booking-context-marker {
    display: inline-grid;
    width: 32px;
    height: 32px;
    place-items: center;
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-radius-pill);
    background: var(--wc-surface-2);
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-body-compact-size);
    font-weight: var(--font-bold);
}

.public-booking-context-step.is-current .public-booking-context-marker {
    border-color: rgba(var(--wc-accent-rgb), 0.42);
    background: var(--wc-tone-primary-soft-bg);
    color: var(--wc-tone-primary-soft-fg);
}

.public-booking-context-step.is-complete .public-booking-context-marker {
    border-color: rgba(var(--wc-success-rgb), 0.35);
    background: var(--wc-tone-success-soft-bg);
    color: var(--wc-tone-success-soft-fg);
}

.public-booking-context-step.is-future {
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
}

.public-booking-context-reference,
.public-booking-context-contact {
    padding: 14px 16px;
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    border: 1px solid var(--wc-border-soft);
    background: var(--wc-surface-2);
}

.public-account-cta-card {
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    border-color: var(--wc-tone-primary-soft-border);
    background: var(--wc-tone-primary-soft-bg);
}

.public-account-cta-chip-row {
    flex-wrap: wrap;
    gap: 4px 8px !important;
}

.public-account-cta-action {
    align-self: flex-start;
    margin-top: 8px;
}

.public-inline-surface {
    padding: var(--wc-card-padding-block) var(--wc-card-padding-inline);
}

/*
 * One bordered surface per region: a nested inline surface already sits inside
 * the bordered capability/state card, so a second border+fill reads as
 * card-in-card. De-chrome every nested .public-inline-surface (document rows,
 * the company-contact block, and the booking preferred-window panels) to plain
 * stacked content and let row separation / MudStack spacing carry the grouping.
 * The intentionally tinted account-CTA callout is the one exception; top-level
 * (non-nested) and legal-page surfaces keep their chrome.
 */
.public-capability-card-body .public-inline-surface:not(.public-account-cta-card) {
    padding: 0;
    border: 0;
    background: transparent;
    box-shadow: none;
    border-radius: 0;
}

.public-document-line-item {
    padding: 12px 14px;
    border-top: 1px solid var(--wc-border-soft);
}

.public-document-line-item:first-child {
    border-top: 0;
}

.public-inline-surface-spaced {
    margin-bottom: 16px;
}

.public-entry-panel {
    padding: clamp(24px, 4vw, 40px);
}

.public-entry-panel--centered {
    text-align: center;
}

.public-inline-title-row {
    margin-bottom: 8px;
}

.public-wrap-row {
    flex-wrap: wrap;
}

.public-card-fill {
    height: 100%;
}

.public-inline-icon {
    margin-right: 4px;
}

.public-button-leading-icon {
    margin-right: 8px;
}

.public-divider-xs {
    margin-block: 4px !important;
}

.public-divider-sm {
    margin-block: 8px !important;
}

.public-divider-md {
    margin-block: 16px !important;
}

.public-divider-lg {
    margin-block: 24px !important;
}

.public-divider-bottom-md {
    margin-bottom: 16px !important;
}

.public-hero-stack {
    padding-block: 24px;
}

.public-header-alert {
    margin-top: 8px;
}

.public-footer-help {
    margin-top: 24px;
    text-align: center;
}

.public-powered-by {
    margin-block: 16px 24px;
    text-align: center;
}

.public-section-heading {
    margin-bottom: 8px;
}

.public-section-heading--roomy {
    margin-bottom: 12px;
}

.public-section-content {
    margin-bottom: 16px;
}

.public-section-progress {
    margin-bottom: 16px;
}

.public-alert-spaced {
    margin-top: 16px;
}

.public-alert-section {
    margin-bottom: 16px;
}

.public-alert-section--roomy {
    margin-bottom: 24px;
}

.public-document-intro {
    margin-bottom: 24px;
}

.public-document-list {
    margin-left: 16px;
}

.public-document-note {
    margin-top: 8px;
}

.public-document-actions {
    flex-wrap: wrap;
}

.public-document-card-header {
    flex-wrap: wrap;
}

.public-document-title {
    margin-bottom: 8px;
}

.public-document-text {
    margin-bottom: 8px;
}

.public-financial-summary-table,
.public-financial-summary-total {
    margin-bottom: 16px;
    min-width: 0;
    max-width: 100%;
}

.public-financial-summary-total {
    overflow-wrap: anywhere;
}

.public-redirect-shell {
    min-height: min(720px, calc(100vh - 64px));
    display: grid;
    align-content: center;
}

.public-redirect-card {
    width: 100%;
}

.public-text-action {
    padding-inline: 0 !important;
    text-transform: none !important;
}

.public-honeypot-field {
    position: absolute;
    left: -9999px;
    width: 1px;
    height: 1px;
    overflow: hidden;
}

.public-footer-contact-text {
    display: block;
    overflow-wrap: anywhere;
}

.public-section-title {
    margin: 0;
    line-height: 1.18;
    font-weight: var(--wc-page-title-weight);
    color: var(--wc-page-title-ink);
}

.public-support-page {
    padding-top: clamp(18px, 2.6vw, 32px);
    padding-bottom: clamp(48px, 6vw, 72px);
}

.public-support-desk {
    display: grid;
    grid-template-columns: minmax(0, 0.95fr) minmax(360px, 0.55fr);
    grid-template-areas: "copy form" "routes form";
    grid-template-rows: auto 1fr;
    column-gap: clamp(24px, 4.5vw, 48px);
    row-gap: 16px;
    align-items: start;
    padding-block: 0 clamp(28px, 4.5vw, 52px);
    border-bottom: 1px solid var(--wc-border-soft);
}

.public-support-desk__copy {
    grid-area: copy;
    display: grid;
    gap: 16px;
    max-width: 700px;
}

.public-support-lede {
    max-width: 650px;
    line-height: 1.58;
}

.public-support-route-board {
    grid-area: routes;
    display: grid;
    gap: 16px;
    margin-top: 4px;
    padding: clamp(16px, 2.5vw, 22px);
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    box-shadow: none;
}

.public-support-route-board__header {
    display: grid;
    grid-template-columns: 42px minmax(0, 1fr);
    gap: 12px;
    align-items: start;
}

.public-support-route-board__header > .mud-icon-root {
    width: 42px;
    height: 42px;
    padding: 9px;
    border-radius: var(--wc-control-radius, var(--border-radius-md));
    background: rgba(var(--wc-accent-rgb), 0.08);
    border: 1px solid rgba(var(--wc-accent-rgb), 0.14);
}

.public-support-route-list {
    display: grid;
    gap: 10px;
}

.public-support-route-item {
    display: grid;
    grid-template-columns: 38px minmax(0, 1fr);
    gap: 12px;
    align-items: start;
    padding: 14px;
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-2, var(--mud-palette-background));
}

.public-support-route-item > .mud-icon-root {
    width: 38px;
    height: 38px;
    padding: 8px;
    border-radius: var(--wc-control-radius, var(--border-radius-md));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    border: 1px solid var(--wc-border-soft);
}

.public-support-intake {
    grid-area: form;
    align-self: start;
}

.public-support-intake-card {
    box-shadow: none;
}

.public-support-form-guardrail {
    display: grid;
    grid-template-columns: 34px minmax(0, 1fr);
    gap: 12px;
    align-items: start;
    padding: 14px;
    border: 1px solid rgba(var(--wc-accent-rgb), 0.16);
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: rgba(var(--wc-accent-rgb), 0.06);
}

.public-support-form-guardrail > .mud-icon-root {
    width: 34px;
    height: 34px;
    padding: 7px;
    border-radius: var(--wc-control-radius, var(--border-radius-md));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    border: 1px solid rgba(var(--wc-accent-rgb), 0.14);
}

.public-support-commitment,
.public-support-faq-section {
    display: grid;
    grid-template-columns: minmax(220px, 0.34fr) minmax(0, 1fr);
    gap: clamp(22px, 4vw, 44px);
    align-items: start;
}

.public-support-commitment {
    padding-block: 22px 0;
    border-bottom: 1px solid var(--wc-border-soft);
}

.public-support-section-heading {
    display: grid;
    gap: 8px;
    max-width: 440px;
}

.public-support-section-heading h2 {
    margin: 0;
    color: var(--wc-text-strong);
}

.public-support-signal-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: clamp(12px, 2vw, 18px);
}

.public-support-signal {
    display: grid;
    grid-template-columns: 40px minmax(0, 1fr);
    gap: 14px;
    align-items: start;
    min-height: 150px;
    padding: 16px;
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    box-shadow: none;
}

.public-support-signal > .mud-icon-root {
    width: 40px;
    height: 40px;
    padding: 8px;
    border-radius: var(--wc-control-radius, var(--border-radius-md));
    background: var(--wc-surface-2, var(--mud-palette-background));
    border: 1px solid var(--wc-border-soft);
}

.public-support-faq-card .public-surface-body {
    padding: clamp(18px, 3vw, 28px);
}

@media (max-width: 959.98px) {
    .public-entry-layout,
    .public-support-desk,
    .pricing-hero-section,
    .pricing-fit-section,
    .public-support-commitment,
    .public-support-faq-section {
        grid-template-columns: minmax(0, 1fr);
    }

    .public-support-signal {
        min-height: 0;
    }

    .public-support-desk {
        grid-template-areas: "copy" "form" "routes";
        grid-template-rows: none;
        row-gap: 24px;
    }

    .public-entry-aside {
        position: static;
    }

    .public-entry-layout--booking-form {
        grid-template-areas:
            "booking-progress"
            "booking-form";
    }

    .public-entry-layout--booking-form > .public-entry-aside {
        grid-area: booking-progress;
    }

    .public-entry-layout--booking-form > .public-entry-main {
        grid-area: booking-form;
    }

    .public-entry-layout--booking-form .public-booking-context-step-description,
    .public-entry-layout--booking-form .public-entry-context-card .mud-divider {
        display: none;
    }

    .public-entry-layout--booking-form .public-booking-context-steps {
        grid-template-columns: repeat(3, minmax(0, 1fr));
        gap: 8px;
    }

    /* Rows pack to the top: a stretched step spread its spare height between marker
       and label, so a one-line label floated lower than a three-line one. */
    .public-entry-layout--booking-form .public-booking-context-step {
        grid-template-columns: minmax(0, 1fr);
        justify-items: center;
        align-content: start;
        gap: 6px;
        text-align: center;
    }

    .public-entry-layout--booking-form .public-entry-context-card .public-surface-body {
        padding: 14px 16px;
    }

    .pricing-fit-section .mud-button-root {
        justify-self: start;
    }

    .pricing-proof-section .pricing-workflow-map {
        grid-template-columns: minmax(0, 1fr);
    }

    .pricing-proof-section .pricing-proof-list {
        grid-template-columns: minmax(0, 1fr);
    }

    .pricing-hero-section,
    .public-support-desk {
        padding-bottom: 32px;
    }

    .public-support-signal-grid {
        grid-template-columns: minmax(0, 1fr);
    }
}

@media (max-width: 599.98px) {
    .pricing-page,
    .public-support-page {
        padding-top: 18px;
    }

    .pricing-fit-section .mud-button-root,
    .pricing-contact-button,
    .public-support-form-actions,
    .public-support-form-actions .mud-button-root {
        width: 100%;
    }

    .pricing-fit-section {
        gap: 16px;
    }

    .pricing-hero-section,
    .public-support-desk {
        padding-bottom: 28px;
    }

    .pricing-workflow-lane {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .pricing-workflow-step:nth-child(2n)::after {
        content: none;
    }

    .pricing-decision-assurances span {
        width: 100%;
    }

    .pricing-title {
        font-size: var(--wc-type-display-pricing-size);
        line-height: 1.08;
    }

    .pricing-proof-list {
        gap: 12px;
    }

    .pricing-proof-item {
        grid-template-columns: 32px minmax(0, 1fr);
    }

    .public-booking-shell {
        padding-inline: 14px;
    }

    .public-account-cta-action {
        align-self: stretch;
        width: 100%;
    }

    .public-support-route-board__header,
    .public-support-route-item,
    .public-support-signal,
    .public-support-form-guardrail {
        grid-template-columns: 34px minmax(0, 1fr);
        gap: 12px;
    }

    .public-support-route-board__header > .mud-icon-root,
    .public-support-route-item > .mud-icon-root,
    .public-support-signal > .mud-icon-root,
    .public-support-form-guardrail > .mud-icon-root {
        width: 34px;
        height: 34px;
        padding: 7px;
    }
}

.public-preboot-plans {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr));
    gap: var(--wc-space-6, 24px);
}

.public-preboot-document--wide {
    max-width: 76rem;
}

.public-preboot-plan {
    padding: var(--wc-space-6, 24px);
    border: 1px solid var(--wc-border-soft, rgba(15, 23, 42, 0.12));
    border-radius: var(--border-radius-md);
    background: var(--wc-surface-1, #FCFDFF);
}

.public-preboot-plan h3 {
    margin: 0 0 12px;
    font-family: var(--wc-font-display);
    font-size: var(--text-xl);
}

.public-preboot-price {
    font-weight: var(--font-bold);
    font-size: var(--text-xl);
}

.public-preboot-document a:not(.public-preboot-button) {
    color: var(--wc-accent-ink, #2457E6);
    text-decoration: underline;
}

/* ===== WorkCita.Client/wwwroot/css/app.public.welcome.css ===== */
/*
 * WorkCita global stylesheet module: app.public.welcome.css
 * Ownership layer: feature geometry (public /welcome acquisition surface).
 * Theme: universal --wc-* tokens only; not a separate public theme.
 * Load: after app.public.css (bundled into workcita.app.bundle.css).
 *
 * Direction: the ruled ledger. /welcome is the only Persuade surface in the
 * product, so it earns display type and full-bleed bands - but its ornament is
 * the same hairline rule the office tables use, never gradient, glass, or glow.
 * The page reads top to bottom as one argument: promise -> the day it produces
 * -> what the plan covers -> what stays connected -> the flow -> start.
 *
 * Scope contract: the page classes hang off .welcome-page-shell and are
 * reachable only from /welcome. .welcome-appbar-* exist only while LandingLayout
 * renders its marketing nav (welcome, pricing, support). Nothing here leaks into
 * legal, auth, portal, or office surfaces.
 *
 * Motion: this module declares no reduced-motion block. app.base.css owns the
 * app-standard collapse (1ms) together with the .mud-progress-* busy-indicator
 * exemption; a page-local re-assertion over .welcome-page-shell * would sit one
 * specificity notch from re-freezing the boot spinner.
 */

/* ---------------------------------------------------------------- app bar */

.wc-shell-appbar--welcome .welcome-appbar-cta {
    min-height: 40px;
    padding-inline: 18px;
    color: var(--wc-on-accent, var(--mud-palette-primary-text)) !important;
    white-space: nowrap;
}

/* The page's most prominent conversion control had no focus indicator at all:
   MudBlazor's filled-button focus state is an elevation change the flat app bar
   does not show, and the page focus rule below is scoped .welcome-page-shell,
   which the app bar sits outside. 2px offset matches the sibling app-bar
   controls (app.shell.css) — this button ends 12px from the 390px edge. */
.wc-shell-appbar--welcome .welcome-appbar-cta:focus-visible {
    outline: var(--wc-focus-outline);
    outline-offset: 2px;
}

/* ------------------------------------------------------------ page frame */

.welcome-page-shell.mud-container {
    padding: 0;
}

.welcome-band {
    background: var(--wc-surface-1, var(--mud-palette-surface));
}

.welcome-band + .welcome-band {
    border-top: 1px solid var(--wc-border-soft);
}

.welcome-band--hero,
.welcome-band--plan,
.welcome-band--close {
    background: var(--wc-surface-2, var(--mud-palette-background));
}

.welcome-lane {
    width: 100%;
    max-width: 1180px;
    margin-inline: auto;
    padding-block: clamp(46px, 7vw, 84px);
    padding-inline: clamp(18px, 4vw, 40px);
}

.welcome-band--hero .welcome-lane {
    padding-block: clamp(52px, 8vw, 104px) clamp(40px, 6vw, 72px);
}

.welcome-band--close .welcome-lane {
    padding-block: clamp(38px, 5vw, 60px);
}

/* ----------------------------------------------------------------- hero */

.welcome-hero {
    display: grid;
    gap: clamp(32px, 5vw, 56px);
    align-items: center;
}

.welcome-hero-copy {
    display: grid;
    gap: 22px;
    justify-items: start;
    min-width: 0;
}

.welcome-hero-visual {
    min-width: 0;
}

/* Wide screens set the sample day beside the copy instead of leaving the hero's right half empty. */
@media (min-width: 1100px) {
    .welcome-hero {
        grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr);
    }
}

.welcome-hero-title {
    display: grid;
    gap: 0.02em;
    max-width: 18ch;
    margin: 0;
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-family: var(--wc-type-display-family, var(--wc-font-display));
    font-size: var(--wc-type-display-hero-fluid-size, clamp(36px, 5vw, 66px));
    font-weight: var(--font-bold);
    letter-spacing: -0.035em;
    line-height: 0.99;
}

.welcome-hero-title-accent {
    color: var(--wc-accent-ink, var(--mud-palette-primary));
}

.welcome-hero-lede {
    max-width: 46ch;
    margin: 0;
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-display-lede-size, clamp(17px, 1.9vw, 21px));
    line-height: 1.5;
}

/* ------------------------------------------------------------------ cta */

.welcome-cta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 12px 20px;
}

.welcome-cta .mud-button-root {
    min-height: 48px;
    font-weight: 700;
}

.welcome-cta-primary {
    min-width: 196px;
    padding: 12px 24px;
}

.welcome-cta-link {
    display: inline-flex;
    align-items: center;
    min-height: 44px;
    font-weight: 700;
}

.welcome-cta--plan {
    margin-top: 28px;
}

/* ------------------------------------------------------------ assurances */

/* Each assurance leads with its own icon, which separates the items. Rules between
   them left a stray divider at the start of the second line once the row wrapped. */
.welcome-assurances {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px 24px;
    margin: 6px 0 0;
    padding: 0;
    list-style: none;
}

.welcome-assurance {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-body-compact-size, 0.875rem);
    line-height: 1.4;
}

/* --------------------------------------------------------- band headings */

.welcome-heading {
    display: grid;
    gap: 10px;
    max-width: 46rem;
    margin-bottom: clamp(26px, 4vw, 44px);
}

.welcome-heading-title {
    margin: 0;
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-family: var(--wc-type-display-family, var(--wc-font-display));
    font-size: var(--wc-type-display-section-size, clamp(26px, 3.2vw, 38px));
    font-weight: var(--font-bold);
    letter-spacing: -0.02em;
    line-height: 1.12;
}

.welcome-heading-description {
    max-width: 62ch;
    margin: 0;
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
    line-height: 1.6;
}

/* --------------------------------------------------------- sample record */

.welcome-sample.wc-section-card.mud-paper {
    padding: clamp(18px, 3vw, 30px);
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-card-radius, var(--wc-radius-md));
    background: var(--wc-surface-2, var(--mud-palette-background));
    box-shadow: none;
}

.welcome-sample-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 18px;
    padding-bottom: 18px;
    border-bottom: 1px solid var(--wc-border-soft);
}

.welcome-sample-identity {
    display: grid;
    gap: 7px;
    min-width: 0;
}

.welcome-sample-title {
    margin: 0;
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-family: var(--wc-type-display-family, var(--wc-font-display));
    font-size: var(--wc-type-display-proof-title-size, clamp(20px, 2.4vw, 26px));
    font-weight: var(--font-bold);
    line-height: 1.15;
}

.welcome-sample-context,
.welcome-sample-count {
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-caption-size, 0.75rem);
    font-weight: 700;
    letter-spacing: 0.08em;
    line-height: 1.25;
    text-transform: uppercase;
    text-align: right;
    white-space: nowrap;
}

.welcome-sample-worklist {
    margin-top: 20px;
}

.welcome-sample-worklist-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 12px;
    margin-bottom: 4px;
}

.welcome-sample-worklist-title {
    margin: 0;
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-weight: 700;
}

.welcome-sample-worklist-subtitle,
.welcome-sample-footer {
    margin: 2px 0 0;
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-body-compact-size, 0.875rem);
    line-height: 1.45;
}

.welcome-sample-visits {
    margin: 0;
    padding: 0;
    list-style: none;
}

.welcome-sample-visit {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    align-items: center;
    gap: 12px;
    padding: 14px 0;
    border-top: 1px solid var(--wc-border-soft);
}

/* The time lane is sized in ch, not a px guess: short time is culture-formatted,
   and es-US renders "10:30 a. m." — eleven glyphs where en-US needs seven. A fixed
   62px lane wrapped it onto two lines and pushed the row's leading edge out of line
   with its siblings. Every row shares the floor, so the lane stays aligned across
   rows in any culture. Times read in the body face with tabular figures, the way
   the product shows them; mono is reserved for code-like data. */
.welcome-sample-time {
    min-width: 10ch;
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-body-compact-size, 0.8125rem);
    font-weight: 600;
    font-variant-numeric: var(--wc-numeric-figures);
    white-space: nowrap;
}

.welcome-sample-visit-copy {
    display: grid;
    gap: 2px;
    min-width: 0;
}

.welcome-sample-visit-title {
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-weight: 700;
    overflow-wrap: anywhere;
}

.welcome-sample-visit-subtitle {
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-body-compact-size, 0.875rem);
    line-height: 1.4;
    overflow-wrap: anywhere;
}

.welcome-sample-footer {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    gap: 8px 16px;
    padding-top: 14px;
    border-top: 1px solid var(--wc-border-soft);
}

/* ------------------------------------------------------- included ledger */

/* Six plan items sit in two even rows of three; four columns left a half-empty
   second row under the rule. */
.welcome-ledger {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 0;
    margin: 0;
    padding: 0;
    border-bottom: 1px solid var(--wc-border-soft);
    list-style: none;
}

.welcome-ledger-row {
    display: grid;
    grid-template-columns: 22px minmax(0, 1fr);
    align-items: start;
    gap: 8px;
    min-width: 0;
    padding: 15px 16px;
    border-top: 1px solid var(--wc-border-soft);
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-size: var(--wc-type-body-compact-size, 0.875rem);
    font-weight: 600;
    line-height: 1.4;
    overflow-wrap: anywhere;
}

.welcome-ledger-row:not(:nth-child(3n + 1)) {
    border-left: 1px solid var(--wc-border-soft);
}

.welcome-ledger-row:nth-child(3n + 1) {
    padding-left: 0;
}

.welcome-ledger-row .mud-icon-root {
    margin-top: 1px;
}

.welcome-plan-note {
    display: grid;
    gap: 6px;
    max-width: 62ch;
    margin-top: 22px;
}

.welcome-plan-note p {
    margin: 0;
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-body-compact-size, 0.875rem);
    line-height: 1.55;
}

/* --------------------------------------------------------------- outcomes */

.welcome-outcome-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: clamp(18px, 2.5vw, 28px);
}

.welcome-outcome {
    display: grid;
    align-content: start;
    gap: 10px;
    min-width: 0;
    padding: clamp(18px, 2.4vw, 26px);
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-card-radius, var(--wc-radius-md));
    background: var(--wc-surface-2, var(--mud-palette-background));
}

.welcome-outcome-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border: 1px solid rgba(var(--wc-accent-rgb), 0.18);
    border-radius: 50%;
    background: rgba(var(--wc-accent-rgb), 0.08);
}

.welcome-outcome-title {
    margin: 4px 0 0;
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-size: var(--wc-type-title-compact-size, 1rem);
    font-weight: var(--font-bold);
    line-height: 1.25;
}

.welcome-outcome-description {
    margin: 0;
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-body-compact-size, 0.875rem);
    line-height: 1.55;
}

/* --------------------------------------------------------------- workflow */

.welcome-workflow {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 0;
    margin: 0;
    padding: 0;
    list-style: none;
}

.welcome-workflow-step {
    display: grid;
    align-content: start;
    gap: 8px;
    min-width: 0;
    padding: 22px 20px 0 0;
    border-top: 2px solid var(--wc-border-strong, var(--wc-border-soft));
}

.welcome-workflow-step + .welcome-workflow-step {
    padding-left: 20px;
}

.welcome-workflow-number {
    color: var(--wc-accent-ink, var(--mud-palette-primary));
    font-size: var(--wc-type-caption-size, 0.75rem);
    font-weight: 700;
    font-variant-numeric: var(--wc-numeric-figures);
    letter-spacing: 0.1em;
    text-transform: uppercase;
}

.welcome-workflow-title {
    margin: 0;
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-size: var(--wc-type-title-compact-size, 1rem);
    font-weight: var(--font-bold);
    line-height: 1.25;
}

.welcome-workflow-description {
    margin: 0;
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-body-compact-size, 0.875rem);
    line-height: 1.55;
}

/* ------------------------------------------------------------------ close */

.welcome-close {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
    gap: 24px 40px;
}

.welcome-close-copy {
    display: grid;
    gap: 8px;
    max-width: 46rem;
}

.welcome-close-title {
    margin: 0;
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-family: var(--wc-type-display-family, var(--wc-font-display));
    font-size: var(--wc-type-display-proof-title-size, clamp(20px, 2.4vw, 26px));
    font-weight: var(--font-bold);
    line-height: 1.2;
}

.welcome-close-actions {
    display: grid;
    justify-items: end;
    gap: 8px;
}

.welcome-returning {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 2px 6px;
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-body-compact-size, 0.875rem);
}

.welcome-returning-link {
    min-width: 44px;
    min-height: 44px;
    padding-inline: 8px;
    margin-inline: -8px;
    font-weight: 700;
}

/* ------------------------------------------------------------------ focus */

.welcome-page-shell a:focus-visible,
.welcome-page-shell button:focus-visible {
    outline: var(--wc-focus-outline);
    outline-offset: 3px;
}

/* ------------------------------------------------------------- responsive */

@media (max-width: 959.98px) {
    .welcome-ledger {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .welcome-ledger-row:not(:nth-child(3n + 1)) {
        border-left: none;
    }

    .welcome-ledger-row:not(:nth-child(2n + 1)) {
        border-left: 1px solid var(--wc-border-soft);
    }

    .welcome-ledger-row:nth-child(3n + 1) {
        padding-left: 16px;
    }

    .welcome-ledger-row:nth-child(2n + 1) {
        padding-left: 0;
    }

    .welcome-outcome-grid {
        grid-template-columns: minmax(0, 1fr);
    }

    /* Once the steps stack, each row's 2px rule lands on the previous row's last
       text line (row-gap 0 + padding-bottom 0 left only ~3.5px of half-leading).
       The row gap matches the step's own padding-top so the rule sits in an even
       band instead of reading as an underline struck through the copy. */
    .welcome-workflow {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        row-gap: 22px;
    }

    .welcome-workflow-step:nth-child(2n + 1) {
        padding-left: 0;
    }

    .welcome-close {
        grid-template-columns: minmax(0, 1fr);
    }

    .welcome-close-actions {
        justify-items: start;
    }
}

@media (max-width: 599.98px) {
    .welcome-appbar-support {
        display: none;
    }

    .wc-shell-appbar--welcome .welcome-appbar-cta {
        min-height: 44px;
        padding-inline: 12px;
        font-size: var(--wc-type-caption-size, 0.75rem);
    }

    .welcome-lane {
        padding-inline: 16px;
    }

    .welcome-band--hero .welcome-lane {
        padding-block: 34px 30px;
    }

    .welcome-hero-title {
        max-width: none;
        font-size: var(--wc-type-display-hero-mobile-size, clamp(35px, 12vw, 54px));
    }

    .welcome-hero-lede {
        font-size: var(--wc-type-title-compact-size, 1rem);
    }

    .welcome-cta {
        align-items: stretch;
        flex-direction: column;
        gap: 8px;
        width: 100%;
    }

    .welcome-cta-primary,
    .welcome-cta .welcome-cta-link {
        width: 100%;
        justify-content: center;
    }

    .welcome-assurances {
        display: grid;
        justify-items: start;
        gap: 6px;
    }

    .welcome-sample.wc-section-card.mud-paper {
        padding: 16px;
    }

    .welcome-sample-header {
        flex-direction: column;
        gap: 10px;
    }

    .welcome-sample-context,
    .welcome-sample-count {
        text-align: left;
    }

    .welcome-sample-worklist-header {
        flex-direction: column;
        gap: 4px;
    }

    .welcome-sample-visit {
        grid-template-columns: auto minmax(0, 1fr);
        gap: 4px 10px;
    }

    .welcome-sample-visit .wc-chip {
        grid-column: 2;
        max-width: 100%;
        justify-self: start;
    }

    .welcome-sample-footer {
        display: grid;
    }

    /* Two compact columns: sixteen short capability names in one column were ~800px of scrolling. */
    .welcome-ledger {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        column-gap: 12px;
    }

    .welcome-ledger-row,
    .welcome-ledger-row:nth-child(2n + 1),
    .welcome-ledger-row:not(:nth-child(2n + 1)),
    .welcome-ledger-row:not(:nth-child(3n + 1)) {
        padding: 11px 0;
        border-left: none;
    }

    .welcome-workflow {
        grid-template-columns: minmax(0, 1fr);
        row-gap: 18px;
    }

    .welcome-workflow-step,
    .welcome-workflow-step + .welcome-workflow-step {
        padding: 18px 0 0;
    }

    .welcome-close-actions {
        justify-items: stretch;
        width: 100%;
    }
}

/* ===== WorkCita.Client/wwwroot/css/app.features.jobs.css ===== */
/*
 * WorkCita global stylesheet module: app.features.jobs.css
 * Ownership layer: feature geometry (jobs and work intake workflow layout).
 * Ownership: jobs command center, job detail layout, job workflow indicators, job mobile cards/FAB, and job form mobile footer overrides.
 * Theme: universal --wc-* tokens only; not a separate surface theme.
 * Parent: GitHub #404 mechanical CSS ownership split (no visual redesign).
 * Load: after app.features.css; before app.features.documents.css (index.html).
 */

/* =============================================================================
   Jobs And Work Intake Data Grid Modifiers
   ============================================================================= */

/* Wrap instead of clipping so job-request messages remain readable at narrow widths. */
.page-data-grid--job-requests .job-request-message-text {
    white-space: normal;
    overflow-wrap: anywhere;
    line-height: 1.35;
}

.job-detail-summary-surfaces {
    display: grid;
    gap: var(--wc-content-section-gap);
}

/* A job's only summary fact is its due date. It sits in a short column beside the
   money strip instead of a full-width band of empty card. The fact grid is a size
   container with no intrinsic width, so the column is sized here, not by content. */
@media (min-width: 960px) {
    .job-detail-summary-surfaces:has(> .record-fact-grid) {
        grid-template-columns: 10rem minmax(0, 1fr);
    }

    .job-detail-summary-surfaces > .record-fact-grid > .record-fact-grid-layout {
        height: 100%;
    }
}

/* =============================================================================
   Job Photo Gallery
   ============================================================================= */

.photo-card {
    transition: border-color var(--wc-motion-feedback) var(--wc-ease-out-quart), background-color var(--wc-motion-feedback) var(--wc-ease-out-quart);
    border-radius: var(--border-radius-md);
    overflow: hidden;
    cursor: pointer;
}

.photo-card:hover {
    border-color: var(--wc-accent, var(--mud-palette-primary));
    box-shadow: none;
}

.job-photos-gallery {
    margin-top: var(--space-2);
}

.job-photo-card-trigger {
    display: block;
    inline-size: 100%;
    padding: 0;
    border: 0;
    background: transparent;
    color: inherit;
    text-align: left;
    cursor: pointer;
}

.job-photo-card-trigger:focus-visible {
    /* Inset, not an outward ring: .photo-card clips its overflow, so a
       box-shadow ring would be invisible. --wc-focus-outline is the solid
       token-owned alternative the alpha outline this replaced was missing. */
    outline: var(--wc-focus-outline);
    outline-offset: -2px;
}

.job-photo-card-content,
.job-photo-card-actions {
    padding: var(--space-2);
}

.job-photo-card-media {
    object-fit: cover;
}

.job-photo-card-media--lazy {
    block-size: 200px;
    overflow: hidden;
    background-color: var(--wc-surface-2, var(--mud-palette-surface));
    background-position: center;
    background-repeat: no-repeat;
    background-size: cover;
}

.job-photo-card-image {
    display: block;
    inline-size: 100%;
    block-size: 200px;
    object-fit: cover;
}

.job-photo-title,
.job-photo-description {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.job-photo-viewer-image {
    max-inline-size: 100%;
    max-block-size: 70vh;
    object-fit: contain;
}

.job-photo-dialog-actions {
    inline-size: 100%;
}

@media (max-width: 959.98px) {
    .jobs-command-center-shell .command-center-header {
        margin-bottom: 0;
    }
}

/* Phones: the first screen belongs to the jobs. The generic hero line gives way,
   Saved views and New work sit beside the short title when they fit (they wrap
   below it when they don't), and the queue card's title and money line share a row. */
@media (max-width: 599.98px) {
    .jobs-command-center-shell .wc-page-header__subtitle {
        display: none;
    }

    .jobs-command-center-shell .wc-page-header__copy {
        flex: 1 1 auto;
    }

    .jobs-command-center-shell .command-center-header-actions {
        width: auto;
        margin-inline-start: auto;
    }

    .jobs-queue-surface .wc-section-card-heading {
        display: flex;
        flex-wrap: wrap;
        align-items: baseline;
        column-gap: var(--space-2);
    }
}

/* =============================================================================
   Jobs Queue Reference Surface
   ============================================================================= */

.jobs-queue-surface {
    /* Icon-only row actions on desktop (labels show on mobile), matching every
       other index table — so the actions column is the standard narrow width. */
    --wc-data-col-actions: 112px;
    --wc-data-actions-min-width: 112px;
}

.jobs-queue-surface.office-section-card.mud-paper {
    box-shadow: var(--wc-surface-shadow-xs);
}

.jobs-queue-surface .office-section-card-header {
    align-items: flex-start;
    padding-bottom: 14px;
}

.jobs-queue-surface .office-section-card-title {
    font-size: var(--wc-type-body-emphasis-size);
}

/* The card subtitle on this surface is the in-view money headline, so its digits
   must not jitter between loads. Scoped to the jobs queue: the shared subtitle
   class carries prose on every other office section card. */
.jobs-queue-surface .wc-section-card-subtitle {
    font-variant-numeric: var(--wc-numeric-figures);
}

.jobs-queue-controls {
    display: grid;
    gap: 12px;
    min-width: 0;
}

.jobs-queue-surface .office-view-switcher-band {
    width: fit-content;
    max-width: 100%;
    box-shadow: none;
}

/* -----------------------------------------------------------------------------
   Signal toggles
   Two reversible toggles that compose with the view filter (the money headline
   they used to sit beside is now the card subtitle above). They live in the
   toolbar's refinement lane beside the dismissible Type/Origin chips, so at rest
   they read as outlined peers and only the pressed state carries fill.

   The shape, the 44px coarse target and the focus indicator are no longer here:
   these render as WcChipRole.Toggle, and .wc-chip--role-toggle in
   app.shared-controls.css owns all three. What is left is exactly this lane's
   tone ladder, which is page meaning rather than control geometry.
   ----------------------------------------------------------------------------- */

/* Rest / hover / pressed is one three-step ladder: unfilled tone-soft outline (the
   same fg+border token pair the neighbouring outlined WcChips use, so the lane has
   one chip vocabulary), then a single soft tint on hover, then the filled accent.
   Only the pressed state is allowed to read as a strong signal. */
.jobs-signal-chip--overdue {
    color: var(--wc-tone-error-soft-fg, var(--mud-palette-error));
    border-color: var(--wc-tone-error-soft-border, rgba(var(--mud-palette-error-rgb), 0.32));
    background: transparent;
}

.jobs-signal-chip--overdue:hover {
    background: var(--wc-tone-error-soft-bg, rgba(var(--mud-palette-error-rgb), 0.08));
}

.jobs-signal-chip--overdue.is-active {
    color: var(--wc-on-accent, var(--mud-palette-error-text));
    background: rgba(var(--wc-error-rgb), 1);
    border-color: rgba(var(--wc-error-rgb), 1);
}

.jobs-signal-chip--unscheduled {
    /* Soft-tone fg (amber-800) instead of raw warning: the 13px/600 label needs
       >= 4.5:1 and raw warning only reaches ~4.3:1 against the soft amber tint
       this chip picks up on hover. Do not swap it back for --mud-palette-warning. */
    color: var(--wc-tone-warning-soft-fg, var(--mud-palette-warning));
    border-color: var(--wc-tone-warning-soft-border, rgba(var(--mud-palette-warning-rgb), 0.38));
    background: transparent;
}

.jobs-signal-chip--unscheduled:hover {
    background: var(--wc-tone-warning-soft-bg, rgba(var(--mud-palette-warning-rgb), 0.10));
}

.jobs-signal-chip--unscheduled.is-active {
    color: var(--wc-on-accent, var(--mud-palette-warning-text));
    background: rgba(var(--wc-warning-rgb), 1);
    border-color: rgba(var(--wc-warning-rgb), 1);
}

.jobs-queue-toolbar.filter-bar.filter-bar-compact.mud-paper {
    padding: 0;
    border: 0;
    background: transparent;
    box-shadow: none;
}

.jobs-queue-toolbar.filter-bar.filter-bar-compact .mud-stack-root {
    gap: 8px;
}

/* This lane carries up to four controls on Jobs (two signal toggles plus the
   dismissible Type/Origin chips), so it needs a wider column gap than the shared
   default while the row gap stays tight when it wraps. Every declaration is
   scoped under .jobs-queue-toolbar: the shared lane is also Invoices/Estimates/
   Customers. */
.jobs-queue-toolbar .filter-bar-compact-actions {
    margin-bottom: var(--space-3);
    gap: 8px 10px;
}

/* Two control shapes share the lane: the signal toggles are padding-driven
   <button>s and the filter chips are height-driven MudChips. Put the floor on the
   lane's children rather than re-padding either owner. Below 960px the floor IS
   the 44px touch floor, so this higher-specificity rule can only ever match it. */
.jobs-queue-toolbar .filter-bar-compact-actions > * {
    min-height: 28px;
}

@media (max-width: 959.98px) {
    .jobs-queue-toolbar .filter-bar-compact-actions > * {
        min-height: 44px;
    }
}

.jobs-queue-surface .office-section-card-body {
    margin-inline: calc(var(--wc-card-padding-inline, 16px) * -1);
    margin-bottom: calc(var(--wc-card-padding-block, 16px) * -1);
}

.jobs-row-actions {
    gap: 6px !important;
}

@media (max-width: 959.98px) {
    .jobs-queue-surface .office-section-card-body {
        margin-inline: 0;
        margin-bottom: 0;
    }

}

/* =============================================================================
   Mobile FAB Bar
   ============================================================================= */

.mobile-fab-bar {
    position: fixed;
    left: 0;
    right: 0;
    bottom: calc(var(--wc-mobile-bottom-nav-height, 84px) + env(safe-area-inset-bottom, 0px));
    z-index: 1050;
    display: flex;
    align-items: center;
    justify-content: space-between;
    /* The bar is offset above .mobile-bottom-nav, whose reserved space already
       absorbs safe-area-inset-bottom, so this bar never touches the screen edge
       and must not add the inset a second time. */
    padding: 8px 16px;
    background: var(--wc-surface-1, var(--mud-palette-surface));
    border-top: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    box-shadow: 0 -2px 8px rgba(var(--wc-shadow-rgb), 0.08);
    min-height: 60px;
}

/* The clearance the content flow must reserve for the bar above the bottom nav.
   Declared on the shell class because that is the only scope that is an ancestor
   of BOTH the bar and .office-detail-shell-main-flow — the bar is a sibling
   subtree of the flow, so a value declared on .mobile-fab-bar could never reach
   the consumer. Consumed at the bottom of this sheet; see that comment for why
   the value carries no safe-area inset. */
.job-detail-shell--mobile-fab {
    --wc-job-detail-fab-clearance: 88px;
}

.mobile-fab-actions {
    display: flex;
    align-items: center;
    flex: 1 1 auto;
    min-width: 0;
    gap: clamp(10px, 3vw, 20px);
}

.fab-icon-btn {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 2px;
    min-width: 44px;
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
}

.fab-icon-btn.disabled {
    opacity: 0.4;
    pointer-events: none;
}

/* Busy (photo uploading): keep full opacity so the spinner reads as active work,
   but block re-entry like a disabled control. */
.fab-icon-btn.uploading {
    pointer-events: none;
}

.fab-icon-circle {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: 50%;
}

/* Force MudIcon SVGs inside icon circles to inherit the circle's color */
.fab-icon-circle .mud-icon-root {
    color: inherit !important;
}

.fab-icon-call {
    background: var(--wc-tone-success-soft-bg);
    color: var(--wc-tone-success-soft-fg);
}

.fab-icon-nav {
    background: var(--wc-tone-info-soft-bg);
    color: var(--wc-tone-info-soft-fg);
}

.fab-icon-photo {
    background: var(--wc-tone-warning-soft-bg);
    color: var(--wc-tone-warning-soft-fg);
}

.fab-icon-label {
    font-size: var(--wc-type-caption-size);
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
    line-height: 1;
}

.fab-primary-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    flex: 0 0 auto;
    min-height: 44px;
    max-width: min(48vw, 180px);
    padding: 8px 20px;
    border: none;
    border-radius: var(--wc-control-radius);
    background: rgba(var(--wc-success-rgb), 1);
    color: var(--wc-on-accent);
    font-size: var(--wc-type-control-size);
    font-weight: 600;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
}

.fab-primary-btn span {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.fab-primary-invoice,
.fab-primary-estimate,
.fab-primary-plan,
.fab-primary-resume {
    background: var(--wc-accent, var(--mud-palette-primary));
}

.fab-primary-btn.disabled {
    opacity: 0.4;
    pointer-events: none;
}

/* Compaction step. 599.98px, not 359.98px: 390px is the real mobile viewport (and
   the one the Job Detail E2E runs), so gating this at 360px meant it never fired
   where it was needed. The 36px circle is the icon GLYPH — the hit areas stay at
   the 44px floor via .fab-icon-btn { min-width: 44px } and
   .fab-primary-btn { min-height: 44px }, neither of which may be relaxed here. */
@media (max-width: 599.98px) {
    .mobile-fab-bar {
        padding-inline: 10px;
    }

    .mobile-fab-actions {
        gap: 6px;
    }

    .fab-icon-circle {
        width: 36px;
        height: 36px;
    }

    .fab-primary-btn {
        max-width: min(46vw, 160px);
        padding-inline: 12px;
        font-size: var(--wc-type-body-compact-size);
    }
}
/* =============================================================================
   Jobs Command Center System
   ============================================================================= */

/*
 * Extends Command Center aesthetic to Jobs module.
 * Tactical list views, status-driven visual hierarchy, workflow progression.
 */

/* Job details hero section - Horizontal layout */
.job-hero {
    position: relative;
    padding: 24px 32px;
    background: var(--wc-surface-1, var(--mud-palette-surface));
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    overflow: hidden;
}

.job-hero.job-status-new {
    border-color: var(--wc-tone-primary-soft-border);
}

.job-hero.job-status-quoted,
.job-hero.job-status-approved {
    border-color: var(--wc-tone-secondary-soft-border);
}

.job-hero.job-status-inprogress {
    border-color: var(--wc-tone-info-soft-border);
}

.job-hero.job-status-completed,
.job-hero.job-status-paid {
    border-color: var(--wc-tone-success-soft-border);
}

.job-hero.job-status-onhold,
.job-hero.job-status-archived {
    border-color: var(--wc-tone-default-soft-border);
}

.job-hero.job-status-cancelled,
.job-hero.job-status-lost {
    border-color: var(--wc-tone-error-soft-border);
}

.job-hero .job-hero-breadcrumb {
    padding: 0;
    margin-bottom: 12px;
    font-size: var(--wc-type-control-size);
}

.job-hero .job-hero-main {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 16px;
}

.job-hero .job-hero-title-band {
    display: flex;
    align-items: center;
    gap: 12px;
    flex-wrap: wrap;
    margin-bottom: 4px;
}

.job-hero .job-type-badge {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 4px 10px;
    border-radius: var(--wc-radius-track);
    font-size: var(--wc-type-caption-size);
    font-weight: 700;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    background: var(--wc-accent, var(--mud-palette-primary));
    color: var(--wc-on-accent, var(--mud-palette-primary-text));
}

.job-hero .job-number-large {
    font-size: var(--wc-type-body-compact-size);
    font-weight: 600;
    letter-spacing: 0.08em;
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
}

.job-hero .job-hero-actions {
    flex-shrink: 0;
}

/* Job Info Section */
.job-details-main-grid {
    display: grid;
    width: 100%;
    gap: var(--wc-content-section-gap);
    align-items: start;
}

.job-detail-primary-column-item,
.job-detail-workflow-column-item,
.job-detail-photos-mobile-item {
    min-width: 0;
}

.job-detail-primary-column,
.job-detail-workflow-column {
    height: 100%;
}

/* Above the phone breakpoint the job-detail header keeps its actions at intrinsic
   width beside the record title. Below it, the shared phone contract owns the
   header: `.command-center-header-actions { width: 100% }` in app.office.css turns
   the lone primary action into a full-width, thumb-friendly CTA on every other
   surface, and this two-class selector was silently opting job detail out of it. */
@media (min-width: 600px) {
    .job-detail-shell .command-center-header-actions {
        width: auto;
    }
}

/* The title is GetHeaderTitle(job.Number) — a record identifier, so it takes the
   identifier figure posture (tabular + slashed zero), not the plain numeric one. */
.job-detail-shell .command-center-header .header-title {
    max-width: 100%;
    overflow-wrap: normal;
    word-break: keep-all;
    hyphens: none;
    font-variant-numeric: var(--wc-numeric-identifier-figures);
}

.job-detail-guidance-band .office-notice-band-body {
    display: grid;
    gap: 4px;
}

/* Spacing rhythm: the shell already puts a region gap above the next-step band (summary→work)
   and the content flow + costing margin already space the cards by --wc-content-section-gap.
   These wrappers must NOT add their own 16px padding on top, or the band sits 32px below the
   digest and the costing card sits 28px above the field checklist. Use one content-gap below
   the band and let the cards own the rest. */
.job-detail-guidance-shell {
    margin-bottom: var(--wc-content-section-gap);
}

.job-detail-content-shell {
    display: grid;
    align-content: start;
    gap: var(--wc-content-section-gap);
    padding-block: 0;
}

/* Job Detail keeps one DOM path for desktop and field use. The outer content grid
   preserves the existing desktop lane while mobile promotes execution cards ahead
   of office-only workflow and history. */
.job-details-main-grid {
    order: 1;
}

.job-detail-field-work-content {
    order: 4;
}

.job-detail-costing-disclosure {
    order: 3;
}

.job-detail-activity-content {
    order: 5;
}

.job-detail-disclosure .wc-disclosure-panel__body {
    padding: 0;
}

.job-detail-disclosure > .wc-disclosure-panel__header {
    display: none;
}

/* Costing relocated below the two-column grid: separate it from the grid with the
   standard section gap and let its tables use the full content lane. */
.job-detail-costing-fullwidth {
    margin-top: 0;
}

.job-detail-guidance-band--success {
    border-color: var(--wc-tone-success-soft-border);
    background: var(--wc-tone-success-soft-bg, var(--mud-palette-surface));
}

/* height:100% is only for equal-height columns INSIDE the two-column grid. Applying it
   to standalone full-width cards (relocated costing, checklist, activity) stretches an
   empty card to fill its container — the mobile "giant empty costing box" bug. */
.job-details-main-grid .job-detail-section-card {
    height: 100%;
}

.job-detail-section-card .office-section-card-body {
    display: grid;
    gap: 0;
    min-width: 0;
}

.job-detail-section-card .office-section-card-actions {
    gap: 8px;
    align-items: flex-start;
}

.job-detail-section-action:not(.mud-menu),
.mud-menu.job-detail-section-action > .mud-menu-button-activator {
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    box-shadow: var(--wc-surface-shadow-xs, var(--shadow-xs));
}

.job-detail-section-card--photos .office-section-card-body {
    gap: 16px;
}

.job-detail-empty-state {
    gap: 10px;
    min-height: 200px;
    padding: 24px;
}

.job-detail-photos-view-all {
    margin-top: 12px;
}

.job-detail-photos-card-desktop .job-detail-empty-state {
    min-height: 152px;
}

.job-detail-photos-card-desktop--primary-column .job-detail-empty-state {
    min-height: 168px;
    padding-top: 32px;
    padding-bottom: 32px;
}

.job-detail-photos-card-desktop--compact .job-detail-empty-state {
    min-height: 96px;
}

@media (min-width: 960px) {
    .job-details-main-grid {
        grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
        align-items: stretch;
    }

    /* Field-only (no workflow cards): keep a single column so Job info and photos
       stack instead of leaving a hollow, stretched second column. */
    .job-details-main-grid--single {
        grid-template-columns: 1fr;
        align-items: start;
    }

    .job-detail-primary-column-item,
    .job-detail-workflow-column-item {
        display: flex;
    }

    .job-detail-primary-column,
    .job-detail-workflow-column {
        width: 100%;
    }

    .job-detail-primary-column--single-card {
        display: flex;
    }

    .job-detail-primary-column--single-card > .office-section-card {
        flex: 1 1 auto;
    }

    /* Rows size to their cards: equal halves stretched an empty Photos card to half of
       Job info's height, a blank box larger than the photos it was waiting for. */
    .job-detail-workflow-column--split {
        grid-template-rows: auto auto;
        align-content: start;
    }
}

@media (max-width: 959.98px) {
    .job-details-main-grid {
        display: contents;
    }

    .job-detail-primary-column-item {
        order: 1;
    }

    .job-detail-field-work-content {
        order: 2;
    }

    .job-detail-workflow-column-item {
        order: 3;
    }

    .job-detail-costing-disclosure {
        order: 4;
    }

    .job-detail-activity-content {
        order: 5;
    }

    .job-detail-disclosure > .wc-disclosure-panel__header {
        display: flex;
    }

    .job-detail-disclosure .office-section-card-title-block {
        display: none;
    }

    .job-details-main-grid {
        grid-template-columns: 1fr;
    }

    .job-detail-shell .command-center-header-copy {
        min-width: 0;
    }

    .job-detail-shell .command-center-header .header-title {
        font-size: var(--wc-type-headline-size);
        line-height: 1.14;
        min-width: 0;
        white-space: normal;
        overflow-wrap: anywhere;
    }
}

/* Tablet keeps the title/actions split header. On phones this has to release so
   the shared full-width CTA contract in app.office.css can take over — an `auto`
   grid track would otherwise pin the action cluster to its intrinsic width no
   matter what the shared rule asks for. */
@media (min-width: 600px) and (max-width: 959.98px) {
    .job-detail-shell .command-center-header-row {
        display: grid !important;
        flex-direction: initial !important;
        grid-template-columns: minmax(0, 1fr) auto;
        align-items: start;
        column-gap: 12px;
        row-gap: 8px;
    }

    .job-detail-shell .command-center-header-actions {
        justify-self: end;
        align-self: start;
    }
}

@media (max-width: 599.98px) {
    .job-detail-shell .command-center-header .header-title {
        font-size: var(--wc-type-display-metric-size);
    }
}

.job-info-section {
    padding: 0;
}

.job-info-block {
    padding: 12px 0;
}

.job-detail-description {
    margin-top: 4px;
}

.job-info-line {
    display: grid;
    align-items: start;
    gap: 8px;
    padding: 12px 0;
    border-top: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
}

.job-info-line.no-border {
    border-top: none;
}

.job-info-label {
    font-size: var(--wc-type-caption-size);
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
    min-width: 0;
}

.job-info-value {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    min-width: 0;
}

.job-info-value--contact {
    column-gap: 8px;
    row-gap: 4px;
}

.job-info-contact-link {
    min-width: 0;
    overflow-wrap: anywhere;
}

.job-service-status-chip,
.job-deposit-status-chip {
    margin-left: 8px;
}

.job-notes-alert {
    margin-bottom: 0;
}

.job-priority-icon {
    margin-right: 4px;
}

.job-info-chips {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
}

.job-info-line > .mud-typography-root,
.job-info-line > .mud-link-root,
.job-info-line > .mud-stack {
    min-width: 0;
}

.job-info-separator {
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
    margin: 0 4px;
}

@media (min-width: 960px) and (max-width: 1320px) {
    .job-info-value--contact .job-info-contact-link[href^="mailto:"] {
        flex-basis: 100%;
    }

    /* Removed, not just collapsed: a zero-width separator still took a flex slot,
       and the column gap after it set the phone 8px in from the email above. */
    .job-info-value--contact .job-info-separator {
        display: none;
    }
}

.job-info-notes-line {
    display: grid;
    gap: 10px;
    align-items: start;
}

.job-info-notes-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    width: 100%;
}

.job-info-notes-content {
    display: grid;
    gap: 10px;
    align-items: start;
}

.job-info-notes-edit {
    flex-shrink: 0;
}

.job-notes-empty {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 12px;
    border: 1px dashed rgba(var(--wc-accent-rgb), 0.18);
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: rgba(var(--wc-accent-rgb), 0.03);
}

.job-notes-list .mud-alert {
    border-radius: var(--wc-card-radius, var(--border-radius-md));
}

.job-info-grid-row {
    border-top: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
}

/* Empty panel state */
.panel-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 40px 20px;
    text-align: center;
}

.panel-empty .empty-icon {
    width: 64px;
    height: 64px;
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--wc-tone-primary-soft-bg);
    color: var(--wc-tone-primary-soft-fg);
    margin-bottom: 16px;
}

.panel-empty .empty-title {
    font-size: var(--wc-type-control-size);
    font-weight: 600;
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
}

.panel-empty .empty-description {
    font-size: var(--wc-type-body-compact-size);
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
    margin-top: 4px;
    max-width: 200px;
}

.photo-thumbnail {
    width: 100%;
    aspect-ratio: 1;
    border-radius: var(--wc-panel-radius);
    overflow: hidden;
    cursor: pointer;
    object-fit: cover;
    border: 1px solid transparent;
    transition: border-color var(--wc-motion-base) var(--wc-ease-out-quart), background-color var(--wc-motion-base) var(--wc-ease-out-quart);
    position: relative;
}

.job-detail-photo-preview {
    position: relative;
}

.job-detail-photo-thumbnail-button {
    display: block;
    width: 100%;
    padding: 0;
    border: 0;
    background: transparent;
    text-align: inherit;
    cursor: pointer;
}

.job-detail-photo-thumbnail-button:focus-visible {
    outline: var(--wc-focus-outline);
    outline-offset: 3px;
    border-radius: var(--wc-card-radius, var(--border-radius-md));
}

.job-detail-photo-delete {
    position: absolute;
    top: 6px;
    right: 6px;
    background: var(--wc-surface-1);
    box-shadow: var(--wc-surface-shadow-sm);
}

.job-detail-photo-upload-progress {
    margin-bottom: var(--wc-space-3, 12px);
}

/* One hover policy for photo tiles. .photo-card above suppresses lift because
   task surfaces stay flat; this grid used to contradict it with a scale-up plus
   a heavy drop shadow, so the same photo read two ways in one feature. Hover is
   a tonal/border shift only. */
.photo-thumbnail:hover {
    border-color: var(--wc-accent, var(--mud-palette-primary));
    background: var(--wc-surface-hover);
}

.photo-thumbnail img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/* Mobile responsive adjustments */
@media (max-width: 599.98px) {
    .job-hero {
        padding: 16px 20px;
    }

    .job-info-label {
        min-width: unset;
        width: 100%;
    }

}

/* =============================================================================
   MOBILE FAB AND RESPONSIVE UTILITIES
   ============================================================================= */

/* Mobile FAB skeleton */
.mobile-fab-skeleton {
    position: fixed;
    left: 0;
    right: 0;
    bottom: calc(var(--wc-mobile-bottom-nav-height, 84px) + env(safe-area-inset-bottom, 0px));
    z-index: 1050;
}

/* Mobile FAB clearance: reserve the floating action bar's height as bottom padding on the
   content flow so the LAST card clears the FAB, instead of a stray spacer mid-page. The shell
   and the bottom nav each already reserve safe-area-inset-bottom, and the bar itself adds none,
   so this clearance is a constant and must not add the inset a third time. The shell class is
   applied only on the branch that actually renders the bar. */
@media (max-width: 959.98px) {
    .job-detail-shell--mobile-fab .office-detail-shell-main-flow {
        padding-bottom: var(--wc-job-detail-fab-clearance, 88px);
    }
}
/* Job form error summary: one link per invalid field, left-aligned like the messages. */
.job-form-error-summary__list {
    margin: 0;
    padding: 0;
    list-style: none;
}

.job-form-error-summary__link.mud-button-root {
    justify-content: flex-start;
    min-height: 32px;
    padding-inline: 0;
    text-align: start;
    text-decoration: underline;
}

/* Job detail panels: why a populated list offers no create action. */
.panel-create-unavailable {
    margin-top: var(--wc-space-2, 8px);
}

/* Type filter select - responsive width */
.type-filter-select {
    min-width: 140px;
}

@media (max-width: 959.98px) {
    .type-filter-select {
        min-width: 120px;
    }
}
@media (max-width: 599.98px) {
    .job-create-action-bar.form-action-bar,
    .job-edit-action-bar.form-action-bar {
        padding: 8px 10px !important;
        box-shadow: var(--wc-surface-shadow-xs, 0 -2px 8px rgba(var(--wc-shadow-rgb), 0.08)) !important;
    }

    .job-create-action-bar .mud-container,
    .job-edit-action-bar .mud-container {
        padding-inline: 0;
    }

    .job-create-action-bar .form-action-bar-mobile-row,
    .job-edit-action-bar .form-action-bar-mobile-row {
        gap: 8px !important;
        justify-content: stretch !important;
    }

    .job-create-action-bar .form-action-bar-mobile-row .mud-button-root,
    .job-edit-action-bar .form-action-bar-mobile-row .mud-button-root {
        flex: 1 1 0;
        min-width: 0;
        min-height: 44px;
    }

    .job-create-action-bar-spacer {
        height: 92px;
        height: calc(92px + env(safe-area-inset-bottom, 0px));
    }

    .job-edit-action-bar-spacer {
        height: 140px;
        height: calc(140px + env(safe-area-inset-bottom, 0px));
    }
}
/* =============================================================================
   Job Mobile Card And Work Intake Geometry
   ============================================================================= */

.work-new-action {
    justify-self: end;
    white-space: nowrap;
}

.work-new-layout {
    max-width: 960px;
}

.work-new-card {
    min-width: 0;
}

.work-new-choice-list {
    display: grid;
    min-width: 0;
}

.work-new-choice-row {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    gap: var(--wc-space-4, 16px);
    align-items: center;
    min-width: 0;
    padding-block: var(--wc-space-4, 16px);
    border-top: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
}

.work-new-choice-row:first-child {
    padding-top: 0;
    border-top: 0;
}

.work-new-choice-row:last-child {
    padding-bottom: 0;
}

.work-new-choice-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: var(--border-radius-md);
    background: var(--wc-surface-2, var(--mud-palette-background-gray));
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
}

.work-new-choice-copy,
.work-new-choice-title,
.work-new-choice-support {
    min-width: 0;
    overflow-wrap: anywhere;
}

.job-request-message-surface {
    padding: var(--wc-card-padding-block) var(--wc-card-padding-inline);
    border-radius: var(--wc-panel-radius, var(--border-radius-md));
    background: var(--wc-surface-2, var(--mud-palette-background-grey));
}

.work-new-choice-title {
    font-weight: var(--font-bold);
}

@media (max-width: 959.98px) {
    .work-new-layout {
        max-width: none;
    }
}

@media (max-width: 599.98px) {
    .work-new-choice-row {
        grid-template-columns: auto minmax(0, 1fr);
        gap: var(--wc-space-3, 12px);
    }

    .work-new-action {
        grid-column: 1 / -1;
        justify-self: stretch;
        min-height: 44px;
    }
}
/* Job costing. Summary figures use the shared .wc-metric-grid primitive. */
.job-costing-panel {
    display: flex;
    flex-direction: column;
    gap: var(--wc-space-4);
}

.job-costing-subheader small {
    color: var(--wc-text-muted);
    font-size: var(--wc-type-caption-size);
    line-height: 1.3;
}

.job-costing-section {
    display: flex;
    flex-direction: column;
    gap: var(--wc-space-2);
}

.job-costing-lane {
    gap: var(--wc-space-3);
}

.job-costing-subheader {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--wc-space-2);
    font-weight: 600;
}

.job-costing-subheader--stacked {
    align-items: flex-start;
    flex-direction: column;
    gap: 2px;
}

.job-costing-recorded-empty .empty-description {
    max-width: 28rem;
}

.job-expense-receipt-upload {
    display: flex;
    flex-direction: column;
    gap: var(--wc-space-1);
}

/* Deposit follow-up commands sit under the deposit line: Request and Record are
   two different acts (WI-003), so they are two controls, not one blended one. */
.job-deposit-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--wc-space-1) var(--wc-space-2);
}

.job-deposit-action {
    min-height: 44px;
}

/* ===== WorkCita.Client/wwwroot/css/app.features.documents.css ===== */
/*
 * WorkCita global stylesheet module: app.features.documents.css
 * Ownership layer: feature geometry (document workflows).
 * Ownership: document queue filters, document dialog shells, estimate/invoice panel rows,
 *   document totals layout, and document table width/input modifiers.
 * Theme: universal --wc-* tokens only; not a separate surface theme.
 * Parent: GitHub #404 mechanical CSS ownership split (no visual redesign).
 * Load: after app.features.jobs.css; before app.features.schedule.css (index.html).
 */


/* =============================================================================
   Document Queue Geometry
   ============================================================================= */

.document-queue-link-button {
    padding: 0;
    min-width: 0;
}

.office-list-toolbar-document-queue .filter-bar-search-row {
    gap: 8px;
}

@media (min-width: 960px) {
    .office-list-toolbar-document-queue .office-list-toolbar-search-item-document-queue.mud-grid-item {
        flex: 1 1 0;
        width: auto;
        max-width: none;
    }
}

.document-queue-summary-surfaces {
    display: grid;
    gap: 8px;
}

/* Shared document dialog primitives */
.document-dialog-section,
.document-dialog-context-banner,
.document-dialog-scroll-frame {
    border-radius: var(--wc-radius-md, var(--border-radius-md));
}

.document-dialog-section {
    border-color: var(--wc-border-soft, var(--mud-palette-divider));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    box-shadow: none;
}

.document-dialog-section--outlined,
.document-dialog-scroll-frame--outlined {
    border-width: 1px;
    border-style: solid;
}

.document-dialog-section--subtle,
.document-dialog-context-banner--subtle,
.document-dialog-totals-panel {
    background: var(--wc-surface-2, var(--mud-palette-background-grey));
}

.document-dialog-section--info,
.document-dialog-context-banner--info {
    border-color: var(--wc-tone-info-soft-border);
    background: var(--wc-tone-info-soft-bg);
}

.document-dialog-section--success,
.document-dialog-context-banner--success {
    border-color: var(--wc-tone-success-soft-border);
    background: var(--wc-tone-success-soft-bg);
}

.document-dialog-section--warning,
.document-dialog-context-banner--warning {
    border-color: var(--wc-tone-warning-soft-border);
    background: var(--wc-tone-warning-soft-bg);
}

.document-dialog-section--error,
.document-dialog-context-banner--error {
    border-color: var(--wc-tone-error-soft-border);
    background: var(--wc-tone-error-soft-bg);
}

.document-dialog-section__header {
    gap: var(--space-2);
    flex-wrap: wrap;
    padding: var(--space-3) var(--space-3) 0;
}

.document-dialog-section__heading {
    min-width: 0;
}

.document-dialog-section__actions {
    flex-wrap: wrap;
}

.document-dialog-section__title,
.document-dialog-context-banner__text {
    overflow-wrap: anywhere;
}

.document-dialog-section__title {
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
}

.document-dialog-section__body {
    padding: var(--space-3);
}

.document-dialog-section--dense .document-dialog-section__header {
    padding: var(--space-2) var(--space-3) 0;
}

.document-dialog-section--dense .document-dialog-section__body {
    padding: var(--space-3);
}

.document-dialog-summary-label,
.document-dialog-summary-value {
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
}

.document-dialog-summary-value--success {
    color: var(--wc-tone-success-soft-fg);
}

.document-dialog-context-banner {
    padding: var(--space-3);
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
}

.document-dialog-context-banner-gap {
    margin-bottom: var(--space-2);
}

.document-dialog-scroll-frame {
    max-block-size: min(400px, calc(100vh - 320px));
    overflow: auto;
    overscroll-behavior: contain;
    border-color: var(--wc-border-soft, var(--mud-palette-divider));
}

.document-dialog-fill {
    flex: 1 1 0;
    min-width: 0;
}

.document-dialog-self-center {
    align-self: center;
}

.document-dialog-mobile-summary-row {
    margin-bottom: var(--space-1);
}

.document-dialog-note-spacing {
    margin-bottom: var(--space-2);
}

.document-dialog-divider-tight {
    margin-block: var(--space-1) !important;
}

.document-dialog-line-items-actions {
    gap: var(--space-1);
}

.document-dialog-line-items-action {
    min-width: 0;
}

.document-dialog-line-items-action .mud-button-label {
    line-height: 1.15;
    white-space: normal;
}

.document-dialog-line-items-section .document-dialog-section__body {
    display: grid;
    gap: var(--space-2);
}

.document-dialog-line-items-leading {
    display: grid;
    gap: var(--space-2);
    min-width: 0;
}

.document-dialog-line-items-empty {
    display: grid;
    justify-items: center;
    gap: var(--space-2);
    min-width: 0;
    padding: var(--space-4);
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--wc-radius-md, var(--border-radius-md));
    background: var(--wc-surface-2, var(--mud-palette-background));
    text-align: center;
}

/* Discount, tax mode, and the running totals close the line items the way they close
   the document: adjustments on the left, totals on the right, inside the same card
   rather than floating between cards. */
.document-dialog-line-items-footer {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(260px, 360px);
    align-items: start;
    gap: var(--space-4);
    padding-top: var(--space-2);
}

.document-dialog-line-items-adjustments {
    display: grid;
    gap: var(--space-3);
    min-width: 0;
}

.document-dialog-line-items-footer .document-dialog-totals-panel {
    max-width: none;
    margin-left: 0;
}

@media (max-width: 959.98px) {
    .document-dialog-line-items-footer {
        grid-template-columns: minmax(0, 1fr);
    }
}

/* On a routed editor page the sections title like the office form cards ("Create work"),
   not at the 14px label size dialogs use. */
.document-editor-page .document-dialog-section__title {
    font-family: var(--wc-type-title-family);
    font-size: var(--wc-type-title-size);
    font-weight: var(--wc-type-title-weight);
    line-height: var(--wc-type-title-leading);
}

.document-editor-page .document-dialog-section__header {
    padding: var(--space-4) var(--space-4) 0;
}

.document-editor-page .document-dialog-section__body {
    padding: var(--space-3) var(--space-4) var(--space-4);
}

.document-dialog-table {
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--wc-radius-sm, var(--border-radius-sm));
    overflow: hidden;
}

.document-dialog-totals-panel {
    max-width: 360px;
    margin-left: auto;
}

.document-dialog-total-row {
    gap: var(--space-4);
}

.document-dialog-total-row--emphasis {
    padding-top: var(--space-1);
}

.document-dialog-impact-list {
    margin: var(--space-1) 0 0;
    padding-inline-start: 1.25rem;
    font-family: var(--wc-type-body-family);
    font-size: var(--wc-type-body-size);
    line-height: var(--wc-type-body-leading);
}

.document-dialog-payment-status {
    border-width: 2px;
}

.document-action-dialog-shell .wc-dialog-shell__content {
    gap: var(--wc-space-3, 12px);
}

.document-action-dialog-shell__body {
    display: grid;
    gap: var(--wc-space-3, 12px);
    min-width: 0;
}

.document-action-dialog-shell__context,
.document-action-dialog-shell__summary,
.document-action-dialog-shell__line-items,
.document-action-dialog-shell__totals {
    min-width: 0;
}

.document-action-dialog-shell__totals {
    display: flex;
    justify-content: flex-end;
}

.document-action-dialog-shell__totals > * {
    flex: 1 1 360px;
    max-width: 420px;
}

@media (max-width: 599.98px) {
    .document-dialog-line-items-actions {
        display: grid !important;
        grid-template-columns: minmax(0, 1fr);
        width: 100%;
    }

    .document-dialog-line-items-action .mud-button-label {
        white-space: nowrap;
    }

    .document-dialog-scroll-frame {
        max-block-size: min(360px, calc(100vh - 280px));
    }

    .document-dialog-totals-panel {
        max-width: 100%;
        margin-left: 0;
    }

    .document-action-dialog-shell__totals {
        display: block;
    }

    .document-action-dialog-shell__totals > * {
        max-width: 100%;
    }
}

.estimate-detail-description-divider {
    margin-block: 12px;
}

.estimate-detail-description {
    margin-top: 4px;
}

.office-panel-record-table .mud-table-container {
    background: var(--wc-surface-1, var(--mud-palette-surface));
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--border-radius-md);
}

.office-panel-record-table .mud-table-row:hover {
    background: var(--wc-surface-2, var(--mud-palette-background-grey));
}

.panel-empty-action {
    margin-top: 16px;
}

/* The amount is one token and takes only the width it needs; the label takes the rest.
   A fixed 58/42 split left "Saldo pendiente" 138px in a 280px aside and broke it over
   two lines beside an amount using half its lane. */
.wc-financial-summary-table__label {
    min-width: 0;
    white-space: normal;
    overflow-wrap: anywhere;
}

.page-data-grid--financial-summary .mud-table-body .wc-financial-summary-table__value {
    width: 1%;
    min-width: 0;
    white-space: nowrap;
    text-align: right;
}

.wc-financial-summary-table__label .mud-typography {
    min-width: 0;
    white-space: normal;
    overflow-wrap: anywhere;
}

.input-quantity {
    flex: 1 1 auto;
    min-width: 0;
    max-width: 120px;
}

.input-quantity + .mud-typography {
    flex: 0 0 auto;
    white-space: nowrap;
}

@media (max-width: 599.98px) {
    .input-quantity {
        max-width: 100%;
    }
}

/* =============================================================================

/* ===== WorkCita.Client/wwwroot/css/app.features.schedule.css ===== */
/*
 * WorkCita global stylesheet module: app.features.schedule.css
 * Ownership layer: feature geometry (schedule shell and controls).
 * Ownership: schedule mobile sheets, sidebar, toolbar, and month badge affordances.
 * Theme: universal --wc-* tokens only; not a separate surface theme.
 * Parent: whole-app UI facelift.
 * Load: after app.features.documents.css; before app.features.schedule.week.css (index.html).
 */

/* Recurring visit impact preview (WI-037): the affected-visit list is a plain
   inventory, not a bulleted narrative, so it drops list markers and reads as
   date + identity pairs. */
.recurring-visit-impact__list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.recurring-visit-impact__list li {
    display: flex;
    gap: 8px;
    font-size: var(--wc-type-body-compact-size);
    line-height: 1.35;
}

.recurring-visit-impact__date {
    min-width: 6.5em;
    color: var(--wc-text-secondary);
}

.recurring-visit-impact__number {
    font-variant-numeric: tabular-nums;
    overflow-wrap: anywhere;
}

/* Shared schedule mobile bottom sheet */
.schedule-mobile-sheet {
    position: fixed;
    inset: 0;
    z-index: 1300;
    pointer-events: none;
}
.schedule-mobile-sheet__backdrop {
    position: absolute;
    inset: 0;
    border: none;
    background: var(--wc-overlay-scrim);
    cursor: pointer;
    pointer-events: auto;
}

.schedule-mobile-sheet__panel {
    position: absolute;
    left: 50%;
    bottom: max(8px, env(safe-area-inset-bottom, 8px));
    transform: translateX(-50%);
    width: min(640px, calc(100vw - 24px));
    max-height: min(78dvh, calc(100dvh - 72px));
    display: flex;
    flex-direction: column;
    background: var(--wc-surface-1);
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    box-shadow: var(--wc-surface-shadow-md);
    overflow: hidden;
    pointer-events: auto;
}

.schedule-mobile-sheet__grabber {
    width: 44px;
    height: 4px;
    margin: 10px auto 12px;
    border-radius: var(--wc-radius-pill);
    background: var(--wc-border-strong);
}

.schedule-mobile-sheet__header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 12px;
    padding: 0 16px 14px;
}

.schedule-mobile-sheet__header-copy {
    min-width: 0;
}

.schedule-mobile-sheet__body {
    min-height: 0;
    overflow-y: auto;
    padding: 16px;
    padding-bottom: max(16px, env(safe-area-inset-bottom, 16px));
}

.schedule-mobile-sheet .mud-icon-button,
.schedule-mobile-sheet .mud-icon-button-root,
.schedule-mobile-sheet .mud-button-root {
    min-width: 44px;
    min-height: 44px;
}

@media (max-width: 959.98px) {
    .schedule-page .schedule-mobile-sheet__panel {
        bottom: calc(var(--wc-mobile-bottom-nav-height, 84px) + max(8px, env(safe-area-inset-bottom, 8px)));
        max-height: min(72dvh, calc(100dvh - var(--wc-mobile-bottom-nav-height, 84px) - 72px - env(safe-area-inset-bottom, 0px)));
    }
}

.schedule-mobile-empty-state {
    padding: 16px;
}

.schedule-dialog-title-icon {
    margin-right: 8px;
}

.schedule-dialog-error-alert {
    margin-bottom: 16px;
}

.hover-lift {
    transition: border-color var(--wc-motion-feedback) var(--wc-ease-out-quart), background-color var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

.hover-lift:hover {
    box-shadow: none;
}

.schedule-assignment-overlay {
    display: flex;
    align-items: center;
    justify-content: center;
}

/* Unscheduled Jobs Bottom Sheet */
.unscheduled-jobs-content {
    padding-top: 0;
}

.unscheduled-jobs-list {
    overflow: visible;
    max-height: none;
}


/* =============================================================================
   Unscheduled Jobs Sidebar (Desktop)
   ============================================================================= */

.schedule-sidebar {
    position: relative;
    background: var(--wc-surface-2);
    border-left: 1px solid var(--wc-data-grid-border, var(--wc-border-soft));
    display: flex;
    flex-direction: column;
    overflow: hidden;
    flex-shrink: 0;
}

.schedule-sidebar--expanded {
    width: 280px;
}

.schedule-sidebar--collapsed {
    width: 64px;
}

.schedule-sidebar__toggle {
    position: absolute;
    left: -16px;
    top: 18px;
    transform: none;
    z-index: 10;
    min-width: 44px;
    min-height: 44px;
    width: 44px;
    height: 44px;
    background: var(--wc-command-header-bg) !important;
    border: 1px solid var(--wc-command-header-border) !important;
    color: var(--wc-command-header-fg) !important;
    box-shadow: var(--wc-surface-shadow-sm);
}

.schedule-sidebar__toggle:hover {
    background: var(--wc-accent) !important;
}

/* Expanded Sidebar Content */
.sidebar-content {
    padding: 16px;
    overflow-y: auto;
    flex: 1;
    display: flex;
    flex-direction: column;
    gap: 18px;
    opacity: 1;
    transition: opacity var(--wc-motion-base) var(--wc-ease-out-quart);
}

/* Smooth fade for content during collapse */
.schedule-sidebar--collapsed .sidebar-content {
    opacity: 0;
    pointer-events: none;
}

/* Each section takes equal space, scrolls internally if needed */
.sidebar-section {
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

.sidebar-section-header {
    flex-shrink: 0;
    margin-bottom: 12px;
    font-size: var(--wc-type-body-compact-size);
    font-weight: 600;
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
}

/* Team Utilization section - visual separator */
.sidebar-section:last-child {
    padding-top: 16px;
    border-top: 1px solid var(--wc-data-grid-border, var(--wc-border-soft));
}

/* Team Utilization title styling */
.sidebar-section:last-child .sidebar-section-header {
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-caption-size);
    letter-spacing: 0.03em;
    text-transform: uppercase;
}

.sidebar-count-chip {
    font-size: var(--wc-type-meta-size);
    height: 20px;
    min-width: 24px;
    padding: 0 6px;
}

.sidebar-job-list,
.sidebar-team-list,
.employees-list,
.unscheduled-jobs-list {
    min-height: 0;
    overflow-y: auto;
}

.sidebar-job-list {
    flex: 1;
    padding-right: 4px;
}

.unscheduled-jobs-list {
    overflow: visible;
    max-height: none;
}

/* Team Utilization */
.sidebar-employee-row {
    padding: 6px 0;
}

.sidebar-employee-avatar {
    width: 28px !important;
    height: 28px !important;
    font-size: var(--wc-type-meta-size) !important;
}

.sidebar-utilization-bar {
    height: 4px !important;
    border-radius: var(--wc-radius-track) !important;
}

.sidebar-utilization-text {
    font-size: var(--wc-type-meta-size);
    min-width: 32px;
    text-align: right;
}

/* Collapsed Sidebar Content */
.sidebar-collapsed-content {
    display: flex;
    flex-direction: column;
    align-items: center;
    padding: 16px 8px;
    gap: 8px;
    opacity: 1;
    transition: opacity var(--wc-motion-feedback) var(--wc-ease-out-quart) var(--wc-motion-fast);
}

/* Hide collapsed content when expanded */
.schedule-sidebar--expanded .sidebar-collapsed-content {
    opacity: 0;
    pointer-events: none;
    transition-delay: 0s;
}

.sidebar-collapsed-badge {
    margin-bottom: 2px;
}

.collapsed-label {
    font-size: var(--wc-type-meta-size);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-top: 2px;
}

.sidebar-collapsed-avatars {
    overflow-y: auto;
    max-height: calc(100vh - 200px);
}

.sidebar-collapsed-avatar {
    width: 32px !important;
    height: 32px !important;
    font-size: var(--wc-type-meta-size) !important;
}

/* Hide sidebar on mobile - use bottom sheets instead */
@media (max-width: 959.98px) {
    .schedule-sidebar {
        display: none;
    }
}

/* Employees Bottom Sheet */
.employees-content {
    padding-top: 0;
}

.employees-list {
    max-height: none;
}

.sidebar-empty-state {
    background: var(--wc-surface-2);
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--border-radius-md);
}

.schedule-sidebar-empty-state {
    padding: 16px;
}

.schedule-sidebar-muted-note {
    padding: 8px;
}

.schedule-sidebar-collapsed-divider {
    margin-block: 8px;
}

.sidebar-employee-copy {
    flex: 1 1 0;
    min-width: 0;
}

.employee-card {
    appearance: none;
    width: 100%;
    min-height: 44px;
    padding: 0;
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    cursor: pointer;
    color: inherit;
    font: inherit;
    text-align: left;
    transition: background-color var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

.employee-card__content {
    padding: 0;
}

.employee-card__copy {
    flex: 1 1 0;
    min-width: 0;
}

.employee-card__utilization {
    margin-top: 4px;
}

.employee-card:active {
    background-color: var(--wc-surface-hover, var(--mud-palette-action-default-hover));
}

.employee-card:focus-visible {
    outline: var(--wc-focus-outline);
    outline-offset: 2px;
}

.employee-card--not-working {
    opacity: 0.6;
}

.employee-off-chip {
    font-size: var(--wc-type-meta-size);
    height: 18px;
    padding: 0 6px;
}

/* Month view badge affordances. Grid and cell geometry live with the canonical month workspace below. */

.dispatch-month-day-number {
    font-size: var(--wc-type-body-size);
    font-weight: 500;
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    width: 28px;
    height: 28px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    transition:
        background-color var(--wc-motion-feedback) var(--wc-ease-out-quart),
        color var(--wc-motion-feedback) var(--wc-ease-out-quart),
        box-shadow var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

/* Today indicator - prominent circle */
.dispatch-month-day-number--today {
    background: var(--wc-accent);
    color: var(--wc-on-accent, var(--mud-palette-primary-text));
    font-weight: 700;
}

.dispatch-month-job-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 22px;
    height: 22px;
    padding: 0 6px;
    border-radius: var(--wc-panel-radius);
    font-size: var(--wc-type-caption-size);
    font-weight: 600;
    /* A day's job count is information, not an alert. Keep it a quiet neutral
       chip so solid accent is reserved for "today"; otherwise the count, the
       today circle, and the selection ring all read as competing blues. */
    background: var(--wc-surface-1);
    color: var(--wc-text-strong);
    border: 1px solid var(--wc-border-soft);
    width: fit-content;
    box-shadow: none;
}

@media (max-width: 599.98px) {
    .dispatch-month-day-number {
        font-size: var(--wc-type-caption-size);
        width: 24px;
        height: 24px;
    }

    .dispatch-month-job-badge {
        min-width: 18px;
        height: 18px;
        font-size: var(--wc-type-meta-size);
        padding: 0 4px;
    }
}

/* ========================================
   Schedule Toolbar
   ======================================== */

.schedule-toolbar {
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding: 4px 0;
    position: relative;
    width: 100%;
}

.schedule-toolbar__row {
    display: flex;
    align-items: center;
    width: 100%;
}

.schedule-toolbar__row--mobile-single {
    gap: 8px;
}

/* Side columns: equal width so center is truly centered */
.schedule-toolbar__side {
    flex: 1;
    min-width: 0;
}

.schedule-toolbar__side--left {
    display: flex;
    justify-content: flex-start;
}

.schedule-toolbar__side--right {
    display: flex;
    justify-content: flex-end;
}

.schedule-toolbar__right-tools {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 6px;
    min-width: 0;
}

/* Center column: shrink-wrap around content */
.schedule-toolbar__center {
    display: flex;
    align-items: center;
    flex-shrink: 0;
}

/* Tablet controls need a second row so long localized dates stay legible. */
@media (min-width: 600px) and (max-width: 959.98px) {
    .schedule-toolbar__row:not(.schedule-toolbar__row--chips) {
        display: grid;
        grid-template-columns: auto minmax(0, 1fr);
        gap: 8px;
    }

    .schedule-toolbar__center {
        grid-column: 1 / -1;
        grid-row: 1;
        justify-content: center;
    }

    .schedule-toolbar__side--left,
    .schedule-toolbar__side--right {
        grid-row: 2;
    }
}

.schedule-toolbar__chips {
    display: flex;
    align-items: center;
    gap: 4px;
}

.schedule-toolbar__chips--mobile {
    display: flex;
}

/* Worded pills + the view-mode select can exceed a phone row; wrapping drops
   the select to its own line instead of letting two interactive controls
   overlap. */
@media (max-width: 599.98px) {
    .schedule-toolbar__row {
        flex-wrap: wrap;
        row-gap: 6px;
    }

    .schedule-toolbar__chips--mobile {
        flex-wrap: wrap;
        row-gap: 4px;
    }
}

.schedule-toolbar__today-btn {
    min-width: 44px !important;
    min-height: 44px !important;
    text-transform: none !important;
    font-weight: 500 !important;
}

.schedule-toolbar__today-icon {
    display: none !important;
}

.schedule-toolbar__today-label {
    display: inline;
}

.schedule-toolbar__today-btn--muted {
    opacity: 0.4;
}

.schedule-toolbar__date-picker-anchor {
    position: relative;
}

.schedule-toolbar__date-btn {
    text-transform: none !important;
    font-weight: 500 !important;
    letter-spacing: 0 !important;
    min-width: 44px !important;
    min-height: 44px !important;
    padding-left: 4px !important;
    padding-right: 4px !important;
}

/* Keep the date navigation compact while restoring the full pointer/keyboard
   hit area for each control. The shared touch utility only applies to coarse
   pointers; schedule navigation needs the same floor for desktop and keyboard
   users because these controls are the primary date affordance. */
.schedule-toolbar__date-nav .mud-icon-button-root {
    min-width: 44px !important;
    min-height: 44px !important;
    width: 44px;
    height: 44px;
}

.schedule-toolbar__date-text {
    font-weight: 500;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    /* 12.5rem = 200px at the 16px root default; a raised browser text size widens
       the cap instead of clipping the (longer) localized date sooner. */
    max-width: 12.5rem;
}

/* Day view carries a full and a short date; show the full one only where it fits.
   The desktop row sizes the date-nav from its grid track, so it can be a size container. */
.schedule-toolbar__date-short {
    display: none;
}

.schedule-toolbar__row--desktop .schedule-toolbar__date-nav {
    container: schedule-date-nav / inline-size;
}

.schedule-toolbar__row--desktop .schedule-toolbar__date-text {
    max-width: 20rem;
}

@container schedule-date-nav (max-width: 25rem) {
    .schedule-toolbar__date-long {
        display: none;
    }

    .schedule-toolbar__date-short {
        display: inline;
    }
}

@media (max-width: 599.98px) {
    .schedule-toolbar__date-long {
        display: none;
    }

    .schedule-toolbar__date-short {
        display: inline;
    }
}

.schedule-toolbar__date-popover {
    z-index: 1300;
}

.schedule-toolbar__overlay {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 1099;
}

/* Mobile toolbar. The Today button keeps its text label at every width: an
   icon-only calendar glyph next to the date picker reads as a duplicate
   affordance. */
@media (max-width: 599.98px) {
    .schedule-toolbar__date-text {
        font-size: var(--wc-type-body-size) !important;
    }
    .schedule-toolbar__date-btn {
        padding-left: 2px !important;
        padding-right: 2px !important;
    }
    /* On mobile, let side columns shrink so chips don't overlap the centered toggle */
    .schedule-toolbar__side {
        flex: 0 1 auto;
    }
    .schedule-toolbar__center {
        flex: 1;
        justify-content: center;
    }

    .schedule-toolbar__row--mobile-single .schedule-toolbar__side {
        flex: 0 0 auto;
    }

    .schedule-toolbar__row--mobile-single .schedule-toolbar__center {
        flex: 1 1 auto;
        min-width: 0;
        justify-content: center;
    }

    .schedule-toolbar__row--mobile-single .schedule-toolbar__date-nav {
        gap: 2px;
    }

}

/* ========================================
   Schedule CSS Variables
   ======================================== */

:root {
    --schedule-hour-height: 60px;
    --schedule-column-width-mobile: 70px;
    --schedule-column-width-desktop: 140px;
    --schedule-time-column-width-mobile: 45px;
    --schedule-time-column-width-desktop: 60px;
    --schedule-header-height-mobile: 40px;
    --schedule-header-height-desktop: 50px;
    --schedule-min-block-height: 24px;
    --schedule-base-hour: 6;
}

/* ===== WorkCita.Client/wwwroot/css/app.features.schedule.week.css ===== */
/*
 * WorkCita global stylesheet module: app.features.schedule.week.css
 * Ownership: seven-day schedule board, day columns, job cards, and calendar fill geometry.
 * Theme: universal --wc-* tokens only.
 * Load: after app.features.schedule.css; before app.features.schedule.workspace.css.
 */

/* ==========================================================================
   BLOCK CALENDAR - Fixed columns with slide transitions
   No horizontal scrolling. Columns fill width equally.
   ========================================================================== */

.block-calendar {
    display: flex;
    flex-direction: column;
    height: 100%;
    min-height: 0;
    background: var(--wc-surface-1, var(--mud-palette-surface));
    border-radius: var(--wc-control-radius);
    overflow: hidden;
    position: relative;
}

/* Headers row */
.block-calendar__grid {
    display: flex;
    flex: 1;
    flex-direction: column;
    min-height: 0;
}

.block-calendar__headers {
    display: flex;
    border-bottom: 1px solid var(--wc-border-soft, var(--mud-palette-lines-default));
    background: var(--wc-page-background, var(--mud-palette-background));
    flex-shrink: 0;
}

.block-calendar__day-header {
    flex: 1 1 0;
    min-width: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    padding: 8px 4px;
    box-sizing: border-box;
}

.block-calendar__day-header--today {
    background: rgba(var(--wc-accent-rgb), 0.08);
    border-radius: var(--wc-control-radius) var(--wc-control-radius) 0 0;
}

.block-calendar__day-name {
    font-size: var(--wc-type-meta-size);
    font-weight: 500;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
}

.block-calendar__day-header--today .block-calendar__day-name {
    color: var(--wc-accent-ink, var(--mud-palette-primary));
    font-weight: 600;
}

.block-calendar__day-number {
    font-size: var(--wc-type-control-size);
    font-weight: 600;
    margin-top: 2px;
}

.block-calendar__day-header--today .block-calendar__day-number {
    background: var(--wc-accent, var(--mud-palette-primary));
    color: var(--wc-on-accent, var(--mud-palette-primary-text));
    border-radius: 50%;
    width: 28px;
    height: 28px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: var(--wc-type-body-size);
}

/* Weekend header */
.block-calendar__day-header--weekend {
    opacity: 0.85;
}

.block-calendar__day-header--weekend.block-calendar__day-header--today {
    opacity: 1;
}

/* Columns container */
.block-calendar__columns {
    display: flex;
    flex: 1;
    min-height: 0;
}

/* Day columns - equal width, flex container for scroll + pinned footer */
.block-calendar__column {
    flex: 1 1 0;
    min-width: 0;
    border-right: 1px solid var(--wc-border-soft, var(--mud-palette-lines-default));
    display: flex;
    flex-direction: column;
    min-height: 0;
    box-sizing: border-box;
    overflow: hidden;
}

/* Scrollable job card area within each column */
.block-calendar__column-scroll {
    flex: 1;
    overflow-y: auto;
    padding: 8px 4px;
    display: flex;
    flex-direction: column;
    gap: 6px;
    min-height: 0;
}

.block-calendar__column:last-child {
    border-right: none;
}

/* Today column */
.block-calendar__column--today {
    background: rgba(var(--wc-accent-rgb), 0.08);
}

/* Weekend columns */
.block-calendar__column--weekend {
    background: rgba(var(--wc-shadow-rgb), 0.02);
}

.block-calendar__column--weekend.block-calendar__column--today {
    background: rgba(var(--wc-accent-rgb), 0.08);
}

/* Slide Transitions */

@keyframes slide-in-right {
    from { transform: translateX(100%); opacity: 0; }
    to   { transform: translateX(0); opacity: 1; }
}

@keyframes slide-in-left {
    from { transform: translateX(-100%); opacity: 0; }
    to   { transform: translateX(0); opacity: 1; }
}

.block-calendar--slide-forward {
    animation: slide-in-right var(--wc-motion-slow) var(--wc-ease-out-quint);
}

.block-calendar--slide-backward {
    animation: slide-in-left var(--wc-motion-slow) var(--wc-ease-out-quint);
}

/* Job Cards */

.block-calendar__job {
    background: var(--wc-page-background, var(--mud-palette-background));
    border: 1px solid var(--wc-border-soft, var(--mud-palette-lines-default));
    border-radius: var(--wc-radius-sm);
    min-height: 44px;
    flex-shrink: 0;
    transition: box-shadow var(--wc-motion-feedback) var(--wc-ease-out-quart);
    position: relative;
    touch-action: manipulation;
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

.block-calendar__job:hover {
    box-shadow: none;
}

.block-calendar__job-body {
    padding: 10px;
    cursor: pointer;
    flex: 1;
}

.block-calendar__job-body:active {
    opacity: 0.8;
}

.block-calendar__job-actions {
    display: flex;
    justify-content: flex-end;
    gap: 2px;
    padding: 0 4px 4px;
}

/* Desktop: show on hover only */
@media (hover: hover) {
    .block-calendar__job-actions {
        opacity: 0;
        transition: opacity var(--wc-motion-feedback) var(--wc-ease-out-quart);
    }

    .block-calendar__job:hover .block-calendar__job-actions {
        opacity: 1;
    }
}

.block-calendar__job--scheduled {
    border-color: var(--wc-tone-primary-soft-border);
    background: var(--wc-surface-1);
}

.block-calendar__job--inprogress {
    border-color: var(--wc-tone-info-soft-border);
    background: var(--wc-surface-1);
}

.block-calendar__job--completed {
    border-color: var(--wc-tone-success-soft-border);
    background: var(--wc-surface-2);
    opacity: 0.88;
}

.block-calendar__job--cancelled {
    border-color: rgba(var(--wc-error-rgb), 0.34);
    opacity: 0.5;
    text-decoration: line-through;
}

.block-calendar__job--high {
    border-color: var(--wc-tone-error-soft-fg, var(--mud-palette-error)) !important;
}

.block-calendar__job--low {
    border-color: var(--wc-tone-default-soft-fg, var(--mud-palette-text-secondary)) !important;
}

.block-calendar__job--conflict {
    border-color: rgb(var(--wc-error-rgb)) !important;
    border-width: 2px !important;
    border-style: solid !important;
    background: rgba(var(--wc-error-rgb), 0.06);
}

.block-calendar__job-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    margin-bottom: 4px;
}

.block-calendar__job-title {
    font-size: var(--wc-type-body-compact-size);
    font-weight: 600;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
}

.block-calendar__job-status-row {
    display: flex;
    margin: -1px 0 4px;
}

.block-calendar__job-status {
    max-width: 100%;
    padding: 1px 6px;
    border-radius: var(--wc-radius-pill);
    background: var(--wc-tone-primary-soft-bg);
    /* Strong ink: the 11px/700 label on the tinted pill falls under 4.5:1
       with muted text. */
    color: var(--wc-text-strong);
    font-size: var(--wc-type-meta-size);
    font-weight: 700;
    line-height: 1.35;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

@media (max-width: 599.98px) {
    .block-calendar__job-title {
        font-size: var(--wc-type-meta-size);
    }
    .block-calendar__job-status {
        font-size: var(--wc-type-meta-size);
    }
    .block-calendar__job-employee {
        font-size: var(--wc-type-meta-size);
    }
}

.block-calendar__job-meta {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-bottom: 4px;
    min-width: 0;
    overflow: hidden;
}

.block-calendar__job-avatar {
    width: 22px !important;
    height: 22px !important;
    font-size: var(--wc-type-meta-size) !important;
    flex-shrink: 0;
}

.block-calendar__job-employee {
    font-size: var(--wc-type-meta-size);
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    min-width: 0;
    max-width: 100%;
}

.block-calendar__job-employee--summary {
    font-weight: 500;
}

.block-calendar__job-crew {
    display: flex;
    align-items: center;
    gap: 4px;
    flex-wrap: nowrap;
    min-width: 0;
    overflow: hidden;
}

.block-calendar__job-crew .block-calendar__job-avatar {
    margin-right: -4px;
}

.block-calendar__job-crew .block-calendar__job-avatar:last-of-type {
    margin-right: 4px;
}

.block-calendar__job-crew .block-calendar__job-employee {
    min-width: 0;
}

.block-calendar__job-crew .block-calendar__job-employee--summary {
    margin-left: 2px;
}

.block-calendar__job-unassigned {
    font-size: var(--wc-type-meta-size);
    color: var(--wc-tone-warning-soft-fg);
    font-style: italic;
}

.block-calendar__job-time {
    font-size: var(--wc-type-meta-size);
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
    display: flex;
    align-items: center;
    gap: 4px;
}

.block-calendar__conflict-icon {
    margin-left: 4px;
}

.block-calendar__job-time::before {
    content: "";
    width: 12px;
    height: 12px;
    flex-shrink: 0;
}

/* Day footer - pinned at bottom of column, never scrolls */
.block-calendar__day-footer {
    flex-shrink: 0;
    padding: 8px 12px;
    border-top: 1px solid var(--wc-border-soft, var(--mud-palette-lines-default));
    background: var(--wc-page-background, var(--mud-palette-background));
    text-align: center;
    white-space: nowrap;
    font-size: var(--wc-type-caption-size);
}

/* Empty day state */
.block-calendar__empty-day {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 24px 8px;
    opacity: 0.5;
    gap: 4px;
}

.block-calendar__empty-action {
    margin-top: 4px;
}

/* ==========================================================================
   SCHEDULE PAGE LAYOUT - follows shared office scroll ownership
   ========================================================================== */

.schedule-page {
    min-height: 100%;
}

.schedule-page > * {
    min-width: 0;
}

.schedule-page__workspace {
    min-width: 0;
    min-height: 100%;
}

@media (max-width: 959.98px) {
    .schedule-page {
        min-height: calc(100dvh - 56px - 64px - env(safe-area-inset-bottom, 0px));
    }

    .schedule-calendar-fill {
        flex: 0 0 auto;
        min-height: auto;
        overflow: visible;
    }

    .block-calendar {
        height: auto;
        min-height: auto;
        overflow: visible;
    }
}

.schedule-toolbar-band {
    flex-shrink: 0;
}

.schedule-toolbar-band.mud-paper {
    padding: 8px 12px;
    background: var(--wc-surface-1);
    border: 1px solid var(--wc-data-grid-border, var(--wc-border-soft));
    border-radius: var(--wc-panel-radius, var(--wc-card-radius, var(--border-radius-md)));
    box-shadow: var(--wc-surface-shadow-xs);
}

@media (max-width: 959.98px) {
    .schedule-toolbar-band.mud-paper {
        padding: 10px 12px;
    }
}

@media (min-width: 960px) {
    .schedule-toolbar-band.mud-paper {
        padding: 10px 14px;
    }
}

/* Calendar fill container - takes remaining vertical space */
.schedule-calendar-fill {
    width: 100%;
    min-height: 0;
    overflow: hidden;
}

.schedule-desktop-layout {
    display: flex;
    min-height: 0;
    overflow: visible;
    border: 1px solid var(--wc-data-grid-border, var(--wc-border-soft));
    border-radius: var(--wc-panel-radius, var(--wc-card-radius, var(--border-radius-md)));
    background: var(--wc-surface-1);
    box-shadow: var(--wc-surface-shadow-sm);
}

.schedule-desktop-calendar {
    flex: 1;
    min-height: 0;
    overflow: hidden;
}

@media (min-width: 960px) {
    .schedule-page .schedule-desktop-layout {
        /* 281px = appbar + trimmed header/toolbar/gaps; keeps the board plus
           its day footers inside an 800px viewport with a single scroll. */
        height: clamp(500px, calc(100dvh - 284px), 760px);
        min-height: 500px;
        max-height: 760px;
    }

    .schedule-page .schedule-desktop-calendar,
    .schedule-page .schedule-sidebar,
    .schedule-page .block-calendar {
        height: 100%;
    }
}

/* ===== WorkCita.Client/wwwroot/css/app.features.schedule.workspace.css ===== */
/*
 * WorkCita global stylesheet module: app.features.schedule.workspace.css
 * Ownership: unscheduled work cards, mobile pills, and month workspace/preview geometry.
 * Theme: universal --wc-* tokens only.
 * Load: after app.features.schedule.week.css; before app.features.schedule.block-calendar.css.
 */

/* =============================================================================
   Schedule workspace — unscheduled cards and mobile pills
   ============================================================================= */

.schedule-unscheduled-card-surface {
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1);
    border: 1px solid var(--wc-data-grid-border, var(--wc-border-soft));
    box-shadow: var(--wc-surface-shadow-xs);
    overflow: hidden;
}

.schedule-unscheduled-card-surface:hover {
    box-shadow: var(--wc-surface-shadow-xs);
    border-color: var(--wc-border-strong);
}

.schedule-unscheduled-card-surface--high {
    border-color: var(--wc-tone-error-soft-border);
    background: var(--wc-tone-error-soft-bg);
}

.schedule-unscheduled-card-surface--normal {
    border-color: var(--wc-data-grid-border, var(--wc-border-soft));
}

.schedule-unscheduled-card {
    display: flex;
    align-items: stretch;
    gap: 10px;
    padding: 10px 12px;
}

.schedule-unscheduled-card--detailed {
    gap: 0;
    padding: 0;
}

.schedule-unscheduled-card__signal-list {
    flex: 1;
    min-width: 0;
    gap: 0;
}

.schedule-unscheduled-card__signal {
    min-height: 0;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: transparent;
}

.schedule-unscheduled-card--detailed .schedule-unscheduled-card__signal {
    padding: 14px 14px 12px;
}

.schedule-unscheduled-card__signal:hover:not(:disabled) {
    background: transparent;
}

.schedule-unscheduled-card__signal:focus-visible {
    border-radius: var(--wc-card-radius, var(--border-radius-md));
}

.schedule-unscheduled-card__identity-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
}

.schedule-unscheduled-card__title {
    color: var(--wc-text-strong);
    line-height: 1.35;
    overflow-wrap: anywhere;
    word-break: break-word;
}

.schedule-unscheduled-card__meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
}

.schedule-unscheduled-card__meta-item,
.schedule-unscheduled-card__urgent {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: var(--wc-type-caption-size);
}

.schedule-unscheduled-card__meta-item {
    color: var(--wc-text-muted);
}

.schedule-unscheduled-card__support-line {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
    overflow: hidden;
    line-height: 1.35;
    overflow-wrap: anywhere;
    word-break: break-word;
}

.schedule-unscheduled-card__urgent {
    color: var(--wc-tone-error-soft-fg);
    font-weight: 600;
}

.schedule-unscheduled-card__priority-chip {
    background: var(--wc-surface-2);
}

.schedule-unscheduled-card__action {
    display: inline-flex;
    align-items: flex-start;
    flex-shrink: 0;
}

.schedule-unscheduled-card--detailed .schedule-unscheduled-card__action {
    align-items: flex-end;
    padding: 14px 14px 14px 0;
}

.schedule-unscheduled-card__button {
    min-width: 96px;
    text-transform: none !important;
}


.schedule-pill {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 3px;
    padding: 4px 10px;
    border-radius: var(--wc-radius-pill);
    border: 1px solid transparent;
    font-weight: 700;
    font-size: var(--wc-type-caption-size);
    line-height: 1;
    cursor: pointer;
    color: var(--wc-text-strong);
    min-height: 32px;
    min-width: 32px;
    white-space: nowrap;
}

.schedule-pill .mud-icon-root {
    font-size: var(--wc-type-icon-compact-size) !important;
}

.schedule-pill--unscheduled {
    background: var(--wc-tone-warning-soft-bg);
    color: var(--wc-tone-warning-soft-fg);
    border-color: var(--wc-tone-warning-soft-border);
}

.schedule-pill--ok {
    background: var(--wc-tone-success-soft-bg);
    color: var(--wc-tone-success-soft-fg);
    border-color: var(--wc-tone-success-soft-border);
}

.schedule-pill--team {
    background: var(--wc-tone-info-soft-bg);
    color: var(--wc-tone-info-soft-fg);
    border-color: var(--wc-tone-info-soft-border);
}

.schedule-dispatch-depth {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-end;
    gap: 8px;
    margin-top: 8px;
}

.schedule-desktop-layout--calendar-only .schedule-desktop-calendar {
    width: 100%;
}

/* Schedule touch targets are keyed to the interaction contract, not the layout
   breakpoint: a 44px control is what a touch-first device needs at any width.
   See app.shared-controls.css. */
@media (max-width: 959.98px), (pointer: coarse) {
    .schedule-dispatch-depth .mud-button-root {
        min-height: 44px;
    }

    .schedule-toolbar__today-btn,
    .schedule-toolbar__date-btn,
    .schedule-toolbar .mud-icon-button,
    .schedule-toolbar .mud-icon-button-root {
        min-width: 44px !important;
        min-height: 44px !important;
    }

    .schedule-pill {
        min-width: 44px;
        min-height: 44px;
        padding: 8px 12px;
        gap: 6px;
    }

    .schedule-pill .mud-icon-root {
        font-size: var(--wc-type-icon-medium-size) !important;
    }

    .block-calendar__job-actions .mud-icon-button,
    .block-calendar__job-actions .mud-icon-button-root,
    .block-calendar__job-action-button {
        min-width: 44px !important;
        min-height: 44px !important;
    }
}

.schedule-month-workspace {
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.schedule-assignment-saving-card {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: var(--wc-card-padding-block) var(--wc-card-padding-inline);
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1);
    box-shadow: var(--wc-surface-shadow-md);
}

.schedule-month-layout {
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.schedule-month-layout--side {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 360px;
    align-items: start;
    gap: 16px;
}

.schedule-month-layout__grid {
    min-width: 0;
}

.schedule-month-preview-shell {
    padding: 18px;
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1);
    border: 1px solid var(--wc-border-soft);
    box-shadow: var(--wc-surface-shadow-xs);
}

.schedule-month-preview-shell--inline {
    margin-top: var(--wc-content-section-gap);
}

.dispatch-month-container {
    padding: 0;
}

.dispatch-month-grid {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 1px;
    background: var(--wc-border-soft);
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    overflow: hidden;
    box-shadow: var(--wc-surface-shadow-xs);
}

.dispatch-month-header-cell {
    padding: 14px 6px;
    text-align: center;
    font-size: var(--wc-type-meta-size);
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--wc-text-soft);
    background: var(--wc-surface-2);
}

.dispatch-month-cell {
    appearance: none;
    border: none;
    text-align: left;
    min-height: 104px;
    padding: 10px;
    display: flex;
    flex-direction: column;
    /* Buttons are UA-centered flex containers; pin content to the top so
       empty and busy day numbers share one alignment. */
    justify-content: flex-start;
    align-items: stretch;
    gap: 8px;
    background: var(--wc-surface-1);
    color: var(--wc-text-strong);
}

.dispatch-month-cell:hover {
    background: var(--wc-surface-hover);
    transform: none;
    z-index: auto;
}

.dispatch-month-cell:focus-visible {
    outline: none;
    box-shadow: inset 0 0 0 2px var(--wc-accent-ink);
}

.dispatch-month-cell--today {
    background: rgba(var(--wc-accent-rgb), 0.10);
}

.dispatch-month-cell--today:hover {
    background: rgba(var(--wc-accent-rgb), 0.14);
}

.dispatch-month-cell--selected {
    /* Selection is carried by a crisp accent ring, not the fill, so a day that
       is both today and selected reads as two distinct cues (solid day-number
       circle + ring) instead of two near-identical tints merging. */
    background: rgba(var(--wc-accent-rgb), 0.12);
    box-shadow: inset 0 0 0 2px var(--wc-accent);
}

.dispatch-month-cell--other-month {
    opacity: 0.58;
    background: var(--wc-surface-2);
}

.dispatch-month-cell--weekend {
    background: rgba(var(--wc-surface-3-rgb), 0.55);
}

.dispatch-month-cell--weekend.dispatch-month-cell--selected {
    background: rgba(var(--wc-accent-rgb), 0.12);
}

.dispatch-month-cell__top {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 8px;
}

.dispatch-month-cell__summary {
    font-size: var(--wc-type-caption-size);
    font-weight: 600;
    color: var(--wc-text-muted);
}

.dispatch-month-cell__signals {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-top: auto;
}

.dispatch-month-cell__signal {
    display: inline-flex;
    align-items: center;
    padding: 2px 8px;
    border-radius: var(--wc-radius-pill);
    border: 1px solid transparent;
    font-size: var(--wc-type-meta-size);
    font-weight: 600;
    line-height: 1.2;
}

.dispatch-month-cell__marker {
    width: 8px;
    height: 8px;
    border-radius: var(--wc-radius-pill);
    display: inline-block;
    flex-shrink: 0;
}

.dispatch-month-cell__marker--attention {
    background: var(--wc-tone-warning-soft-fg);
}

.dispatch-month-cell__marker--priority {
    background: var(--wc-tone-error-soft-fg);
}

.dispatch-month-cell__sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

.dispatch-month-cell__signal--attention {
    background: var(--wc-tone-warning-soft-bg);
    color: var(--wc-tone-warning-soft-fg);
    border-color: var(--wc-tone-warning-soft-border);
}

.dispatch-month-cell__signal--priority {
    background: var(--wc-tone-error-soft-bg);
    color: var(--wc-tone-error-soft-fg);
    border-color: var(--wc-tone-error-soft-border);
}

/* On compact widths the per-day signals collapse to color dots; this key
   names them so the dots are decodable without tapping a day. Hidden from
   assistive tech because each cell already carries sr-only signal text. */
.dispatch-month-legend {
    display: flex;
    flex-wrap: wrap;
    gap: 6px 16px;
    margin-top: 10px;
    padding: 0 2px;
}

.dispatch-month-legend__item {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: var(--wc-type-meta-size);
    font-weight: 600;
    color: var(--wc-text-muted);
}

.schedule-month-preview {
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.schedule-month-preview__header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 16px;
    /* In the narrow side panel the actions drop below the date rather than
       squeezing it; paired with the title's nowrap this stops the date from
       breaking mid-phrase ("Tuesday, June" / "16"). */
    flex-wrap: wrap;
}

.schedule-month-preview__title {
    color: var(--wc-text-strong);
    white-space: nowrap;
}

.schedule-month-preview__actions {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    justify-content: flex-end;
}

.schedule-month-preview__actions--standalone {
    justify-content: flex-start;
}

.schedule-month-preview__section {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.schedule-month-preview__section-title {
    color: var(--wc-text-strong);
}

.schedule-month-preview__list {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.schedule-month-preview__item {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 12px;
    padding: 12px 14px;
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-2);
}

.schedule-month-preview__item--unassigned {
    border-color: var(--wc-tone-warning-soft-border);
    background: var(--wc-tone-warning-soft-bg);
}

.schedule-month-preview__item-main {
    min-width: 0;
}

.schedule-month-preview__item-title {
    color: var(--wc-text-strong);
}

.schedule-month-preview__empty {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 8px;
    padding: 18px;
    border: 1px dashed var(--wc-border-soft);
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-2);
}

@media (max-width: 959.98px) {
    .dispatch-month-cell {
        min-height: 90px;
    }
}

@media (max-width: 599.98px) {
    .schedule-month-workspace {
        gap: 12px;
    }

    .schedule-month-preview-drawer {
        max-height: min(40dvh, calc(100dvh - 360px));
    }

    .schedule-month-preview-sheet {
        padding-top: 12px;
    }

    .dispatch-month-header-cell {
        padding: 10px 2px;
        font-size: var(--wc-type-meta-size);
    }

    .dispatch-month-cell {
        min-height: 56px;
        padding: 5px;
        gap: 4px;
    }

    .dispatch-month-cell__signals {
        gap: 5px;
    }

    .dispatch-month-cell__signal {
        padding: 2px 6px;
        font-size: var(--wc-type-meta-size);
    }

    .dispatch-month-cell__marker {
        width: 6px;
        height: 6px;
    }

    .schedule-month-preview__header {
        flex-direction: column;
    }

    .schedule-month-preview__actions {
        width: 100%;
        justify-content: flex-start;
    }
}

/* ===== WorkCita.Client/wwwroot/css/app.features.schedule.block-calendar.css ===== */
/*
 * WorkCita global stylesheet module: app.features.schedule.block-calendar.css
 * Ownership: block calendar chrome, width-class layouts, dispatch rail, and responsive schedule refinements.
 * Theme: universal --wc-* tokens only.
 * Load: after app.features.schedule.workspace.css; before schedule dispatch polish.
 */

.block-calendar {
    background: var(--wc-surface-1);
    border: 0;
    border-radius: var(--wc-panel-radius, var(--wc-card-radius, var(--border-radius-md)));
    box-shadow: none;
}

.block-calendar__headers {
    background: var(--wc-command-header-bg, var(--wc-surface-2));
    border-bottom: 1px solid var(--wc-command-header-border, var(--wc-data-grid-border));
    border-radius: var(--wc-panel-radius, var(--wc-card-radius, var(--border-radius-md))) var(--wc-panel-radius, var(--wc-card-radius, var(--border-radius-md))) 0 0;
    overflow: hidden;
}

.block-calendar__day-header:first-child {
    border-top-left-radius: var(--wc-panel-radius, var(--wc-card-radius, var(--border-radius-md)));
}

.block-calendar__day-header:last-child {
    border-top-right-radius: var(--wc-panel-radius, var(--wc-card-radius, var(--border-radius-md)));
}

.block-calendar__day-header--today,
.block-calendar__column--today,
.block-calendar__column--weekend.block-calendar__column--today {
    background: rgba(var(--wc-accent-rgb), 0.08);
}

.block-calendar__day-header--weekend,
.block-calendar__column--weekend {
    background: rgba(var(--wc-surface-3-rgb), 0.45);
}

.block-calendar__day-header--today .block-calendar__day-name {
    color: var(--wc-command-header-fg, var(--wc-accent));
}

.block-calendar__day-header--today .block-calendar__day-number {
    color: var(--wc-on-accent, var(--mud-palette-primary-text));
}

.block-calendar__day-name {
    color: var(--wc-command-header-muted, var(--mud-palette-text-secondary));
    font-weight: 700;
    letter-spacing: 0;
}

.block-calendar__day-number {
    color: var(--wc-command-header-fg, var(--mud-palette-text-primary));
}

.block-calendar__headers .block-calendar__day-header--weekend {
    background: rgba(var(--wc-command-header-bg-rgb), 0.92);
}

.block-calendar__headers .block-calendar__day-header--today,
.block-calendar__headers .block-calendar__day-header--weekend.block-calendar__day-header--today {
    background: rgba(var(--wc-accent-rgb), 0.22);
}

.block-calendar__column {
    border-right-color: var(--wc-data-grid-border, var(--mud-palette-lines-default));
}

.block-calendar__job {
    background: var(--wc-surface-1);
    border-color: var(--wc-data-grid-border, var(--wc-border-soft));
    box-shadow: var(--wc-surface-shadow-xs);
}

.block-calendar__job:hover {
    border-color: var(--wc-border-strong);
    box-shadow: var(--wc-surface-shadow-sm);
}

.block-calendar__job-body {
    appearance: none;
    border: none;
    background: transparent;
    width: 100%;
    text-align: left;
    display: flex;
    flex-direction: column;
    gap: 4px;
    color: inherit;
}

.block-calendar__job-body:focus-visible {
    outline: none;
    box-shadow: inset 0 0 0 2px var(--wc-accent-ink);
    border-radius: var(--wc-radius-sm);
}

.block-calendar__job-time::before {
    background-color: var(--wc-text-soft);
    background-image: none;
    mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='black'%3E%3Cpath d='M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm.5-13H11v6l5.2 3.2.8-1.3-4.5-2.7V7z'/%3E%3C/svg%3E");
    mask-size: contain;
    mask-repeat: no-repeat;
    mask-position: center;
}

.block-calendar__day-footer {
    background: var(--wc-surface-2);
    border-top-color: var(--wc-data-grid-border, var(--wc-data-border));
}

.block-calendar__empty-day {
    min-height: 180px;
    opacity: 0.85;
}

.block-calendar__stacked-days {
    display: flex;
    flex-direction: column;
    gap: 12px;
    padding: 12px;
    overflow: visible;
    min-height: 0;
}

.block-calendar__stacked-day {
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1);
    overflow: visible;
}

.block-calendar__stacked-day--today {
    border-color: rgba(var(--wc-accent-rgb), 0.20);
    box-shadow: inset 0 0 0 1px rgba(var(--wc-accent-rgb), 0.12);
}

.block-calendar__stacked-day--weekend {
    background: var(--wc-surface-2);
}

.block-calendar__stacked-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 12px 14px;
    border-bottom: 1px solid var(--wc-border-soft);
    background: var(--wc-surface-2);
}

.block-calendar__stacked-day-name {
    display: block;
    font-size: var(--wc-type-body-emphasis-size);
    font-weight: 700;
    color: var(--wc-text-strong);
}

.block-calendar__stacked-day-date {
    display: block;
    font-size: var(--wc-type-caption-size);
    color: var(--wc-text-muted);
    margin-top: 2px;
}

.block-calendar__stacked-day-summary {
    display: block;
    font-size: var(--wc-type-meta-size);
    color: var(--wc-text-muted);
    margin-top: 4px;
}

.block-calendar__stacked-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
    padding: 12px;
}

.schedule-toolbar {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.schedule-toolbar__row--desktop {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    align-items: center;
    gap: 12px;
}

.schedule-toolbar__row--desktop .schedule-toolbar__side {
    flex: none;
}

.schedule-toolbar__row--desktop .schedule-toolbar__center {
    min-width: 0;
    justify-content: center;
}

.schedule-toolbar__date-nav {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 4px;
    width: 100%;
}

.schedule-toolbar__row--desktop .office-view-switcher {
    justify-self: end;
    width: 20rem;
}

/* The band is pinned to 20rem here, so it needs a real strategy for the case where
   the localized labels do not fit: scroll, not clip. */
.schedule-toolbar__row--desktop .office-view-switcher-band {
    flex-wrap: nowrap;
    overflow-x: auto;
}

/* Each option is wrapped in a MudTooltip, so the band's real flex child is the
   tooltip root (display:block), not the pill. The fill has to live here or the
   buttons stay content-width and leave dead space on the right of the fixed
   20rem band. No `min-width: 0`: the default min-content floor is what lets the
   options fill the band when they fit and hand the band a scrollbar when they
   do not, instead of shrinking under their own nowrap labels. */
.schedule-toolbar__row--desktop .office-view-switcher-band > .mud-tooltip-root {
    flex: 1 1 0;
}

.schedule-toolbar__row--desktop .office-view-switcher-pill {
    width: 100%;
    justify-content: center;
}

.schedule-page[data-schedule-width-class="DesktopNarrow"] .schedule-desktop-layout {
    gap: 8px;
    align-items: stretch;
    overflow: visible;
}

.schedule-page[data-schedule-width-class="DesktopCompact"] .schedule-desktop-layout,
.schedule-page[data-schedule-width-class="DesktopWide"] .schedule-desktop-layout {
    gap: 12px;
    align-items: stretch;
    overflow: visible;
}

.schedule-page[data-schedule-width-class="DesktopNarrow"] .schedule-desktop-calendar,
.schedule-page[data-schedule-width-class="DesktopCompact"] .schedule-desktop-calendar,
.schedule-page[data-schedule-width-class="DesktopWide"] .schedule-desktop-calendar {
    padding-right: 0;
    overflow: hidden;
}

.schedule-page[data-schedule-width-class="DesktopNarrow"] .schedule-calendar-fill,
.schedule-page[data-schedule-width-class="DesktopCompact"] .schedule-calendar-fill,
.schedule-page[data-schedule-width-class="DesktopWide"] .schedule-calendar-fill {
    overflow: visible;
}

.schedule-page[data-schedule-width-class="DesktopNarrow"] .schedule-sidebar--expanded.schedule-sidebar--narrow {
    width: 192px;
}

.schedule-page[data-schedule-width-class="DesktopCompact"] .schedule-sidebar--expanded.schedule-sidebar--compact-width {
    width: 232px;
}

.schedule-page[data-schedule-width-class="DesktopWide"] .schedule-sidebar--expanded.schedule-sidebar--wide {
    width: 248px;
}

.schedule-page[data-schedule-width-class="DesktopNarrow"] .schedule-sidebar,
.schedule-page[data-schedule-width-class="DesktopCompact"] .schedule-sidebar,
.schedule-page[data-schedule-width-class="DesktopWide"] .schedule-sidebar {
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-panel-radius, var(--border-radius-lg));
    min-height: 0;
    overflow: visible;
}

.schedule-page[data-schedule-width-class="DesktopNarrow"] .schedule-sidebar__toggle,
.schedule-page[data-schedule-width-class="DesktopCompact"] .schedule-sidebar__toggle,
.schedule-page[data-schedule-width-class="DesktopWide"] .schedule-sidebar__toggle {
    top: -12px;
    left: -12px;
    min-width: 44px;
    min-height: 44px;
    width: 44px;
    height: 44px;
    transform: none;
}

.schedule-page[data-schedule-width-class="DesktopNarrow"] .schedule-sidebar__toggle .mud-icon-root,
.schedule-page[data-schedule-width-class="DesktopCompact"] .schedule-sidebar__toggle .mud-icon-root,
.schedule-page[data-schedule-width-class="DesktopWide"] .schedule-sidebar__toggle .mud-icon-root {
    font-size: var(--wc-type-control-size);
}

/* The collapse toggle hangs over the sidebar's top-left corner at these
   widths; indent the first section header so the title clears it. */
.schedule-page[data-schedule-width-class="DesktopNarrow"] .sidebar-section--jobs .sidebar-section-header,
.schedule-page[data-schedule-width-class="DesktopCompact"] .sidebar-section--jobs .sidebar-section-header,
.schedule-page[data-schedule-width-class="DesktopWide"] .sidebar-section--jobs .sidebar-section-header,
.schedule-page[data-schedule-width-class="DesktopNarrow"] .sidebar-section--jobs .schedule-sidebar__section-caption,
.schedule-page[data-schedule-width-class="DesktopCompact"] .sidebar-section--jobs .schedule-sidebar__section-caption,
.schedule-page[data-schedule-width-class="DesktopWide"] .sidebar-section--jobs .schedule-sidebar__section-caption {
    padding-left: 28px;
}

.schedule-page[data-schedule-width-class="DesktopNarrow"] .sidebar-content,
.schedule-page[data-schedule-width-class="DesktopCompact"] .sidebar-content,
.schedule-page[data-schedule-width-class="DesktopWide"] .sidebar-content {
    display: flex;
    flex-direction: column;
    padding: 14px;
    gap: 16px;
    height: 100%;
    /* The shared board+rail layout has a 500px min-height, so on short viewports
       it runs past the fold. Bound the rail's content to the visible viewport so
       the queue scrolls internally and Team utilization stays pinned in view
       instead of spilling below the fold with no way to scroll the rail. */
    max-height: calc(100dvh - 292px);
    min-height: 0;
    overflow: hidden;
}

.schedule-page[data-schedule-width-class="DesktopNarrow"] .sidebar-collapsed-content,
.schedule-page[data-schedule-width-class="DesktopCompact"] .sidebar-collapsed-content,
.schedule-page[data-schedule-width-class="DesktopWide"] .sidebar-collapsed-content {
    padding-top: 16px;
}

.schedule-page[data-schedule-width-class="DesktopNarrow"] .sidebar-section,
.schedule-page[data-schedule-width-class="DesktopCompact"] .sidebar-section,
.schedule-page[data-schedule-width-class="DesktopWide"] .sidebar-section {
    min-height: 0;
    overflow: hidden;
}

/* Size the unassigned queue to its content (scrolling internally when long)
   instead of greedily filling the rail; a short queue otherwise opened a dead
   gap that pushed Team utilization below the fold. Team (flex 0 0 auto) then
   sits directly beneath the queue and stays visible. */
.schedule-page[data-schedule-width-class="DesktopNarrow"] .sidebar-section--jobs,
.schedule-page[data-schedule-width-class="DesktopCompact"] .sidebar-section--jobs,
.schedule-page[data-schedule-width-class="DesktopWide"] .sidebar-section--jobs {
    flex: 0 1 auto;
    min-height: 0;
}

.schedule-page[data-schedule-width-class="DesktopNarrow"] .sidebar-section--team,
.schedule-page[data-schedule-width-class="DesktopCompact"] .sidebar-section--team,
.schedule-page[data-schedule-width-class="DesktopWide"] .sidebar-section--team {
    flex: 0 0 auto;
    min-height: 0;
    /* Fit a typical small team (header + ~4 techs) before the list scrolls; the
       previous 112px clipped even 2 techs, hiding the second one. The rail is
       already viewport-bounded, so the queue absorbs any shrink. */
    max-height: 220px;
    overflow-y: auto;
    padding-top: 16px;
    border-top: 1px solid var(--wc-border-soft);
}

.schedule-page[data-schedule-width-class="DesktopNarrow"] .sidebar-section-header,
.schedule-page[data-schedule-width-class="DesktopCompact"] .sidebar-section-header,
.schedule-page[data-schedule-width-class="DesktopWide"] .sidebar-section-header {
    margin-bottom: 12px;
    color: var(--wc-text-strong);
    font-size: inherit;
    letter-spacing: normal;
    text-transform: none;
}

.sidebar-section-header--compact-row {
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center !important;
    gap: 10px;
}

.sidebar-section-heading-group {
    min-width: 0;
    flex-wrap: nowrap !important;
    gap: 6px !important;
}

.schedule-sidebar__section-title {
    color: var(--wc-text-strong);
    line-height: 1.2;
}

.sidebar-section-heading-group .schedule-sidebar__section-title {
    min-width: 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.sidebar-section-heading-group .sidebar-count-chip {
    flex-shrink: 0;
}

.schedule-page[data-schedule-width-class="DesktopNarrow"] .sidebar-job-list,
.schedule-page[data-schedule-width-class="DesktopCompact"] .sidebar-job-list,
.schedule-page[data-schedule-width-class="DesktopWide"] .sidebar-job-list,
.schedule-page[data-schedule-width-class="DesktopNarrow"] .sidebar-team-list,
.schedule-page[data-schedule-width-class="DesktopCompact"] .sidebar-team-list,
.schedule-page[data-schedule-width-class="DesktopWide"] .sidebar-team-list {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    padding-right: 4px;
}

.schedule-page[data-schedule-width-class="DesktopNarrow"] .sidebar-job-list,
.schedule-page[data-schedule-width-class="DesktopCompact"] .sidebar-job-list,
.schedule-page[data-schedule-width-class="DesktopWide"] .sidebar-job-list {
    padding-bottom: 8px;
}

.sidebar-priority-menu .mud-popover-open {
    border-radius: var(--wc-card-radius, var(--border-radius-md));
}

.sidebar-priority-trigger:not(.mud-menu),
.mud-menu.sidebar-priority-trigger > .mud-menu-icon-button-activator {
    min-width: auto !important;
    text-transform: none !important;
    border-color: var(--wc-border-soft) !important;
    color: var(--wc-text-muted) !important;
    background: var(--wc-surface-1) !important;
}

.sidebar-priority-trigger--icon:not(.mud-menu),
.mud-menu.sidebar-priority-trigger--icon > .mud-menu-icon-button-activator {
    width: 44px;
    min-width: 44px !important;
    height: 44px;
    min-height: 44px !important;
    border-radius: var(--wc-panel-radius);
    border: 1px solid var(--wc-border-soft) !important;
    background: var(--wc-surface-1) !important;
}

.sidebar-priority-trigger--active:not(.mud-menu),
.mud-menu.sidebar-priority-trigger--active > .mud-menu-icon-button-activator {
    color: var(--wc-accent-ink) !important;
    border-color: rgba(var(--wc-accent-rgb), 0.28) !important;
    background: rgba(var(--wc-accent-rgb), 0.08) !important;
}

.schedule-unscheduled-card--compact {
    flex-direction: column;
    gap: 8px;
}

.schedule-unscheduled-card--compact .schedule-unscheduled-card__body {
    gap: 5px;
}

.schedule-unscheduled-card--compact .schedule-unscheduled-card__action {
    align-self: flex-start;
}

.schedule-unscheduled-card__title {
    white-space: normal;
}

.schedule-unscheduled-card__support-line {
    line-height: 1.35;
}

.block-calendar--desktop-grid {
    overflow: hidden;
}

.block-calendar--desktop-grid .block-calendar__columns {
    flex: 1;
    min-height: 0;
    align-items: stretch;
}

.block-calendar--desktop-grid .block-calendar__column {
    min-height: 0;
    overflow: hidden;
}

.block-calendar--desktop-grid .block-calendar__column-scroll {
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    gap: 8px;
    padding: 8px;
    overscroll-behavior: contain;
}

.block-calendar--desktop-grid .block-calendar__day-footer {
    background: transparent;
}

.block-calendar--desktop-grid .block-calendar__empty-day {
    min-height: 120px;
    padding: 18px 8px;
}

.block-calendar--compact .block-calendar__job {
    min-height: 0;
    border-radius: var(--wc-card-radius, var(--border-radius-md));
}

.block-calendar--compact .block-calendar__job-body {
    padding: 12px 40px 12px 12px;
    gap: 6px;
}

.block-calendar--comfortable .block-calendar__job-body {
    padding: 14px 42px 14px 14px;
    gap: 8px;
}

.block-calendar--compact .block-calendar__job-header,
.block-calendar--comfortable .block-calendar__job-header,
.block-calendar--condensed .block-calendar__job-header {
    margin-bottom: 0;
    min-width: 0;
}

.block-calendar--compact .block-calendar__job-title,
.block-calendar--comfortable .block-calendar__job-title,
.block-calendar--condensed .block-calendar__job-title {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 3;
    white-space: normal;
    line-height: 1.3;
    overflow-wrap: anywhere;
    word-break: break-word;
}

.block-calendar--comfortable .block-calendar__job-title {
    font-size: var(--wc-type-body-size);
}

.block-calendar--condensed .block-calendar__job {
    border-radius: var(--wc-card-radius, var(--border-radius-md));
}

.block-calendar--condensed .block-calendar__job-body {
    padding: 10px 12px 8px;
    gap: 6px;
}

.block-calendar--condensed .block-calendar__job-title {
    font-size: var(--wc-type-body-size);
    line-height: 1.25;
}

.block-calendar--condensed .block-calendar__job-employee--summary,
.block-calendar--condensed .block-calendar__job-unassigned,
.block-calendar--condensed .block-calendar__job-time {
    font-size: var(--wc-type-caption-size);
}

.block-calendar--condensed .block-calendar__job-actions {
    padding: 0 12px 12px;
    justify-content: flex-start;
    opacity: 1;
    pointer-events: auto;
}

.block-calendar--condensed .block-calendar__job-action-button {
    min-width: auto;
    padding: 0 10px;
    text-transform: none;
    font-size: var(--wc-type-caption-size);
    font-weight: 600;
}

.block-calendar--condensed .block-calendar__empty-day {
    min-height: 96px;
    padding: 16px 10px;
    gap: 6px;
}

.block-calendar__job-assignment {
    display: flex;
    align-items: center;
    min-width: 0;
}

.block-calendar__job-crew {
    display: inline-flex;
    align-items: center;
    min-width: 0;
}

.block-calendar__job-crew .block-calendar__job-employee {
    min-width: 0;
    white-space: normal;
    overflow: visible;
    text-overflow: clip;
}

.block-calendar__job-employee--summary {
    font-size: var(--wc-type-meta-size);
    color: var(--wc-text-muted);
}

.block-calendar__job-unassigned {
    display: inline-flex;
    align-items: center;
    padding: 2px 8px;
    border-radius: var(--wc-radius-pill);
    border: 1px solid var(--wc-tone-warning-soft-border);
    background: var(--wc-tone-warning-soft-bg);
    color: var(--wc-tone-warning-soft-fg);
    font-style: normal;
}

.block-calendar__job-time {
    min-width: 0;
    color: var(--wc-text-muted);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.block-calendar__job-time::before {
    display: none;
    content: none;
}

.block-calendar--desktop-grid .block-calendar__job-actions {
    position: absolute;
    top: 8px;
    right: 8px;
    padding: 0;
    opacity: 0;
    pointer-events: none;
}

.block-calendar--desktop-grid .block-calendar__job:hover .block-calendar__job-actions,
.block-calendar--desktop-grid .block-calendar__job:focus-within .block-calendar__job-actions {
    opacity: 1;
    pointer-events: auto;
}

.block-calendar--desktop-grid .block-calendar__job-actions .mud-icon-button-root {
    width: 28px;
    height: 28px;
    border-radius: var(--wc-radius-pill);
    border: 1px solid var(--wc-border-soft);
    background: var(--wc-surface-2);
}

.schedule-page {
    background: transparent;
}

.schedule-desktop-layout {
    gap: 0;
}

.schedule-desktop-calendar {
    padding-right: 16px;
}

@media (max-width: 959.98px) {
    .block-calendar {
        border-radius: var(--wc-card-radius, var(--border-radius-md));
    }

    .block-calendar__empty-day {
        min-height: 140px;
    }

    .schedule-unscheduled-card--detailed .schedule-unscheduled-card__action {
        padding-right: 12px;
    }
}

/* ---------------------------------------------------------------------------
   Blocked time (WI-018 / WI-021)

   Capacity that is unavailable, rendered alongside the day's jobs. The lane is
   deliberately quieter than a job card: it is context, not work. The diagonal
   hatch is the primary signal and survives with colour removed, forced colours,
   or a monochrome display; the category tint only reinforces it. The reason,
   the window, and the affected people are always present as text, so no state
   here is carried by colour alone.
   --------------------------------------------------------------------------- */

.block-calendar__blocked {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 8px;
    padding: 8px 10px;
    margin-bottom: 8px;
    border: 1px dashed var(--wc-border-soft);
    border-left-width: 3px; /* impeccable-disable-line side-tab: semantic blocked-time capacity marker */
    border-left-style: solid;
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background-color: var(--wc-surface-2);
    background-image: repeating-linear-gradient(
        135deg,
        rgba(var(--wc-ink-rgb, 0, 0, 0), 0.05) 0,
        rgba(var(--wc-ink-rgb, 0, 0, 0), 0.05) 6px,
        transparent 6px,
        transparent 12px
    );
    cursor: default;
}

.block-calendar__blocked-copy {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
}

.block-calendar__blocked-reason {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    min-width: 0;
}

.block-calendar__blocked-icon {
    flex: 0 0 auto;
    color: var(--wc-text-secondary);
}

.block-calendar__blocked-reason-text {
    font-weight: 600;
    font-size: var(--wc-type-body-compact-size);
    line-height: 1.3;
    color: var(--wc-text-primary);
    overflow-wrap: anywhere;
}

.block-calendar__blocked-time,
.block-calendar__blocked-who {
    font-size: var(--wc-type-caption-size, 0.8125rem);
    line-height: 1.35;
    color: var(--wc-text-secondary);
    overflow-wrap: anywhere;
}

.block-calendar__blocked-action {
    flex: 0 0 auto;
}

/* Category tints reinforce the hatch; they never replace it. */
.block-calendar__blocked--general {
    border-left-color: var(--wc-border-strong, var(--wc-border-soft));
}

.block-calendar__blocked--time-off {
    border-left-color: var(--mud-palette-info);
}

.block-calendar__blocked--training {
    border-left-color: var(--mud-palette-tertiary, var(--mud-palette-secondary));
}

.block-calendar__blocked--maintenance {
    border-left-color: var(--mud-palette-warning);
}

.block-calendar__blocked--travel {
    border-left-color: var(--mud-palette-secondary);
}

/* Forced-colours mode drops both background-image and custom properties, so the
   dashed outline has to remain the carrier. */
@media (forced-colors: active) {
    .block-calendar__blocked {
        border: 2px dashed CanvasText;
        background-image: none;
    }
}

.block-calendar--condensed .block-calendar__blocked {
    padding: 6px 8px;
    margin-bottom: 6px;
}

.block-calendar--condensed .block-calendar__blocked-who {
    display: none;
}

/* Month preview and team sheet reuse the same quiet, hatched vocabulary. */
.schedule-month-preview__item--blocked {
    border-style: dashed;
    background-image: repeating-linear-gradient(
        135deg,
        rgba(var(--wc-ink-rgb, 0, 0, 0), 0.04) 0,
        rgba(var(--wc-ink-rgb, 0, 0, 0), 0.04) 6px,
        transparent 6px,
        transparent 12px
    );
}

.schedule-month-preview__item--blocked .schedule-month-preview__item-title {
    display: inline-flex;
    align-items: center;
    gap: 6px;
}

.employee-card__blocked {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    overflow-wrap: anywhere;
}

/* Dispatch attention on an unassigned generated visit (WI-036): a quiet reason line
   beside "Unassigned". Icon plus text, never colour alone. */
.block-calendar__job-attention {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: var(--wc-type-caption-size, 0.8125rem);
    line-height: 1.3;
    color: var(--wc-text-secondary);
    overflow-wrap: anywhere;
}

/* ===== WorkCita.Client/wwwroot/css/app.features.schedule.dispatch-polish.css ===== */
/*
 * WorkCita global stylesheet module: app.features.schedule.dispatch-polish.css
 * Ownership layer: schedule dispatch board polish and late QA corrections.
 * Ownership: dispatch board surface overrides, toolbar polish, board/rail visual integration, and final responsive corrections.
 * Theme: universal --wc-* tokens only; not a separate surface theme.
 * Parent: schedule CSS ownership split.
 * Load: immediately after app.features.schedule.block-calendar.css (index.html).
 */

/* =============================================================================
   Schedule QA pass — sidebar chrome, agenda rows, toolbar composition,
   vertical economy
   ============================================================================= */

/* --- Collapsed sidebar rail reads as a deliberate surface --- */

.schedule-sidebar--collapsed .sidebar-collapsed-content {
    width: 100%;
    padding: 20px 6px 12px;
}

.sidebar-collapsed-badge .mud-badge {
    /* Keep the count inside the 64px rail instead of clipping at the edge. */
    transform: translate(40%, -40%);
}

/* --- Scrolling job list: clear end spacing without covering the last action --- */

.schedule-page[data-schedule-width-class="DesktopNarrow"] .sidebar-job-list,
.schedule-page[data-schedule-width-class="DesktopCompact"] .sidebar-job-list,
.schedule-page[data-schedule-width-class="DesktopWide"] .sidebar-job-list {
    padding-bottom: 28px;
}

/* --- Single-day and stacked boards: agenda rows, not stretched cards --- */

.block-calendar--columns:not(.block-calendar--desktop-grid) .block-calendar__job,
.block-calendar--stacked .block-calendar__job {
    flex-direction: row;
    align-items: center;
}

.block-calendar--columns:not(.block-calendar--desktop-grid) .block-calendar__job-body,
.block-calendar--stacked .block-calendar__job-body {
    display: grid;
    /* 9rem holds the longest one-line window, "10:30 AM – 12:00 PM" (~120px of
       semibold 13px), clear of the lane's divider. */
    grid-template-columns: 9rem minmax(0, 1fr);
    grid-template-areas:
        "time title"
        "time assignment";
    column-gap: 14px;
    row-gap: 2px;
    align-content: center;
    text-align: left;
    padding: 10px 14px;
}

.block-calendar--columns:not(.block-calendar--desktop-grid) .block-calendar__job-time,
.block-calendar--stacked .block-calendar__job-time {
    grid-area: time;
    align-self: center;
    font-size: var(--wc-type-body-compact-size);
    font-weight: 600;
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    border-right: 1px solid var(--wc-border-soft, var(--mud-palette-lines-default));
    padding-right: 12px;
    height: 100%;
    display: flex;
    align-items: center;
}

.block-calendar--columns:not(.block-calendar--desktop-grid) .block-calendar__job-header,
.block-calendar--stacked .block-calendar__job-header {
    grid-area: title;
    margin-bottom: 0;
    justify-content: flex-start;
}

.block-calendar--columns:not(.block-calendar--desktop-grid) .block-calendar__job-title,
.block-calendar--stacked .block-calendar__job-title {
    font-size: var(--wc-type-body-size);
}

.block-calendar--columns:not(.block-calendar--desktop-grid) .block-calendar__job-assignment,
.block-calendar--stacked .block-calendar__job-assignment {
    grid-area: assignment;
}

.block-calendar--columns:not(.block-calendar--desktop-grid) .block-calendar__job-actions,
.block-calendar--stacked .block-calendar__job-actions {
    padding: 0 10px 0 0;
}

@media (max-width: 599.98px) {
    .block-calendar--columns:not(.block-calendar--desktop-grid) .block-calendar__job-body,
    .block-calendar--stacked .block-calendar__job-body {
        grid-template-columns: 6rem minmax(0, 1fr);
        column-gap: 10px;
        padding: 10px 12px;
    }

    .block-calendar--columns:not(.block-calendar--desktop-grid) .block-calendar__job-title,
    .block-calendar--stacked .block-calendar__job-title {
        font-size: var(--wc-type-body-compact-size);
    }

    /* A 6rem time lane cannot hold "9:00 AM – 10:30 AM" on one line; the window
       wraps at its spaces ("9:00 AM –" / "10:30 AM") beside the two-line body
       instead of hiding the end time behind an ellipsis. */
    .block-calendar--columns:not(.block-calendar--desktop-grid) .block-calendar__job-time,
    .block-calendar--stacked .block-calendar__job-time {
        overflow: visible;
        white-space: normal;
        text-overflow: clip;
    }
}

/* --- Toolbar rows: anchored columns instead of floating center cells --- */

.schedule-toolbar {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.schedule-toolbar__row:not(.schedule-toolbar__row--desktop) .schedule-toolbar__side--right .office-view-switcher--select-only {
    max-width: 16rem;
    margin-left: auto;
}

@media (max-width: 599.98px) {
    .schedule-toolbar__row:not(.schedule-toolbar__row--desktop) .schedule-toolbar__side--right {
        flex: 1 1 100%;
    }

    .schedule-toolbar__row:not(.schedule-toolbar__row--desktop) .schedule-toolbar__side--right .office-view-switcher--select-only {
        max-width: none;
        margin-left: 0;
    }

    /* The compact dispatch toggle shares the view selector's row instead of adding one. */
    .schedule-toolbar__row:not(.schedule-toolbar__row--desktop) .schedule-toolbar__right-tools {
        width: 100%;
    }

    .schedule-toolbar__row:not(.schedule-toolbar__row--desktop) .schedule-toolbar__right-tools > .office-view-switcher {
        flex: 1 1 auto;
        min-width: 0;
    }
}

.schedule-dispatch-toggle--compact.mud-button-root {
    flex: 0 0 auto;
    min-height: 44px;
    white-space: nowrap;
}

/* --- Month preview rows: actions never wrap mid-label --- */

.schedule-month-preview__item .mud-button {
    white-space: nowrap;
    flex-shrink: 0;
}

/* --- Desktop vertical economy: board + footers fit 1280x800 --- */

@media (min-width: 960px) {
    /* Schedule shares the standard page-top contract: standard 24px page-shell top
       padding, standard shell gap, and base header padding (padding-inline:0) so its
       title lines up with every other office page instead of sitting low + indented.
       Vertical economy for the board is reclaimed below the header (toolbar band). */
    .schedule-page.page-shell {
        --wc-page-max-width: 100%;
        padding-bottom: 8px;
    }

    .schedule-page .schedule-toolbar-band.mud-paper {
        padding: 8px 14px;
    }
}

/* --- Calendar polish: rail framing, priority companion, flexible marker --- */

/* Rail caption: frame the Unassigned rail as the on-board action queue, so a
   dated-but-uncrewed job reads as "on the schedule, awaiting a tech" rather
   than a duplicate of the board card. */
.schedule-sidebar__section-caption {
    display: block;
    margin: -2px 0 8px;
    line-height: 1.35;
}

/* Priority companion: high/urgent jobs carry an icon plus an accessible name,
   so priority is never communicated by border colour alone. */
.block-calendar__job-header {
    gap: 6px;
}

.block-calendar__job-title {
    min-width: 0;
}

.block-calendar__job-priority {
    flex-shrink: 0;
    margin-left: auto;
    align-self: flex-start;
}

/* Flexible marker: untimed work reads as an explicit "no set time" marker and
   drops the contradictory clock glyph instead of masquerading as a faint time. */
.block-calendar__job-time--flexible::before {
    display: none;
    content: none;
}

.block-calendar__job-flextime {
    font-weight: 600;
    color: var(--wc-text-muted);
}

/* =============================================================================
   Schedule dispatch action-surface facelift
   ---------------------------------------------------------------------------
   Keeps the specialized dispatch canvas, but makes the toolbar, board, and
   unassigned rail read as one operational surface rather than nested cards.
   ============================================================================= */

.schedule-page .office-command-center-shell-toolbar {
    position: relative;
    z-index: 1;
}

.schedule-page .schedule-toolbar-band.mud-paper {
    background: var(--wc-surface-2);
    border-color: var(--wc-data-grid-border, var(--wc-border-soft));
    box-shadow: none;
}

/* The dispatch toolbar no longer overrides the shared desktop track sizing. Its
   hard floors (9rem + 18rem + 18rem + two 12px gaps = 744px) outran the office
   content lane between 960 and 1095px - 673px at 1024, an iPad in landscape -
   and the surplus became a page-level horizontal scrollbar rather than a
   compressed toolbar. app.features.schedule.block-calendar.css owns
   `auto minmax(0, 1fr) auto` for this row: the sides take their content
   (~72px Today button, ~195px view switcher) and the centre absorbs the rest,
   so the row's real minimum is ~291px and the date-nav pill still centres in
   its own column at every width. */

/* Every toolbar control is 44px tall: Today, this pill and the view switcher. The
   pill's 44px buttons fill it edge to edge, so its stroke is an inset outline that
   adds no height and stays visible over a hovered button. */
.schedule-page .schedule-toolbar__date-nav {
    min-height: 44px;
    padding: 0;
    outline: 1px solid var(--wc-data-grid-border, var(--wc-border-soft));
    outline-offset: -1px;
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1);
}

.schedule-page .schedule-toolbar__date-nav .mud-icon-button-root,
.schedule-page .schedule-toolbar__today-btn,
.schedule-page .schedule-toolbar__date-btn {
    border-radius: var(--wc-control-radius, var(--wc-card-radius, var(--border-radius-md))) !important;
}

.schedule-page .schedule-toolbar__date-nav .mud-icon-button-root:hover,
.schedule-page .schedule-toolbar__date-btn:hover,
.schedule-page .schedule-toolbar__today-btn:hover:not(:disabled) {
    background: var(--wc-surface-hover) !important;
}

.schedule-page .schedule-toolbar__today-btn--muted {
    opacity: 1;
    color: var(--wc-text-soft) !important;
    background: var(--wc-surface-1) !important;
    border-color: var(--wc-data-grid-border, var(--wc-border-soft)) !important;
}

.schedule-page .schedule-toolbar__date-text {
    color: var(--wc-text-strong);
    font-weight: 700;
}

.schedule-page .schedule-toolbar__row--desktop .office-view-switcher-band {
    min-height: 44px;
    padding: 3px;
    border: 1px solid var(--wc-data-grid-border, var(--wc-border-soft));
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    box-shadow: none;
}

.schedule-page .schedule-toolbar__row--desktop .office-view-switcher-pill {
    min-height: 36px;
    border-radius: calc(var(--wc-card-radius, var(--border-radius-md)) - 2px);
}

.schedule-page .schedule-toolbar__row:not(.schedule-toolbar__row--desktop) .office-view-switcher--select-only {
    background: var(--wc-surface-1);
}

.schedule-page .schedule-pill {
    transition:
        background-color var(--wc-motion-feedback) var(--wc-ease-out-quart),
        border-color var(--wc-motion-feedback) var(--wc-ease-out-quart),
        color var(--wc-motion-feedback) var(--wc-ease-out-quart),
        box-shadow var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

.schedule-page button.schedule-pill:hover {
    border-color: currentColor;
    box-shadow: var(--wc-surface-shadow-xs);
}

.schedule-page button.schedule-pill:focus-visible {
    outline: none;
    box-shadow: var(--wc-focus-ring);
}

.schedule-page button.schedule-pill:active {
    background: var(--wc-surface-hover);
}

@media (min-width: 960px) {
    .schedule-page .schedule-desktop-layout {
        background: var(--wc-surface-1);
        border-color: var(--wc-data-grid-border, var(--wc-border-soft));
        box-shadow: none;
    }

    .schedule-page[data-schedule-width-class="DesktopNarrow"] .schedule-desktop-layout,
    .schedule-page[data-schedule-width-class="DesktopCompact"] .schedule-desktop-layout,
    .schedule-page[data-schedule-width-class="DesktopWide"] .schedule-desktop-layout {
        gap: 0;
    }

    .schedule-page[data-schedule-width-class="DesktopNarrow"] .schedule-sidebar,
    .schedule-page[data-schedule-width-class="DesktopCompact"] .schedule-sidebar,
    .schedule-page[data-schedule-width-class="DesktopWide"] .schedule-sidebar {
        border: 0;
        border-left: 1px solid var(--wc-data-grid-border, var(--wc-border-soft));
        border-radius: 0 var(--wc-panel-radius, var(--wc-card-radius, var(--border-radius-md))) var(--wc-panel-radius, var(--wc-card-radius, var(--border-radius-md))) 0;
        background: var(--wc-surface-2);
        box-shadow: none;
        overflow: hidden;
    }

    .schedule-page[data-schedule-width-class="DesktopNarrow"] .block-calendar,
    .schedule-page[data-schedule-width-class="DesktopCompact"] .block-calendar,
    .schedule-page[data-schedule-width-class="DesktopWide"] .block-calendar {
        border-radius: var(--wc-panel-radius, var(--wc-card-radius, var(--border-radius-md))) 0 0 var(--wc-panel-radius, var(--wc-card-radius, var(--border-radius-md)));
    }

    .schedule-page[data-schedule-width-class="DesktopNarrow"] .block-calendar__headers,
    .schedule-page[data-schedule-width-class="DesktopCompact"] .block-calendar__headers,
    .schedule-page[data-schedule-width-class="DesktopWide"] .block-calendar__headers {
        border-radius: var(--wc-panel-radius, var(--wc-card-radius, var(--border-radius-md))) 0 0 0;
    }

    .schedule-page[data-schedule-width-class="DesktopNarrow"] .sidebar-content,
    .schedule-page[data-schedule-width-class="DesktopCompact"] .sidebar-content,
    .schedule-page[data-schedule-width-class="DesktopWide"] .sidebar-content {
        padding: 16px;
        background: transparent;
    }

    .schedule-page[data-schedule-width-class="DesktopNarrow"] .schedule-sidebar__toggle,
    .schedule-page[data-schedule-width-class="DesktopCompact"] .schedule-sidebar__toggle,
    .schedule-page[data-schedule-width-class="DesktopWide"] .schedule-sidebar__toggle {
        background: var(--wc-surface-1) !important;
        border-color: var(--wc-data-grid-border, var(--wc-border-soft)) !important;
        color: var(--wc-text-muted) !important;
        box-shadow: var(--wc-surface-shadow-xs);
    }

    .schedule-page[data-schedule-width-class="DesktopNarrow"] .schedule-sidebar__toggle:hover,
    .schedule-page[data-schedule-width-class="DesktopCompact"] .schedule-sidebar__toggle:hover,
    .schedule-page[data-schedule-width-class="DesktopWide"] .schedule-sidebar__toggle:hover {
        background: var(--wc-accent) !important;
        border-color: var(--wc-accent) !important;
        color: var(--wc-on-accent, var(--mud-palette-primary-text)) !important;
    }
}

.schedule-page .block-calendar__headers {
    background: var(--wc-surface-2);
}

.schedule-page .block-calendar__day-header {
    min-height: 48px;
    justify-content: center;
}

.schedule-page .block-calendar__day-header--today .block-calendar__day-number {
    box-shadow: inset 0 0 0 1px rgba(var(--wc-accent-rgb), 0.16);
}

.schedule-page .block-calendar__column-scroll {
    background:
        linear-gradient(var(--wc-surface-1), var(--wc-surface-1)) padding-box,
        repeating-linear-gradient(
            to bottom,
            transparent 0,
            transparent 55px,
            rgba(var(--wc-shadow-rgb), 0.045) 56px
        ) border-box;
}

.schedule-page .block-calendar__job {
    box-shadow: none;
    transition:
        background-color var(--wc-motion-feedback) var(--wc-ease-out-quart),
        border-color var(--wc-motion-feedback) var(--wc-ease-out-quart),
        box-shadow var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

.schedule-page .block-calendar__job:hover,
.schedule-page .block-calendar__job:focus-within {
    border-color: rgba(var(--wc-accent-rgb), 0.32);
    background: var(--wc-surface-hover);
    box-shadow: var(--wc-surface-shadow-xs);
}

.schedule-page .block-calendar__job--scheduled {
    background: var(--wc-surface-1);
    border-color: var(--wc-tone-primary-soft-border);
}

.schedule-page .block-calendar__job--inprogress {
    background: var(--wc-surface-1);
    border-color: var(--wc-tone-info-soft-border);
}

.schedule-page .block-calendar__job--completed {
    background: var(--wc-surface-2);
    border-color: var(--wc-tone-success-soft-border);
    opacity: 0.88;
}

.schedule-page .block-calendar__job--cancelled {
    background: var(--wc-surface-2);
    border-color: var(--wc-tone-error-soft-border);
}

.schedule-page .block-calendar__job--high {
    background: var(--wc-tone-error-soft-bg);
    border-color: var(--wc-tone-error-soft-border) !important;
}

.schedule-page .block-calendar__job--low {
    background: var(--wc-surface-2);
    border-color: var(--wc-data-grid-border, var(--wc-border-soft)) !important;
}

.schedule-page .block-calendar__job--conflict {
    background: var(--wc-tone-error-soft-bg);
    border-color: var(--wc-tone-error-soft-fg) !important;
    box-shadow: inset 0 0 0 1px var(--wc-tone-error-soft-fg);
}

.schedule-page .block-calendar__job-actions .mud-icon-button-root,
.schedule-page .block-calendar__job-action-button {
    transition:
        background-color var(--wc-motion-feedback) var(--wc-ease-out-quart),
        border-color var(--wc-motion-feedback) var(--wc-ease-out-quart),
        color var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

.schedule-page .block-calendar__job-actions .mud-icon-button-root:hover,
.schedule-page .block-calendar__job-action-button:hover {
    background: var(--wc-accent) !important;
    border-color: var(--wc-accent) !important;
    color: var(--wc-on-accent, var(--mud-palette-primary-text)) !important;
}

.schedule-page .block-calendar__empty-day {
    background: var(--wc-surface-2);
    border: 1px dashed var(--wc-data-grid-border, var(--wc-border-soft));
    border-radius: var(--wc-card-radius, var(--border-radius-md));
}

.schedule-page .sidebar-section-header {
    margin-bottom: 8px;
}

.schedule-page .schedule-sidebar__section-title {
    font-weight: 700;
}

.schedule-page .schedule-sidebar__section-caption {
    color: var(--wc-text-muted);
}

.schedule-page .sidebar-count-chip {
    min-width: 28px;
    border: 1px solid var(--wc-tone-warning-soft-border);
}

.schedule-page .sidebar-priority-trigger--icon:not(.mud-menu),
.schedule-page .mud-menu.sidebar-priority-trigger--icon > .mud-menu-icon-button-activator {
    background: var(--wc-surface-1) !important;
}

.schedule-page .sidebar-priority-trigger--icon:not(.mud-menu):hover,
.schedule-page .sidebar-priority-trigger--active:not(.mud-menu),
.schedule-page .mud-menu.sidebar-priority-trigger--icon > .mud-menu-icon-button-activator:hover,
.schedule-page .mud-menu.sidebar-priority-trigger--active > .mud-menu-icon-button-activator {
    color: var(--wc-accent-ink) !important;
    border-color: rgba(var(--wc-accent-rgb), 0.28) !important;
    background: rgba(var(--wc-accent-rgb), 0.08) !important;
}

.schedule-page .schedule-unscheduled-card-surface {
    background: transparent;
    border: 0;
    box-shadow: none;
}

.schedule-page .schedule-unscheduled-card-surface:hover {
    border-color: transparent;
    box-shadow: none;
}

.schedule-page .schedule-unscheduled-card {
    gap: 8px;
    padding: 0;
}

.schedule-page .schedule-unscheduled-card__signal-list .wc-action-signal-list__item {
    min-width: 0;
}

.schedule-page .schedule-unscheduled-card__signal.wc-action-signal-row {
    min-height: 64px;
    padding: 10px 12px;
    border-color: var(--wc-data-grid-border, var(--wc-border-soft));
    box-shadow: none;
}

.schedule-page .schedule-unscheduled-card__signal.wc-action-signal-row:hover:not(:disabled),
.schedule-page .schedule-unscheduled-card__signal.wc-action-signal-row:focus-visible {
    border-color: var(--wc-action-signal-soft-border);
    background: var(--wc-surface-hover);
}

.schedule-page .schedule-unscheduled-card__signal .wc-action-signal-row__lead {
    min-width: 32px;
}

.schedule-page .schedule-unscheduled-card__signal .wc-action-signal-row__lead-icon {
    width: 32px;
    height: 32px;
    min-width: 32px;
}

.schedule-page .schedule-unscheduled-card__signal .wc-action-signal-row__action-label {
    color: var(--wc-text-muted);
}

.schedule-page .schedule-unscheduled-card__action {
    align-items: stretch;
}

.schedule-page .schedule-unscheduled-card__button.mud-button-root {
    min-width: 5.5rem;
    border-color: rgba(var(--wc-accent-rgb), 0.34) !important;
    background: var(--wc-surface-1) !important;
    font-weight: 700 !important;
}

.schedule-page .schedule-unscheduled-card__button.mud-button-root:hover,
.schedule-page .schedule-unscheduled-card__button.mud-button-root:focus-visible {
    background: var(--wc-accent) !important;
    border-color: var(--wc-accent) !important;
    color: var(--wc-on-accent, var(--mud-palette-primary-text)) !important;
}

.schedule-page .sidebar-empty-state,
.schedule-page .schedule-mobile-empty-state {
    background: var(--wc-surface-2);
    border: 1px dashed var(--wc-data-grid-border, var(--wc-border-soft));
    border-radius: var(--wc-card-radius, var(--border-radius-md));
}

.schedule-page .sidebar-employee-row {
    border-radius: var(--wc-card-radius, var(--border-radius-md));
}

.schedule-page .sidebar-employee-row:hover {
    background: var(--wc-surface-hover);
}

.schedule-page .sidebar-utilization-bar .mud-progress-linear-bar {
    transition: transform var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

.schedule-page .dispatch-month-grid {
    box-shadow: none;
    border: 1px solid var(--wc-data-grid-border, var(--wc-border-soft));
}

.schedule-page .dispatch-month-cell {
    transition:
        background-color var(--wc-motion-feedback) var(--wc-ease-out-quart),
        box-shadow var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

.schedule-page .dispatch-month-cell--busy {
    background: var(--wc-surface-1);
}

.schedule-page .dispatch-month-cell--busy:not(.dispatch-month-cell--selected) {
    box-shadow: inset 0 -3px 0 rgba(var(--wc-accent-rgb), 0.18);
}

.schedule-page .dispatch-month-cell:hover,
.schedule-page .dispatch-month-cell:focus-visible {
    background: var(--wc-surface-hover);
}

.schedule-page .schedule-month-preview-shell,
.schedule-page .schedule-month-preview__item,
.schedule-page .schedule-month-preview__empty {
    box-shadow: none;
}

.schedule-page .schedule-month-preview__item {
    background: var(--wc-surface-1);
}

.schedule-page .schedule-month-preview__item--unassigned {
    background: var(--wc-tone-warning-soft-bg);
}

@media (max-width: 959.98px) {
    .schedule-page .schedule-toolbar-band.mud-paper {
        background: var(--wc-surface-1);
    }

    .schedule-page .schedule-toolbar__date-nav {
        min-height: 44px;
    }

    .schedule-page .schedule-unscheduled-card__signal.wc-action-signal-row {
        min-height: 70px;
        padding: 12px 14px;
    }

    .schedule-page .schedule-unscheduled-card--detailed {
        gap: 10px;
    }

    .schedule-page .schedule-unscheduled-card--detailed .schedule-unscheduled-card__action {
        padding: 0 14px 14px;
    }

    .schedule-page .schedule-unscheduled-card--detailed .schedule-unscheduled-card__button.mud-button-root {
        width: 100%;
    }
}

/* ===== WorkCita.Client/wwwroot/css/app.features.field-work.css ===== */
/*
 * WorkCita global stylesheet module: app.features.field-work.css
 * Ownership layer: feature geometry (field work and checklist workflows).
 * Ownership: field work route strip, stop cards, checklist panels, photo upload,
 *   checklist template editor, and field checklist filters.
 * Theme: universal --wc-* tokens only; not a separate surface theme.
 * Parent: schedule/field-work CSS ownership split.
 * Load: after app.features.schedule.dispatch-polish.css; before app.features.dashboard.css (index.html).
 */

.field-work-toolbar__row {
    flex-wrap: wrap;
}

.field-work-toolbar__date {
    min-width: 14rem;
}

.field-work-toolbar__employee {
    min-width: 16rem;
    flex: 1 1 18rem;
}

.field-work-route-strip {
    flex-wrap: wrap;
}

.field-work-stop-list {
    display: grid;
    gap: var(--wc-space-4);
}

.field-work-stop-card {
    position: relative;
    overflow: hidden;
}

.field-work-stop-card__header {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    gap: var(--wc-space-3);
    align-items: center;
}

.field-work-stop-card__order {
    display: grid;
    place-items: center;
    width: 2rem;
    height: 2rem;
    border-radius: var(--wc-radius-pill);
    color: var(--wc-tone-primary-soft-fg, var(--mud-palette-primary));
    background: var(--wc-command-field-bg, var(--wc-surface-2));
    font-weight: 700;
}

.field-work-stop-card__identity {
    min-width: 0;
}

.field-work-stop-card__title {
    overflow-wrap: anywhere;
}

.field-work-stop-card__meta,
.field-work-stop-card__actions {
    display: flex;
    flex-wrap: wrap;
    gap: var(--wc-space-2) var(--wc-space-3);
    align-items: center;
}

.field-work-stop-card__meta span {
    display: inline-flex;
    align-items: center;
    gap: var(--wc-space-1);
    min-width: 0;
    color: var(--wc-text-muted);
}

.field-work-stop-card__work {
    display: grid;
    gap: var(--wc-space-3);
}

.field-work-stop-card__photo-row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--wc-space-2);
}

.field-work-expansion .mud-expand-panel {
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-control-radius);
}

.field-work-checklist-items {
    display: grid;
    gap: var(--wc-space-3);
}

.field-work-checklist-item {
    display: grid;
    gap: var(--wc-space-2);
    padding: var(--wc-space-3);
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-control-radius);
}

.field-work-checklist-photo-upload {
    position: relative;
    display: inline-flex;
    align-items: center;
    gap: .375rem;
    min-height: 2.75rem;
    padding: .35rem .7rem;
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-control-radius);
    color: var(--wc-accent-ink);
    background: var(--wc-surface-1);
    font-weight: 600;
    cursor: pointer;
}

.field-work-checklist-photo-upload:focus-within {
    box-shadow: var(--wc-focus-ring);
}

.field-work-checklist-photo-upload.is-disabled {
    opacity: .7;
    cursor: progress;
}

.field-work-checklist-photo-upload__input {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    opacity: 0;
    cursor: pointer;
}

.field-work-checklist-photo-upload.is-disabled .field-work-checklist-photo-upload__input {
    cursor: progress;
}

.field-work-checklist-photo-upload__status {
    color: var(--wc-text-muted);
    font-size: var(--wc-type-caption-size);
    font-weight: 600;
}

.field-work-checklist-photo-upload__progress {
    width: min(100%, 16rem);
}

.field-work-checklist-item__header,
.field-work-stop-card__complete {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--wc-space-3);
    flex-wrap: wrap;
}

.field-work-template-editor__items-header {
    display: flex;
    justify-content: space-between;
    gap: var(--wc-space-3);
    align-items: center;
}

.field-work-template-item-editor {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--wc-space-3);
    padding: var(--wc-space-3);
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-control-radius);
}

.field-work-template-item-editor__label-group {
    display: flex;
    align-items: center;
    gap: var(--wc-space-2);
    flex: 1 1 16rem;
    min-width: 12rem;
}

.field-work-template-item-editor__type-icon {
    flex: 0 0 auto;
    color: var(--wc-text-muted);
}

.field-work-template-item-editor__label {
    flex: 1 1 auto;
}

.field-work-template-item-editor__type,
.field-work-template-item-editor__slot {
    flex: 0 1 11rem;
}

.field-work-template-item-editor__required {
    flex: 0 0 auto;
}

.field-work-template-item-editor__slot-helper {
    flex: 1 1 100%;
    margin-top: -.25rem;
}

.field-work-template-item-editor__actions {
    display: flex;
    align-items: center;
    gap: var(--wc-space-1);
    margin-left: auto;
}

.field-work-checklists-type-strip {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--wc-space-1);
    margin-top: .25rem;
}

.field-work-checklists-type-strip__icon {
    color: var(--wc-text-muted);
    font-size: var(--wc-type-body-emphasis-size);
}

.field-work-checklists-filter {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--wc-space-2);
}

.field-work-job-checklist__select {
    min-width: 14rem;
}

/* The attach button pairs with the dense select beside it: one height on one line,
   not a short button pinned to the select's top edge by the job cards' action row. */
.field-work-job-checklist .office-section-card-actions {
    align-items: center;
}

.field-work-job-checklist .office-section-card-actions > .mud-button-root {
    min-height: 40px;
}

.field-work-job-checklist__items {
    display: grid;
    gap: var(--wc-space-2);
}

.field-work-job-checklist__item {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: var(--wc-space-2);
    align-items: start;
}

@media (max-width: 900px) {
    .field-work-template-item-editor__label-group,
    .field-work-template-item-editor__type,
    .field-work-template-item-editor__slot {
        flex: 1 1 100%;
    }

    .field-work-template-item-editor__actions {
        margin-left: 0;
    }
}

@media (max-width: 599.98px) {
    .field-work-toolbar__date,
    .field-work-toolbar__employee {
        min-width: 100%;
    }

    .field-work-stop-card__header {
        grid-template-columns: 1fr;
    }

    .field-work-stop-card__order {
        justify-self: start;
    }
}

/* ---------------------------------------------------------------------------
   Field action strip (WI-011)

   The field persona has no mobile FAB, so this strip is the whole action
   surface for an assigned stop. On a phone every action stays visible: the
   lifecycle action (Start, or Complete once work has started) spans the row and
   the rest sit in a compact grid of labelled icon buttons, two short rows rather
   than a sideways scroll where actions past the edge look missing. Targets keep
   the shared 44px touch minimum.
   --------------------------------------------------------------------------- */
.job-field-action-strip {
    display: grid;
    gap: var(--wc-space-2);
    margin-bottom: var(--wc-space-3);
}

.job-field-action-strip__actions {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    gap: var(--wc-space-2);
    overflow-x: auto;
    scrollbar-width: thin;
    /* Bleed the scroll lane to the card edge so a partially visible action reads
       as "more this way" instead of a clipped button. */
    padding-bottom: var(--wc-space-1);
    -webkit-overflow-scrolling: touch;
}

.job-field-action-strip__action {
    flex: 0 0 auto;
    min-height: 44px;
}

.job-field-action-strip__action--primary {
    /* The single dominant action stays first and never shrinks out of reach. */
    order: -1;
}

.job-field-action-strip__reasons {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    gap: var(--wc-space-1);
}

@media (min-width: 960px) {
    .job-field-action-strip__actions {
        flex-wrap: wrap;
        overflow-x: visible;
    }
}

@media (max-width: 599.98px) {
    .job-field-action-strip__actions {
        display: grid;
        grid-template-columns: repeat(auto-fit, minmax(4.75rem, 1fr));
        align-items: stretch;
        overflow-x: visible;
        padding-bottom: 0;
    }

    .job-field-action-strip__action--photo {
        display: flex;
        align-self: stretch;
    }

    .job-field-action-strip__action--photo > *,
    .job-field-action-strip__action--photo .mud-button-root {
        flex: 1 1 auto;
        height: 100%;
    }

    .job-field-action-strip__action--primary,
    .job-detail-field-complete-action:first-child {
        grid-column: 1 / -1;
    }

    .job-field-action-strip__action,
    .job-field-action-strip__action--photo .mud-button-root {
        width: 100%;
        min-width: 0;
    }

    .job-field-action-strip__action:not(.job-field-action-strip__action--primary):not(.job-detail-field-complete-action:first-child) .mud-button-label,
    .job-field-action-strip__action--photo .mud-button-label {
        flex-direction: column;
        gap: 2px;
        font-size: var(--wc-type-caption-size);
        line-height: 1.2;
        white-space: normal;
        text-align: center;
    }

    .job-field-action-strip__action:not(.job-field-action-strip__action--primary):not(.job-detail-field-complete-action:first-child) .mud-button-icon-start,
    .job-field-action-strip__action--photo .mud-button-icon-start {
        margin: 0;
    }

    .job-field-action-strip__action--photo .mud-button-icon-end {
        display: none;
    }
}

/* Labelled read-only office context above the field note composer (WI-016). */
.job-detail-field-note-context {
    display: grid;
    gap: var(--wc-space-1);
}

.job-detail-field-note-context__body {
    overflow-wrap: anywhere;
    white-space: pre-line;
}

/* One explicit checklist commit with a visible state (WI-013). */
.field-work-checklist-batch {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--wc-space-2);
    margin-top: var(--wc-space-3);
    padding-top: var(--wc-space-3);
    border-top: 1px solid var(--wc-border-subtle);
}

.field-work-checklist-batch__save {
    min-height: 44px;
}

/* Finished stops stay reachable but demoted (WI-012). */
.field-work-completed {
    margin-top: var(--wc-space-4);
}

.field-work-completed-row {
    gap: var(--wc-space-2);
}

/* An unavailable action states its reason inline (WI-058). */
.field-work-stop-card__unavailable {
    display: block;
    margin-top: var(--wc-space-1);
}

/* ===== WorkCita.Client/wwwroot/css/app.features.dashboard.css ===== */
/*
 * WorkCita global stylesheet module: app.features.dashboard.css
 * Ownership layer: feature geometry (office dashboard workflow layout).
 * Ownership: office dashboard, onboarding checklist, action queue, upcoming work,
 *   collection health, dashboard summary cards, and mini-calendar geometry.
 * Theme: universal --wc-* tokens only; not a separate surface theme.
 * Parent: GitHub #404 mechanical CSS ownership split (no visual redesign).
 * Load: after app.features.field-work.css; before app.features.reports.css (index.html).
 */
/* Onboarding Checklist */
.onboarding-checklist {
    --wc-card-padding-block: 16px;
    --wc-card-padding-inline: 18px;
}

.onboarding-checklist--spaced {
    margin-bottom: 0;
}

.onboarding-checklist--compact {
    --wc-card-padding-block: 10px;
    --wc-card-padding-inline: 12px;
    /* The compact card sits in full-width lanes and in the narrow dashboard context
       column, so its layout follows the card's own width rather than the viewport. */
    container: onboarding-compact / inline-size;
}

.onboarding-checklist-dismiss {
    display: inline-flex;
}

.onboarding-checklist .mud-button-root {
    flex-shrink: 0;
}

.onboarding-checklist .mud-button-label {
    min-width: max-content;
    white-space: nowrap;
}

.onboarding-progress-count {
    white-space: nowrap;
}

.onboarding-summary-line {
    display: block;
}

.onboarding-detail-divider {
    margin-block: 4px;
}

.onboarding-detail-heading,
.onboarding-step-list--core {
    margin-bottom: 12px;
}

.onboarding-payment-hint {
    margin-top: 12px;
}

.onboarding-skip-payments-action {
    margin-top: 8px;
}

.onboarding-restore-spinner {
    margin-right: 8px;
}

.onboarding-next-step-card {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: 16px;
    align-items: center;
    padding: 14px 16px;
    border-radius: var(--border-radius-md);
    background: rgba(var(--wc-surface-1-rgb), 0.92);
    border: 1px solid rgba(var(--wc-accent-rgb), 0.12);
}

.onboarding-next-step-copy {
    min-width: 0;
}

.onboarding-next-step-label {
    letter-spacing: 0;
    text-transform: none;
}

.onboarding-checklist-compact {
    display: grid;
    grid-template-columns: minmax(0, 1.25fr) minmax(180px, 1fr) auto auto;
    gap: 10px 14px;
    align-items: center;
}

.onboarding-checklist-compact__main {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    min-width: 0;
}

.onboarding-checklist-compact__title,
.onboarding-checklist-compact__next {
    display: grid;
    gap: 2px;
    min-width: 0;
}

.onboarding-checklist-compact__actions {
    display: inline-flex;
    align-items: center;
    justify-content: flex-end;
    gap: 4px;
}

.onboarding-checklist-compact__cta {
    justify-self: end;
    min-height: 44px;
}

.onboarding-compact-footer {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex-wrap: wrap;
}

.onboarding-compact-summary {
    display: grid;
    gap: 2px;
}

.onboarding-detail-section {
    display: grid;
    gap: 10px;
}

.onboarding-step-list {
    display: grid;
    gap: 8px;
}

.checklist-step {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 10px 14px;
    border-radius: var(--border-radius-md);
    background: var(--wc-surface-1, var(--mud-palette-surface));
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    cursor: pointer;
    transition: background-color var(--wc-motion-base) var(--wc-ease-out-quart), border-color var(--wc-motion-base) var(--wc-ease-out-quart);
    min-height: 48px;
}

.checklist-step.compact {
    min-height: 46px;
}

.checklist-step-copy {
    display: inline-flex;
    align-items: center;
    gap: 12px;
    min-width: 0;
}

.checklist-step:hover:not(.complete) {
    border-color: var(--wc-accent, var(--mud-palette-primary));
    box-shadow: none;
}

.checklist-step.complete {
    background: var(--wc-tone-success-soft-bg);
    border-color: var(--wc-tone-success-soft-border);
    cursor: default;
}

.text-strikethrough {
    text-decoration: line-through;
    opacity: 0.7;
}

@media (max-width: 599.98px) {
    .onboarding-checklist {
        padding: 14px;
    }

    .onboarding-next-step-card {
        grid-template-columns: 1fr;
    }

    .onboarding-next-step-card .mud-button-root {
        width: 100%;
    }

}

@container onboarding-compact (max-width: 44rem) {
    .onboarding-checklist-compact {
        grid-template-columns: minmax(0, 1fr) auto;
    }

    .onboarding-checklist-compact__main,
    .onboarding-checklist-compact__next,
    .onboarding-checklist-compact__cta {
        grid-column: 1 / -1;
    }

    .onboarding-checklist-compact__cta {
        justify-self: stretch;
    }

    .onboarding-checklist-compact__actions {
        grid-column: 1 / -1;
        justify-content: space-between;
    }
}

/* Week density calendar */
.week-density-calendar {
    display: grid;
    grid-template-columns: repeat(7, minmax(0, 1fr));
    gap: 6px;
    width: 100%;
}

.density-day {
    border-radius: var(--border-radius-md);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    transition: background-color var(--wc-motion-base) var(--wc-ease-out-quart), border-color var(--wc-motion-base) var(--wc-ease-out-quart), color var(--wc-motion-base) var(--wc-ease-out-quart);
    border: 2px solid transparent;
    position: relative;
    padding: 8px 4px;
    min-height: 64px;
}

.density-day:hover {
    transform: none;
    z-index: 1;
}

.density-day.today {
    border-color: var(--wc-accent, var(--mud-palette-primary));
}

.density-day.selected {
    border-color: var(--wc-accent, var(--mud-palette-primary));
    box-shadow: var(--wc-focus-ring);
}

.density-day .day-label {
    font-size: var(--wc-type-caption-size);
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
}

.density-day .day-number {
    font-size: var(--wc-type-value-size);
    font-weight: 700;
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
}

.density-day .job-count {
    font-size: var(--wc-type-caption-size);
    font-weight: 600;
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
}

/* Density heat colors */
.density-0 { background: rgba(var(--wc-surface-1-rgb), 0.5); }
.density-1 { background: rgba(var(--wc-accent-rgb), 0.1); }
.density-2 { background: rgba(var(--wc-accent-rgb), 0.2); }
.density-3 { background: rgba(var(--wc-accent-rgb), 0.3); }
.density-4 { background: rgba(var(--wc-accent-rgb), 0.4); }
.density-5 { background: rgba(var(--wc-accent-rgb), 0.5); }

/* Static (non-clickable) variant of the shared upcoming row, used by the field
   mini-calendar for appointments without a job link. */
.dashboard-upcoming-item--static {
    cursor: default;
}

.dashboard-upcoming-item--static:hover {
    transform: none;
    border-color: var(--wc-border-soft);
    background: var(--wc-surface-2, rgba(var(--mud-palette-primary-rgb), 0.035));
    box-shadow: none;
}

/* Mobile command center adjustments */
@media (max-width: 599.98px) {
    /* The 44px column floor for .dashboard-load-band lives at the end of this
       file, not here: the base seven-column rule is declared later in source
       order and, at equal specificity, would override anything set here. */

    .dashboard-load-band__day-button {
        min-height: 44px;
    }

    .week-density-calendar {
        gap: 2px;
    }

    .density-day {
        min-height: 44px;
        padding: 6px 2px;
    }

    .density-day .day-number {
        font-size: var(--wc-type-body-emphasis-size);
    }

    .density-day .day-label {
        font-size: var(--wc-type-caption-size);
    }

    .dashboard-priority-list--responsive .wc-action-signal-row {
        gap: 12px;
        padding: 12px 14px;
    }

    .dashboard-priority-list--responsive .wc-action-signal-row__lead-value {
        min-width: 36px;
        height: 36px;
        font-size: var(--wc-type-body-emphasis-size);
    }

    .dashboard-priority-list--responsive .wc-action-signal-row__lead {
        min-width: 44px;
        gap: 8px;
    }

    .dashboard-load-band {
        gap: 6px;
    }

    .dashboard-load-band__day {
        padding: 8px 4px;
        border-radius: var(--wc-control-radius, var(--border-radius-md));
    }

    .dashboard-load-band__label {
        font-size: var(--wc-type-caption-size);
        letter-spacing: 0;
    }

    .dashboard-load-band__date {
        font-size: var(--wc-type-body-compact-size);
    }

    .dashboard-upcoming-list--responsive > :nth-child(n+3) {
        display: none !important;
    }
}

@media (min-width: 600px) and (max-width: 959.98px) {
    .dashboard-load-band__day {
        padding: 9px 6px;
    }

    .dashboard-load-band__label {
        font-size: var(--wc-type-caption-size);
        letter-spacing: 0.05em;
    }

    .dashboard-load-band__date {
        font-size: var(--wc-type-body-compact-size);
    }

    .dashboard-upcoming-list--responsive > :nth-child(n+4) {
        display: none !important;
    }
}

/* =============================================================================
   DASHBOARD - CARD STYLES
   ============================================================================= */

/* Dashboard content z-index */
.dashboard-content {
    position: relative;
    z-index: 1;
}

.dashboard-priority-card {
    align-self: flex-start;
}

.dashboard-empty-module-state {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    align-items: center;
    gap: 12px;
    width: 100%;
    min-height: 72px;
    padding: 14px 16px;
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    border: 1px solid var(--wc-border-soft);
    background: var(--wc-surface-2, rgba(var(--mud-palette-primary-rgb), 0.035));
}

.dashboard-empty-module-state--success {
    border-color: var(--wc-tone-success-soft-border);
    background: var(--wc-tone-success-soft-bg);
}

.dashboard-empty-module-state__icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    flex-shrink: 0;
    border-radius: var(--wc-radius-pill);
    background: rgba(var(--wc-accent-rgb), 0.06);
}

.dashboard-empty-module-state--success .dashboard-empty-module-state__icon {
    background: var(--wc-tone-success-soft-bg);
}

.dashboard-empty-module-state__copy {
    display: grid;
    align-content: center;
    gap: 3px;
    min-width: 0;
}

.dashboard-empty-module-state__title {
    min-width: 0;
    line-height: 1.2;
}

.dashboard-empty-module-state__support {
    min-width: 0;
    max-width: 64ch;
    line-height: 1.35;
}

.dashboard-upcoming-empty.dashboard-empty-module-state {
    min-height: 92px;
    align-items: start;
}

.dashboard-upcoming-empty .dashboard-empty-module-state__copy {
    gap: 6px;
}

.dashboard-load-band {
    display: grid;
    grid-template-columns: repeat(7, minmax(0, 1fr));
    gap: 6px;
}

.dashboard-load-band__day {
    padding: 9px 6px;
    border-radius: var(--border-radius-md);
    border: 1px solid var(--wc-data-border, var(--wc-border-soft));
    background: var(--wc-surface-2, rgba(var(--mud-palette-primary-rgb), 0.03));
    text-align: center;
}

.dashboard-load-band__day-button {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 6px;
    width: 100%;
    appearance: none;
    font: inherit;
    color: inherit;
    cursor: pointer;
    transition: border-color var(--wc-motion-base) var(--wc-ease-out-quart), background-color var(--wc-motion-base) var(--wc-ease-out-quart), box-shadow var(--wc-motion-base) var(--wc-ease-out-quart), transform var(--wc-motion-base) var(--wc-ease-out-quart);
}

.dashboard-load-band__day-button:hover {
    border-color: rgba(var(--wc-accent-rgb), 0.22);
    background: var(--wc-data-row-hover);
}

.dashboard-load-band__day-button:focus-visible {
    outline: none;
    box-shadow: var(--wc-focus-ring);
}

.dashboard-load-band__day.is-busy {
    background: var(--wc-surface-brand-soft);
    border-color: var(--wc-tone-primary-soft-border);
}

.dashboard-load-band__day.is-peak {
    background: var(--wc-tone-primary-soft-bg);
    border-color: var(--wc-border-strong);
}

.dashboard-load-band__day.is-today {
    box-shadow: inset 0 0 0 1px rgba(var(--wc-accent-rgb), 0.42);
}

.dashboard-load-band__day.is-selected {
    background: var(--wc-accent);
    border-color: var(--wc-accent);
    color: var(--wc-on-accent);
    box-shadow: inset 0 0 0 1px var(--wc-accent-strong);
}

.dashboard-load-band__day.is-selected.is-today {
    box-shadow: inset 0 0 0 2px var(--wc-on-accent);
}

.dashboard-load-band__day.is-empty {
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
}

.dashboard-load-band__day.is-selected.is-empty {
    color: var(--wc-on-accent);
}

.dashboard-load-band__label {
    display: block;
    font-size: var(--wc-type-caption-size);
    font-weight: 700;
    letter-spacing: 0.08em;
    line-height: 1;
    text-transform: uppercase;
}

.dashboard-load-band__date {
    display: block;
    font-size: var(--wc-type-body-emphasis-size);
    font-weight: 700;
    line-height: 1;
}

.dashboard-load-band__count {
    display: inline-block;
    min-width: 20px;
    padding: 2px 6px;
    border-radius: var(--wc-radius-pill);
    background: rgba(var(--wc-accent-rgb), 0.1);
    font-size: var(--wc-type-caption-size);
    font-weight: 700;
    line-height: 1.2;
}

.dashboard-load-band__day.is-empty .dashboard-load-band__count {
    background: transparent;
}

.dashboard-load-band__day.is-selected .dashboard-load-band__count {
    background: rgba(var(--wc-on-accent-rgb), 0.22);
}

.dashboard-upcoming-list {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.dashboard-upcoming-list--responsive > :nth-child(n+6) {
    display: none !important;
}

.dashboard-upcoming-item__time {
    min-width: 72px;
}

.dashboard-upcoming-item__time-main {
    font-size: var(--wc-type-body-size);
    font-weight: 700;
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
}

.dashboard-upcoming-item__time-sub {
    font-size: var(--wc-type-caption-size);
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
}

.dashboard-upcoming-item__content {
    flex: 1;
    min-width: 0;
}

.dashboard-upcoming-meta {
    margin-top: 10px;
    font-size: var(--wc-type-caption-size);
    font-weight: 600;
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
}

.dashboard-content--office {
    width: 100%;
    container-name: dashboard-office;
    container-type: inline-size;
    --wc-content-section-gap: var(--wc-space-4, 16px);
}

/* Dashboard sections use the shared 16px spacing token even inside the
   operational-density shell, whose tighter token is intended for card internals. */
.dashboard-content--office .office-command-center-shell-section-flow {
    gap: var(--wc-space-4, 16px);
}

.dashboard-content--office .wc-presentation--operational {
    --wc-content-section-gap: var(--wc-space-4, 16px);
}

.dashboard-section-shell {
    border-radius: var(--wc-panel-radius, var(--wc-card-radius, var(--border-radius-md)));
    border: 1px solid var(--wc-data-grid-border, var(--wc-border-soft));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    box-shadow: var(--wc-surface-shadow-xs, var(--shadow-xs));
}

.dashboard-section-shell--hero {
    background: var(--wc-command-header-bg, var(--wc-surface-1));
    border-color: var(--wc-command-header-border, var(--wc-border-strong));
    color: var(--wc-command-header-fg, var(--wc-text-strong));
    box-shadow: var(--wc-surface-shadow-md, var(--shadow-md));
}

/* Money pulse: the collection-rate health vital as a calm bar, then the forward
   money figures. No hero pill, no warning icons — a quiet tone bar is the only signal. */
.dashboard-money-pulse {
    display: grid;
    gap: 14px;
}

.dashboard-money-pulse__collection {
    --tone-fill: var(--wc-text-secondary, var(--mud-palette-text-secondary));
    --tone-track: rgba(var(--mud-palette-text-secondary-rgb), 0.16);
}

/* Soft-tone tokens, not raw saturated palette: the collection vital is a calm
   health signal, never an alarm. The soft-fg also clears the dark-theme contrast
   floor for the value text, and keeps the bar quieter than the urgent money above. */
.dashboard-money-pulse__collection.tone-healthy {
    --tone-fill: var(--wc-tone-success-soft-fg);
    --tone-track: var(--wc-tone-success-soft-bg);
}

.dashboard-money-pulse__collection.tone-warning {
    --tone-fill: var(--wc-tone-warning-soft-fg);
    --tone-track: var(--wc-tone-warning-soft-bg);
}

.dashboard-money-pulse__collection.tone-critical {
    --tone-fill: var(--wc-tone-error-soft-fg);
    --tone-track: var(--wc-tone-error-soft-bg);
}

.dashboard-money-pulse__collection-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 6px;
}

.dashboard-money-pulse__collection-label {
    font-size: var(--wc-type-caption-size);
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
}

.dashboard-money-pulse__collection-value {
    font-size: var(--wc-type-value-size);
    font-weight: 700;
    line-height: 1;
    color: var(--tone-fill);
}

.dashboard-money-pulse__bar {
    height: 8px;
    border-radius: var(--wc-radius-pill);
    background: var(--tone-track);
    overflow: hidden;
}

.dashboard-money-pulse__bar-fill {
    display: block;
    width: 100%;
    height: 100%;
    border-radius: var(--wc-radius-pill);
    background: var(--tone-fill);
    transform: scaleX(var(--wc-meter-fill-scale, 0));
    transform-origin: left center;
    transition: transform var(--wc-motion-base) var(--wc-ease-out-quart);
}

.dashboard-money-pulse__figures {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
    gap: 8px 18px;
}

/* De-chromed: no bordered/filled tile (that was card-in-card inside the snapshot
   card). Figures are label/value stacks separated by the grid gap; the hover/focus
   affordance carries clickability for the linked ones. min-width:0 lets a wide
   localized currency value shrink its column instead of forcing horizontal overflow.
   The negative inline margin gives the hover fill its 8px of air without indenting
   the figures off the collection label and card title above them. */
.dashboard-money-pulse__metric {
    display: grid;
    gap: 2px;
    padding: 6px 8px;
    margin-inline: -8px;
    border-radius: var(--border-radius-md);
    min-width: 0;
}

.dashboard-money-pulse__metric--link {
    transition: background-color var(--wc-motion-base) var(--wc-ease-out-quart);
}

.dashboard-money-pulse__metric--link:hover {
    background: var(--wc-data-row-hover);
}

.dashboard-money-pulse__metric--link:focus-visible {
    outline: none;
    box-shadow: var(--wc-focus-ring);
}

.dashboard-money-pulse__label {
    font-size: var(--wc-type-caption-size);
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
}

/* Reference money sits a step below the urgent attention money (prominent lead)
   so scanning for the biggest figure lands on overdue/at-risk cash, not the
   forward snapshot. Ink, weight, family and figures come from the money tokens;
   this page owns only the size step. */
.dashboard-money-pulse__value {
    font-family: var(--wc-money-family);
    font-size: var(--wc-type-value-compact-size);
    font-weight: var(--wc-money-weight);
    font-variant-numeric: var(--wc-numeric-figures);
    letter-spacing: var(--wc-money-tracking);
    line-height: 1.1;
    color: var(--wc-money-ink);
}

/* Narrow viewport: let the two figures share shrinkable tracks and step the value
   down so a wide localized currency value can't blow the 2-up grid past the edge. */
@media (max-width: 599.98px) {
    .dashboard-money-pulse__figures {
        grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    }

    .dashboard-money-pulse__value {
        font-size: var(--wc-type-body-emphasis-size);
    }
}

.dashboard-summary-empty-note {
    min-height: 64px;
}

.dashboard-today-band.wc-inline-surface {
    position: relative;
    overflow: visible;
    display: grid;
    gap: 12px;
    padding: 0 0 16px;
    border: 0;
    border-radius: 0;
    background: transparent;
    box-shadow: none;
    color: var(--wc-command-header-fg, var(--wc-text-strong));
}

.dashboard-today-band__layout {
    display: block;
}

.dashboard-today-band__main {
    display: grid;
    gap: 8px;
    min-width: 0;
    max-width: none;
    align-content: start;
}

.dashboard-today-band__copy {
    display: grid;
    gap: 6px;
    min-width: 0;
    max-width: none;
}

.dashboard-today-band__title-row {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 12px 16px;
    flex-wrap: wrap;
    width: 100%;
}

.dashboard-today-band__heading {
    display: grid;
    gap: 6px;
    min-width: 0;
    flex: 1 1 auto;
}

/* A headline under the page h1, one step down from it: at the page-title size the
   two stacked titles competed for the first read. */
.dashboard-today-band__headline {
    line-height: var(--wc-type-headline-leading);
    flex: 0 1 auto;
    font-size: var(--wc-type-headline-size);
    font-weight: var(--wc-type-headline-weight);
    letter-spacing: 0;
    color: var(--wc-command-header-fg, var(--wc-page-title-ink));
}

.dashboard-today-band__support {
    max-width: 60ch;
    color: var(--wc-command-header-muted, var(--wc-text-muted)) !important;
}

.dashboard-today-band__actions {
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-end;
    align-self: center;
}

/* Buttons here are owned by WcHeaderActions (shared primary/secondary treatment);
   the band only keeps label nowrap so the inline title-row stays on one line. */
.dashboard-today-band__actions .mud-button-label {
    white-space: nowrap;
}

.dashboard-today-band--empty-start {
    padding-block: 18px;
}

.dashboard-today-band--empty-start .dashboard-today-band__title-row {
    align-items: center;
}

.dashboard-today-band--empty-start .dashboard-today-band__headline {
    line-height: 1.18;
}

.dashboard-today-band--empty-start .dashboard-today-band__support {
    max-width: 62ch;
}

.dashboard-today-band--empty-start .dashboard-today-band__actions {
    align-self: center;
}

.dashboard-workbench-layout,
.dashboard-workbench-layout__primary,
.dashboard-workbench-layout__context {
    display: grid;
    gap: var(--wc-content-section-gap);
    align-items: start;
}

@container dashboard-office (min-width: 880px) {
    .dashboard-workbench-layout {
        grid-template-columns: minmax(0, 3fr) minmax(320px, 2fr);
    }

    /* The context column is shorter than the work lane; keep it beside the work as the page scrolls. */
    .dashboard-workbench-layout__context {
        position: sticky;
        top: var(--wc-space-3, 12px);
    }
}

.dashboard-card-structure {
    display: flex;
    flex-direction: column;
    gap: var(--wc-card-section-gap);
    height: 100%;
}

.dashboard-card-footer-actions {
    padding-top: 0;
}

.dashboard-card-body {
    display: flex;
    flex: 1 1 auto;
    flex-direction: column;
    justify-content: flex-start;
    gap: var(--wc-card-section-gap);
    min-height: 0;
}

.dashboard-card-footer {
    margin-top: auto;
}

.dashboard-priority-resolved-section {
    display: grid;
    gap: 8px;
    margin-top: 4px;
    padding-top: 12px;
    border-top: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
}

.dashboard-priority-resolved-section__label {
    letter-spacing: 0.04em;
    text-transform: uppercase;
    font-weight: 600;
}

.dashboard-priority-list--resolved {
    gap: 6px;
}

.dashboard-action-signal--resolved-compact {
    padding: 8px 10px;
    min-height: 0;
}

.dashboard-action-signal--resolved-compact .wc-action-signal-row__lead-value {
    min-width: 28px;
    width: auto;
    min-height: 28px;
    height: auto;
    font-size: var(--wc-type-body-compact-size);
}

.dashboard-action-signal--resolved-compact .wc-action-signal-row__title {
    font-size: var(--wc-type-body-compact-size);
    font-weight: 600;
}

.dashboard-action-signal--resolved-compact .wc-action-signal-row__description {
    font-size: var(--wc-type-caption-size);
}

.dashboard-priority-card--all-clear .dashboard-card-footer {
    display: none;
}

.dashboard-upcoming-card {
    align-self: stretch;
}

.dashboard-upcoming-empty {
    width: 100%;
    align-self: stretch;
}

.dashboard-summary-section {
    display: grid;
    gap: var(--wc-card-section-gap);
}

.dashboard-field-hero {
    padding: var(--wc-card-padding-block) var(--wc-card-padding-inline);
    overflow: visible;
}

.dashboard-field-hero__actions {
    display: flex;
    flex-wrap: wrap;
    gap: var(--wc-space-2, 8px);
    margin-top: 8px;
    margin-bottom: 2px;
}

.dashboard-field-hero__separator {
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
}

.dashboard-row-chevron {
    align-self: center;
    /* Anchor to the row's right edge instead of hugging the title text. */
    margin-left: auto;
    flex-shrink: 0;
}

@media (min-width: 960px) {
    .dashboard-field-hero {
        padding: calc(var(--wc-card-padding-block) + 6px) calc(var(--wc-card-padding-inline) + 6px);
    }
}

.dashboard-mini-calendar-card {
    height: 100%;
}

.dashboard-mini-calendar-state {
    padding: calc(var(--wc-card-padding-block) - 2px) 0;
}

.dashboard-mini-calendar-state__icon--error {
    opacity: 0.6;
}

.dashboard-mini-calendar-state__icon--empty {
    opacity: 0.4;
}

.dashboard-mini-calendar-selected-day {
    margin-bottom: 12px;
}

.dashboard-timeline-time-main--all-day {
    font-size: var(--wc-type-caption-size);
}

.dashboard-upcoming-item {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 14px 16px;
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1, rgba(var(--mud-palette-primary-rgb), 0.035));
    border: 1px solid var(--wc-data-grid-border, var(--wc-border-soft));
    box-shadow: var(--wc-surface-shadow-xs, var(--shadow-xs));
    transition: border-color var(--wc-motion-base) var(--wc-ease-out-quart), transform var(--wc-motion-base) var(--wc-ease-out-quart), box-shadow var(--wc-motion-base) var(--wc-ease-out-quart);
}

.dashboard-upcoming-item:hover {
    transform: translateY(-1px);
    border-color: rgba(var(--wc-accent-rgb), 0.18);
    background: var(--wc-data-row-hover);
    box-shadow: var(--wc-surface-shadow-xs, var(--shadow-xs));
}

/* wc-link-unstyled zeroes :focus, so restore the house focus ring for keyboard nav. */
.dashboard-upcoming-item:focus-visible {
    outline: none;
    box-shadow: var(--wc-focus-ring);
}

.dashboard-upcoming-item__title {
    font-size: var(--wc-type-body-size);
    font-weight: 600;
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    line-height: 1.2;
}

.dashboard-upcoming-item__subtitle {
    font-size: var(--wc-type-caption-size);
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
    line-height: 1.2;
}

.dashboard-priority-toggle {
    min-width: 96px;
}

@media (min-width: 960px) {
    .dashboard-today-band__main {
        padding-inline-end: 0;
    }

    .dashboard-today-band__title-row {
        flex-wrap: nowrap;
        align-items: center;
    }

    .dashboard-today-band__actions {
        flex-wrap: nowrap;
    }

    .dashboard-priority-card {
        height: 100%;
    }

}

@media (max-width: 599.98px) {
    .dashboard-today-band__actions {
        width: 100%;
        justify-content: flex-start;
        align-self: flex-start;
    }

    .dashboard-today-band__title-row {
        gap: 12px;
    }
}

.dashboard-priority-list {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

/* =============================================================================
   DASHBOARD - NEEDS YOU NOW (ranked attention cards) + HANDLED line
   ============================================================================= */

.dashboard-needs-attention__list {
    display: flex;
    flex-direction: column;
    gap: 0;
}

/* Lead = a tone-saturated severity icon + the ink figure. The icon is the tone
   channel the row's priority earns (error loudest, then warning), so the highest-
   priority card reads loudest while the money figure stays ink. Color inherits the
   row tone's legibility-tuned soft-fg (set on the .wc-action-signal-row-tone-* root). */
.dashboard-attention-signal__lead {
    display: inline-flex;
    align-items: center;
    gap: 8px;
}

.dashboard-attention-signal__lead-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    flex: 0 0 auto;
    border: 1px solid var(--wc-action-signal-soft-border);
    border-radius: var(--wc-radius-pill);
    background: var(--wc-action-signal-soft-bg);
    color: var(--wc-action-signal-soft-fg);
}

.dashboard-handled-line {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
    padding: 2px 2px 4px;
    font-size: var(--wc-type-caption-size);
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
}

.dashboard-handled-line__icon {
    flex-shrink: 0;
}

.dashboard-handled-line__label {
    font-weight: 600;
}

/* The handled areas are a sentence, not chips: pill shapes here read as buttons. */
.dashboard-handled-line__area:not(:last-child)::after {
    content: ", ";
}

/* Keep touch targets at least 44px and balance the seven days across two rows
   instead of leaving the final day alone in the phone content lane. */
@media (max-width: 599.98px) {
    .dashboard-load-band {
        grid-template-columns: repeat(4, minmax(44px, 1fr));
    }

    /* Same shape, same fix: the week-density calendar's seven fixed tracks land
       right on the 44px line in the phone lane and go under it on a 320px
       viewport. Kept in this trailing block so source order beats the base
       seven-column declaration, exactly as the load band does. */
    .week-density-calendar {
        grid-template-columns: repeat(auto-fit, minmax(44px, 1fr));
    }
}

/* ===== WorkCita.Client/wwwroot/css/app.features.reports.css ===== */
/*
 * WorkCita global stylesheet module: app.features.reports.css
 * Ownership layer: feature geometry (reports workspace).
 * Ownership: office reports charts, metric toggles, date-range controls, report attention layouts,
 *   and notification-log route geometry.
 * Theme: universal --wc-* tokens only; not a separate surface theme.
 * Parent: GitHub #404 mechanical CSS ownership split (no visual redesign).
 * Load: after app.features.dashboard.css; before app.features.account.css (index.html).
 */

.report-date-range-controls,
.report-date-range-presets {
    flex-wrap: wrap;
}

/* The period band is the page's working toolbar, not a header button: it takes its own full row,
   period on the left like the report below it, print and CSV at the far end. */
.reports-page .command-center-header-actions {
    flex: 1 1 100%;
}

.reports-page .command-center-header-actions > .wc-header-actions {
    flex: 1 1 100%;
    align-items: flex-end;
    justify-content: space-between;
}

.reports-page .command-center-header .report-period-control {
    padding: 10px;
    border: 1px solid var(--wc-border-strong);
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1);
}

.reports-page .command-center-header .report-period-control__label,
.reports-page .command-center-header .report-period-control__range {
    color: var(--wc-command-header-fg, var(--wc-text-strong)) !important;
}

.reports-page .command-center-header .report-period-control .mud-typography-color-secondary {
    color: var(--wc-command-header-muted, var(--wc-text-muted)) !important;
}

.reports-page .command-center-header .report-period-control__toggle {
    color: var(--wc-command-header-fg, var(--wc-text-strong));
}

.reports-page .command-center-header .wc-segmented-control {
    border-color: var(--wc-border-soft);
}

.reports-page {
    --reports-section-gap: clamp(var(--wc-space-6, 24px), calc(1.1rem + 0.65vw), var(--wc-space-8, 32px));
}

.reports-page .office-command-center-shell {
    gap: var(--reports-section-gap) !important;
}

.report-period-control {
    display: grid;
    justify-items: stretch;
    gap: var(--wc-space-2, 8px);
    width: min(100%, 520px);
    min-width: 0;
}

.report-period-control__meta {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--wc-space-3, 12px);
    flex-wrap: wrap;
    width: 100%;
    min-width: 0;
}

.report-period-control__label {
    flex: 0 0 auto;
    font-weight: var(--font-bold);
}

.report-period-control__range {
    min-width: 0;
    max-width: 100%;
    text-align: right;
    font-variant-numeric: var(--wc-numeric-figures);
    overflow-wrap: anywhere;
}

.report-period-control__top {
    min-width: 0;
    width: 100%;
}

/* Four equal options in a 520px control: tighter padding leaves room for longer localized
   presets (es "Últimos 30 días"), which the shared control wraps onto a second line. */
.report-date-range-control .wc-segmented-control__option {
    padding-inline: 8px;
}

/* The phone-only disclosure toggle for the period editor; tablets and
   desktops always show the presets, so the toggle stays hidden there. */
.report-period-control__toggle {
    display: none;
    align-items: center;
    gap: var(--wc-space-1, 4px);
    min-height: 44px;
    padding: 4px 8px;
    border: 1px solid transparent;
    border-radius: var(--border-radius-md);
    background: transparent;
    color: var(--wc-tone-primary-soft-fg, var(--mud-palette-primary));
    font: inherit;
    font-size: var(--wc-type-body-compact-size);
    font-weight: 700;
    line-height: 1.2;
    cursor: pointer;
}

.report-period-control__toggle:focus-visible {
    outline: none;
    box-shadow: var(--wc-focus-ring);
}

.report-period-custom-panel {
    display: grid;
    gap: var(--wc-space-2, 8px);
    width: 100%;
    margin-top: var(--wc-space-2, 8px);
    padding: var(--wc-space-3, 12px);
    border: 1px solid var(--wc-data-grid-border, var(--wc-border-soft, var(--mud-palette-divider)));
    border-radius: var(--wc-panel-radius, var(--border-radius-md));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    box-shadow: var(--wc-surface-shadow-xs, var(--shadow-xs));
}

.report-date-range-note {
    max-width: 72ch;
}

.report-date-range-touch-targets .mud-button-root,
.report-date-range-touch-targets .wc-segmented-control__option {
    min-height: 44px;
}

.report-shell-digest {
    width: 100%;
}

.reports-loaded-flow {
    display: grid;
    align-content: start;
    gap: var(--reports-section-gap);
    min-width: 0;
}

.reports-loaded-flow > * {
    min-width: 0;
}

.report-workspace.wc-inline-surface {
    display: grid;
    gap: 0;
    overflow: hidden;
    border-color: var(--wc-data-grid-border, var(--wc-border-soft, var(--mud-palette-divider)));
    background: var(--wc-surface-1, var(--mud-palette-surface));
}

.report-workspace > .report-section-surface.wc-inline-surface,
.report-workspace > #reports-section-tax > .report-section-surface.wc-inline-surface {
    border: 0;
    border-radius: 0;
    background: transparent;
    box-shadow: none;
}

.report-workspace > .report-section-surface:not(:first-child),
.report-workspace > .report-detail-duo,
.report-workspace > #reports-section-tax {
    border-top: 1px solid var(--wc-data-grid-border, var(--wc-border-soft, var(--mud-palette-divider)));
}

.report-section-surface {
    min-width: 0;
}

.report-section-surface__header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--wc-space-4, 16px);
    min-width: 0;
    padding: var(--wc-space-5, 20px) var(--wc-space-5, 20px) 0;
}

.report-section-surface__heading {
    display: grid;
    gap: var(--wc-space-1, 4px);
    min-width: 0;
}

.report-section-surface__title,
.report-section-surface__subtitle {
    margin: 0;
    min-width: 0;
    overflow-wrap: anywhere;
}

.report-section-surface__title {
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-size: var(--wc-type-title-size);
    font-weight: var(--font-semibold, 700);
    line-height: 1.18;
}

.report-section-surface__subtitle {
    color: var(--wc-text-soft, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-body-compact-size);
    line-height: 1.45;
}

.report-section-surface__actions {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    flex: 0 1 auto;
    min-width: min(100%, 16rem);
}

.report-section-surface__body {
    min-width: 0;
    padding: var(--wc-space-4, 16px) var(--wc-space-5, 20px) var(--wc-space-5, 20px);
}

.report-section-surface--overview .report-section-surface__body {
    padding-top: var(--wc-space-4, 16px);
}

/* One full-width row per concern: lanes, attention, tax. There are no
   side-by-side columns, so the card cannot end at mismatched heights. */
.report-overview-flow {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: clamp(var(--wc-space-5, 20px), calc(1rem + 0.5vw), var(--wc-space-6, 24px));
}

.report-snapshot-summary,
.report-snapshot-attention {
    min-width: 0;
}

/* The "Needs attention" panel is a section within the one report workspace, not a
   nested card: no border/fill, so it stops reading as card-in-card. */
.report-snapshot-attention {
    display: grid;
    align-content: start;
    gap: var(--wc-space-3, 12px);
    padding: 0;
    border: 0;
    background: transparent;
}

.report-snapshot-attention.wc-inline-surface {
    box-shadow: none;
}

.report-overview-flow > .report-overview-tax-line {
    margin-top: 0;
}

.report-snapshot-zone-header {
    display: grid;
    gap: var(--wc-space-1, 4px);
    min-width: 0;
    margin-bottom: var(--wc-space-3, 12px);
}

.report-snapshot-zone-header--attention {
    margin-bottom: var(--wc-space-2, 8px);
}

.report-snapshot-zone-title,
.report-snapshot-zone-subtitle {
    min-width: 0;
    overflow-wrap: anywhere;
}

.report-snapshot-zone-title {
    font-weight: var(--font-bold);
}

.report-decision-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 0;
    padding: 0;
    border: 1px solid var(--wc-data-grid-border, var(--wc-border-soft, var(--mud-palette-divider)));
    border-radius: var(--wc-panel-radius, var(--wc-card-radius, var(--border-radius-md)));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    box-shadow: var(--wc-surface-shadow-xs, var(--shadow-xs));
    overflow: hidden;
}

.report-decision-grid.wc-inline-surface {
    box-shadow: none;
}

.report-decision-lane {
    min-width: 0;
    padding: 16px;
}

.report-decision-lane:first-child {
    padding-inline-start: 16px;
}

.report-decision-lane + .report-decision-lane {
    border-inline-start: 1px solid var(--wc-data-grid-border, var(--wc-border-soft, var(--mud-palette-divider)));
}

.report-decision-lane__header {
    display: flex;
    align-items: center;
    gap: var(--wc-space-2, 8px);
    min-width: 0;
}

.report-decision-lane__icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 28px;
    height: 28px;
    border-radius: var(--border-radius-md);
    border: 1px solid var(--wc-tone-primary-soft-border);
    background: var(--wc-tone-primary-soft-bg);
    color: var(--wc-tone-primary-soft-fg);
}

.report-decision-lane__title,
.report-decision-lane__value,
.report-decision-lane__support {
    min-width: 0;
    overflow-wrap: anywhere;
}

.report-decision-lane__title {
    font-weight: var(--font-bold);
}

.report-decision-lane__value {
    margin-top: var(--wc-space-2, 8px);
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-size: var(--wc-type-value-size);
    font-weight: var(--font-bold);
    line-height: 1.2;
}

.report-decision-lane__support {
    margin-top: var(--wc-space-1, 4px);
}

.report-decision-lane__action.mud-button-root {
    margin-top: var(--wc-space-2, 8px);
    margin-inline-start: -8px;
    min-height: 44px;
}

.report-print-action.mud-button-root,
.mud-menu.report-print-action > .mud-menu-button-activator {
    align-self: flex-start;
    min-height: 44px;
    /* Copy is sentence case; keep the Mud uppercase default from shouting. */
    text-transform: none;
}

/* Print and the CSV menu travel together as one header unit. */
.report-header-action-cluster {
    display: flex;
    align-items: center;
    flex: 0 0 auto;
    gap: var(--wc-space-1, 4px);
}

/* Quiet overview footer that keeps quarterly tax discoverable without
   promoting it to a lane. The action hugs the text instead of drifting to
   the far edge on wide screens. */
.report-overview-tax-line {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: var(--wc-space-1, 4px) var(--wc-space-3, 12px);
    min-width: 0;
    padding: var(--wc-space-3, 12px) var(--wc-space-4, 16px);
    border-color: var(--wc-data-grid-border, var(--wc-border-soft, var(--mud-palette-divider)));
    background: var(--wc-surface-2, var(--mud-palette-background-gray));
    box-shadow: none;
}

/* Sentence-case the report's quiet text actions; copy here is sentences,
   not labels, and the Mud uppercase default shouts. */
.report-overview-tax-line .mud-button-root,
.report-record-links__action.mud-button-root {
    text-transform: none;
}

.report-overview-tax-line__text {
    min-width: 0;
    overflow-wrap: anywhere;
    font-variant-numeric: var(--wc-numeric-figures);
}

/* One answer line per record type; the full lists live in their owning
   workspaces. */
.report-record-links {
    display: grid;
    gap: var(--wc-space-2, 8px);
    margin: 0;
    padding: 0;
    list-style: none;
}

.report-record-action-list .wc-action-signal-row,
.report-attention-list .wc-action-signal-row {
    min-height: 58px;
    border-color: var(--wc-data-grid-border, var(--wc-border-soft, var(--mud-palette-divider)));
    background: var(--wc-surface-2, var(--mud-palette-background-gray));
}

.report-record-action-list .wc-action-signal-row__title {
    font-weight: 600;
}

.report-record-links__row {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: var(--wc-space-2, 8px) var(--wc-space-3, 12px);
    min-width: 0;
    padding: 10px 0;
}

.report-record-links__row + .report-record-links__row {
    border-top: 1px solid var(--wc-data-grid-border, var(--wc-border-soft, var(--mud-palette-divider)));
    padding-top: var(--wc-space-2, 8px);
}

.report-record-links__icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 28px;
    height: 28px;
    border-radius: var(--border-radius-md);
    border: 1px solid var(--wc-tone-primary-soft-border);
    background: var(--wc-tone-primary-soft-bg);
    color: var(--wc-tone-primary-soft-fg);
}

.report-record-links__text {
    flex: 1 1 auto;
    min-width: 0;
    overflow-wrap: anywhere;
    font-variant-numeric: var(--wc-numeric-figures);
}

.report-record-links__action.mud-button-root {
    flex: 0 0 auto;
    min-height: 44px;
    white-space: nowrap;
}

.report-detail-duo {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: var(--wc-space-4, 16px);
    align-items: stretch;
    padding: var(--wc-space-5, 20px);
    background: var(--wc-surface-2, var(--mud-palette-background-gray));
}

@media (min-width: 960px) {
    .report-detail-duo {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .report-detail-duo > * {
        min-width: 0;
    }
}

.report-tax-disclosure-body {
    min-width: 0;
    padding-top: var(--wc-space-3, 12px);
}

/* Plain-words lead inside the overview card. Wide enough to sit on one
   line at desktop; when it must wrap, balance the lines instead of leaving
   an orphaned clause. */
.report-overview-narrative {
    max-width: 100ch;
    margin-bottom: var(--wc-space-4, 16px);
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-variant-numeric: var(--wc-numeric-figures);
    text-wrap: balance;
}

.report-decision-lane__delta {
    display: block;
    margin-top: var(--wc-space-1, 4px);
    font-variant-numeric: var(--wc-numeric-figures);
}

/* The lane values are the page's hero numbers; let them win the squint test
   on desktop without inflating mobile density. */
@media (min-width: 960px) {
    .report-decision-lane__value {
        font-size: var(--wc-type-value-size);
    }
}

.report-sparkline {
    display: block;
    width: 100%;
    height: 36px;
    margin-top: var(--wc-space-2, 8px);
}

.report-sparkline__line {
    fill: none;
    stroke: var(--wc-accent, var(--mud-palette-primary));
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
    vector-effect: non-scaling-stroke;
}

.report-sparkline__area {
    fill: var(--wc-tone-primary-soft-bg, rgba(var(--mud-palette-primary-rgb), 0.08));
    stroke: none;
}

.report-rank-list {
    display: grid;
    gap: var(--wc-space-4, 16px);
    margin: 0;
    padding: 0;
    list-style: none;
    counter-reset: report-rank;
}

.report-rank-row {
    display: grid;
    gap: var(--wc-space-1, 4px);
    min-width: 0;
    counter-increment: report-rank;
}

.report-rank-row__main {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--wc-space-3, 12px);
    min-width: 0;
}

.report-rank-row__name {
    min-width: 0;
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-size: var(--wc-type-body-size);
    font-weight: 700;
    line-height: 1.3;
    overflow-wrap: anywhere;
}

.report-rank-row__name::before {
    content: counter(report-rank) ". ";
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font-weight: 700;
    font-variant-numeric: var(--wc-numeric-figures);
}

.report-rank-row__amount {
    flex: 0 0 auto;
    font-family: var(--wc-money-family);
    color: var(--wc-money-ink);
    font-size: var(--wc-type-body-size);
    font-weight: var(--wc-money-weight);
    font-variant-numeric: var(--wc-numeric-figures);
    letter-spacing: var(--wc-money-tracking);
}

.report-rank-row__track {
    display: block;
    height: 8px;
    border-radius: var(--wc-radius-track);
    background: var(--wc-surface-2, var(--mud-palette-background-gray));
    overflow: hidden;
}

.report-rank-row__fill {
    display: block;
    width: var(--wc-meter-fill-percent, var(--report-rank-fill, 0%));
    height: 100%;
    border-radius: inherit;
    background: var(--wc-accent, var(--mud-palette-primary));
}

.report-rank-row__support {
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-body-compact-size);
    line-height: 1.35;
}

.report-aging-bar {
    display: flex;
    height: 18px;
    border-radius: var(--wc-radius-pill);
    background: var(--wc-surface-2, var(--mud-palette-background-gray));
    overflow: hidden;
}

.report-aging-bar__segment {
    flex: 0 0 var(--wc-meter-fill-percent, var(--report-aging-share, 0%));
    min-width: 6px;
}

.report-aging-bar__segment + .report-aging-bar__segment {
    border-inline-start: 2px solid var(--wc-surface-1, var(--mud-palette-surface));
}

/* The healthy bucket stays visually quiet; only overdue buckets earn color. */
.report-aging__segment--current {
    background: var(--wc-tone-secondary-soft-fg, var(--mud-palette-text-secondary));
    opacity: 0.4;
}

.report-aging__segment--early {
    background: rgba(var(--wc-info-rgb), 1);
}

.report-aging__segment--late {
    background: rgba(var(--wc-warning-rgb), 1);
}

.report-aging__segment--critical {
    background: rgba(var(--wc-error-rgb), 1);
}

.report-aging-legend {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: var(--wc-space-2, 8px) var(--wc-space-5, 20px);
    margin-top: var(--wc-space-3, 12px);
}

.report-aging-legend__item {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto auto;
    align-items: center;
    column-gap: var(--wc-space-2, 8px);
    min-width: 0;
}

.report-aging-legend__dot {
    width: 10px;
    height: 10px;
    border-radius: 50%;
}

.report-aging-legend__label {
    min-width: 0;
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-body-size);
    overflow-wrap: anywhere;
}

.report-aging-legend__count {
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-body-size);
    font-variant-numeric: var(--wc-numeric-figures);
}

.report-aging-legend__amount {
    font-family: var(--wc-money-family);
    color: var(--wc-money-ink);
    font-size: var(--wc-type-body-size);
    font-weight: var(--wc-money-weight);
    font-variant-numeric: var(--wc-numeric-figures);
    letter-spacing: var(--wc-money-tracking);
    text-align: right;
}

.report-inline-facts {
    display: flex;
    flex-wrap: wrap;
    gap: var(--wc-space-2, 8px) var(--wc-space-6, 24px);
    margin: 0;
    padding-top: var(--wc-space-3, 12px);
    border-top: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
}

.report-inline-facts__item {
    display: flex;
    align-items: baseline;
    gap: var(--wc-space-2, 8px);
    min-width: 0;
}

.report-inline-facts__item dt {
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-body-size);
}

.report-inline-facts__item dd {
    margin: 0;
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-size: var(--wc-type-body-size);
    font-weight: var(--font-bold);
    font-variant-numeric: var(--wc-numeric-figures);
}

.report-tax-detail-content {
    min-width: 0;
}

.page-data-grid--notification-log {
    --wc-data-row-height: 44px;
}

.report-chart-shell {
    min-height: 0;
    padding: 18px 16px 12px;
    border: 1px solid var(--wc-data-grid-border, var(--wc-border-soft));
    border-radius: var(--wc-panel-radius, var(--wc-card-radius, var(--border-radius-md)));
    background: var(--wc-surface-2, var(--mud-palette-background-gray));
}

.report-chart-shell.wc-inline-surface {
    box-shadow: none;
}

.report-chart-scroll-frame {
    width: 100%;
    overflow-x: auto;
    overflow-y: hidden;
    padding-bottom: 8px;
}

.report-metric-toggle .wc-segmented-control__option {
    min-width: 72px;
    font-weight: 600;
}

.report-chart-data-details {
    margin-top: 2px;
    /* Break flex min-content propagation so the wide money table cannot widen
       the reports column; the grid shell below scrolls in its own lane. */
    min-width: 0;
    max-width: 100%;
}

.report-chart-data-summary {
    min-height: 44px;
    display: inline-flex;
    align-items: center;
    padding: 8px 2px;
    color: var(--wc-tone-primary-soft-fg, var(--mud-palette-primary));
    font-size: var(--wc-type-body-size);
    font-weight: 600;
    cursor: pointer;
    list-style-position: outside;
}

.report-chart-data-summary::-webkit-details-marker {
    color: var(--wc-tone-primary-soft-fg, var(--mud-palette-primary));
}

.report-chart-data-details .page-data-grid-shell {
    margin-top: 8px;
    overflow-x: auto;
}

.page-data-grid.report-chart-data-table {
    --wc-data-grid-horizontal-min-width: 20rem;
}

.report-chart-data-table .mud-table-container {
    /* MudDataGrid writes width:max-content inline when horizontal scrolling is enabled. */
    width: 100% !important;
}

.report-cell-numeric {
    text-align: right !important;
    font-variant-numeric: var(--wc-numeric-figures);
}

.report-chart-shell .mud-chart {
    width: 100%;
    min-height: 336px;
}

.report-chart-shell .mud-chart svg {
    overflow: visible;
}

.report-chart-insight {
    margin-top: 2px;
    max-width: 68ch;
}

.report-attention-list {
    margin-top: -2px;
}

@media (min-width: 1500px) {
    .report-period-control {
        grid-template-columns: auto minmax(420px, 1fr) auto;
        grid-template-areas:
            "label segments range"
            "custom custom custom";
        align-items: center;
        column-gap: var(--wc-space-3, 12px);
        row-gap: var(--wc-space-2, 8px);
        width: min(100%, 720px);
    }

    .report-period-control__meta {
        display: contents;
    }

    .report-period-control__label {
        grid-area: label;
    }

    .report-period-control__range {
        grid-area: range;
        white-space: nowrap;
    }

    .report-period-control__top {
        grid-area: segments;
    }

    .report-period-custom-panel {
        grid-area: custom;
    }

    .report-date-range-control .wc-segmented-control__option {
        min-height: 44px;
    }
}

@media (max-width: 959.98px) {
    .reports-page .command-center-header-actions {
        align-items: stretch;
        justify-content: stretch;
    }

    /* Stacked: the full-width period band on its own line, print and CSV tucked to the end below it. */
    .reports-page .command-center-header-actions > .wc-header-actions {
        justify-content: flex-end;
    }

    .report-period-control {
        width: 100%;
    }
}

@media (max-width: 599.98px) {
    /* Keep print compact so the period meta and first metrics stay closer
       on phones. */
    .reports-page .command-center-header-actions > .report-header-action-cluster {
        align-self: flex-end;
    }

    .report-header-action-cluster .report-print-action.mud-button-root,
    .report-header-action-cluster .mud-menu.report-print-action > .mud-menu-button-activator {
        width: auto;
        min-height: 44px;
    }

    .report-period-control__top {
        display: grid;
        gap: var(--wc-space-2, 8px);
        justify-content: stretch;
    }

    /* Collapse the period editor behind the toggle so "How the period went"
       reaches the first screen on phones. */
    .report-period-control__toggle {
        display: inline-flex;
        margin-block: -8px;
    }

    .report-period-control:not(.is-open) .report-period-control__top,
    .report-period-control:not(.is-open) .report-period-custom-panel {
        display: none;
    }

    .reports-loaded-flow {
        gap: var(--wc-space-6, 24px);
    }

    .report-date-range-control {
        --wc-segmented-control-columns: 2;
    }

    .report-date-range-control .wc-segmented-control__option {
        min-width: 0;
        width: 100%;
    }

    .report-decision-grid {
        grid-template-columns: minmax(0, 1fr);
        gap: 0;
    }

    .report-decision-lane {
        padding: var(--wc-space-3, 12px);
        border-inline-start: 0;
        border-top: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    }

    .report-decision-lane:first-child {
        padding-top: var(--wc-space-3, 12px);
        border-top: 0;
    }

    .report-decision-lane + .report-decision-lane {
        border-inline-start: 0;
    }

    .report-aging-legend {
        grid-template-columns: minmax(0, 1fr);
    }

    .report-section-surface__header {
        display: grid;
        gap: var(--wc-space-3, 12px);
        padding: var(--wc-space-4, 16px) var(--wc-space-4, 16px) 0;
    }

    .report-section-surface__actions {
        justify-content: stretch;
        min-width: 0;
        width: 100%;
    }

    .report-section-surface__body {
        padding: var(--wc-space-3, 12px) var(--wc-space-4, 16px) var(--wc-space-4, 16px);
    }

    .report-detail-duo {
        padding: var(--wc-space-4, 16px);
    }

    .report-metric-toggle {
        width: 100%;
    }

    .report-metric-toggle .wc-segmented-control__option {
        flex: 1 1 calc(50% - 4px);
        min-width: 0;
    }

    .report-chart-shell {
        padding: 16px 12px 10px;
    }

    .report-chart-shell .mud-chart {
        min-height: 324px;
    }

    .report-chart-shell.is-mobile {
        padding: 16px 12px 14px;
    }

    .report-chart-insight {
        margin-top: 0;
    }

}

.notification-log-row-meta {
    min-width: 0;
}

.notification-log-channel-line {
    min-width: 0;
}

.notification-log-action-cluster {
    flex-shrink: 0;
}

.notification-log-summary-context {
    margin-top: var(--wc-space-1, 4px);
    padding-inline: 4px;
}

.notification-log-toolbar-action {
    align-self: stretch;
}

.notification-log-toolbar-action .mud-button-root {
    min-height: 44px;
}

/* Layout/figures come from the shared .wc-metric-grid primitive; this only owns
   the spacing between the figures and the ranked job list below them. */
.report-job-margin-grid {
    margin-bottom: var(--wc-space-4, 16px);
}

.report-job-margin-list {
    margin-top: var(--wc-space-2, 8px);
}

@media (max-width: 599.98px) {
    .notification-log-summary-context {
        text-align: left;
    }
}

@media print {
    @page {
        margin: 12mm;
    }

    html,
    body,
    #app,
    .mud-layout,
    .mud-main-content {
        height: auto !important;
        min-height: 0 !important;
        max-height: none !important;
        overflow: visible !important;
    }

    .mud-appbar,
    .mud-drawer,
    .mobile-bottom-nav,
    .wc-shell-status-region {
        display: none !important;
    }

    .mud-main-content {
        margin: 0 !important;
        padding: 0 !important;
    }

    .reports-page {
        background: var(--wc-surface-1, var(--mud-palette-surface));
        min-height: 0 !important;
        overflow: visible !important;
    }

    .reports-page .office-command-center-shell-toolbar,
    .reports-page .report-period-control,
    .reports-page .report-print-action,
    .reports-page .report-record-links__action,
    .reports-page .wc-notice-band-actions {
        display: none !important;
    }

    .reports-page .office-section-card,
    .reports-page .wc-section-card,
    .reports-page .report-section-surface,
    .reports-page .wc-stat-strip {
        break-inside: avoid;
        box-shadow: none;
    }

    .reports-page .report-workspace,
    .reports-page .reports-loaded-flow,
    .reports-page .wc-inline-surface.report-workspace {
        display: block !important;
        break-inside: auto !important;
        height: auto !important;
        max-height: none !important;
        overflow: visible !important;
    }

    .reports-page .report-chart-scroll-frame {
        overflow: visible;
    }
}

/* ===== WorkCita.Client/wwwroot/css/app.features.account.css ===== */
/*
 * WorkCita global stylesheet module: app.features.account.css
 * Ownership layer: feature geometry (account and billing route layout).
 * Ownership: account profile, account support, legal/account surfaces, and billing workspace geometry.
 * Theme: universal --wc-* tokens only; not a separate surface theme.
 * Parent: GitHub #404 mechanical CSS ownership split (no visual redesign).
 * Load: after app.features.reports.css; before app.features.admin.css (index.html).
 */

/* Account + billing form routes: static route body (Impeccable product register). */
.account-profile-page,
.account-support-page,
.account-legal-page,
.billing-page,
.account-change-password-page {
    animation: none !important;
    transform: none !important;
}

.account-profile-page .office-form-shell-content,
.account-support-page .office-form-shell-content,
.account-legal-page .office-form-shell-content,
.billing-page .office-form-shell-content,
.account-profile-page .async-page-state,
.account-support-page .async-page-state,
.account-legal-page .async-page-state,
.billing-page .async-page-state,
.account-profile-page .office-form-shell-state,
.account-profile-page .office-form-shell-section-flow,
.account-support-page .office-form-shell-section-flow,
.account-legal-page .office-form-shell-section-flow,
.billing-page .office-form-shell-section-flow {
    animation: none !important;
    transform: none !important;
}

/* =============================================================================
   Billing workspace geometry
   ============================================================================= */

.billing-page {
    --wc-content-section-gap: clamp(20px, 1rem + 0.55vw, 30px);
    --wc-card-section-gap: 16px;
}

.billing-page .office-form-shell-section-flow {
    gap: var(--wc-content-section-gap);
}

/* Status-driven section stack. */
.billing-flow {
    display: grid;
    gap: var(--wc-content-section-gap);
    min-width: 0;
}

.billing-flow > * {
    min-width: 0;
}

/* ---- State summary -------------------------------------------------------- */

.billing-summary {
    border: 1px solid var(--wc-border-soft);
    box-shadow: none;
}

.billing-summary .office-section-card-body {
    display: grid;
    gap: clamp(18px, 0.85rem + 0.5vw, 24px);
    min-width: 0;
}

.billing-summary__top {
    display: grid;
    gap: clamp(16px, 0.75rem + 0.5vw, 22px);
    align-items: start;
    min-width: 0;
}

.billing-summary__identity {
    display: grid;
    gap: 8px;
    align-content: start;
    min-width: 0;
}

.billing-summary__chip {
    justify-self: start;
}

.billing-summary__headline {
    margin: 0;
    font-family: var(--wc-font-display);
    font-size: var(--wc-type-headline-size);
    font-weight: 700;
    line-height: 1.2;
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    overflow-wrap: anywhere;
    text-wrap: balance;
}

.billing-summary__description {
    margin: 0;
    max-width: 70ch;
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    line-height: 1.5;
}

.billing-summary__action {
    min-width: 0;
}

.billing-summary__action .mud-button-root {
    min-height: 44px;
}

.billing-summary__spinner {
    flex: 0 0 auto;
}

.billing-summary__action-label {
    margin-inline-start: 6px;
}

/* Real account facts: plan / key date / cadence. */
.billing-summary__facts {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
    gap: 12px 24px;
    margin: 0;
    padding-top: clamp(14px, 0.7rem + 0.4vw, 18px);
    border-top: 1px solid var(--wc-border-soft);
    min-width: 0;
}

.billing-summary__fact {
    display: grid;
    gap: 3px;
    align-content: start;
    min-width: 0;
}

.billing-summary__fact-label {
    margin: 0;
    font-size: var(--wc-type-caption-size);
    font-weight: 600;
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
}

.billing-summary__fact-value {
    margin: 0;
    font-weight: 600;
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    overflow-wrap: anywhere;
}

@media (min-width: 768px) {
    .billing-summary__top {
        grid-template-columns: minmax(0, 1fr) minmax(220px, auto);
        align-items: center;
    }

    .billing-summary__action {
        justify-self: end;
    }

    .billing-summary__action .mud-button-root {
        min-width: 220px;
    }
}

@media (max-width: 767.98px) {
    .billing-summary__action,
    .billing-summary__action .mud-button-root {
        width: 100%;
    }
}

/* ---- Section bodies ------------------------------------------------------- */

.billing-plan-card,
.billing-usage-card {
    display: grid;
    gap: clamp(12px, 0.5rem + 0.35vw, 16px);
    min-width: 0;
}

.billing-usage-card {
    padding: var(--wc-card-padding-block, 16px) var(--wc-card-padding-inline, 16px);
}

.billing-plan-card {
    border: 0;
    border-radius: 0;
}

.billing-section-heading {
    display: grid;
    gap: 4px;
    max-width: 72ch;
}

.billing-actions-card .office-section-card-body {
    gap: clamp(12px, 0.5rem + 0.35vw, 16px);
}

.billing-plan-card .subscription-plan-grid__toggle--office {
    width: 100%;
}

.billing-actions-card,
.billing-actions-list {
    width: 100%;
    min-width: 0;
}

/* ---- Usage meters --------------------------------------------------------- */
/* Only the limits that bind (seats / SMS) get a meter, so this is a small
   1-2 item band that folds to one column on narrow widths. */
.billing-usage-meters {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 18px 28px;
    min-width: 0;
}

.billing-usage-meter {
    display: grid;
    gap: 6px;
    align-content: start;
    min-width: 0;
}

.billing-usage-meter__label {
    font-size: var(--wc-type-caption-size);
    font-weight: 600;
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
}

.billing-usage-meter__value {
    font-family: var(--wc-font-display);
    font-size: var(--wc-type-value-size);
    font-weight: 700;
    line-height: 1.2;
    overflow-wrap: anywhere;
}

.billing-usage-meter__bar {
    margin-top: 4px;
}

.billing-usage-meter__support {
    font-size: var(--wc-type-caption-size);
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
}

/* Non-colour-only "near/at limit" signal: icon shape + readable tone text. */
.billing-usage-meter__threshold {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: var(--wc-type-caption-size);
    font-weight: 600;
}

.billing-usage-meter__threshold--warning {
    color: var(--wc-tone-warning-soft-fg, var(--mud-palette-warning));
}

.billing-usage-meter__threshold--error {
    color: var(--wc-tone-error-soft-fg, var(--mud-palette-error));
}

.billing-usage-meter__threshold-icon {
    font-size: var(--wc-type-input-size);
}

/* ---- Processing ----------------------------------------------------------- */

.billing-page--processing {
    cursor: progress;
}

.billing-page--processing .billing-summary__action .mud-button-root:not(:disabled),
.billing-page--processing .billing-plan-card .mud-button-root:not(:disabled),
.billing-page--processing .billing-actions-card .mud-button-root:not(:disabled),
.billing-page--processing .billing-actions-list button:not(:disabled) {
    pointer-events: none;
}

/* ---- Result pages (success / cancel) -------------------------------------- */

.billing-result-page .office-narrow-state-shell {
    width: 100%;
    max-width: 32rem;
    margin-inline: auto;
}

@media (max-width: 599.98px) {
    .account-link-card .office-section-card-header,
    .account-legal-support-card .office-section-card-header {
        flex-wrap: nowrap;
    }

    .account-link-card .office-section-card-actions,
    .account-legal-support-card .office-section-card-actions {
        flex: 0 0 auto;
        width: auto;
    }
    .billing-page {
        --wc-content-section-gap: 18px;
        --wc-card-section-gap: 14px;
    }
}


.account-page-grid,
.account-page-main-row,
.account-page-two-up {
    min-width: 0;
}

.account-page-grid {
    display: grid;
    gap: var(--wc-content-section-gap);
}

.account-profile-unsaved-bar {
    position: sticky;
    top: var(--wc-space-3, 12px);
    z-index: 40;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--wc-space-3, 12px);
    min-width: 0;
    padding: 10px 12px;
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    box-shadow: none;
}

.account-profile-unsaved-copy {
    display: flex;
    align-items: center;
    gap: var(--wc-space-2, 8px);
    min-width: 0;
}

.account-profile-unsaved-actions {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: var(--wc-space-2, 8px);
    flex: 0 0 auto;
}

.account-profile-unsaved-actions .mud-button-root {
    min-height: 44px;
}

.account-page-main-row {
    display: grid;
    gap: var(--wc-content-section-gap);
    align-items: stretch;
}

.account-page-main-row > * {
    display: flex;
    min-width: 0;
}

.account-page-main-row > * > * {
    flex: 1 1 auto;
    width: 100%;
    min-width: 0;
}

.account-page-two-up {
    display: grid;
    gap: var(--wc-content-section-gap);
    width: 100%;
}

.account-page-card-fill,
.account-page-card-fill .office-section-card-body {
    height: 100%;
}

.account-page-card-fill .office-section-card-body {
    align-content: start;
}

.account-profile-pending-email {
    margin-top: 8px;
}

.account-profile-field-group,
.account-profile-security-copy {
    display: grid;
    gap: 8px;
    min-width: 0;
}

.account-profile-field-label-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    min-width: 0;
}

.account-profile-readonly-field {
    display: grid;
    gap: 12px;
    padding: 12px 14px;
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    background: var(--wc-surface-2, var(--mud-palette-background));
    min-width: 0;
}

.account-profile-readonly-field--action {
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
}

.account-profile-email-value {
    overflow-wrap: anywhere;
}

.account-profile-meta-list,
.account-profile-settings-list {
    display: grid;
    min-width: 0;
    overflow: hidden;
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-2, var(--mud-palette-background));
}

.account-profile-meta-row,
.account-profile-setting-row {
    display: grid;
    gap: 4px;
    min-width: 0;
    padding: 12px 14px;
    border-bottom: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
}

.account-profile-meta-row:last-child,
.account-profile-setting-row:last-child {
    border-bottom: 0;
}

.account-password-form-shell {
    width: 100%;
    max-width: 720px;
}

.account-change-password-page .office-form-shell-action-bar {
    width: 100%;
    max-width: 720px;
}

.account-support-detail-list {
    display: grid;
    gap: 14px;
}

.account-support-detail-item {
    display: grid;
    gap: 4px;
    padding: 12px 14px;
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    border: 1px solid var(--wc-border-soft);
    background: var(--wc-surface-2);
}

.account-support-detail-helper {
    max-width: 42ch;
}

.account-support-details-card .office-section-card-body,
.account-legal-support-card .office-section-card-body {
    height: 100%;
    align-content: stretch;
}

.account-profile-account-card .office-section-card-body {
    display: grid;
    gap: 16px;
    align-content: start;
}

.account-profile-security-card .office-section-card-body {
    align-content: stretch;
}

.account-profile-security-layout {
    display: grid;
    grid-template-columns: 1fr;
    gap: 16px;
    align-items: start;
    min-width: 0;
}

.account-profile-security-layout > .account-profile-security-actions {
    justify-content: flex-start;
}

.account-profile-security-actions {
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-end;
    align-items: center;
    gap: 8px;
    min-width: 0;
}

.account-profile-security-divider {
    margin: 16px 0;
}

.account-profile-external-auth-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: 16px;
    align-items: center;
    min-width: 0;
}

.account-legal-destination-grid {
    align-items: start;
}

.account-support-detail-list--fill {
    height: 100%;
    align-content: stretch;
}

.account-support-detail-list--fill > * {
    height: 100%;
}

.account-legal-meta-list {
    display: grid;
    gap: 16px;
    align-content: start;
}

.account-legal-meta-list--wide {
    gap: 18px;
}

.account-legal-meta-item {
    display: grid;
    gap: 4px;
    padding-bottom: 14px;
    border-bottom: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
}

.account-legal-meta-item:last-child {
    padding-bottom: 0;
    border-bottom: 0;
}

.account-section-footer-actions {
    display: flex;
    justify-content: flex-end;
    align-items: center;
    gap: 12px;
}

.account-link-card .office-section-card-body {
    display: grid;
    gap: 10px;
}

@media (max-width: 959.98px) {
    .account-page-main-row,
    .account-page-two-up {
        grid-template-columns: 1fr;
    }

    .account-profile-readonly-field--action,
    .account-profile-security-layout,
    .account-profile-external-auth-row {
        grid-template-columns: 1fr;
    }

    .account-profile-readonly-field--action .mud-button-root,
    .account-profile-security-actions .mud-button-root {
        justify-self: flex-start;
        min-height: 44px;
    }

    .account-profile-security-actions {
        justify-content: flex-start;
    }

    .account-profile-unsaved-bar {
        align-items: stretch;
        flex-wrap: wrap;
        top: var(--wc-space-2, 8px);
    }

    .account-profile-unsaved-actions {
        justify-content: flex-start;
    }

    .account-section-footer-actions {
        justify-content: stretch;
    }

    .account-section-footer-actions .mud-button-root {
        width: 100%;
    }
}

@media (max-width: 599.98px) {
.account-page-grid--support {
        gap: 14px;
    }

    .account-support-summary-card .office-section-card-header {
        padding-bottom: 6px;
    }

    .account-support-detail-list {
        gap: 8px;
    }

    .account-support-detail-item {
        padding: 10px 12px;
    }

    .account-support-detail-helper {
        display: none;
    }

    .account-profile-security-actions,
    .account-profile-external-auth-row,
    .account-profile-readonly-field--action .mud-button-root,
    .account-profile-security-actions .mud-button-root {
        width: 100%;
    }

    .account-profile-security-actions {
        align-items: stretch;
    }

    .account-profile-unsaved-copy,
    .account-profile-unsaved-actions,
    .account-profile-unsaved-actions .mud-button-root {
        width: 100%;
    }

    .account-profile-unsaved-actions {
        align-items: stretch;
    }
}

@media (min-width: 960px) {
    .account-page-main-row--balanced {
        grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
    }

    .account-page-two-up {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        align-items: stretch;
        height: 100%;
    }

    .account-page-two-up > * {
        height: 100%;
    }

    .account-support-detail-list--fill {
        grid-template-rows: repeat(3, minmax(0, 1fr));
    }

    .account-legal-meta-list--wide {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        align-items: start;
    }
}

/* =============================================================================
   Subscription plan grid (SubscriptionPlanGrid.razor)
   ============================================================================= */

.subscription-plan-grid__toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    flex-wrap: wrap;
    margin: 0 0 24px 0;
}

.subscription-plan-grid__toggle--office {
    justify-content: flex-start;
    margin-bottom: 18px;
}

.subscription-plan-grid--single:not(.subscription-plan-grid--office) {
    max-width: 920px;
    margin-inline: auto;
}

.subscription-plan-grid__savings {
    background: var(--wc-tone-success-soft-bg);
    color: var(--wc-tone-success-soft-fg);
    font-size: var(--wc-type-caption-size);
    font-weight: 700;
    padding: 4px 8px;
    border-radius: var(--wc-radius-pill);
    border: 1px solid var(--wc-tone-success-soft-border);
}

.subscription-plan-grid__card {
    height: 100%;
    border: 1px solid var(--wc-border-soft, var(--mud-palette-lines-default));
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    transition: box-shadow var(--wc-motion-base) var(--wc-ease-out-quart), border-color var(--wc-motion-base) var(--wc-ease-out-quart);
    background: var(--wc-surface-1, var(--mud-palette-surface));
}

@media (hover: hover) and (prefers-reduced-motion: no-preference) {
    .subscription-plan-grid__card:not(.subscription-plan-grid__card--office):not(.subscription-plan-grid__card--single):hover {
        transform: none;
        box-shadow: none;
    }
}

.subscription-plan-grid__card--popular {
    border-color: var(--wc-accent, var(--mud-palette-primary));
    box-shadow: none;
}

.subscription-plan-grid__card--office {
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    box-shadow: none;
}

.subscription-plan-grid__card--office:hover {
    transform: none;
    box-shadow: none;
}

.subscription-plan-grid__card--current {
    border-color: var(--wc-tone-success-soft-border);
    box-shadow: none;
}

.subscription-plan-grid__card--single:not(.subscription-plan-grid__card--office) {
    box-shadow: none;
}

.subscription-plan-grid__card--single:not(.subscription-plan-grid__card--office):hover {
    transform: none;
    box-shadow: none;
}

.subscription-plan-grid__content {
    padding: 28px 24px;
}

.subscription-plan-grid__content--compact {
    padding: 22px 20px;
}

.subscription-plan-grid__content--office {
    padding: 20px 18px;
}

.subscription-plan-grid__body {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

/* Share intrinsic comparison rows without constraining translated text. */
@supports (grid-template-rows: subgrid) {
    .subscription-plan-grid:has(> .subscription-plan-grid__item:nth-child(3):last-child) {
        display: grid;
        grid-template-columns: minmax(0, 1fr);
        gap: 24px;
        width: 100%;
        margin: 0;
    }

    .subscription-plan-grid:has(> .subscription-plan-grid__item:nth-child(3):last-child) :is(.subscription-plan-grid__item, .subscription-plan-grid__card, .subscription-plan-grid__content, .subscription-plan-grid__body) {
        display: grid;
        grid-template-rows: subgrid;
        grid-row: span 5;
        row-gap: 0;
        min-width: 0;
    }

    .subscription-plan-grid:has(> .subscription-plan-grid__item:nth-child(3):last-child) > .subscription-plan-grid__item {
        max-width: none;
        padding: 0;
    }

    .subscription-plan-grid:has(> .subscription-plan-grid__item:nth-child(3):last-child) .subscription-plan-grid__body {
        row-gap: 12px;
    }

    .subscription-plan-grid:has(> .subscription-plan-grid__item:nth-child(3):last-child) .subscription-plan-grid__headline {
        grid-template-rows: subgrid;
        grid-row: span 2;
    }

    @media (min-width: 960px) {
        .subscription-plan-grid:has(> .subscription-plan-grid__item:nth-child(3):last-child) {
            grid-template-columns: repeat(2, minmax(0, 1fr));
        }

        .subscription-plan-grid:not(.subscription-plan-grid--office):has(> .subscription-plan-grid__item:nth-child(3):last-child) {
            grid-template-columns: repeat(3, minmax(0, 1fr));
        }
    }

    @media (min-width: 1280px) {
        .subscription-plan-grid:has(> .subscription-plan-grid__item:nth-child(3):last-child) {
            grid-template-columns: repeat(3, minmax(0, 1fr));
        }
    }
}
.subscription-plan-grid__title-block {
    display: grid;
    align-content: start;
    gap: 4px;
    min-width: 0;
}

.subscription-plan-grid__title-row {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    min-width: 0;
}

.subscription-plan-grid__title {
    flex: 1 1 auto;
}

.subscription-plan-grid__badges {
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
    justify-content: flex-end;
    margin-inline-start: auto;
    list-style: none;
    margin-block: 0;
    padding: 0;
}

.subscription-plan-grid__badge-item {
    display: flex;
}

.subscription-plan-grid__badge {
    display: inline-flex;
    align-items: center;
    border-radius: var(--wc-radius-pill);
    padding: 4px 10px;
    font-size: var(--wc-type-caption-size);
    font-weight: 700;
    letter-spacing: 0;
    text-transform: uppercase;
}

.subscription-plan-grid__card--office .subscription-plan-grid__badge {
    padding: 3px 8px;
    font-size: var(--wc-type-caption-size);
}

.subscription-plan-grid__badge--popular {
    background: var(--wc-tone-primary-soft-bg);
    color: var(--wc-tone-primary-soft-fg);
    border: 1px solid var(--wc-tone-primary-soft-border);
}

.subscription-plan-grid__badge--current {
    background: var(--wc-tone-success-soft-bg);
    color: var(--wc-tone-success-soft-fg);
    border: 1px solid var(--wc-tone-success-soft-border);
}

.subscription-plan-grid__headline {
    display: grid;
    gap: 16px;
}

.subscription-plan-grid__card--office .subscription-plan-grid__headline {
    gap: 12px;
}

.subscription-plan-grid__pricing-block {
    align-content: start;
}

.subscription-plan-grid__action {
    width: 100%;
}

.subscription-plan-grid:not(.subscription-plan-grid--single) .subscription-plan-grid__action .mud-button-root {
    width: 100%;
}

.subscription-plan-grid__divider {
    margin-block: var(--wc-space-1, 4px);
}

.subscription-plan-grid__divider--office-single {
    margin: 0;
}

.subscription-plan-grid__price {
    font-size: var(--wc-type-display-pricing-size);
    font-weight: 700;
    line-height: 1;
}

.subscription-plan-grid__card--office .subscription-plan-grid__price {
    font-size: var(--wc-type-display-pricing-office-size);
}

.subscription-plan-grid__period {
    font-size: var(--wc-type-body-size);
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
}

.subscription-plan-grid__card--office .subscription-plan-grid__period {
    font-size: var(--wc-type-body-compact-size);
}

/* Rows keep their own height inside the shared subgrid row, so they line up across plan cards. */
.subscription-plan-grid__features {
    display: grid;
    align-content: start;
    gap: 8px;
}

.subscription-plan-grid__features--office {
    gap: 10px;
}

.subscription-plan-grid__feature {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 4px 0;
}

.subscription-plan-grid__card--office .subscription-plan-grid__feature {
    padding: 6px 8px;
    border-radius: var(--border-radius-md);
    background: rgba(var(--wc-accent-rgb), 0.04);
    border: 1px solid rgba(var(--wc-accent-rgb), 0.08);
}

.subscription-plan-grid__feature-icon {
    color: var(--wc-tone-success-soft-fg);
}

.subscription-plan-grid__feature-text {
    font-size: var(--wc-type-body-size);
}

.subscription-plan-grid__card--office .subscription-plan-grid__feature-text {
    font-size: var(--wc-type-body-compact-size);
}

.subscription-plan-grid__policy {
    display: grid;
    gap: 6px;
    padding: 4px 0 0;
    margin: 0;
    list-style: none;
    border-top: 1px solid var(--wc-border-soft, var(--mud-palette-lines-default));
}

.subscription-plan-grid__policy-line {
    line-height: 1.45;
}

.subscription-plan-grid__policy-line .mud-typography {
    margin: 0;
}

@media (min-width: 960px) {
    .subscription-plan-grid--single:not(.subscription-plan-grid--office) .subscription-plan-grid__headline {
        grid-template-columns: minmax(0, 1.25fr) minmax(240px, 0.75fr);
        align-items: start;
    }

    .subscription-plan-grid--single:not(.subscription-plan-grid--office) .subscription-plan-grid__features {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 12px 18px;
    }

    .subscription-plan-grid--single:not(.subscription-plan-grid--office) .subscription-plan-grid__pricing-block {
        justify-items: end;
        text-align: right;
    }

    .subscription-plan-grid--single:not(.subscription-plan-grid--office) .subscription-plan-grid__action {
        width: auto;
        justify-self: end;
    }

    .subscription-plan-grid--single:not(.subscription-plan-grid--office) .subscription-plan-grid__action .mud-button-root {
        width: auto;
        min-width: 220px;
    }

    .subscription-plan-grid--office.subscription-plan-grid--single .subscription-plan-grid__headline {
        grid-template-columns: minmax(0, 1.4fr) minmax(260px, 0.8fr);
        align-items: start;
    }

    .subscription-plan-grid--office.subscription-plan-grid--single .subscription-plan-grid__features--office {
        grid-template-columns: repeat(3, minmax(0, 1fr));
        gap: 12px;
    }

    .subscription-plan-grid--office.subscription-plan-grid--single .subscription-plan-grid__pricing-block {
        justify-items: end;
        align-content: start;
    }

    .subscription-plan-grid--office.subscription-plan-grid--single .subscription-plan-grid__action {
        width: auto;
        justify-self: end;
    }

    .subscription-plan-grid--office.subscription-plan-grid--single .subscription-plan-grid__action .mud-button-root {
        width: auto;
        min-width: 220px;
    }

    .subscription-plan-grid--office.subscription-plan-grid--single .subscription-plan-grid__content--office {
        padding: 22px 22px;
    }

    .subscription-plan-grid__card--office .subscription-plan-grid__price {
        font-size: var(--wc-type-display-pricing-office-size);
    }
}

@media (max-width: 959.98px) {
    .subscription-plan-grid--single .subscription-plan-grid__action .mud-button-root {
        width: 100%;
    }
}

@media (max-width: 599.98px) {
    .subscription-plan-grid__toggle {
        width: 100%;
        gap: 8px;
    }

    .subscription-plan-grid__toggle .mud-button-root {
        flex: 1 1 calc(50% - 4px);
        min-width: 0;
        min-height: 44px;
    }

    .subscription-plan-grid__content {
        padding: 20px 16px;
    }

    .subscription-plan-grid__price {
        font-size: var(--wc-type-display-pricing-compact-size);
    }
}

/* ===== WorkCita.Client/wwwroot/css/app.features.admin.css ===== */
/*
 * WorkCita global stylesheet module: app.features.admin.css
 * Ownership layer: feature geometry (office admin and company settings).
 * Ownership: booking URL editor, company profile/logo upload, setup wizard shell,
 *   working-hours editor layout. Company settings workbench lives in app.features.admin.settings.css.
 * Theme: universal --wc-* tokens only; not a separate surface theme.
 * Parent: GitHub #404 mechanical CSS ownership split (no visual redesign).
 * Load: after app.features.account.css; before app.features.integrations.css (index.html).
 */

.working-hours-editor {
    min-width: 0;
}

.inventory-workspace-tabs .mud-tab {
    min-width: 128px !important;
}

.inventory-workspace-tabs .mud-tab .mud-tab-text {
    white-space: nowrap;
}

/* Inventory rows carry mostly single-line numeric data, so without a secondary
   text line they collapse to the content height and read denser than the office
   norm (customers/jobs/pricebook rows sit ~56-65px because of 2-line cells).
   Lift the cell block padding via the framework token so rows match the rest of
   the app without fighting cell specificity. */
.page-data-grid--inventory {
    --wc-data-cell-block: 15px;
}

/* Location names and stock explanations must stay inside their inventory lane. */
.page-data-grid--inventory .mud-table-body .wc-data-cell--type {
    white-space: normal;
    overflow-wrap: anywhere;
}

.page-data-grid--inventory .mud-table-head .mud-table-cell .column-header {
    white-space: normal;
}

.page-data-grid--inventory .wc-data-cell--numeric > .d-flex {
    flex-wrap: wrap;
}
.inventory-record-stock-count-table .mud-input-control {
    min-width: 7rem;
    max-width: 10rem;
}

.inventory-record-stock-count-table.page-data-grid--responsive-phone .mud-input-control {
    width: 100%;
    max-width: none;
}

.inventory-command-surface .office-section-card-body {
    margin-inline: 0;
    margin-bottom: 0;
}

.inventory-workspace-flow {
    display: grid;
    gap: var(--wc-space-4, 16px);
    min-width: 0;
}

.inventory-inactive-workspace {
    display: grid;
    gap: var(--wc-space-4, 16px);
}

.inventory-attention-list {
    margin: 0;
}

.inventory-activity-section {
    margin-top: var(--wc-space-4, 16px);
}

.inventory-activity-section .form-section-collapsible {
    margin-top: 0;
}

.inventory-summary-digest {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: var(--wc-space-2, 8px);
    min-width: 0;
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
}

.inventory-summary-digest__icon {
    flex: 0 0 auto;
}

.inventory-summary-digest__text {
    min-width: 0;
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
}

.inventory-setup-callout .wc-notice-band-layout {
    align-items: center;
}

.inventory-setup-callout__copy {
    min-width: 0;
}

.inventory-setup-callout__steps {
    margin-top: var(--wc-space-1, 4px);
}

@media (max-width: 599.98px) {
    .inventory-workspace-tabs .mud-tab {
        min-width: 118px !important;
        padding-inline: var(--wc-space-3, 12px);
    }

    .inventory-workspace-flow {
        gap: var(--wc-space-3, 12px);
    }

    .inventory-summary-digest {
        align-items: flex-start;
    }

    .inventory-setup-callout .wc-notice-band-layout {
        flex-direction: column !important;
        align-items: stretch;
    }

    .inventory-setup-callout .wc-notice-band-copy,
    .inventory-setup-callout .wc-notice-band-body,
    .inventory-setup-callout__steps {
        min-width: 0;
    }

    .inventory-setup-callout .wc-notice-band-actions {
        justify-content: flex-start;
        width: 100%;
    }
}

.working-hours-presets {
    align-items: center;
    flex-wrap: wrap;
}

.working-hours-presets-label {
    align-self: center;
    margin-right: var(--wc-space-2, 8px);
}

.working-hours-off-label {
    margin-left: var(--wc-space-2, 8px);
}

.working-hours-limits-title {
    margin-top: var(--wc-space-2, 8px);
}

.working-hours-schedule-card {
    --wc-card-padding-block: 12px;
    --wc-card-padding-inline: 12px;
}

.working-hours-editor .day-schedule-row {
    min-height: 48px;
    flex-wrap: wrap;
}

.working-hours-editor .day-label {
    flex: 0 0 100px;
    font-weight: 500;
}

.working-hours-editor .day-checkbox {
    margin-right: 8px;
}

.working-hours-editor .time-picker-compact {
    flex: 1 1 130px;
    max-width: 150px;
}

@media (max-width: 599.98px) {
    .working-hours-presets {
        align-items: flex-start;
    }

    .working-hours-editor .day-schedule-row {
        display: grid !important;
        grid-template-columns: 44px minmax(0, 1fr);
        align-items: center !important;
        gap: 8px;
    }

    .working-hours-editor .day-checkbox {
        width: auto;
        margin-right: 0;
    }

    .working-hours-editor .day-label {
        min-width: 0;
        min-height: 44px;
        display: flex;
        align-items: center;
    }

    .working-hours-editor .time-picker-compact,
    .working-hours-editor .working-hours-off-label {
        grid-column: 1 / -1;
        width: 100%;
        min-width: 0;
        max-width: none;
        margin-left: 0;
    }

    .working-hours-editor .working-hours-time-separator {
        display: none;
    }
}


.booking-url-editor {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: 12px;
    align-items: end;
}

.booking-url-editor__slug {
    min-width: 0;
}

.booking-url-editor__generate {
    margin-bottom: 24px;
}

.booking-url-preview {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: 12px;
    align-items: center;
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-2);
}

.booking-url-preview__copy {
    min-width: 0;
    overflow-wrap: anywhere;
}

.booking-url-preview__actions {
    display: inline-flex;
    align-items: center;
    gap: 4px;
}

@media (max-width: 599.98px) {
    .booking-url-editor,
    .booking-url-preview {
        grid-template-columns: minmax(0, 1fr);
        align-items: stretch;
    }

    .booking-url-editor__generate {
        justify-content: center;
        margin-bottom: 0;
    }

    .booking-url-preview__actions {
        justify-content: flex-end;
    }
}

@media (min-width: 960px) {
    .company-setup-page-shell {
        padding: 24px;
    }
}

.form-container-centered {
    max-width: 600px;
    width: 100%;
    margin-inline: auto;
}

@media (max-width: 599.98px) {
    .form-container-centered {
        max-width: 100%;
    }
}

.logo-box {
    width: 150px;
    height: 150px;
    border-radius: var(--border-radius-md);
    display: flex;
    align-items: center;
    justify-content: center;
}

.logo-box-bordered {
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    overflow: hidden;
}

.logo-box-dashed {
    border: 2px dashed var(--wc-border-soft, var(--mud-palette-divider));
    position: relative;
}

@media (max-width: 599.98px) {
    .logo-box {
        width: 120px;
        height: 120px;
    }
}

.company-logo-img {
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
}

.company-profile-identity-grid {
    display: grid;
    grid-template-columns: minmax(180px, 220px) minmax(0, 1fr);
    gap: 24px;
    align-items: start;
}

.company-logo-panel {
    display: grid;
    gap: 8px;
    min-width: 0;
}

.company-profile-identity-fields {
    min-width: 0;
}

.company-logo-upload-surface.logo-box,
.company-logo-preview-surface.logo-box {
    width: 100%;
    height: auto;
    min-height: 154px;
    padding: 16px;
}

.company-logo-preview-surface.logo-box {
    aspect-ratio: 4 / 3;
}

.company-logo-upload-surface {
    position: relative;
    text-align: center;
    cursor: pointer;
}

.company-logo-upload-surface:has(.logo-upload-input:focus-visible) {
    outline: var(--wc-focus-outline);
    outline-offset: 2px;
}

.company-logo-upload-cta {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 32px;
    padding: 4px 12px;
    border: 1px solid var(--wc-accent, var(--mud-palette-primary));
    border-radius: var(--border-radius-md);
    color: var(--wc-accent-ink, var(--mud-palette-primary));
    font-weight: 600;
    line-height: 1.2;
    white-space: nowrap;
}

.company-logo-actions {
    flex-wrap: wrap;
}

.company-logo-action-button {
    white-space: nowrap;
}

.company-logo-hidden-input {
    display: none;
}

.logo-upload-input {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    opacity: 0;
    cursor: pointer;
}

.logo-upload-content {
    pointer-events: none;
}

@media (max-width: 719.98px) {
    .company-profile-identity-grid {
        grid-template-columns: minmax(0, 1fr);
        gap: 16px;
    }

    .company-logo-upload-surface.logo-box,
    .company-logo-preview-surface.logo-box {
        max-width: none;
        min-height: 132px;
    }
}

/* Platform operator surfaces (Home, support lists) */
.platform-home-tile {
    height: 100%;
    padding: 14px 16px;
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1);
    box-shadow: var(--wc-surface-shadow-xs, var(--shadow-xs));
}

.platform-home-tile__body {
    min-height: 100%;
    width: 100%;
}

.platform-home-tile__action {
    margin-top: auto;
}

/* A missing delivery record is supporting detail, not a page-level empty state: a
   quiet row on the same card surface as the delivery panel it stands in for, with
   the icon beside a left-aligned title and message. As a flex row the message became
   a third, centred column floating on the page background. */
.wc-state-card.communication-assurance-empty.wc-state-card--inline.wc-inline-surface {
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1, var(--mud-palette-surface));
}

.communication-assurance-empty .empty-state {
    display: grid !important;
    grid-template-columns: 44px minmax(0, 1fr);
    column-gap: var(--wc-space-3, 12px);
    row-gap: 2px;
    align-items: center;
    justify-items: start;
    min-height: 0;
    width: 100%;
    padding: var(--wc-space-3, 12px) var(--wc-space-4, 16px);
    text-align: left;
}

.communication-assurance-empty .empty-state-illustration {
    grid-row: span 2;
    width: 44px;
    height: 44px;
}

.communication-assurance-empty .empty-state-illustration .mud-icon-root {
    font-size: var(--wc-type-icon-medium-size, 24px);
}

.communication-assurance-empty .empty-state-title {
    grid-column: 2;
    margin: 0;
    font-size: var(--wc-type-body-size);
    line-height: 1.5;
}

.communication-assurance-empty .empty-state-message {
    grid-column: 2;
    max-width: none;
    margin: 0;
    font-size: var(--wc-type-body-compact-size);
    text-align: left;
}

/* ===== WorkCita.Client/wwwroot/css/app.features.admin.settings.css ===== */
/*
 * WorkCita global stylesheet module: app.features.admin.settings.css
 * Ownership: company settings workspace, attention band, section rail, detail pane,
 * overview, reminder surfaces.
 * Load: immediately after app.features.admin.css (index.html).
 */
/* =============================================================================
   Company Settings and Admin Setup
   ============================================================================= */

.company-settings-page.page-shell {
    --wc-settings-stack-gap: var(--wc-space-6, 24px);
}

.company-settings-page .office-form-shell-section-flow {
    gap: var(--wc-settings-stack-gap);
}

.company-settings-page .unsaved-changes-banner {
    position: sticky;
    top: var(--wc-space-2, 8px);
    z-index: 6;
}

.admin-settings-inline-editor {
    --wc-card-padding-block: var(--wc-space-3, 12px);
    --wc-card-padding-inline: var(--wc-space-3, 12px);
}

.admin-settings-inline-editor__row {
    padding: var(--wc-space-2, 8px) 0;
    border-top: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
}

.company-settings-page .settings-workspace {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: var(--wc-settings-stack-gap, var(--wc-shell-lane-gap));
    align-items: start;
    width: 100%;
    min-width: 0;
}

.company-settings-page .settings-workspace__panes {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: var(--wc-settings-stack-gap, var(--wc-shell-lane-gap));
    align-items: start;
    min-width: 0;
}

@media (min-width: 960px) {
    .company-settings-page .settings-workspace__panes {
        grid-template-columns: 224px minmax(0, 1fr);
    }
}

.company-settings-page .settings-detail {
    width: 100%;
    max-width: 880px;
    padding: var(--wc-space-6, 24px);
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--border-radius-lg);
    background: var(--wc-surface-1, var(--mud-palette-surface));
}

.company-settings-page .settings-section-picker {
    display: none;
}

.company-settings-page .settings-section-picker select {
    width: 100%;
    min-width: 0;
    min-height: 44px;
    padding: var(--wc-space-2, 8px) var(--wc-space-3, 12px);
    border: 1px solid var(--wc-border-strong, var(--mud-palette-divider));
    border-radius: var(--border-radius-md);
    background: var(--wc-surface-1, var(--mud-palette-surface));
    color: var(--wc-text-primary, var(--mud-palette-text-primary));
    font: inherit;
}

.company-settings-page .settings-section-picker select:focus-visible {
    outline: var(--wc-focus-outline);
    outline-offset: 2px;
}

.company-settings-page .settings-disclosure {
    min-width: 0;
    border-top: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
}

.company-settings-page .settings-disclosure > summary {
    padding: var(--wc-space-3, 12px) 0;
    min-height: 44px;
    color: var(--wc-text-primary, var(--mud-palette-text-primary));
    font-weight: 600;
    cursor: pointer;
    overflow-wrap: anywhere;
}

.company-settings-page .settings-disclosure > summary::marker {
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
}

.company-settings-page .settings-disclosure > summary:focus-visible {
    outline: var(--wc-focus-outline);
    outline-offset: 2px;
    border-radius: var(--border-radius-sm);
}

.company-settings-page .settings-disclosure__content,
.company-settings-page .settings-option__details {
    min-width: 0;
    padding-block: var(--wc-space-2, 8px) var(--wc-space-4, 16px);
}

.company-settings-page .settings-disclosure__content {
    display: grid;
    gap: var(--wc-settings-stack-gap);
}

.company-settings-page .settings-option {
    display: grid;
    gap: var(--wc-space-2, 8px);
    min-width: 0;
    padding-bottom: var(--wc-space-3, 12px);
    border-bottom: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
}

.company-settings-page .settings-option .settings-disclosure {
    border: 0;
}

.company-settings-page .settings-option__details:not([hidden]) {
    display: grid;
    gap: var(--wc-space-3, 12px);
}

.company-settings-page .settings-disclosure[hidden],
.company-settings-page .settings-option__details[hidden] {
    display: none;
}

.company-setup-page-shell {
    padding: 16px;
}

.company-setup-submit-button {
    padding: 14px 16px;
}

/* Attention list: lives inside the Overview destination, above the saved-configuration
   snapshot. It is the single deduplicated statement of what still needs the owner. */
.company-settings-page .settings-attention {
    display: grid;
    gap: 12px;
    min-width: 0;
    /* wc-inline-surface supplies border and radius but no padding; without this the rows
       butt straight against the band border and read as a double-border seam. */
    padding: var(--wc-card-padding-block, 16px) var(--wc-card-padding-inline, 16px);
    border-color: var(--wc-tone-warning-soft-border);
}

/* Outage-only lists: every row inside reads informational, so the container does too. */
.company-settings-page .settings-attention--info {
    border-color: var(--wc-tone-info-soft-border);
}

.company-settings-page .settings-attention__heading {
    display: flex;
    gap: 10px;
    align-items: flex-start;
    min-width: 0;
}

/* The all-clear reading of the same slot. No surface, no heading: the healthy state has to
   stay quieter than the list it replaces or it becomes another card to read. */
.company-settings-page .settings-all-clear {
    display: flex;
    gap: 8px;
    align-items: flex-start;
    min-width: 0;
    padding-inline: 2px;
}

.company-settings-page .settings-attention__heading-copy {
    display: grid;
    gap: 2px;
    min-width: 0;
}

/* Rail: the persistent directory. Only one section's content is ever on screen. */
.company-settings-page .settings-rail {
    display: grid;
    gap: 12px;
    min-width: 0;
    align-content: start;
}

@media (min-width: 960px) {
    .company-settings-page .settings-rail {
        position: sticky;
        top: var(--wc-space-2, 8px);
    }
}

.company-settings-page .settings-rail__heading {
    display: grid;
    gap: 4px;
    min-width: 0;
    padding-inline: 2px;
}

.company-settings-page .settings-rail__list {
    display: grid;
    gap: 6px;
    min-width: 0;
    margin: 0;
    padding: 0;
    list-style: none;
}

.company-settings-page .settings-rail__item {
    min-width: 0;
}

/* The row is an anchor, so it has to be talked back into looking like the block it was:
   anchors default to content-box and carry an underline and a visited colour. */
.company-settings-page .settings-rail__link {
    appearance: none;
    box-sizing: border-box;
    display: grid;
    /* Third track is the needs-attention marker; it collapses to zero on every other row. */
    grid-template-columns: 32px minmax(0, 1fr) auto;
    gap: 10px;
    align-items: center;
    width: 100%;
    min-width: 0;
    min-height: 56px;
    padding: 8px 12px;
    border: 1px solid transparent;
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: transparent;
    color: var(--wc-text-primary, var(--mud-palette-text-primary));
    font: inherit;
    text-align: left;
    text-decoration: none;
    cursor: pointer;
    scroll-margin-top: 16px;
    transition:
        border-color var(--wc-motion-fast) var(--wc-ease-out-quart),
        background-color var(--wc-motion-fast) var(--wc-ease-out-quart);
}

.company-settings-page .settings-rail__link:visited {
    color: var(--wc-text-primary, var(--mud-palette-text-primary));
}

.company-settings-page .settings-rail__link:hover {
    border-color: var(--wc-border-soft, var(--mud-palette-divider));
    background: var(--wc-surface-2, var(--mud-palette-background));
}

.company-settings-page .settings-rail__link:focus-visible {
    outline: var(--wc-focus-outline);
    outline-offset: 2px;
    box-shadow: var(--wc-focus-ring);
}

/* The current-section cue must clear WCAG 1.4.11 (3:1) on its own: a surface-on-page fill
   measures ~1.1:1, so the border carries the state and the tonal fill reinforces it. */
.company-settings-page .settings-rail__link--active {
    border-color: var(--wc-tone-primary-soft-fg);
    background: var(--wc-tone-primary-soft-bg);
}

.company-settings-page .settings-rail__icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    border-radius: var(--border-radius-md);
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
    background: var(--wc-surface-2, var(--mud-palette-background));
}

.company-settings-page .settings-rail__link--active .settings-rail__icon {
    color: var(--wc-tone-primary-soft-fg);
    background: var(--wc-tone-primary-soft-bg);
}

.company-settings-page .settings-rail__copy {
    display: grid;
    gap: 3px;
    min-width: 0;
    justify-items: start;
}

.company-settings-page .settings-rail__label {
    min-width: 0;
    font-size: var(--wc-type-body-compact-size);
    font-weight: 600;
    overflow-wrap: anywhere;
}

.company-settings-page .settings-rail__link--active .settings-rail__label {
    font-weight: 700;
}

/* The rail is navigation. Only a real owner gap gets a marker, and it never signals by
   colour alone: the icon is paired with visually hidden "Needs attention" text. */
.company-settings-page .settings-rail__marker {
    display: inline-flex;
    flex: 0 0 auto;
    align-items: center;
    justify-content: center;
    color: var(--wc-tone-warning-soft-fg);
}

/* Detail layouts follow the available pane width beside the settings navigation. */
.company-settings-page .settings-detail {
    container-type: inline-size;
    container-name: settings-detail;
    display: grid;
    gap: 12px;
    min-width: 0;
    scroll-margin-top: 16px;
}

.company-settings-page .settings-detail__heading {
    display: grid;
    gap: 4px;
    min-width: 0;
    padding-bottom: var(--wc-space-2, 8px);
}

.company-settings-page #settings-detail-heading {
    width: fit-content;
    max-width: 100%;
}

.company-settings-page #settings-detail-heading:focus-visible {
    outline: var(--wc-focus-outline);
    outline-offset: 4px;
    border-radius: var(--border-radius-sm);
}

.company-settings-page .settings-overview {
    display: grid;
    gap: var(--wc-settings-stack-gap, var(--wc-shell-lane-gap));
    min-width: 0;
}

.company-settings-page .settings-overview-summary {
    display: grid;
    gap: 12px;
    min-width: 0;
    padding: var(--wc-card-padding-block, 16px) var(--wc-card-padding-inline, 16px);
}

.company-settings-page .settings-overview-summary__heading {
    display: grid;
    gap: 4px;
}

.company-settings-page .settings-detail > .admin-settings-stack,
.company-settings-page .settings-detail > .mud-stack-root {
    gap: 12px;
}

.company-settings-page .settings-detail .admin-settings-section-intro {
    padding: 2px 2px 4px;
}

.company-settings-page .settings-detail .admin-settings-section-card.wc-inline-surface,
.company-settings-page .settings-detail .admin-save-action-card.wc-inline-surface {
    border-color: transparent;
    border-radius: var(--border-radius-md);
    background: transparent;
    box-shadow: none;
    padding: 0;
}

.company-settings-page .settings-detail .settings-save-bar.wc-inline-surface {
    position: sticky;
    bottom: 0;
    z-index: 5;
    padding: var(--wc-space-3, 12px) 0;
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: var(--wc-space-3, 12px);
    border-top: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: 0;
    background: var(--wc-surface-1, var(--mud-palette-surface));
}

.company-settings-page .settings-detail .admin-settings-section-card__header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--wc-space-3, 12px);
    min-width: 0;
    padding-bottom: var(--wc-space-2, 8px);
}

.company-settings-page .settings-detail .admin-settings-section-card__title-block {
    flex: 1 1 auto;
    min-width: 0;
}

.company-settings-page .settings-detail .admin-settings-section-card__heading {
    display: grid;
    gap: 2px;
    min-width: 0;
}

.company-settings-page .settings-detail .admin-settings-section-card__icon {
    flex: 0 0 auto;
    margin-top: 2px;
}

.company-settings-page .settings-detail .admin-settings-section-card__title {
    font-weight: 700;
    overflow-wrap: anywhere;
}

.company-settings-page .settings-detail .admin-settings-section-card__subtitle {
    max-width: 65ch;
    line-height: 1.45;
}

.company-settings-page .settings-detail .admin-settings-section-card__actions {
    display: flex;
    flex: 0 0 auto;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-end;
    gap: var(--wc-space-2, 8px);
}

.company-settings-page .settings-detail .admin-settings-inline-surface,
.company-settings-page .settings-detail .admin-settings-checklist-tile,
.company-settings-page .settings-detail .company-settings-reminder-status,
.company-settings-page .settings-detail .company-settings-reminder-fact {
    background: var(--wc-surface-2, var(--mud-palette-background));
    box-shadow: none;
}

.company-settings-page .settings-detail .qbo-workspace {
    border-radius: var(--border-radius-md);
    background: var(--wc-surface-1, var(--mud-palette-surface));
    box-shadow: none;
}

.company-settings-page .settings-detail .qbo-secondary-panel,
.company-settings-page .settings-detail .qbo-import-panel,
.company-settings-page .settings-detail .qbo-step-stage {
    box-shadow: none;
}

.company-settings-page .admin-settings-stack {
    display: grid;
    gap: var(--wc-settings-stack-gap, var(--wc-shell-lane-gap));
    min-width: 0;
}

/* Section layouts inside the detail pane measure the pane, not the window. Outside a
   settings-detail container the base declaration is the narrow one, so a stacked column is
   the worst case rather than a squeezed row. */
.company-settings-page .admin-settings-payments-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: var(--wc-space-3, 12px);
    width: 100%;
    min-width: 0;
}

.company-settings-page .admin-settings-payments-grid > * {
    min-width: 0;
}

/* Full-pane rows inside the same grid (the onboarding checklist card). */
.company-settings-page .admin-settings-payments-grid__wide {
    grid-column: 1 / -1;
}

.company-settings-page .admin-settings-checklist-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: var(--wc-space-3, 12px);
    min-width: 0;
}

.company-settings-page .admin-settings-checklist-grid > * {
    min-width: 0;
}

/* Fact strips sit inside cards whose width the pane does not predict (the payments cards are
   half-pane, the calendar card is full-pane), so these size against themselves rather than
   against any container. auto-FILL, not auto-fit: auto-fit collapses the unused tracks and
   lets the survivors absorb the whole card, which stranded the calendar card's two facts
   ~440px apart on a 888px card. Keeping the empty tracks holds every lane at one width, so a
   short strip packs left and a full strip is unchanged. */
.company-settings-page .admin-settings-connection-facts {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 9rem), 1fr));
    gap: var(--wc-space-2, 8px);
    min-width: 0;
}

.company-settings-page .admin-settings-connection-facts > * {
    min-width: 0;
}

@container settings-detail (min-width: 400px) {
    .company-settings-page .admin-settings-checklist-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@container settings-detail (min-width: 520px) {
    .company-settings-page .admin-settings-payments-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@container settings-detail (min-width: 700px) {
    .company-settings-page .admin-settings-checklist-grid {
        grid-template-columns: repeat(4, minmax(0, 1fr));
    }
}

.company-settings-page .company-payments-action-strip {
    flex-wrap: wrap;
}

.company-settings-page .company-payments-action-strip .mud-button-root {
    min-width: 9.5rem;
}

@media (max-width: 599.98px) {
    .company-settings-page .company-payments-action-strip {
        flex-direction: column !important;
        align-items: stretch !important;
    }

    .company-settings-page .company-payments-action-strip .mud-button-root {
        width: 100%;
        min-width: 0;
    }
}

.company-settings-page .admin-settings-section-intro {
    display: grid;
    gap: 6px;
    min-width: 0;
}

.company-settings-page .admin-settings-section-card__body {
    min-width: 0;
}

.company-settings-page .admin-settings-section-card__footer {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
    margin-top: var(--wc-card-section-gap);
    padding-top: 14px;
    border-top: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
}

.company-settings-page .admin-settings-row-action-button.mud-icon-button {
    width: 44px;
    min-width: 44px;
    height: 44px;
    min-height: 44px;
}

.company-settings-page .admin-save-action-card__actions {
    justify-content: flex-end;
    margin-left: auto;
}

.company-settings-page .settings-toggle-row {
    appearance: none;
    display: block;
    position: relative;
    width: 100%;
    cursor: pointer;
    padding: var(--wc-space-3, 12px) 0;
    border: 0;
    border-radius: var(--border-radius-sm);
    background: transparent;
    color: var(--wc-text-primary, var(--mud-palette-text-primary));
    font: inherit;
    text-align: left;
    user-select: none;
    transition:
        border-color var(--wc-motion-fast) var(--wc-ease-out-quart),
        background-color var(--wc-motion-fast) var(--wc-ease-out-quart),
        box-shadow var(--wc-motion-fast) var(--wc-ease-out-quart);
}

.company-settings-page .settings-toggle-row:hover {
    border-color: var(--wc-border-strong, rgba(var(--mud-palette-primary-rgb), 0.24));
    background: var(--wc-surface-2, var(--mud-palette-background));
    box-shadow: none;
}

.company-settings-page .settings-toggle-row:focus-visible {
    outline: var(--wc-focus-outline);
    outline-offset: 2px;
    box-shadow: var(--wc-focus-ring);
}

.company-settings-page .settings-toggle-row-disabled {
    cursor: default;
    opacity: 0.72;
}

.company-settings-page .settings-toggle-row__layout,
.company-settings-page .settings-toggle-row__copy {
    min-width: 0;
}

.company-settings-page .settings-toggle-row__copy {
    flex: 1 1 auto;
}

.company-settings-page .settings-toggle-row__text {
    min-width: 0;
}

.company-settings-page .settings-toggle-row__label {
    font-weight: 600;
}

.company-settings-page .settings-toggle-row__description {
    overflow-wrap: anywhere;
}

.company-settings-page .settings-toggle-row__control {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
}

.company-settings-page .settings-toggle-row__visual-switch {
    position: relative;
    display: inline-flex;
    align-items: center;
    width: 46px;
    height: 28px;
    padding: 2px;
    border: 1px solid var(--wc-border-strong, var(--mud-palette-divider));
    border-radius: var(--wc-radius-pill);
    background: var(--wc-surface-2, var(--mud-palette-background));
    transition:
        border-color var(--wc-motion-fast) var(--wc-ease-out-quart),
        background-color var(--wc-motion-fast) var(--wc-ease-out-quart);
}

.company-settings-page .settings-toggle-row__visual-switch-thumb {
    display: block;
    width: 22px;
    height: 22px;
    border-radius: var(--wc-radius-pill);
    background: var(--wc-surface-1, var(--mud-palette-surface));
    box-shadow: var(--wc-surface-shadow-xs, var(--shadow-xs));
    transform: translateX(0);
    transition: transform var(--wc-motion-fast) var(--wc-ease-out-quart);
}

.company-settings-page .settings-toggle-row-active .settings-toggle-row__visual-switch {
    border-color: rgba(var(--wc-success-rgb), 1);
    background: rgba(var(--wc-success-rgb), 1);
}

.company-settings-page .settings-toggle-row-active-primary .settings-toggle-row__visual-switch {
    border-color: var(--wc-accent, var(--mud-palette-primary));
    background: var(--wc-accent, var(--mud-palette-primary));
}

.company-settings-page .settings-toggle-row-active-info .settings-toggle-row__visual-switch {
    border-color: rgba(var(--wc-info-rgb), 1);
    background: rgba(var(--wc-info-rgb), 1);
}

.company-settings-page .settings-toggle-row-active-warning .settings-toggle-row__visual-switch {
    border-color: rgba(var(--wc-warning-rgb), 1);
    background: rgba(var(--wc-warning-rgb), 1);
}

.company-settings-page .settings-toggle-row-active-error .settings-toggle-row__visual-switch {
    border-color: rgba(var(--wc-error-rgb), 1);
    background: rgba(var(--wc-error-rgb), 1);
}

.company-settings-page .settings-toggle-row-active .settings-toggle-row__visual-switch-thumb {
    transform: translateX(18px);
}

.company-settings-page .company-settings-reminder-status {
    display: flex;
    gap: 10px;
    align-items: flex-start;
    padding: 12px 14px;
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1, var(--mud-palette-surface));
}

.company-settings-page .company-settings-reminder-status--on {
    border-color: var(--wc-tone-success-soft-border);
    background: var(--wc-tone-success-soft-bg);
}

.company-settings-page .company-settings-reminder-status--off {
    border-color: var(--wc-tone-warning-soft-border);
    background: var(--wc-tone-warning-soft-bg);
}

.company-settings-page .company-settings-reminder-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 12px;
}

.company-settings-page .company-settings-reminder-fact {
    display: grid;
    gap: 4px;
    min-width: 0;
    padding: 12px 14px;
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-subtle, rgba(var(--mud-palette-primary-rgb), 0.03));
}

.company-settings-page .company-settings-reminder-fact--wide {
    grid-column: 1 / -1;
}

.company-settings-page .company-settings-reminder-actions {
    flex-wrap: wrap;
}

.company-settings-page .admin-settings-inline-surface,
.company-settings-page .admin-settings-checklist-tile {
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-2, var(--mud-palette-background));
    box-shadow: none;
}

.company-settings-page .admin-settings-inline-surface,
.company-settings-page .admin-settings-checklist-tile {
    padding: 14px;
}

.company-settings-page .admin-settings-full-height {
    height: 100%;
}

.company-settings-page .admin-settings-saving-label {
    margin-left: var(--wc-space-2, 8px);
}

.company-settings-page .admin-settings-sending-label {
    margin-left: var(--wc-space-1, 4px);
}

.company-settings-page .admin-settings-policy-row {
    display: flex;
    gap: 10px;
    align-items: flex-start;
    min-width: 0;
}

.company-settings-page .admin-settings-policy-row__copy {
    display: grid;
    gap: 2px;
    flex: 1 1 auto;
    min-width: 0;
}

.company-settings-page .admin-settings-policy-row__state {
    flex: 0 0 auto;
    padding: 4px 10px;
    border-radius: var(--wc-radius-pill, 999px);
    background: var(--wc-tone-success-soft-bg);
    color: var(--wc-tone-success-soft-fg);
    font-size: var(--wc-type-body-compact-size);
    font-weight: 700;
    white-space: nowrap;
}

@media (max-width: 599.98px) {
    .company-settings-page .admin-settings-policy-row {
        flex-wrap: wrap;
    }
}

.company-settings-page .settings-detail .mud-button-root {
    text-transform: none;
}

@media (max-width: 959.98px) {
    .company-settings-page .settings-detail .mud-button-root,
    .company-settings-page .settings-detail .mud-input-root,
    .company-settings-page .settings-detail .mud-input-slot {
        box-sizing: border-box;
        min-height: 44px;
    }

    .company-settings-page .settings-detail div.mud-input-slot.mud-select-input {
        padding-block: var(--wc-space-3, 12px);
    }
    .company-settings-page .settings-rail__desktop {
        display: none;
    }

    .company-settings-page .settings-section-picker {
        display: grid;
        gap: var(--wc-space-1, 4px);
        color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
        font-size: var(--wc-font-size-sm, 0.875rem);
    }

    .company-settings-page .settings-rail__link {
        min-height: 60px;
        height: 100%;
    }

    .company-settings-page .settings-toggle-row {
        min-height: 64px;
    }

}

@media (max-width: 599.98px) {
    .company-settings-page .settings-rail__link {
        grid-template-columns: 20px minmax(0, 1fr) auto;
        gap: var(--wc-space-1, 4px);
        padding: var(--wc-space-2, 8px);
    }

    .company-settings-page .settings-rail__icon {
        width: 20px;
        height: 20px;
    }
}

@media (max-width: 719.98px) {
    .company-settings-page .settings-detail .admin-settings-section-card__header {
        flex-direction: column;
        align-items: stretch;
    }

    .company-settings-page .settings-detail .admin-settings-section-card__actions {
        justify-content: flex-start;
    }

    .company-settings-page .settings-toggle-row__layout {
        /* MudStack's alignment utility is important; keep wrapped rows top-aligned. */
        align-items: flex-start !important;
    }

    .company-settings-page .settings-toggle-row__copy {
        align-items: flex-start !important;
    }

    .company-settings-page .company-settings-reminder-grid {
        grid-template-columns: minmax(0, 1fr);
    }

    .company-settings-page .company-settings-reminder-actions .mud-button-root,
    .company-settings-page .admin-settings-section-card__footer .mud-button-root,
    .company-settings-page .admin-save-action-card__actions .mud-button-root {
        width: 100%;
    }

    .company-settings-page .admin-settings-manual-tax-rate-header {
        flex-direction: column !important;
        align-items: stretch !important;
    }

    .company-settings-page .admin-settings-manual-tax-rate-add.mud-button-root {
        width: 100%;
        justify-content: center;
    }

    .company-settings-page .admin-settings-section-card__footer {
        flex-direction: column !important;
        align-items: stretch !important;
        width: 100%;
    }

}

/* The detail pane owns the surface; sections inside it use rhythm and dividers. */
.company-settings-page .settings-detail__form-host {
    display: grid;
    gap: var(--wc-space-6, 24px);
    min-width: 0;
}
.company-settings-page .settings-fields {
    padding: 0;
    margin: 0;
    border: 0;
    min-inline-size: 0;
}
/* Form rows share their edges and respond to the usable pane beside navigation. */
.company-settings-page #company-profile-form .wc-field-grid {
    display: grid;
    grid-template-columns: repeat(12, minmax(0, 1fr));
    gap: var(--wc-space-4, 16px);
    width: 100%;
    margin: 0;
}
.company-settings-page #company-profile-form .wc-field-grid > .mud-grid-item {
    grid-column: span 12;
    width: auto;
    max-width: none;
    padding: 0;
}
.company-settings-page #company-profile-form .settings-disclosure__content {
    gap: var(--wc-space-3, 12px);
}
.company-settings-page .settings-detail .company-profile-identity-grid {
    grid-template-columns: minmax(0, 1fr);
    gap: var(--wc-settings-stack-gap);
}
.company-settings-page .settings-detail .company-logo-panel {
    max-width: 220px;
}
@container settings-detail (min-width: 560px) {
    .company-settings-page #company-profile-form .wc-field-grid > .mud-grid-item-sm-4 {
        grid-column: span 4;
    }
    .company-settings-page #company-profile-form .wc-field-grid > .mud-grid-item-sm-6 {
        grid-column: span 6;
    }
    .company-settings-page #company-profile-form .wc-field-grid > .mud-grid-item-sm-8 {
        grid-column: span 8;
    }
}
@container settings-detail (min-width: 700px) {
    .company-settings-page .settings-detail .company-profile-identity-grid {
        grid-template-columns: 220px minmax(0, 1fr);
    }
}
.company-settings-page .settings-save-bar__message {
    flex: 1 1 12rem;
    font-size: var(--wc-font-size-sm, 0.875rem);
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
}
.company-settings-page .settings-option {
    gap: var(--wc-space-2, 8px);
    padding-bottom: var(--wc-space-4, 16px);
}
.company-settings-page .settings-toggle-row__description {
    max-width: 65ch;
}
.company-settings-page .settings-toggle-row__visual-switch {
    border-color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
}
.company-settings-page .settings-connection > summary {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: var(--wc-space-2, 8px);
    padding: var(--wc-space-4, 16px) 0;
    list-style: none;
}
.company-settings-page .settings-connection > summary::before {
    content: "";
    width: 8px;
    height: 8px;
    border-right: 2px solid currentColor;
    border-bottom: 2px solid currentColor;
    transform: rotate(-45deg);
    margin-inline: 2px var(--wc-space-2, 8px);
}
.company-settings-page .settings-connection[open] > summary::before {
    transform: rotate(45deg);
}
.company-settings-page .settings-connection > summary > small {
    flex-basis: 100%;
    margin-inline-start: var(--wc-space-6, 24px);
    font-weight: 400;
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
}
.company-settings-page .settings-detail .company-integrations-quickbooks-disclosure {
    padding: 0;
    border-radius: 0;
    border-inline: 0;
    border-bottom: 0;
    background: transparent;
}
.company-settings-page .settings-provider-notice .provider-readiness-panel__row {
    padding: var(--wc-space-3, 12px);
    gap: var(--wc-space-2, 8px);
}
.company-settings-page .settings-integration-tools > .qbo-workspace__main {
    padding-top: var(--wc-space-4, 16px);
}
@media (max-width: 599.98px) {
    .company-settings-page .settings-detail {
        padding: var(--wc-space-4, 16px);
    }
    .company-settings-page .settings-save-bar__message {
        flex-basis: 100%;
    }
    .company-settings-page .admin-save-action-card__actions {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        width: 100%;
    }
    .company-settings-page .settings-toggle-row__copy {
        gap: var(--wc-space-2, 8px);
    }
}

/* Let the application scroll container own sticky section actions. */
.company-settings-page.office-form-shell {
    overflow: visible;
}
.company-settings-page .settings-connection.qbo-secondary-panel > summary {
    display: grid;
    grid-template-columns: 16px minmax(0, 1fr);
    gap: var(--wc-space-2, 8px);
    padding: var(--wc-space-4, 16px) 0;
}
.company-settings-page .settings-connection.qbo-secondary-panel > summary::before {
    grid-row: 1;
    margin: 0;
}
.company-settings-page .settings-connection.qbo-secondary-panel > summary > small {
    grid-column: 2;
    margin: 0;
}

/* ===== WorkCita.Client/wwwroot/css/app.features.integrations.css ===== */
/*
 * WorkCita global stylesheet module: app.features.integrations.css
 * Scope: provider setup workspaces and integration review flows.
 * Load: after app.features.admin.css; before app.features.pricebook.css (index.html).
 */

.company-settings-page .admin-settings-stack--qbo-focused {
    gap: 16px;
}

.company-settings-page .qbo-workspace {
    display: grid;
    gap: 18px;
    min-width: 0;
    padding: 18px;
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    box-shadow: var(--wc-surface-shadow-xs, var(--shadow-xs));
}

.company-settings-page .qbo-workspace__header {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(18rem, auto);
    gap: 16px;
    align-items: start;
    padding-bottom: 16px;
    border-bottom: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
}

.company-settings-page .qbo-workspace__title,
.company-settings-page .qbo-workspace__status {
    display: grid;
    gap: 8px;
    min-width: 0;
}

.company-settings-page .qbo-workspace__title .mud-typography {
    max-width: 68ch;
}

.company-settings-page .qbo-workspace__status {
    justify-items: end;
}

.company-settings-page .qbo-workspace__primary-actions {
    display: flex;
    justify-content: flex-end;
    width: 100%;
}

.company-settings-page .qbo-workspace__primary-actions .mud-button-root {
    min-height: 44px;
}

.company-settings-page .qbo-workspace__facts {
    display: flex;
    flex-wrap: wrap;
    gap: 8px 14px;
    justify-content: flex-end;
}

.company-settings-page .qbo-workspace__facts span,
.company-settings-page .qbo-stage-summary span {
    display: grid;
    gap: 2px;
    min-width: 6.5rem;
}

.company-settings-page .qbo-workspace__facts small,
.company-settings-page .qbo-stage-summary small {
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-meta-size);
    line-height: 1.2;
}

.company-settings-page .qbo-workspace__facts strong,
.company-settings-page .qbo-stage-summary strong {
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-size: var(--wc-type-body-compact-size);
    line-height: 1.25;
}

.company-settings-page .qbo-workspace__secondary-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 4px;
    justify-content: flex-end;
}

.company-settings-page .qbo-workspace__secondary-actions .mud-button-root,
.company-settings-page .qbo-import-panel .mud-button-root,
.company-settings-page .qbo-import-row-action {
    min-height: 44px;
}

.qbo-sync-activity-alert {
    align-items: center;
    display: flex;
    flex-wrap: wrap;
    gap: 8px 12px;
    justify-content: space-between;
}

.qbo-sync-record-cell {
    min-width: 0;
}

.job-costing-qbo-status {
    display: grid;
    gap: 2px;
    min-width: 0;
}

.company-settings-page .qbo-account-details__value {
    display: grid;
    gap: 2px;
    max-width: 28rem;
}

.company-settings-page .qbo-account-details__value small {
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-meta-size);
}

.company-settings-page .qbo-account-details__value strong {
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-size: var(--wc-type-body-compact-size);
    overflow-wrap: anywhere;
}

.company-settings-page .qbo-workspace__main {
    display: grid;
    grid-template-columns: minmax(11rem, 13rem) minmax(0, 1fr);
    gap: 18px;
    align-items: start;
}

.company-settings-page .qbo-step-rail {
    display: grid;
    gap: 6px;
    min-width: 0;
}

.company-settings-page .qbo-step-rail__item {
    appearance: none;
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: 10px;
    align-items: center;
    width: 100%;
    min-height: 54px;
    padding: 9px 10px;
    border: 1px solid transparent;
    border-radius: var(--wc-control-radius);
    background: transparent;
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    cursor: pointer;
    font: inherit;
    text-align: left;
}

.company-settings-page .qbo-step-rail__item:hover {
    background: var(--wc-surface-2, var(--mud-palette-background-gray));
}

.company-settings-page .qbo-step-rail__item:focus-visible {
    border-color: var(--wc-accent, var(--mud-palette-primary));
    box-shadow: var(--wc-focus-ring);
    outline: none;
}

.company-settings-page .qbo-step-rail__item:disabled,
.company-settings-page .qbo-step-rail__item--disabled {
    color: var(--wc-state-disabled, var(--mud-palette-text-disabled));
    cursor: not-allowed;
    opacity: 0.68;
}

.company-settings-page .qbo-step-rail__item--active {
    border-color: rgba(var(--wc-accent-rgb), 0.28);
    background: rgba(var(--wc-accent-rgb), 0.055);
}

.company-settings-page .qbo-step-rail__index {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border-radius: var(--wc-radius-pill);
    background: var(--wc-surface-2, var(--mud-palette-background-gray));
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-caption-size);
    font-weight: 700;
}

.company-settings-page .qbo-step-rail__item--active .qbo-step-rail__index {
    background: var(--wc-tone-primary-soft-bg);
    color: var(--wc-tone-primary-soft-fg);
}

.company-settings-page .qbo-step-rail__item--complete .qbo-step-rail__index {
    background: var(--wc-tone-success-soft-bg);
    color: var(--wc-tone-success-soft-fg);
}

.company-settings-page .qbo-step-rail__copy {
    display: grid;
    gap: 2px;
    min-width: 0;
}

.company-settings-page .qbo-step-rail__label {
    font-size: var(--wc-type-body-compact-size);
    font-weight: 700;
    line-height: 1.2;
}

.company-settings-page .qbo-step-rail__status {
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-caption-size);
    line-height: 1.2;
}

.company-settings-page .qbo-step-stage {
    display: grid;
    gap: 16px;
    min-width: 0;
}

/* An unqueried import is supporting setup guidance within the settings pane. */
.company-settings-page .qbo-import-panel .empty-state {
    min-height: 0;
    width: 100%;
    padding: var(--wc-space-4, 16px);
    gap: var(--wc-space-3, 12px);
}
.company-settings-page .qbo-import-panel .empty-state-illustration {
    width: 44px;
    height: 44px;
}
.company-settings-page .qbo-import-panel .empty-state-illustration .mud-icon-root {
    font-size: var(--wc-type-icon-medium-size, 24px);
}
.company-settings-page .qbo-import-panel .empty-state-title {
    margin-top: 0;
    font-size: var(--wc-type-body-size);
    line-height: 1.5;
}
.company-settings-page .qbo-import-panel .empty-state-message {
    margin-bottom: 0;
    font-size: var(--wc-type-body-compact-size);
    line-height: 1.5;
}

.company-settings-page .qbo-step-stage__intro {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: 14px;
    align-items: start;
}

.company-settings-page .qbo-step-stage__actions,
.company-settings-page .qbo-step-stage__footer {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    justify-content: flex-end;
}

.company-settings-page .qbo-step-stage__footer {
    padding-top: 2px;
}

.company-settings-page .qbo-step-stage__footer--secondary {
    justify-content: flex-start;
}

.company-settings-page .qbo-stage-summary {
    display: flex;
    flex-wrap: wrap;
    gap: 10px 18px;
    padding: 12px;
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--wc-control-radius);
    background: var(--wc-surface-2, var(--mud-palette-background-gray));
}

.company-settings-page .qbo-secondary-panel {
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1, var(--mud-palette-surface));
    box-shadow: var(--wc-surface-shadow-xs, var(--shadow-xs));
}

.company-settings-page .qbo-secondary-panel > summary {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 2px;
    padding: 14px 16px;
    cursor: pointer;
    list-style-position: inside;
}

.company-settings-page .qbo-secondary-panel > summary span {
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-size: var(--wc-type-body-emphasis-size);
    font-weight: 700;
    line-height: 1.25;
}

.company-settings-page .qbo-secondary-panel > summary small {
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-body-compact-size);
    line-height: 1.35;
}

.company-settings-page .qbo-secondary-panel__body {
    display: grid;
    gap: 12px;
    padding: 0 16px 16px;
}

.company-settings-page .qbo-export-summary {
    display: grid;
    gap: 8px;
    grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
}

.company-settings-page .qbo-export-summary span {
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--wc-radius-sm);
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-size: var(--wc-type-body-size);
    min-height: 2.5rem;
    padding: 0.625rem 0.75rem;
}

.company-settings-page .qbo-setup-field {
    display: grid;
    gap: 0.35rem;
}

.company-settings-page .qbo-setup-field__label {
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-caption-size);
    font-weight: 600;
    line-height: 1.25;
}

.company-settings-page .qbo-setup-field__control {
    width: 100%;
    min-height: 44px;
    border: 1px solid var(--wc-border-strong, var(--mud-palette-lines-default));
    border-radius: var(--wc-radius-sm);
    background: var(--wc-surface-1, var(--mud-palette-surface));
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font: inherit;
    padding: 0.5rem 2rem 0.5rem 0.75rem;
}

.company-settings-page .qbo-setup-field__control:focus {
    border-color: var(--wc-accent, var(--mud-palette-primary));
    box-shadow: var(--wc-focus-ring);
    outline: none;
}

.company-settings-page .qbo-setup-toggle-grid {
    display: grid;
    gap: 0.75rem;
    grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
}

.company-settings-page .qbo-setup-toggle {
    align-items: center;
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--wc-radius-sm);
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    display: flex;
    font-size: var(--wc-type-body-size);
    gap: 0.625rem;
    min-height: 44px;
    padding: 0.5rem 0.75rem;
}

.company-settings-page .qbo-setup-toggle input {
    accent-color: var(--wc-accent, var(--mud-palette-primary));
    flex: 0 0 auto;
}

.company-settings-page .qbo-import-panel {
    display: grid;
    gap: 14px;
    min-width: 0;
}

.company-settings-page .qbo-import-toolbar {
    align-items: start;
    display: grid;
    gap: 12px;
    grid-template-columns: minmax(0, 1fr) auto;
}

.company-settings-page .qbo-import-toolbar__copy {
    display: grid;
    gap: 3px;
    min-width: 0;
}

.company-settings-page .qbo-import-toolbar__actions {
    align-items: center;
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    justify-content: flex-end;
}

.company-settings-page .qbo-import-skeleton {
    display: grid;
    gap: 10px;
}

.company-settings-page .qbo-import-summary {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    overflow: hidden;
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--wc-control-radius);
    background: var(--wc-surface-1, var(--mud-palette-surface));
}

.company-settings-page .qbo-import-summary__item {
    border-right: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    display: grid;
    gap: 3px;
    min-width: 0;
    padding: 12px;
}

.company-settings-page .qbo-import-summary__item:last-child {
    border-right: 0;
}

.company-settings-page .qbo-import-summary__item--ready {
    border-color: var(--wc-tone-success-soft-border);
}

.company-settings-page .qbo-import-summary__item--review {
    border-color: var(--wc-tone-warning-soft-border);
}

.company-settings-page .qbo-import-summary__value {
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-size: var(--wc-type-value-size);
    font-weight: 700;
    line-height: 1.1;
}

.company-settings-page .qbo-import-summary__label {
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
    font-size: var(--wc-type-body-compact-size);
    font-weight: 700;
    line-height: 1.2;
}

.company-settings-page .qbo-import-summary__help {
    color: var(--wc-text-secondary, var(--mud-palette-text-secondary));
    font-size: var(--wc-type-caption-size);
    line-height: 1.35;
}

.company-settings-page .qbo-import-clear-state {
    align-items: center;
    background: var(--wc-tone-success-soft-bg);
    border: 1px solid var(--wc-tone-success-soft-border);
    border-radius: var(--wc-control-radius);
    color: var(--wc-tone-success-soft-fg);
    display: grid;
    gap: 10px;
    grid-template-columns: auto minmax(0, 1fr);
    padding: 12px;
}

.company-settings-page .qbo-import-clear-state .mud-typography {
    color: var(--wc-text-strong, var(--mud-palette-text-primary));
}

.company-settings-page .qbo-import-section-heading {
    align-items: start;
    display: grid;
    gap: 12px;
    grid-template-columns: minmax(0, 1fr) auto;
}

.company-settings-page .qbo-import-review,
.company-settings-page .qbo-import-ready {
    display: grid;
    gap: 10px;
}

.company-settings-page .qbo-import-grid,
.company-settings-page .qbo-import-grid__facts {
    min-width: 0;
}

.company-settings-page .qbo-import-grid__facts {
    display: grid;
    gap: 2px;
}

.company-settings-page .qbo-import-data-grid:not(.page-data-grid--responsive-active) .wc-data-cell--type {
    width: 6rem;
}

.company-settings-page .qbo-import-data-grid:not(.page-data-grid--responsive-active) .wc-data-cell--status {
    width: 6rem;
}

.company-settings-page .qbo-import-data-grid:not(.page-data-grid--responsive-active) .wc-data-cell--actions {
    width: 5.75rem;
}

.company-settings-page .qbo-import-grid__details-list {
    display: grid;
    gap: 10px;
    margin-top: 10px;
    min-width: 0;
}

.company-settings-page .qbo-import-grid__details-panel {
    display: grid;
    gap: 12px;
    padding: 12px;
    border: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    border-radius: var(--wc-control-radius);
    background: var(--wc-surface-2, var(--mud-palette-background-gray));
}

.company-settings-page .qbo-import-grid__details-heading {
    align-items: center;
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    justify-content: space-between;
    min-width: 0;
}

.company-settings-page .qbo-import-row-editor {
    display: grid;
    gap: 0.75rem;
    min-width: 0;
}

.company-settings-page .qbo-import-row-editor__grid {
    display: grid;
    gap: 0.75rem;
    grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr));
}

.company-settings-page .qbo-import-row-editor__actions {
    align-items: center;
    display: flex;
    justify-content: flex-end;
}

@media (min-width: 960px) and (max-width: 1399.98px) {
    .company-settings-page .qbo-workspace__header {
        grid-template-columns: minmax(0, 1fr);
    }

    .company-settings-page .qbo-workspace__status {
        justify-items: start;
    }

    .company-settings-page .qbo-workspace__facts,
    .company-settings-page .qbo-workspace__secondary-actions {
        justify-content: flex-start;
    }

    .company-settings-page .qbo-workspace__primary-actions {
        justify-content: flex-start;
    }

    .company-settings-page .qbo-workspace__main {
        align-items: stretch;
        display: flex;
        flex-direction: column;
    }

    .company-settings-page .qbo-step-rail {
        grid-template-columns: repeat(4, minmax(0, 1fr));
    }

    .company-settings-page .qbo-step-rail__item {
        grid-template-columns: minmax(0, 1fr);
        justify-items: center;
        min-height: 50px;
        padding: 8px 6px;
        text-align: center;
    }

    .company-settings-page .qbo-step-rail__copy {
        justify-items: center;
    }
}

@media (max-width: 959.98px) {
    .company-settings-page .qbo-workspace__header {
        grid-template-columns: minmax(0, 1fr);
    }

    .company-settings-page .qbo-workspace__status {
        justify-items: start;
    }

    .company-settings-page .qbo-workspace__facts,
    .company-settings-page .qbo-workspace__secondary-actions {
        justify-content: flex-start;
    }

    .company-settings-page .qbo-workspace__primary-actions {
        justify-content: flex-start;
    }

    .company-settings-page .qbo-workspace__main {
        align-items: stretch;
        display: flex;
        flex-direction: column;
    }

    .company-settings-page .qbo-step-stage {
        order: 1;
    }

    .company-settings-page .qbo-step-rail {
        order: 2;
        grid-template-columns: repeat(4, minmax(0, 1fr));
    }

    .company-settings-page .qbo-step-rail__item {
        grid-template-columns: minmax(0, 1fr);
        justify-items: center;
        min-height: 58px;
        text-align: center;
    }

    .company-settings-page .qbo-step-rail__copy {
        justify-items: center;
    }
}

@media (max-width: 719.98px) {
    .company-settings-page .qbo-workspace {
        padding: 14px;
        border-radius: var(--wc-card-radius, var(--border-radius-md));
    }

    .company-settings-page .qbo-workspace--reviewing .qbo-workspace__subtitle {
        display: none;
    }

    .company-settings-page .qbo-workspace__header {
        gap: 10px;
        padding-bottom: 12px;
    }

    .company-settings-page .qbo-workspace__title {
        gap: 6px;
    }

    .company-settings-page .qbo-workspace__status {
        gap: 8px;
    }

    .company-settings-page .qbo-workspace__facts {
        display: grid;
        grid-template-columns: repeat(3, minmax(0, 1fr));
        width: 100%;
    }

    .company-settings-page .qbo-workspace__facts span {
        min-width: 0;
    }

    .company-settings-page .qbo-workspace__secondary-actions {
        display: flex;
        gap: 8px;
        justify-content: flex-start;
        width: 100%;
    }

    .company-settings-page .qbo-workspace__primary-actions {
        justify-content: stretch;
        width: 100%;
    }

    .company-settings-page .qbo-workspace__primary-actions .mud-button-root {
        width: 100%;
    }

    .company-settings-page .qbo-workspace__secondary-actions .mud-button-root {
        flex: 1 1 auto;
    }

    .company-settings-page .qbo-step-stage__actions,
    .company-settings-page .qbo-step-stage__footer {
        align-items: stretch;
        flex-direction: column;
        width: 100%;
    }

    .company-settings-page .qbo-step-stage__actions .mud-button-root,
    .company-settings-page .qbo-step-stage__footer .mud-button-root {
        width: 100%;
    }

    .company-settings-page .qbo-step-stage__intro {
        grid-template-columns: minmax(0, 1fr);
    }

    .company-settings-page .qbo-step-rail {
        grid-template-columns: repeat(4, minmax(0, 1fr));
        gap: 4px;
    }

    .company-settings-page .qbo-step-rail__item {
        min-height: 50px;
        padding: 7px 4px;
    }

    .company-settings-page .qbo-step-rail__index {
        height: 24px;
        width: 24px;
    }

    .company-settings-page .qbo-step-rail__label {
        font-size: var(--wc-type-caption-size);
    }

    .company-settings-page .qbo-step-rail__status {
        display: none;
    }

    .company-settings-page .qbo-import-toolbar,
    .company-settings-page .qbo-import-section-heading {
        grid-template-columns: minmax(0, 1fr);
    }

    .company-settings-page .qbo-import-panel--has-preview .qbo-import-toolbar__help {
        display: none;
    }

    /* The base summary stacks; only the preview variant keeps three lanes. The
       item rules below already flip the divider from vertical to horizontal for
       the stacked case, but the column rule that makes it stack was missing, so
       three lanes stayed jammed into the phone lane. */
    .company-settings-page .qbo-import-summary {
        grid-template-columns: minmax(0, 1fr);
    }

    .company-settings-page .qbo-import-panel--has-preview .qbo-import-summary {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }

    .company-settings-page .qbo-import-summary__item {
        border-right: 0;
        border-bottom: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
    }

    .company-settings-page .qbo-import-panel--has-preview .qbo-import-summary__item {
        border-right: 1px solid var(--wc-border-soft, var(--mud-palette-divider));
        border-bottom: 0;
        padding: 8px;
    }

    .company-settings-page .qbo-import-panel--has-preview .qbo-import-summary__item:last-child {
        border-right: 0;
    }

    .company-settings-page .qbo-import-panel--has-preview .qbo-import-summary__help {
        display: none;
    }

    .company-settings-page .qbo-import-summary__item:last-child {
        border-bottom: 0;
    }

    .company-settings-page .qbo-import-toolbar__actions {
        align-items: stretch;
        justify-content: stretch;
        order: -1;
    }

    .company-settings-page .qbo-import-toolbar__actions .mud-button-root,
    .company-settings-page .qbo-import-grid__details-heading .mud-button-root {
        width: 100%;
    }

    .company-settings-page .qbo-import-grid__details-heading {
        align-items: stretch;
        flex-direction: column;
    }

    .company-settings-page .qbo-import-row-editor__grid {
        grid-template-columns: minmax(0, 1fr);
    }
}

@media (max-width: 599.98px) {
    /* The bookkeeper section sits in a narrow settings grid. Its disclosure
       wrapper otherwise keeps its min-content width and pushes the whole card
       past the detail pane at phone widths. */
    .company-settings-page .form-section-collapsible:has(.qbo-bookkeeper-settings-field-grid),
    .company-settings-page .form-section-collapsible:has(.qbo-bookkeeper-settings-field-grid) > .wc-disclosure-panel,
    .company-settings-page .form-section-collapsible:has(.qbo-bookkeeper-settings-field-grid) > .wc-disclosure-panel > .wc-disclosure-panel__body {
        width: 100%;
        min-width: 0;
    }

    .company-settings-page .qbo-import-data-grid .wc-data-cell--type,
    .company-settings-page .qbo-import-data-grid .wc-data-cell--status,
    .company-settings-page .qbo-import-data-grid .wc-data-cell--actions {
        width: 100%;
    }
}

/* The disclosure already frames this embedded setup workspace. */
.company-settings-page .company-integrations-quickbooks-disclosure .qbo-workspace {
    border: 0;
    box-shadow: none;
    padding: 0;
}

/* ===== WorkCita.Client/wwwroot/css/app.features.pricebook.css ===== */
/*
 * WorkCita global stylesheet module: app.features.pricebook.css
 * Ownership layer: feature geometry (pricebook workspace).
 * Ownership: pricebook list, catalog, category/mobile card, and pricebook table geometry.
 * Theme: universal --wc-* tokens only; not a separate surface theme.
 * Parent: GitHub #404 mechanical CSS ownership split (no visual redesign).
 * Load: after app.features.integrations.css; before app.portal.css (index.html).
 */

/* =============================================================================
   Pricebook Components
   ============================================================================= */

.pricebook-card-active {
    border-color: var(--wc-tone-success-soft-border, rgba(var(--mud-palette-success-rgb), 0.2));
    background: var(--wc-tone-success-soft-bg, rgba(var(--mud-palette-success-rgb), 0.06));
}

.pricebook-card-inactive {
    border-color: var(--wc-tone-default-soft-border, var(--wc-border-soft, var(--mud-palette-divider)));
    opacity: 0.85;
}

.pricebook-command-center-shell.office-command-center-shell {
    gap: var(--wc-space-3, 12px);
}

.pricebook-header-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-end;
    gap: var(--wc-space-2, 8px);
}

@media (max-width: 959.98px) {
    .pricebook-command-center-shell .command-center-header-row {
        align-items: stretch;
    }

    .pricebook-header-actions {
        flex-direction: column;
        align-items: stretch;
        width: 100%;
    }

    .pricebook-header-actions .mud-button-root {
        width: 100%;
    }
}

.pricebook-catalog-command-center-shell.office-command-center-shell {
    gap: var(--wc-space-2, 8px);
}

.pricebook-catalog-command-center-shell .command-center-header-filters {
    padding-top: var(--wc-space-1, 4px);
}

.pricebook-catalog-header-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-end;
    gap: var(--wc-space-2, 8px);
}

@media (max-width: 959.98px) {
    .pricebook-catalog-header-actions {
        flex-direction: column;
        align-items: stretch;
        width: 100%;
    }

    .pricebook-catalog-header-actions .mud-button-root {
        width: 100%;
    }
}

.pricebook-catalog-surface.office-command-surface .office-section-card-body {
    margin: 0;
}
.pricebook-catalog-content {
    display: flex;
    flex-direction: column;
    gap: var(--wc-space-2, 8px);
    margin-top: var(--wc-space-1, 4px);
    width: 100%;
    max-width: 100%;
}

.pricebook-catalog-section-header {
    margin-bottom: var(--wc-space-2, 8px);
    flex-wrap: wrap;
    gap: var(--wc-space-2, 8px);
}

.pricebook-catalog-section-card {
    border: 0;
    overflow: visible;
}

.pricebook-catalog-section-body {
    display: flex;
    flex-direction: column;
    min-width: 0;
    min-height: 0;
}

.pricebook-catalog-section-body .page-data-grid--mode-catalog.mud-table-root,
.pricebook-catalog-section-body .page-data-grid--mode-catalog {
    width: 100%;
}

.pricebook-catalog-table-hint {
    display: block;
    margin: 0;
    max-width: 100%;
}

.pricebook-catalog-search-empty {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--wc-space-2, 8px);
    padding: var(--wc-space-3, 12px) 0;
    max-width: 42ch;
}

@media (max-width: 959.98px) {
    .pricebook-catalog-section-header {
        flex-direction: column;
        align-items: stretch;
    }

    .pricebook-catalog-section-header .mud-button-root {
        width: 100%;
    }

    .pricebook-catalog-search-empty {
        padding-inline: var(--wc-space-1, 4px);
    }
}

.pricebook-catalog-grid.mud-grid {
    width: 100%;
    max-width: 100%;
    margin: 0;
    row-gap: var(--wc-space-4, 16px);
}

@media (min-width: 960px) {
    .pricebook-catalog-content {
        gap: var(--wc-space-3, 12px);
    }

    .pricebook-catalog-grid.mud-grid {
        row-gap: var(--wc-space-5, 20px);
    }

    .pricebook-catalog-section-header {
        margin-bottom: var(--wc-space-3, 12px);
    }
}

.pricebook-catalog-grid__column.mud-grid-item {
    min-width: 0;
    align-self: stretch;
}

.pricebook-catalog-grid__column > .wc-inline-surface {
    width: 100%;
    min-width: 0;
}

.pricebook-catalog-table .mud-table-row.pricebook-catalog-row--editable {
    cursor: pointer;
}

.pricebook-catalog-table .mud-table-row.pricebook-catalog-row--locked {
    cursor: default;
}

.pricebook-catalog-row-actions {
    flex-wrap: nowrap;
}

.pricebook-catalog-name-edit.mud-button-root {
    justify-content: flex-start;
    min-height: 44px;
    padding-inline: 0;
    text-align: start;
    text-transform: none;
}

.pricebook-catalog-empty-fact {
    color: var(--wc-text-muted, var(--mud-palette-text-secondary));
}

/* ===== WorkCita.Client/wwwroot/css/app.portal.css ===== */
/*
 * WorkCita global stylesheet module: app.portal.css
 * Ownership layer: feature geometry (portal workflow layout).
 * Ownership: customer portal shell, navigation, dashboard, and data presentation surfaces.
 * Theme: universal --wc-* tokens only; portal density and copy differ, not palette or theme.
 * Parent: GitHub #404 mechanical CSS ownership split (no visual redesign).
 * Load: after app.features.pricebook.css; before app.auth.css (index.html).
 */


/* =============================================================================
   Customer Portal - Universal Theme Shell
   ============================================================================= */

.portal-layout {
    position: relative;
    background: var(--wc-page-background);
    min-height: 100vh;
    min-height: 100dvh;
}

.portal-appbar {
    color: var(--wc-shell-appbar-text) !important;
}

.portal-appbar .mud-toolbar {
    min-height: 64px;
    gap: 12px;
}

.portal-drawer {
    border-right: 1px solid var(--wc-border-soft);
}

.portal-drawer .mud-drawer-content {
    background: var(--wc-surface-1);
    overflow-y: auto;
}

.portal-drawer-header {
    flex: 0 0 auto;
    padding: 22px 20px 16px;
    border-bottom: 1px solid var(--wc-border-soft);
}

.portal-access-actions-divider {
    margin-block: var(--wc-space-4, 16px);
}

.portal-drawer-header-divider {
    margin-block: var(--wc-space-1, 4px);
}

.portal-drawer-company-switcher {
    padding: 0 var(--wc-space-4, 16px) var(--wc-space-3, 12px);
}

.portal-secure-badge-wrap {
    /* Clear the drawer header's bottom border so the badge doesn't sit on the line. */
    padding: var(--wc-space-3, 12px) var(--wc-space-4, 16px) var(--wc-space-2, 8px);
}

.portal-company-logo {
    border: 2px solid rgba(var(--wc-accent-rgb), 0.12);
    box-shadow: none;
}

.portal-appbar-brand {
    flex: 0 1 auto;
    min-width: 0;
    max-width: 100%;
}

/* MudLink Underline.None opts this link out of Mud's only focus substitute, so
   the brand had no keyboard indicator at all. The app-wide rule in app.base.css
   now owns the outline; this only gives it a shape to hug, matching the rounded
   logo avatar beside it rather than boxing the whole brand stack in a bare
   rectangle. */
.portal-appbar-brand:focus-visible {
    border-radius: var(--wc-radius-md);
}

.portal-appbar-logo {
    border: 1px solid var(--wc-shell-brand-border);
    background: var(--wc-shell-brand-bg);
    box-shadow: none;
}

.portal-appbar-logo img {
    object-fit: contain;
}

.portal-brand-copy {
    min-width: 0;
}

.portal-brand-title {
    letter-spacing: 0;
    font-weight: 700;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.portal-product-label {
    color: var(--wc-shell-appbar-muted);
    font-family: var(--wc-type-label-family);
    font-size: var(--wc-type-label-size);
    font-weight: var(--wc-type-label-weight);
    line-height: var(--wc-type-label-leading);
    letter-spacing: 0;
    text-transform: none;
}

.portal-appbar-action {
    margin-right: 6px;
}

.portal-mobile-brand-copy {
    min-width: 0;
    max-width: min(48vw, 220px);
}

.portal-mobile-brand-title,
.portal-customer-name {
    min-width: 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    letter-spacing: 0;
}

.portal-mobile-brand-title {
    font-weight: 700;
    color: var(--wc-shell-appbar-text);
}

.portal-customer-name {
    flex: 0 1 auto;
    max-width: min(22vw, 180px);
    color: var(--wc-shell-appbar-muted);
}

.portal-drawer-customer-identity {
    min-width: 0;
}

.portal-drawer-customer-name {
    min-width: 0;
    overflow-wrap: anywhere;
    word-break: break-word;
}

@media (max-width: 959.98px) {
    .portal-appbar-brand {
        flex: 1 1 auto;
    }

    .portal-secure-badge-wrap {
        display: none;
    }
}

.portal-badge {
    width: fit-content;
    font-size: var(--wc-type-caption-size);
    letter-spacing: 0.12em;
    text-transform: uppercase;
}

.portal-drawer-nav-label {
    color: var(--wc-text-soft);
    letter-spacing: 0.12em;
    text-transform: uppercase;
    font-weight: 700;
}

@media (max-width: 599.98px) {
    .portal-appbar .mud-toolbar {
        min-height: 56px;
        gap: 8px;
        padding-inline: 8px;
    }

    .portal-appbar .mud-icon-button {
        padding: 8px;
    }

    .portal-appbar .portal-menu-button {
        margin-left: 0;
    }

    .portal-mobile-brand-copy {
        max-width: min(42vw, 170px);
    }

    .portal-mobile-brand-title {
        font-size: var(--wc-type-body-compact-size);
        line-height: 1.2;
    }

    .portal-customer-name {
        max-width: min(20vw, 92px);
        font-size: var(--wc-type-caption-size);
    }

    .portal-drawer-customer-name {
        line-height: 1.35;
    }
}

.portal-drawer-nav-label {
    display: block;
    padding-inline: 18px;
    margin-bottom: 8px;
}

.portal-drawer-section-divider {
    margin-block: var(--wc-space-3, 12px);
}

.portal-drawer .mud-nav-link {
    margin: 4px 12px;
    border-radius: var(--wc-control-radius, var(--border-radius-md));
    min-height: 46px;
    padding-inline: 14px;
    transition:
        background-color var(--wc-motion-base) var(--wc-ease-out-quart),
        color var(--wc-motion-base) var(--wc-ease-out-quart),
        transform var(--wc-motion-base) var(--wc-ease-out-quart),
        box-shadow var(--wc-motion-base) var(--wc-ease-out-quart);
}

.portal-drawer .mud-nav-link:hover {
    background: rgba(var(--wc-accent-rgb), 0.06);
    box-shadow: inset 0 0 0 1px rgba(var(--wc-accent-rgb), 0.08);
    transform: none;
}

.portal-drawer .mud-nav-link.active {
    border-left: none;
    background: var(--wc-surface-brand-soft);
    box-shadow: inset 0 0 0 1px var(--wc-tone-primary-soft-border);
}

.portal-drawer .mud-nav-link.active .mud-nav-link-text,
.portal-drawer .mud-nav-link.active .mud-icon-root {
    color: var(--wc-accent-strong);
}

.portal-main-content {
    position: relative;
    background: transparent;
    padding-bottom: 32px;
}

.portal-layout .page-control-band {
    border-color: var(--wc-border-soft);
    background: var(--wc-surface-1);
    box-shadow: none;
}

.portal-layout .page-control-band-title,
.portal-context-band-title {
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.portal-layout .page-context-band {
    border-color: var(--wc-tone-primary-soft-border);
    background: var(--wc-surface-2);
    box-shadow: none;
}

.page-context-band--dense {
    padding: 8px 10px;
}

.portal-page-shell {
    position: relative;
    z-index: 1;
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    align-content: start;
    gap: var(--wc-shell-lane-gap);
}

.portal-guarded-list-state,
.portal-guarded-detail-state {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: var(--wc-shell-lane-gap);
    min-width: 0;
}
.portal-page-shell > .d-flex {
    gap: var(--wc-shell-lane-gap) !important;
}

.portal-page-shell--support,
.portal-page-shell--focus {
    margin-inline: auto;
}

.portal-page-shell--support {
    max-width: 1120px;
}

.portal-page-shell--focus {
    max-width: 720px;
}

.portal-page-header {
    position: relative;
    box-sizing: border-box;
    width: 100%;
    max-width: 100%;
    min-width: 0;
    overflow: visible;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: transparent;
    color: var(--wc-command-header-fg, var(--wc-text-strong));
    box-shadow: none;
}

/* Portal headers match the office command header contract: plain orientation
   strips; the primary content surface owns the visible frame. */

.portal-page-header-standard {
    background: transparent;
}

.portal-page-header-compact {
    padding: 0;
    border-radius: 0;
    background: transparent;
    box-shadow: none;
}

.portal-page-header-hero {
    padding: 0;
    border-color: transparent;
    background: transparent;
    box-shadow: none;
}

@media (min-width: 960px) {
    .portal-page-header {
        padding: 0;
    }

    .portal-page-header-hero {
        padding: 0;
    }
}

.portal-page-header-title {
    font-size: var(--wc-page-title-size);
    font-weight: var(--wc-page-title-weight);
    letter-spacing: 0;
    word-break: normal;
    overflow-wrap: anywhere;
    color: var(--wc-command-header-fg, var(--wc-page-title-ink));
}

.portal-page-header-hero .portal-page-header-title {
    color: var(--wc-command-header-fg, var(--wc-text-strong));
}

.portal-page-header-subtitle {
    max-width: 58ch;
}

.portal-page-header-hero .portal-page-header-subtitle,
.portal-page-header-hero .mud-typography-color-secondary {
    color: var(--wc-command-header-muted, var(--wc-text-muted)) !important;
}

.portal-page-header .portal-page-header-subtitle,
.portal-page-header .mud-typography-color-secondary {
    color: var(--wc-command-header-muted, var(--wc-text-muted)) !important;
}

.portal-page-header-copy {
    flex: 1 1 18rem;
    min-width: 0;
}

.portal-page-header-top {
    flex-wrap: wrap;
    gap: 12px;
    min-width: 0;
    max-width: 100%;
}

.portal-page-header-actions {
    position: relative;
    z-index: 1;
    flex: 0 1 auto;
    max-width: 100%;
    min-width: 0;
    flex-wrap: wrap;
    justify-content: flex-end;
}

.portal-page-header-chip-row {
    flex-wrap: wrap;
}

.portal-page-header-actions > * {
    max-width: 100%;
    min-width: 0;
}

.portal-page-header-actions .mud-button-root {
    box-shadow: none;
    white-space: normal;
}

.portal-page-header .mud-button-outlined:not(.mud-icon-button) {
    border-color: var(--wc-command-header-soft);
    background: var(--wc-command-header-soft);
    color: var(--wc-command-header-fg, var(--wc-text-strong));
}

.portal-page-header-footer {
    position: relative;
    z-index: 1;
    padding-top: 12px;
    border-top: 1px solid var(--wc-command-header-soft, rgba(var(--wc-accent-rgb), 0.12));
}

.portal-page-header-hero .portal-page-header-footer {
    border-top-color: rgba(var(--wc-accent-rgb), 0.12);
}

@media (max-width: 599.98px) {
    .portal-page-header-top.d-flex {
        flex-direction: column !important;
        align-items: stretch !important;
    }

    .portal-page-header-copy {
        flex-basis: 100%;
    }

    .portal-page-header-actions {
        width: 100%;
        align-items: stretch !important;
        justify-content: stretch;
    }

    .portal-page-header-actions > * {
        flex: 1 1 100%;
        width: 100%;
    }

    .portal-page-header-actions .mud-button-root:not(.mud-icon-button) {
        width: 100%;
    }
}

/* Portal stat strip wrappers delegate base visuals to Wc* (app.shared-primitives.css). */

.portal-detail-summary-surfaces {
    display: grid;
    gap: 10px;
}

.portal-summary-surfaces {
    display: grid;
    gap: 10px;
}

/* Portal section card wrappers delegate base visuals to Wc* (app.shared-primitives.css). */

.portal-section-card .mud-card-actions {
    padding: 0 20px 20px;
}

.portal-section-title {
    margin: 0;
    line-height: 1.18;
}

.portal-section-card-subtitle {
    margin: 0;
}

.portal-summary-card {
    position: sticky;
    top: 88px;
}

.portal-list-top {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 16px;
    flex-wrap: wrap;
}

.portal-list-top-copy {
    max-width: 56ch;
}

.portal-list-top-actions {
    display: flex;
    gap: 10px;
    flex-wrap: wrap;
}

.operational-timezone-gate-card {
    max-width: 56rem;
}

.operational-timezone-gate-band {
    margin-top: 0;
}

.invoice-line-items-section,
.invoice-payment-schedule-section {
    margin-bottom: 0;
}

.portal-dashboard-action-row {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 8px;
}

.portal-dashboard-action-row--secondary {
    align-items: stretch;
}

.portal-dashboard-action-row .wc-action-signal-list__item {
    display: flex;
    min-width: 0;
}

.portal-dashboard-action-row .wc-action-signal-row {
    width: 100%;
    min-height: 66px;
    background: transparent;
}

@media (max-width: 959.98px) {
    .portal-dashboard-action-row {
        grid-template-columns: 1fr;
    }

    .portal-dashboard-next-action .mud-button-root {
        min-height: 44px;
    }
}

.portal-dashboard-next-action,
.portal-context-action-cell,
.portal-toolbar-action-cell {
    display: flex;
    flex-wrap: wrap;
    gap: var(--wc-space-2, 8px);
    align-items: center;
    justify-content: flex-end;
}

.portal-dashboard-next-action .mud-button-root,
.portal-context-action-cell .mud-button-root,
.portal-toolbar-action-cell .mud-button-root {
    min-width: 0;
}

.portal-form-actions {
    flex-wrap: wrap;
}

.portal-form-actions .mud-button-root {
    min-width: 0;
}

.portal-account-form-flow {
    display: grid;
    gap: var(--wc-shell-lane-gap);
}

.portal-account-action-anchor {
    position: sticky;
    top: 76px;
    z-index: 4;
    display: flex;
    justify-content: flex-end;
    padding: 10px 12px;
    border: 1px solid var(--wc-border-soft);
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: rgba(var(--wc-surface-1-rgb), 0.96);
    box-shadow: none;
}

.portal-form-actions--anchored {
    width: auto;
}

.portal-button-spinner {
    margin-right: 8px;
}

.portal-guarded-error-actions,
.portal-detail-loading-title {
    margin-top: 12px;
}

.portal-detail-loading-body {
    margin-top: 24px;
}

.portal-company-switcher-menu {
    margin-right: 8px;
}

.portal-company-switcher-button,
.mud-menu.portal-company-switcher-button > .mud-menu-button-activator {
    text-transform: none;
}

.portal-state-card-content {
    text-align: center;
}

.portal-detail-divider {
    margin-block: 12px !important;
}

.portal-list-divider {
    margin-block: 16px !important;
}

.portal-detail-note-text {
    margin-top: 4px;
}

.portal-detail-field-value {
    margin-bottom: 8px;
}

.portal-checkout-alert {
    margin-top: 12px;
}

.portal-dialog-intro,
.portal-dialog-field {
    margin-bottom: 16px;
}

.portal-dialog-label {
    margin-bottom: 8px;
}

.portal-request-card-link {
    align-self: flex-start;
}

.portal-linked-chip-row {
    flex-wrap: wrap;
}

.portal-invite-actions {
    margin-top: 8px;
}

.portal-empty-card {
    border: 1px dashed rgba(var(--wc-accent-rgb), 0.22);
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    background: var(--wc-surface-1);
    box-shadow: none;
}

.portal-empty-card--padded {
    padding: calc(var(--wc-card-padding-block) + 2px) calc(var(--wc-card-padding-inline) + 2px);
}

.portal-state-card-divider {
    margin-block: 16px !important;
}

.portal-company-switcher-placeholder {
    width: 20px;
    min-width: 20px;
}

.account-profile-verification-row {
    flex-wrap: wrap;
}

@media (max-width: 599.98px) {
    .portal-appbar .mud-icon-button,
    .portal-appbar .mud-icon-button-root {
        min-width: 44px !important;
        min-height: 44px !important;
    }

    .portal-form-actions {
        width: 100%;
        flex-direction: column-reverse !important;
        align-items: stretch !important;
    }

    .portal-form-actions .mud-button-root {
        width: 100%;
    }

    .portal-account-action-anchor {
        position: static;
        top: auto;
        bottom: auto;
        justify-content: stretch;
        z-index: auto;
    }

    .portal-dashboard-next-action,
    .portal-context-action-cell,
    .portal-toolbar-action-cell {
        justify-content: stretch;
    }

    .portal-dashboard-next-action .mud-button-root,
    .portal-context-action-cell .mud-button-root,
    .portal-toolbar-action-cell .mud-button-root {
        width: 100%;
    }

    .portal-layout .wc-section-card-actions .mud-button-root,
    .portal-layout .portal-form-actions .mud-button-root {
        min-height: 44px !important;
    }
}

.portal-help-contact-card {
    border-color: var(--wc-tone-primary-soft-border);
    background: var(--wc-surface-2);
}

.portal-layout .mud-input-outlined,
.auth-form-card .mud-input-outlined {
    border-radius: var(--wc-control-radius, var(--border-radius-md));
}

.portal-layout .mud-alert,
.auth-form-card .mud-alert {
    border-radius: var(--wc-card-radius, var(--border-radius-md));
}

.portal-faq-panel .wc-disclosure-panel__header {
    font-weight: 600;
}

.portal-faq-panel .wc-disclosure-panel {
    border-radius: var(--wc-card-radius, var(--border-radius-md));
    border: 1px solid var(--wc-border-soft);
    background: rgba(var(--wc-surface-1-rgb), 0.92);
    box-shadow: none;
}

/* ===== WorkCita.Client/wwwroot/css/app.auth.css ===== */
/*
 * WorkCita global stylesheet module: app.auth.css
 * Ownership layer: feature geometry (auth entry workflow layout).
 * Ownership: portal/entry auth shells, auth forms, step indicators, and auth layout chrome.
 * Theme: universal --wc-* tokens only; not a separate auth theme.
 * Parent: GitHub #404 mechanical CSS ownership split (no visual redesign).
 * Load: after app.portal.css; before app.css manifest and Blazor scoped styles (index.html).
 */


.portal-auth-shell,
.entry-auth-shell {
    position: relative;
    width: 100%;
    min-height: 100%;
    display: flex;
    box-sizing: border-box;
    align-items: flex-start;
    justify-content: center;
    padding-block: clamp(20px, 3vh, 34px) clamp(18px, 3vh, 30px);
    background: var(--wc-page-background);
}

/* The layout is a viewport-high flex column: growing into the space the footer leaves
   keeps the footer on the bottom edge without guessing the chrome height. */
.wc-shell-main-content--auth {
    display: flex;
    flex: 1 0 auto;
    padding-bottom: env(safe-area-inset-bottom, 0px);
}

.wc-shell-main-content--auth > .auth-form-stage {
    min-height: auto;
}

.auth-form-stage {
    width: 100%;
    position: relative;
    isolation: isolate;
}

.auth-form-shell {
    position: relative;
    z-index: 1;
    padding: var(--space-4);
}

.auth-form-shell--compact {
    max-width: 32rem !important;
}

.auth-surface-card {
    width: 100%;
    padding: var(--space-4);
}

@media (min-width: 600px) {
    .auth-surface-card {
        padding: var(--space-6);
    }
}

.auth-processing-shell {
    padding: var(--space-4);
}

.auth-processing-card-body {
    padding-block: var(--space-4);
}

.auth-verification-unavailable-card {
    width: 100%;
}

.auth-verification-unavailable-card-body {
    padding: var(--space-4);
}

@media (min-width: 600px) {
    .auth-verification-unavailable-card-body {
        padding: var(--space-6);
    }
}

.auth-verification-unavailable-shell {
    min-block-size: 100vh;
    min-block-size: 100dvh;
    display: flex;
    align-items: center;
    justify-content: center;
}

.auth-state-shell {
    padding: var(--space-4);
}

.auth-state-card {
    width: 100%;
}

.auth-state-card-header {
    justify-content: center;
    text-align: center;
}

.auth-state-card-title-block,
.auth-state-card-heading {
    justify-content: center;
    text-align: center;
}

.auth-state-card-title {
    color: var(--wc-text-strong);
    font-weight: var(--font-bold);
    letter-spacing: 0;
}

.auth-state-card-body {
    padding-block: var(--space-4);
}

/* Auth form/panel wrappers delegate base card visuals to Wc* (app.shared-primitives.css). */

.portal-auth-shell .auth-form-card-avatar,
.entry-auth-shell .auth-form-card-avatar {
    background: var(--wc-tone-primary-soft-bg) !important;
    color: var(--wc-tone-primary-soft-fg) !important;
    border: 1px solid var(--wc-tone-primary-soft-border);
    box-shadow: none;
}

.auth-form-card--compact {
    padding: 1.35rem !important;
}

.auth-form-card-body {
    position: relative;
}

.auth-form-card--compact.auth-form-card .auth-form-card-body {
    gap: 0.9rem;
}

.auth-form-card-feature-row {
    margin-top: -0.1rem;
}

.portal-auth-shell .auth-form-card-title,
.entry-auth-shell .auth-form-card-title {
    color: var(--wc-text-strong);
    font-weight: var(--font-bold);
}

.auth-form-card--compact .auth-form-card-title {
    letter-spacing: 0;
    font-size: var(--wc-page-title-size-compact);
    line-height: 1.12;
}

/* Auth headers route through WcPageHeader (Centered). Pin the title to the
   compact page-title token so the larger office/portal size never leaks into
   standard-density auth cards. */
.wc-page-header--auth .auth-form-card-title {
    font-size: var(--wc-page-title-size-compact);
    line-height: 1.12;
}

.portal-auth-shell .auth-form-card-subtitle,
.portal-auth-shell .auth-processing-card-description,
.entry-auth-shell .auth-form-card-subtitle,
.entry-auth-shell .auth-processing-card-description {
    max-width: 44ch;
}

.auth-form-card--compact .auth-form-card-subtitle,
.auth-form-card--compact .auth-processing-card-description {
    max-width: 32ch;
    font-size: var(--wc-type-body-emphasis-size);
    line-height: 1.38;
}

.auth-form-card--compact .auth-form-card-header {
    gap: 0.45rem;
}

.auth-form-card--compact .auth-form-card-copy {
    gap: 0.2rem;
}

.auth-form-card--compact .auth-form-card-avatar {
    width: 46px;
    height: 46px;
}

.auth-form-card--compact .auth-form-card-avatar .mud-icon-root {
    font-size: var(--wc-type-title-size);
}

.auth-form-proof {
    max-width: 34ch;
    margin: -0.15rem auto 0;
    color: var(--wc-text-muted);
    line-height: 1.55;
}

.auth-form-card--compact .auth-form-proof {
    max-width: 40ch;
    margin-top: -0.35rem;
    font-size: var(--wc-type-body-size);
    line-height: 1.42;
}

.auth-surface-panel--compact,
.auth-surface-panel--method {
    padding: 12px 14px;
}

.auth-surface-panel--qr {
    display: grid;
    justify-items: center;
    padding: 16px;
}

.auth-session-switch-card {
    width: 100%;
}

.auth-step-indicator {
    display: flex;
    /* Top-align so each connector can sit on the circles' centre line, not the circle-plus-label centre. */
    align-items: flex-start;
    justify-content: center;
    width: 100%;
    gap: 0;
    padding: 0;
    margin-bottom: 1rem;
    overflow: visible;
}

.auth-step-indicator__connector {
    flex: 1 1 32px;
    min-width: 24px;
    max-width: 72px;
    height: 0;
    margin: 14px 8px 0;
    border-top: 1px solid var(--wc-border-soft, var(--mud-palette-lines-default));
    transition: border-color var(--wc-motion-state) var(--wc-ease-out-quint);
}

.auth-step-indicator__connector--active {
    border-top-color: var(--wc-accent, var(--mud-palette-primary));
}

.auth-step-indicator__item {
    flex: 0 0 auto;
}

.auth-step-indicator__step {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.25rem;
    min-width: 72px;
    text-align: center;
}

.auth-step-indicator__avatar {
    width: 28px !important;
    height: 28px !important;
    font-size: var(--wc-type-caption-size) !important;
    transition:
        background-color var(--wc-motion-state) var(--wc-ease-out-quint),
        border-color var(--wc-motion-state) var(--wc-ease-out-quint),
        color var(--wc-motion-state) var(--wc-ease-out-quint),
        box-shadow var(--wc-motion-state) var(--wc-ease-out-quint),
        transform var(--wc-motion-state) var(--wc-ease-out-quint);
}

.auth-step-indicator__item[aria-current="step"] .auth-step-indicator__avatar {
    transform: translateY(-1px);
    box-shadow: 0 0 0 3px rgba(var(--wc-accent-rgb), 0.12);
}

.auth-step-indicator__label {
    white-space: nowrap;
    line-height: 1.2;
}

@media (max-width: 599.98px) {
    .auth-step-indicator__step {
        min-width: 64px;
    }

    .auth-step-indicator__connector {
        min-width: 16px;
        margin: 14px 4px 0;
    }
}

.auth-inline-options .mud-button-root:focus-visible {
    outline: none;
    box-shadow: var(--wc-focus-ring);
}

.auth-two-factor-qr-frame {
    width: 100%;
    max-width: 220px;
}

.auth-two-factor-qr-image {
    display: block;
    width: 100%;
    height: auto;
}

.auth-form-card .mud-input-control {
    margin-bottom: 0;
}

.auth-form-card .mud-input-input-control {
    margin-top: 0;
}

.auth-form-card .mud-input.mud-input-outlined {
    background: rgba(var(--wc-surface-1-rgb), 0.94);
    border-radius: var(--wc-control-radius, var(--border-radius-md));
    box-shadow: none;
    transition:
        box-shadow var(--wc-motion-feedback) var(--wc-ease-out-quart),
        transform var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

.auth-form-card--compact .mud-form > .d-flex {
    gap: 0.9rem;
}

.auth-form-card .mud-input-outlined-border {
    border-color: var(--wc-input-border) !important;
    transition: border-color var(--wc-motion-feedback) var(--wc-ease-out-quart), box-shadow var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

.auth-form-card .mud-input.mud-input-focused .mud-input-outlined-border {
    border-color: rgba(var(--wc-accent-rgb), 0.72) !important;
    box-shadow: var(--wc-focus-ring);
}

.auth-form-card .mud-input-slot.mud-input-root-outlined {
    box-sizing: border-box;
    min-height: 58px;
    padding-top: 16px;
    padding-bottom: 16px;
    color: var(--wc-text-strong);
}

.auth-form-card--compact .mud-input-slot.mud-input-root-outlined {
    box-sizing: border-box;
    height: 56px;
    min-height: 56px;
    padding-top: 11px;
    padding-bottom: 11px;
}

.auth-form-card input.mud-input-slot,
.auth-form-card textarea.mud-input-slot {
    font-size: var(--wc-type-input-size);
}

.auth-form-card .mud-input-adornment {
    color: var(--wc-text-soft);
}

.auth-form-card .mud-input-adornment-start {
    margin-inline-start: 14px;
    margin-inline-end: 10px;
}

.auth-form-card--compact .mud-input-adornment-start {
    margin-inline-start: 12px;
    margin-inline-end: 8px;
}

.auth-form-card .mud-input-adornment-end {
    margin-inline-end: 10px;
}

.auth-form-card .mud-input-label-outlined {
    color: var(--wc-text-muted);
    padding-inline: 6px;
    border-radius: var(--wc-radius-pill);
}

.auth-form-card .mud-input.mud-input-focused .mud-input-label-outlined,
.auth-form-card .mud-input.mud-shrink .mud-input-label-outlined {
    color: var(--wc-accent-strong);
}

.auth-form-card .mud-input-helper-text {
    margin-inline: 4px;
    color: var(--wc-text-muted);
}

.auth-form-card .mud-alert {
    border-radius: var(--wc-card-radius, var(--border-radius-md));
}

.auth-form-card .mud-button-filled.mud-button-filled-primary:not(.mud-icon-button) {
    min-height: 52px;
    border-radius: var(--wc-control-radius, var(--border-radius-md));
    font-weight: 700;
    letter-spacing: 0;
    box-shadow: none;
    transition: background-color var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

.auth-form-card .mud-button-filled.mud-button-filled-primary:not(.mud-icon-button):hover {
    box-shadow: none;
}

.auth-form-card .mud-button-filled.mud-button-filled-primary.mud-disabled:not(.mud-icon-button) {
    box-shadow: none;
}

/* The rule above flattens MudBlazor's focus elevation, which was this button's only
   focus signal, so the auth primary submit focused identically to how it rested.
   An outline with offset, not the box-shadow ring the outlined siblings use: an
   accent ring drawn against an accent fill is not a visible indicator. */
.auth-form-card .mud-button-filled.mud-button-filled-primary:not(.mud-icon-button):focus-visible {
    outline: var(--wc-focus-outline);
    outline-offset: 2px;
}

.auth-form-card .google-auth-button {
    min-height: 52px;
    border-color: var(--wc-input-border);
    background-color: rgba(var(--wc-surface-1-rgb), 0.76);
    color: var(--wc-text-strong);
    border-radius: var(--wc-control-radius, var(--border-radius-md));
    font-weight: 700;
    letter-spacing: 0;
    box-shadow: none;
    transition:
        background-color var(--wc-motion-feedback) var(--wc-ease-out-quart),
        border-color var(--wc-motion-feedback) var(--wc-ease-out-quart),
        color var(--wc-motion-feedback) var(--wc-ease-out-quart),
        transform var(--wc-motion-feedback) var(--wc-ease-out-quart),
        box-shadow var(--wc-motion-feedback) var(--wc-ease-out-quart);
}

.auth-form-card .google-auth-button:not(.mud-disabled):not([disabled]):hover {
    background-color: rgba(var(--wc-accent-rgb), 0.07);
    border-color: rgba(var(--wc-accent-rgb), 0.46);
    color: var(--wc-accent-strong);
    transform: translateY(-1px);
}

.auth-form-card .google-auth-button:not(.mud-disabled):not([disabled]):active {
    background-color: rgba(var(--wc-accent-rgb), 0.11);
    transform: translateY(0) scale(0.995);
}

.auth-form-card .google-auth-button:focus-visible {
    outline: none;
    box-shadow: var(--wc-focus-ring);
}

.auth-form-card .google-auth-button .mud-button-label {
    gap: 0.5rem;
}

.auth-form-card .google-auth-button .mud-icon-root {
    transition: transform var(--wc-motion-feedback) var(--wc-ease-out-quart);
    transform-origin: center;
}

.auth-form-card .google-auth-button:not(.mud-disabled):not([disabled]):hover .mud-icon-root {
    transform: scale(1.08);
}

.auth-form-card .google-auth-button--loading {
    background-color: rgba(var(--wc-accent-rgb), 0.05);
    border-color: rgba(var(--wc-accent-rgb), 0.32);
    transform: none;
}

.auth-form-card .google-auth-button.mud-disabled:not(.google-auth-button--loading) {
    transform: none;
    opacity: 0.64;
}

@media (prefers-reduced-motion: reduce) {
    .auth-form-card .google-auth-button:not(.mud-disabled):not([disabled]):hover,
    .auth-form-card .google-auth-button:not(.mud-disabled):not([disabled]):active,
    .auth-form-card .google-auth-button:not(.mud-disabled):not([disabled]):hover .mud-icon-root {
        transform: none;
    }
}

.auth-form-card .mud-button-text:not(.mud-icon-button) {
    font-weight: 600;
}

.auth-inline-options {
    gap: 0.75rem;
}

.auth-inline-options .mud-checkbox p {
    font-size: var(--wc-type-body-emphasis-size);
}

.auth-password-requirements-title {
    margin-bottom: 8px;
}

.auth-divider-tight {
    margin-block: 4px !important;
}

.auth-alert-inline {
    margin-bottom: 8px;
}

.auth-alert-focus-target:focus-visible {
    outline: var(--wc-focus-outline);
    outline-offset: 3px;
    border-radius: var(--border-radius-sm);
}

.auth-secondary-link {
    font-weight: 500;
    font-size: var(--wc-type-body-size);
    color: var(--wc-accent-strong) !important;
}

.portal-auth-helper {
    max-width: 52ch;
}

@media (max-width: 959.98px) {
    .auth-secondary-link,
    a.portal-auth-helper {
        display: inline-flex;
        align-items: center;
        min-height: 44px;
    }
}

@media (max-width: 959.98px) {
    .wc-shell-appbar--auth .mud-toolbar {
        min-height: 56px;
        padding-inline: 12px;
        gap: 0.55rem;
    }

    .wc-shell-appbar--auth .wc-shell-brand-stack {
        gap: 0.45rem;
    }

    .wc-shell-appbar--auth .wc-shell-brand-avatar {
        width: 36px;
        height: 36px;
    }

    .wc-shell-appbar--auth .wc-shell-brand-text {
        font-size: var(--wc-type-title-size);
    }

    .wc-shell-footer--auth .wc-shell-footer-container {
        padding-top: 0.5rem !important;
        padding-bottom: 0.65rem !important;
    }

    .auth-form-card--compact {
        padding: 1.125rem !important;
    }

    .auth-form-card--compact .auth-form-proof {
        max-width: 32ch;
        font-size: var(--wc-type-body-size);
    }

}

@media (min-width: 960px) {
    .wc-shell-appbar--auth .mud-toolbar {
        min-height: 64px;
        padding-inline: 20px;
        gap: 0.7rem;
    }

    .wc-shell-appbar--auth .wc-shell-brand-stack {
        gap: 0.55rem;
    }

    .wc-shell-appbar--auth .wc-shell-brand-avatar {
        width: 40px;
        height: 40px;
    }

    .wc-shell-appbar--auth .wc-shell-brand-text {
        font-size: var(--wc-type-title-size);
        font-weight: 700;
    }

    .wc-shell-footer--auth .wc-shell-footer-container {
        padding-top: 0.55rem !important;
        padding-bottom: 0.7rem !important;
    }

    .auth-form-card--compact {
        padding: 1.425rem !important;
    }
}

/* Paired with dvh like the auth entry and shell above. app.auth.css is the last
   bundle module, so an unpaired 100vh here overrode the shell's dvh contract for
   every auth route and hard-capped the scroll box to the URL-bar-expanded
   viewport. */
.wc-shell-layout--auth {
    height: 100vh;
    height: 100dvh;
    max-height: 100vh;
    max-height: 100dvh;
    overflow-y: auto;
    background: var(--wc-page-background);
}

.wc-shell-footer--auth {
    flex: 0 0 auto;
    border-radius: 0;
    background: rgba(var(--wc-surface-1-rgb), 0.72);
    border-top-color: var(--wc-border-soft);
}

/* One reserved caption line for code-delivery updates, so a late "taking longer than usual"
   does not shift the Verify button. */
.auth-challenge-status {
    min-height: 1.25rem;
}
