/* ==========================================================================
   ATP Spedition - Admin / Dispecerat console (masters 13-17, desktop-first 1440, min 1100).
   Tokens only (no literals): everything resolves to --atp-* from atp.css. Fluid full width:
   every block fills its container at 1920; tables scroll inside their own wrapper below 1440.
   Load after atp.css: <link href="_content/ATP.Shared/atp-admin.css" />.
   ========================================================================== */

.atp-admin { width: 100%; display: flex; flex-direction: column; gap: var(--atp-space-6); min-width: 0; }
.atp-admin > * { min-width: 0; }
.atp-admin-head__actions { flex-wrap: wrap; justify-content: flex-end; }
.atp-admin-head__actions .atp-field { min-width: 11rem; }
.atp-admin-head__actions .atp-field__label { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
.atp-admin-head__actions .atp-field { position: relative; }

/* ---- KPI strip: auto-fit tiles, never a fixed cap ---- */
.atp-admin-kpis { width: 100%; grid-template-columns: repeat(auto-fit, minmax(min(9rem, 100%), 1fr)); }

/* ---- filter bar ---- */
.atp-admin-filters .atp-card__body { padding: var(--atp-space-4) var(--atp-space-5); }
.atp-admin-filters__grid {
    display: grid; gap: var(--atp-space-3) var(--atp-space-4); align-items: end; width: 100%;
    grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
}
.atp-admin-filters__grid .atp-field { min-width: 0; }
.atp-admin-filters__grid .atp-input, .atp-admin-filters__grid .atp-select { width: 100%; }
.atp-admin-filters__submit { display: flex; align-items: end; }
.atp-admin-check {
    display: inline-flex; align-items: center; gap: var(--atp-space-2); min-height: 34px;
    font-size: var(--atp-text-base); color: var(--atp-text); cursor: pointer; user-select: none;
}
.atp-admin-check input { width: 16px; height: 16px; accent-color: var(--atp-primary); }
.atp-admin-check input:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--atp-focus); border-radius: var(--atp-radius-sm); }

/* ---- two/three column blocks: fluid, collapse below the operational floor ---- */
.atp-admin-cols { display: grid; gap: var(--atp-space-5); width: 100%; }
.atp-admin-cols--2 { grid-template-columns: repeat(auto-fit, minmax(min(30rem, 100%), 1fr)); }
.atp-admin-cols--3 { grid-template-columns: repeat(auto-fit, minmax(min(22rem, 100%), 1fr)); }
.atp-admin-cols > .atp-card { min-width: 0; }
.atp-admin-split { display: grid; gap: var(--atp-space-5); width: 100%; grid-template-columns: minmax(0, 2fr) minmax(min(22rem, 100%), 1fr); }
.atp-admin-split--ticket { grid-template-columns: minmax(0, 3fr) minmax(min(20rem, 100%), 2fr); }
.atp-admin-split > * { min-width: 0; }
.atp-admin-stack { display: flex; flex-direction: column; gap: var(--atp-space-5); min-width: 0; }
@media (max-width: 1100px) {
    .atp-admin-split, .atp-admin-split--ticket { grid-template-columns: 1fr; }
}

/* ---- tables: the wrapper scrolls, the page never does; actions stay reachable ---- */
.atp-admin .atp-table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.atp-admin .atp-table { min-width: 100%; }
.atp-admin .atp-table th, .atp-admin .atp-table td { white-space: nowrap; }
.atp-admin .atp-table td:has(.atp-admin-chips), .atp-admin .atp-table td:has(.atp-admin-actions), .atp-admin .atp-table td:has(.atp-admin-wrap) { white-space: normal; }
.atp-admin-wrap { display: inline-block; min-width: 18ch; max-width: 48ch; }
.atp-admin-actions { display: inline-flex; gap: var(--atp-space-2); align-items: center; flex-wrap: nowrap; }
.atp-admin-chips { display: inline-flex; gap: var(--atp-space-1); flex-wrap: wrap; align-items: center; }
.atp-admin-clip { display: inline-block; max-width: 24ch; overflow: hidden; text-overflow: ellipsis; vertical-align: bottom; }

/* ---- definition lists ---- */
.atp-admin-dl { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: var(--atp-space-2) var(--atp-space-4); margin: 0; font-size: var(--atp-text-base); }
.atp-admin-dl dt { color: var(--atp-text-muted); font-weight: var(--atp-weight-medium); }
.atp-admin-dl dd { margin: 0; color: var(--atp-text); overflow-wrap: anywhere; }
.atp-admin-dl--counts { margin-top: var(--atp-space-4); padding-top: var(--atp-space-4); border-top: 1px solid var(--atp-border); }
.atp-admin-note { font-size: var(--atp-text-sm); margin: var(--atp-space-3) 0 0; }
.atp-admin-money .atp-card__body { background: var(--atp-surface-2); border-radius: 0 0 var(--atp-radius-lg) var(--atp-radius-lg); }

/* ---- lists (availability, exceptions) ---- */
.atp-admin-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.atp-admin-list__row {
    display: flex; align-items: center; justify-content: space-between; gap: var(--atp-space-4);
    padding: var(--atp-space-3) var(--atp-space-5); border-bottom: 1px solid var(--atp-border); min-width: 0;
}
.atp-admin-list__row:last-child { border-bottom: none; }
.atp-admin-list__main { display: flex; flex-direction: column; gap: 2px; min-width: 0; font-size: var(--atp-text-base); }
.atp-admin-list__main > * { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.atp-admin-list__side { display: flex; align-items: center; gap: var(--atp-space-2); flex-wrap: wrap; justify-content: flex-end; font-size: var(--atp-text-sm); }
.atp-admin-list__time { font-variant-numeric: tabular-nums; }
.atp-admin-availability .atp-card__body { max-height: 32rem; overflow-y: auto; }
.atp-admin-exceptions .atp-admin-list__row { background: var(--atp-danger-soft); box-shadow: inset 3px 0 0 var(--atp-danger); }

/* ---- map placeholder (line art until the map provider is approved) ---- */
.atp-admin-map {
    position: relative; width: 100%; aspect-ratio: 16 / 9; min-height: 18rem;
    border: 1px solid var(--atp-border); border-radius: var(--atp-radius-lg); overflow: hidden;
    background: var(--atp-surface-2); color: var(--atp-border-strong);
}
.atp-admin-map__grid { position: absolute; inset: 0; width: 100%; height: 100%; }
.atp-admin-map__pin {
    position: absolute; transform: translate(-50%, -50%); width: 22px; height: 22px; display: grid; place-items: center;
    border-radius: var(--atp-radius-pill); text-decoration: none; outline: none;
}
.atp-admin-map__pin:focus-visible { box-shadow: 0 0 0 3px var(--atp-focus); }
.atp-admin-map__dot { display: inline-block; width: 10px; height: 10px; border-radius: 50%; background: var(--atp-primary); box-shadow: 0 0 0 3px var(--atp-surface); }
.atp-admin-map__pin--exception .atp-admin-map__dot, .atp-admin-map__dot--exception { background: var(--atp-danger); }
.atp-admin-map__pin--driver .atp-admin-map__dot, .atp-admin-map__dot--driver { background: var(--atp-success); border-radius: 2px; }
.atp-admin-map__dot--order { background: var(--atp-primary); }
.atp-admin-map__empty { position: absolute; inset: 0; display: grid; place-items: center; font-size: var(--atp-text-base); }
.atp-admin-map__legend { display: flex; gap: var(--atp-space-5); margin-top: var(--atp-space-3); font-size: var(--atp-text-sm); color: var(--atp-text-muted); }
.atp-admin-map__legend span { display: inline-flex; align-items: center; gap: var(--atp-space-2); }
.atp-admin-map__legend i { box-shadow: none; }

/* ---- states ---- */
.atp-admin-state {
    display: flex; align-items: center; justify-content: space-between; gap: var(--atp-space-4); width: 100%;
    padding: var(--atp-space-4) var(--atp-space-5); border: 1px solid var(--atp-border); border-radius: var(--atp-radius-lg);
    background: var(--atp-surface); font-size: var(--atp-text-base);
}
.atp-admin-state--loading { justify-content: flex-start; color: var(--atp-text-muted); }
.atp-admin-state--danger { background: var(--atp-danger-soft); border-color: transparent; color: var(--atp-text); }
.atp-admin-state--warn { background: var(--atp-warn-soft); border-color: transparent; }
.atp-admin-state--neutral { background: var(--atp-surface-2); }
.atp-admin-state__body { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.atp-admin-state__title { color: var(--atp-heading); }
.atp-admin-state__desc { color: var(--atp-text-muted); }
.atp-admin-spinner {
    width: 16px; height: 16px; border-radius: 50%; border: 2px solid var(--atp-border-strong); border-top-color: var(--atp-primary);
    animation: atp-admin-spin 0.8s linear infinite;
}
@keyframes atp-admin-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .atp-admin-spinner { animation: none; } }

/* ---- reason dialog ---- */
.atp-admin-dialog { display: flex; flex-direction: column; gap: var(--atp-space-4); }
.atp-admin-dialog__desc { margin: 0; }
.atp-admin-dialog__actions { width: 100%; }
.atp-admin-textarea { min-height: 6rem; resize: vertical; width: 100%; font-family: inherit; line-height: var(--atp-leading-normal); padding-block: var(--atp-space-2); }
.atp-admin-textarea--internal { background: var(--atp-warn-soft); }
.atp-admin-confirm { display: flex; align-items: flex-start; gap: var(--atp-space-2); font-size: var(--atp-text-base); cursor: pointer; }
.atp-admin-confirm input { margin-top: 3px; width: 16px; height: 16px; accent-color: var(--atp-primary); flex: none; }
.atp-admin-confirm input:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--atp-focus); }

/* ---- pager ---- */
.atp-admin-pager { display: flex; align-items: center; justify-content: space-between; gap: var(--atp-space-4); width: 100%; font-size: var(--atp-text-sm); }

/* ---- tabs ---- */
.atp-admin-tabs { display: flex; gap: var(--atp-space-1); border-bottom: 1px solid var(--atp-border); width: 100%; overflow-x: auto; }
.atp-admin-tab {
    appearance: none; background: none; border: 0; border-bottom: 2px solid transparent; margin-bottom: -1px;
    padding: var(--atp-space-2) var(--atp-space-4); font: inherit; font-size: var(--atp-text-base); font-weight: var(--atp-weight-medium);
    color: var(--atp-text-muted); cursor: pointer; white-space: nowrap; display: inline-flex; gap: var(--atp-space-2); align-items: center;
}
.atp-admin-tab:hover { color: var(--atp-text); }
.atp-admin-tab--active { color: var(--atp-primary); border-bottom-color: var(--atp-primary); }
.atp-admin-tab:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--atp-focus); border-radius: var(--atp-radius-sm); }
.atp-admin-lock { font-size: var(--atp-text-sm); }

/* ---- locked placeholders (Stripe production disputes / reconciliation) ---- */
.atp-admin-locked { border-style: dashed; border-color: var(--atp-danger); }
.atp-admin-locked .atp-card__body p { margin: 0 0 var(--atp-space-2); }

/* ---- locks list ---- */
.atp-admin-locks { list-style: none; margin: 0; padding: 0; }
.atp-admin-locks__row { display: flex; align-items: center; gap: var(--atp-space-3); padding: var(--atp-space-3) var(--atp-space-5); border-bottom: 1px solid var(--atp-border); font-size: var(--atp-text-base); }
.atp-admin-locks__row:last-child { border-bottom: none; }
.atp-admin-locks__row--on { background: var(--atp-danger-soft); }

/* ---- checklist ---- */
.atp-admin-checklist { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--atp-space-2); font-size: var(--atp-text-base); }
.atp-admin-checklist li { display: flex; align-items: center; gap: var(--atp-space-2); }
.atp-admin-checklist li::before { content: ""; width: 10px; height: 10px; border-radius: 50%; flex: none; }
.atp-admin-checklist__ok::before { background: var(--atp-success); }
.atp-admin-checklist__missing::before { background: var(--atp-danger); }
.atp-admin-checklist__missing { color: var(--atp-text-muted); }

/* ---- timeline, stops, audit ---- */
.atp-admin-timeline, .atp-admin-stops, .atp-admin-audit { list-style: none; margin: 0; padding: 0; }
.atp-admin-timeline__row, .atp-admin-stops__row {
    display: flex; align-items: baseline; gap: var(--atp-space-4); padding: var(--atp-space-3) var(--atp-space-5);
    border-bottom: 1px solid var(--atp-border); font-size: var(--atp-text-base); flex-wrap: wrap;
}
.atp-admin-timeline__row:last-child, .atp-admin-stops__row:last-child { border-bottom: none; }
.atp-admin-timeline__kind { font-weight: var(--atp-weight-medium); color: var(--atp-heading); }
.atp-admin-stops__seq {
    display: inline-grid; place-items: center; width: 24px; height: 24px; border-radius: 50%; flex: none;
    background: var(--atp-primary-soft); color: var(--atp-primary); font-size: var(--atp-text-sm); font-weight: var(--atp-weight-semibold);
}
.atp-admin-audit__row { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: var(--atp-space-4); padding: var(--atp-space-3) var(--atp-space-5); border-bottom: 1px solid var(--atp-border); font-size: var(--atp-text-base); }
.atp-admin-audit__row:last-child { border-bottom: none; }
.atp-admin-audit__when { color: var(--atp-text-muted); font-family: var(--atp-font-mono); font-size: var(--atp-text-sm); white-space: nowrap; }
.atp-admin-audit__what { display: flex; flex-direction: column; gap: var(--atp-space-1); min-width: 0; }
.atp-admin-audit__what .atp-row { flex-wrap: wrap; }
.atp-admin-audit__action { font-weight: var(--atp-weight-medium); color: var(--atp-heading); }
.atp-admin-audit__reason { color: var(--atp-text); }
.atp-admin-audit__delta { display: flex; gap: var(--atp-space-3); flex-wrap: wrap; font-size: var(--atp-text-sm); }
.atp-admin-audit__old { color: var(--atp-danger); text-decoration: line-through; overflow-wrap: anywhere; }
.atp-admin-audit__new { color: var(--atp-success); overflow-wrap: anywhere; }
.atp-admin-audit-card .atp-card__body { max-height: 40rem; overflow-y: auto; }

/* ---- support thread ---- */
.atp-admin-thread { list-style: none; margin: 0; padding: var(--atp-space-4) var(--atp-space-5); display: flex; flex-direction: column; gap: var(--atp-space-3); max-height: 36rem; overflow-y: auto; }
.atp-admin-msg { border: 1px solid var(--atp-border); border-radius: var(--atp-radius-lg); padding: var(--atp-space-3) var(--atp-space-4); background: var(--atp-surface); max-width: 100%; }
.atp-admin-msg--customer, .atp-admin-msg--carrier { background: var(--atp-surface-2); }
.atp-admin-msg--support { border-color: var(--atp-primary-soft); }
.atp-admin-msg--internal { background: var(--atp-warn-soft); border-color: var(--atp-warn); border-style: dashed; }
.atp-admin-msg--ai { background: var(--atp-info-soft); }
.atp-admin-msg__head { display: flex; align-items: center; gap: var(--atp-space-2); flex-wrap: wrap; margin-bottom: var(--atp-space-2); font-size: var(--atp-text-sm); }
.atp-admin-msg__body { white-space: pre-wrap; overflow-wrap: anywhere; font-size: var(--atp-text-base); }
.atp-admin-compose { border-top: 1px solid var(--atp-border); padding: var(--atp-space-4) var(--atp-space-5); display: flex; flex-direction: column; gap: var(--atp-space-3); }
.atp-admin-order-ctx { margin-top: var(--atp-space-4); padding: var(--atp-space-3) var(--atp-space-4); border: 1px solid var(--atp-border); border-radius: var(--atp-radius-md); display: flex; flex-direction: column; gap: var(--atp-space-1); font-size: var(--atp-text-base); }

/* ---- drawer width for the reason dialog on wide screens ---- */
.atp-admin .atp-drawer, .atp-admin-dialog { min-width: 0; }

/* ==========================================================================
   Slice 4a: fireTMS parity. Timeline board (vehicle + driver schedule), cost panels, ledgers. Tokens only,
   fluid full width: the board fills its container at 1920 and scrolls inside itself below the operational floor.
   ========================================================================== */
.atp-parity { width: 100%; display: flex; flex-direction: column; gap: var(--atp-space-6); min-width: 0; }
.atp-parity > * { min-width: 0; }
.atp-parity-toolbar { display: flex; flex-wrap: wrap; align-items: end; gap: var(--atp-space-3) var(--atp-space-4); width: 100%; }
.atp-parity-toolbar .atp-field { min-width: 0; flex: 1 1 12rem; }
.atp-parity-toolbar__group { display: inline-flex; align-items: center; gap: var(--atp-space-1); }
.atp-parity-seg { display: inline-flex; border: 1px solid var(--atp-border); border-radius: var(--atp-radius-btn); overflow: hidden; }
.atp-parity-seg button {
    appearance: none; border: 0; background: var(--atp-surface); color: var(--atp-text); font: inherit; font-size: var(--atp-text-sm);
    padding: var(--atp-space-2) var(--atp-space-3); cursor: pointer; min-height: 36px;
}
.atp-parity-seg button + button { border-left: 1px solid var(--atp-border); }
.atp-parity-seg button[aria-pressed="true"] { background: var(--atp-primary); color: var(--atp-primary-contrast); }
.atp-parity-seg button:focus-visible { outline: none; box-shadow: inset 0 0 0 3px var(--atp-focus); }
.atp-parity-legend { display: flex; flex-wrap: wrap; gap: var(--atp-space-3) var(--atp-space-5); font-size: var(--atp-text-sm); color: var(--atp-text-muted); }
.atp-parity-legend span { display: inline-flex; align-items: center; gap: var(--atp-space-2); }
.atp-parity-legend i { width: 14px; height: 10px; border-radius: 3px; display: inline-block; }
.atp-parity-kpis { width: 100%; grid-template-columns: repeat(auto-fit, minmax(min(11rem, 100%), 1fr)); }
.atp-parity-cols { display: grid; gap: var(--atp-space-5); width: 100%; grid-template-columns: repeat(auto-fit, minmax(min(28rem, 100%), 1fr)); }
.atp-parity-cols > * { min-width: 0; }
.atp-parity-form { display: grid; gap: var(--atp-space-3) var(--atp-space-4); width: 100%; grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr)); align-items: end; }
.atp-parity-form .atp-field { min-width: 0; }
.atp-parity-form .atp-input, .atp-parity-form .atp-select { width: 100%; }
.atp-parity-form__wide { grid-column: 1 / -1; }
.atp-parity-pl { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.atp-parity-pl li { display: flex; justify-content: space-between; gap: var(--atp-space-4); padding: var(--atp-space-2) 0; border-bottom: 1px solid var(--atp-border); font-size: var(--atp-text-base); }
.atp-parity-pl li:last-child { border-bottom: none; }
.atp-parity-pl__total { font-weight: var(--atp-weight-semibold); color: var(--atp-heading); }
.atp-parity-pl__neg { color: var(--atp-danger); }
.atp-parity-pl__pos { color: var(--atp-success); }
.atp-parity-bar { display: flex; align-items: center; gap: var(--atp-space-3); font-size: var(--atp-text-sm); }
.atp-parity-bar__track { flex: 1 1 auto; height: 10px; border-radius: var(--atp-radius-pill); background: var(--atp-surface-3); overflow: hidden; min-width: 0; }
.atp-parity-bar__fill { display: block; height: 100%; background: var(--atp-success); }
.atp-parity-bar__fill--empty { background: var(--atp-warn); }
.atp-parity .atp-table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.atp-parity .atp-table { min-width: 100%; }
.atp-parity .atp-table th, .atp-parity .atp-table td { white-space: nowrap; }
.atp-parity-actions { display: inline-flex; gap: var(--atp-space-2); align-items: center; }
.atp-parity-note { font-size: var(--atp-text-sm); color: var(--atp-text-muted); margin: 0; }

/* ---- timeline board ---- */
.atp-tl {
    --atp-tl-label-w: clamp(10rem, 16%, 16rem);
    --atp-tl-lane-h: 30px;
    width: 100%; border: 1px solid var(--atp-border); border-radius: var(--atp-radius-lg); background: var(--atp-surface);
    overflow-x: auto; -webkit-overflow-scrolling: touch;
}
.atp-tl__head, .atp-tl__row { display: grid; grid-template-columns: var(--atp-tl-label-w) minmax(0, 1fr); min-width: 0; }
.atp-tl__head { position: sticky; top: 0; z-index: 2; background: var(--atp-surface-2); border-bottom: 1px solid var(--atp-border); }
.atp-tl__corner, .atp-tl__label { padding: var(--atp-space-2) var(--atp-space-4); border-right: 1px solid var(--atp-border); min-width: 0; }
.atp-tl__corner { font-size: var(--atp-text-xs); font-weight: var(--atp-weight-semibold); letter-spacing: 0.08em; text-transform: uppercase; color: var(--atp-text-subtle); display: flex; align-items: center; }
.atp-tl__scale { position: relative; height: 34px; min-width: 0; }
.atp-tl__tick { position: absolute; top: 0; height: 100%; display: flex; align-items: center; padding-left: var(--atp-space-2); font-size: var(--atp-text-xs); color: var(--atp-text-muted); border-left: 1px solid var(--atp-border); white-space: nowrap; overflow: hidden; }
.atp-tl__row { border-bottom: 1px solid var(--atp-border); }
.atp-tl__row:last-child { border-bottom: none; }
.atp-tl__label { display: flex; flex-direction: column; gap: 2px; justify-content: center; }
.atp-tl__label-main { font-weight: var(--atp-weight-medium); color: var(--atp-heading); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.atp-tl__label-sub { font-size: var(--atp-text-xs); color: var(--atp-text-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.atp-tl__label-actions { margin-top: var(--atp-space-1); }
.atp-tl__track { position: relative; min-height: calc(var(--atp-tl-lanes, 1) * var(--atp-tl-lane-h) + var(--atp-space-2)); min-width: 0; }
.atp-tl__grid { position: absolute; top: 0; bottom: 0; width: 1px; background: var(--atp-border); opacity: 0.7; }
.atp-tl__under { position: absolute; top: 0; bottom: 0; background: var(--atp-success-soft); border-left: 2px solid var(--atp-success); display: flex; align-items: flex-end; overflow: hidden; }
.atp-tl__under--over { background: var(--atp-danger-soft); border-left-color: var(--atp-danger); }
.atp-tl__under-label { font-size: var(--atp-text-xs); color: var(--atp-text-muted); padding: 0 var(--atp-space-1); white-space: nowrap; }
.atp-tl__bar {
    position: absolute; top: calc(var(--atp-space-1) + var(--atp-tl-lane, 0) * var(--atp-tl-lane-h)); height: calc(var(--atp-tl-lane-h) - 6px);
    appearance: none; border: 1px solid transparent; border-radius: var(--atp-radius-sm); padding: 0 var(--atp-space-2);
    font: inherit; font-size: var(--atp-text-xs); color: var(--atp-primary-contrast); background: var(--atp-primary);
    text-align: left; overflow: hidden; white-space: nowrap; cursor: pointer; min-width: 6rem;   /* a 4h job in week view stays readable; the title carries the full text */
}
.atp-tl__bar:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--atp-focus); z-index: 1; }
.atp-tl__bar-label { overflow: hidden; text-overflow: ellipsis; display: block; }
.atp-tl__bar--job { background: var(--atp-primary); }
.atp-tl__bar--Completed, .atp-tl__bar--Invoiced, .atp-tl__bar--Closed { background: var(--atp-pill-slate-dot); }
.atp-tl__bar--InProgress { background: var(--atp-pill-teal-dot); }
.atp-tl__bar--service { background: var(--atp-warn); color: var(--atp-heading); }
.atp-tl__bar--downtime { background: var(--atp-danger); }
.atp-tl__bar--leave { background: var(--atp-pill-violet-dot); }
.atp-tl__bar--rest { background: var(--atp-pill-indigo-dot); }
.atp-tl__none { position: absolute; left: var(--atp-space-3); top: 50%; transform: translateY(-50%); font-size: var(--atp-text-xs); color: var(--atp-text-subtle); }
.atp-tl__empty { padding: var(--atp-space-6); text-align: center; color: var(--atp-text-muted); font-size: var(--atp-text-base); }
@media (max-width: 900px) {
    .atp-tl { --atp-tl-label-w: 8rem; }
}

/* ---- selected row (cash ledger, notes) ---- */
.atp-parity .atp-table tr.atp-tr--selected td { background: var(--atp-primary-soft); }

/* ---- P&L line: kind, source, note and date read as separate words ---- */
.atp-parity-pl li > span:first-child { display: inline-flex; flex-wrap: wrap; gap: var(--atp-space-2); align-items: baseline; min-width: 0; }

/* ==============================================================================================================
   Slice 4c: fireTMS parity, wave c (truck route, accounting export, fiscal autofill, CRM templates + history,
   driver chat + SMS, dispatcher mobile). Tokens only; every block fills its container (RULE ZERO).
   ===================================================================================================================== */
.atp-parity-form--4 { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr)); gap: var(--atp-space-3); align-items: end; width: 100%; }
.atp-parity-route__checks { flex-wrap: wrap; gap: var(--atp-space-3) var(--atp-space-5); margin-top: var(--atp-space-3); align-items: center; }
.atp-parity-route__plan { background: var(--atp-primary-soft); border-radius: var(--atp-radius-md); padding: var(--atp-space-3) var(--atp-space-4); margin-bottom: var(--atp-space-4); }
.atp-parity-route__dl { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(11rem, 100%), 1fr)); gap: var(--atp-space-1) var(--atp-space-4); margin: var(--atp-space-2) 0 0; }
.atp-parity-route__dl dt { font-size: var(--atp-text-xs); color: var(--atp-text-muted); }
.atp-parity-route__dl dd { margin: 0 0 var(--atp-space-2); }
.atp-parity-route__notices { margin: var(--atp-space-3) 0 0; padding-left: var(--atp-space-5); font-size: var(--atp-text-sm); }
.atp-parity-fiscal { display: flex; flex-wrap: wrap; gap: var(--atp-space-2); align-items: center; }
.atp-parity-fiscal__note { font-size: var(--atp-text-sm); color: var(--atp-text-muted); }
.atp-parity-export__counts { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(10rem, 100%), 1fr)); gap: var(--atp-space-3); width: 100%; margin: var(--atp-space-4) 0; }
.atp-parity-tpl { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(26rem, 100%), 1fr)); gap: var(--atp-space-5); width: 100%; align-items: start; }
.atp-parity-tpl__body textarea { width: 100%; min-height: 14rem; font: inherit; padding: var(--atp-space-3); border: 1px solid var(--atp-border); border-radius: var(--atp-radius-sm); background: var(--atp-surface); color: var(--atp-text); resize: vertical; }
.atp-parity-tpl__body textarea:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--atp-focus); border-color: var(--atp-primary); }
.atp-parity-tpl__chips { display: flex; flex-wrap: wrap; gap: var(--atp-space-1); }
.atp-parity-tpl__chips code { font-size: var(--atp-text-xs); background: var(--atp-primary-soft); color: var(--atp-heading); padding: 2px var(--atp-space-2); border-radius: 999px; }
.atp-parity-tpl__preview { white-space: pre-wrap; background: var(--atp-bg); border: 1px solid var(--atp-border); border-radius: var(--atp-radius-md); padding: var(--atp-space-4); font-size: var(--atp-text-sm); }
.atp-parity-chat { display: grid; grid-template-columns: minmax(min(18rem, 100%), 1fr) minmax(0, 2.2fr); gap: var(--atp-space-5); width: 100%; align-items: start; }
@media (max-width: 900px) { .atp-parity-chat { grid-template-columns: 1fr; } }
.atp-parity-chat__list { display: flex; flex-direction: column; gap: var(--atp-space-1); max-height: 70vh; overflow-y: auto; }
.atp-parity-chat__item { display: flex; gap: var(--atp-space-3); align-items: center; width: 100%; text-align: left; appearance: none; border: 1px solid transparent; border-radius: var(--atp-radius-md); padding: var(--atp-space-3); background: transparent; font: inherit; color: inherit; cursor: pointer; min-height: 44px; }
.atp-parity-chat__item:hover { background: var(--atp-primary-soft); }
.atp-parity-chat__item--on { background: var(--atp-primary-soft); border-color: var(--atp-primary); }
.atp-parity-chat__item:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--atp-focus); }
.atp-parity-chat__who { flex: 1; min-width: 0; }
.atp-parity-chat__name { font-weight: 600; display: flex; gap: var(--atp-space-2); align-items: center; }
.atp-parity-chat__preview { font-size: var(--atp-text-xs); color: var(--atp-text-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.atp-parity-chat__badge { min-width: 1.4rem; height: 1.4rem; border-radius: 999px; background: var(--atp-primary); color: var(--atp-primary-contrast); font-size: var(--atp-text-xs); display: inline-flex; align-items: center; justify-content: center; padding: 0 var(--atp-space-1); }
.atp-parity-chat__dot { width: 0.6rem; height: 0.6rem; border-radius: 999px; background: var(--atp-pill-slate-dot); flex: none; }
.atp-parity-chat__dot--on { background: var(--atp-success); }
.atp-parity-chat__log { display: flex; flex-direction: column; gap: var(--atp-space-2); max-height: 55vh; overflow-y: auto; padding: var(--atp-space-2) 0; }
.atp-parity-chat__msg { max-width: min(46rem, 85%); padding: var(--atp-space-2) var(--atp-space-3); border-radius: var(--atp-radius-md); background: var(--atp-bg); border: 1px solid var(--atp-border); white-space: pre-wrap; overflow-wrap: anywhere; }
.atp-parity-chat__msg--mine { align-self: flex-end; background: var(--atp-primary-soft); border-color: transparent; }
.atp-parity-chat__meta { font-size: var(--atp-text-xs); color: var(--atp-text-muted); margin-bottom: 2px; }
.atp-parity-chat__compose { display: flex; gap: var(--atp-space-2); align-items: flex-end; margin-top: var(--atp-space-3); }
.atp-parity-chat__compose textarea { flex: 1; min-height: 2.75rem; max-height: 8rem; font: inherit; padding: var(--atp-space-2) var(--atp-space-3); border: 1px solid var(--atp-border); border-radius: var(--atp-radius-sm); background: var(--atp-surface); color: var(--atp-text); resize: vertical; }
.atp-parity-chat__compose textarea:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--atp-focus); border-color: var(--atp-primary); }
.atp-parity-sms__pick { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(16rem, 100%), 1fr)); gap: var(--atp-space-2); width: 100%; max-height: 40vh; overflow-y: auto; }
.atp-parity-sms__pick label { min-height: 44px; display: flex; align-items: center; gap: var(--atp-space-2); }

/* ---- dispatcher mobile (fireTMS Dispo): phone-first shell, bottom tab bar like the carrier app ---- */
.atp-dispo { min-height: 100dvh; display: flex; flex-direction: column; background: var(--atp-bg); color: var(--atp-text); width: 100%; }
.atp-dispo__bar { position: sticky; top: 0; z-index: 5; display: flex; align-items: center; gap: var(--atp-space-3); padding: calc(var(--atp-space-3) + var(--atp-safe-top)) var(--atp-space-4) var(--atp-space-3); background: var(--atp-navy); color: var(--atp-primary-contrast); min-height: 56px; }
.atp-dispo__bar h1 { font-size: 18px; font-weight: 700; margin: 0; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.atp-dispo__iconbtn { appearance: none; background: transparent; border: 0; color: inherit; width: 44px; height: 44px; display: inline-flex; align-items: center; justify-content: center; border-radius: 999px; cursor: pointer; text-decoration: none; font: inherit; }
.atp-dispo__iconbtn:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--atp-focus); }
.atp-dispo__main { flex: 1; padding: var(--atp-space-4); padding-bottom: calc(72px + var(--atp-space-4) + var(--atp-safe-bottom)); display: flex; flex-direction: column; gap: var(--atp-space-3); width: 100%; }
.atp-dispo__tabs { position: fixed; left: 0; right: 0; bottom: 0; z-index: 5; display: grid; grid-template-columns: repeat(5, 1fr); background: var(--atp-surface); border-top: 1px solid var(--atp-border); padding-bottom: var(--atp-safe-bottom); }
.atp-dispo__tab { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; min-height: 60px; font-size: var(--atp-text-xs); color: var(--atp-text-muted); text-decoration: none; position: relative; }
.atp-dispo__tab.active { color: var(--atp-primary); font-weight: 600; }
.atp-dispo__tab:focus-visible { outline: none; box-shadow: inset 0 0 0 3px var(--atp-focus); }
.atp-dispo__tab-badge { position: absolute; top: 8px; right: calc(50% - 22px); min-width: 1.2rem; height: 1.2rem; border-radius: 999px; background: var(--atp-danger); color: var(--atp-primary-contrast); font-size: 10px; display: inline-flex; align-items: center; justify-content: center; padding: 0 4px; }
.atp-dispo__kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(9rem, 100%), 1fr)); gap: var(--atp-space-2); width: 100%; }
.atp-dispo__kpi { background: var(--atp-surface); border: 1px solid var(--atp-border); border-radius: var(--atp-radius-md); padding: var(--atp-space-3); }
.atp-dispo__kpi-n { font-size: 24px; font-weight: 700; color: var(--atp-heading); line-height: 1.1; }
.atp-dispo__kpi-l { font-size: var(--atp-text-xs); color: var(--atp-text-muted); }
.atp-dispo__kpi--warn { border-color: var(--atp-warn); }
.atp-dispo__card { display: block; background: var(--atp-surface); border: 1px solid var(--atp-border); border-radius: var(--atp-radius-md); padding: var(--atp-space-3) var(--atp-space-4); text-decoration: none; color: inherit; width: 100%; }
.atp-dispo__card:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--atp-focus); }
.atp-dispo__card--exc { border-left: 4px solid var(--atp-danger); }
.atp-dispo__card-head { display: flex; justify-content: space-between; gap: var(--atp-space-2); align-items: center; }
.atp-dispo__card-title { font-weight: 700; color: var(--atp-heading); }
.atp-dispo__card-sub { font-size: var(--atp-text-sm); color: var(--atp-text-muted); margin-top: 2px; overflow-wrap: anywhere; }
.atp-dispo__chips { display: flex; flex-wrap: wrap; gap: var(--atp-space-1); margin-top: var(--atp-space-2); }
.atp-dispo__chip { font-size: var(--atp-text-xs); padding: 2px var(--atp-space-2); border-radius: 999px; background: var(--atp-danger-soft); color: var(--atp-danger); }
.atp-dispo__chip--ok { background: var(--atp-success-soft); color: var(--atp-success); }
.atp-dispo__chip--muted { background: var(--atp-primary-soft); color: var(--atp-heading); }
.atp-dispo__actions { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(9rem, 100%), 1fr)); gap: var(--atp-space-2); width: 100%; }
.atp-dispo__actions .atp-btn, .atp-dispo__actions a { min-height: 48px; }
.atp-dispo__section { font-size: 16px; font-weight: 600; color: var(--atp-heading); margin: var(--atp-space-2) 0 0; }
.atp-dispo__row { display: flex; justify-content: space-between; gap: var(--atp-space-2); align-items: center; min-height: 44px; }
.atp-dispo__list { display: flex; flex-direction: column; gap: var(--atp-space-2); }
.atp-dispo__filter { display: flex; gap: var(--atp-space-2); flex-wrap: wrap; align-items: center; }
.atp-dispo__seg { appearance: none; font: inherit; min-height: 40px; padding: 0 var(--atp-space-3); border-radius: 999px; border: 1px solid var(--atp-border); background: var(--atp-surface); color: var(--atp-text); cursor: pointer; }
.atp-dispo__seg--on { background: var(--atp-primary); color: var(--atp-primary-contrast); border-color: var(--atp-primary); }
.atp-dispo__seg:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--atp-focus); }
@media (min-width: 900px) { .atp-dispo__main { padding: var(--atp-space-5) var(--atp-space-6); } .atp-dispo__list { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr)); } }
=======
/* ==========================================================================
   Slice 4b: fireTMS parity, wave b. Segments, load plan, route alerts, planned-vs-driven map, planner, validation
   rules, access policy, intra-company board. Tokens only, fluid full width (no fixed caps).
   ========================================================================== */
.atp-parityb-seglist { display: grid; gap: var(--atp-space-4); width: 100%; grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr)); }
.atp-parityb-seg { border: 1px solid var(--atp-border); border-radius: var(--atp-radius-lg); padding: var(--atp-space-4); display: flex; flex-direction: column; gap: var(--atp-space-3); min-width: 0; background: var(--atp-surface); }
.atp-parityb-seg--current { border-color: var(--atp-primary); box-shadow: inset 0 0 0 1px var(--atp-primary); }
.atp-parityb-seg--done { background: var(--atp-surface-2); }
.atp-parityb-seg__head { display: flex; flex-wrap: wrap; align-items: center; gap: var(--atp-space-2); }
.atp-parityb-seg__title { font-weight: var(--atp-weight-semibold); color: var(--atp-heading); }
.atp-parityb-seg__km { margin-left: auto; font-size: var(--atp-text-sm); color: var(--atp-text-muted); }
.atp-parityb-seg__stops { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--atp-space-2); }
.atp-parityb-stop { display: grid; grid-template-columns: max-content minmax(0, 1fr) max-content; gap: var(--atp-space-3); align-items: center; font-size: var(--atp-text-base); padding-left: var(--atp-space-3); border-left: 3px solid var(--atp-border); }
.atp-parityb-stop--pickup { border-left-color: var(--atp-success); }
.atp-parityb-stop--dropoff { border-left-color: var(--atp-primary); }
.atp-parityb-stop--transshipment { border-left-color: var(--atp-warn); }
.atp-parityb-stop__kind { font-size: var(--atp-text-xs); text-transform: uppercase; letter-spacing: 0.06em; color: var(--atp-text-subtle); }
.atp-parityb-stop__addr { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.atp-parityb-stop__state { display: inline-flex; gap: var(--atp-space-1); }
.atp-parityb-seg__res { margin: 0; }
.atp-parityb-alertlist { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.atp-parityb-alert { display: grid; grid-template-columns: max-content max-content minmax(0, 1fr); gap: var(--atp-space-3); align-items: center; padding: var(--atp-space-2) 0; border-bottom: 1px solid var(--atp-border); font-size: var(--atp-text-base); }
.atp-parityb-alert:last-child { border-bottom: none; }
.atp-parityb-alert__detail { display: flex; flex-wrap: wrap; gap: var(--atp-space-3); min-width: 0; }
@media (max-width: 720px) { .atp-parityb-alert { grid-template-columns: 1fr; gap: var(--atp-space-1); } }

/* ---- planned vs driven line-art map ---- */
.atp-routemap { position: relative; width: 100%; border: 1px solid var(--atp-border); border-radius: var(--atp-radius-lg); background: var(--atp-surface-2); overflow: hidden; }
.atp-routemap__svg { display: block; width: 100%; height: auto; aspect-ratio: 1000 / 560; color: var(--atp-border); }
.atp-routemap__grid { color: var(--atp-border); }
.atp-routemap__empty { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-size: var(--atp-text-base); }
.atp-routemap__legend { display: flex; gap: var(--atp-space-5); padding: var(--atp-space-2) var(--atp-space-4); font-size: var(--atp-text-sm); color: var(--atp-text-muted); border-top: 1px solid var(--atp-border); background: var(--atp-surface); }
.atp-routemap__legend span { display: inline-flex; align-items: center; gap: var(--atp-space-2); }
.atp-routemap__key { display: inline-block; width: 22px; height: 0; border-top: 3px solid var(--atp-primary); }
.atp-routemap__key--planned { border-top-style: dashed; }
.atp-routemap__key--driven { border-top-color: var(--atp-success); }
.atp-parityb-track .atp-grid-kpi { margin-bottom: var(--atp-space-4); }
.atp-parityb-track .atp-table-wrap { margin-top: var(--atp-space-4); }

/* ---- planner ---- */
.atp-parityb-planner__cols { grid-template-columns: repeat(auto-fit, minmax(min(34rem, 100%), 1fr)); align-items: start; }
.atp-parityb-planner__hint { padding: var(--atp-space-6); text-align: center; }
.atp-parityb-planner__pick { appearance: none; background: none; border: 0; padding: 0; font: inherit; cursor: pointer; color: var(--atp-primary); text-decoration: underline; }
.atp-parityb-score { display: inline-flex; min-width: 2.75rem; justify-content: center; padding: 2px 8px; border-radius: var(--atp-radius-pill); background: var(--atp-success-soft); color: var(--atp-success); font-weight: var(--atp-weight-semibold); font-variant-numeric: tabular-nums; }
.atp-parityb-score--out { background: var(--atp-surface-3); color: var(--atp-text-muted); }

/* ---- intra-company board ---- */
.atp-parity .atp-table tr.atp-tr--muted td { color: var(--atp-text-muted); }
.atp-parityb-exchange .atp-parity-actions { flex-wrap: wrap; }

.atp-parityb-planner .atp-table td { white-space: normal; }
.atp-parityb-planner .atp-admin-chips { display: inline-flex; flex-wrap: wrap; gap: var(--atp-space-1); }
.atp-parityb-planner .atp-admin-chips .atp-badge { white-space: nowrap; }
