/* Round 3 prototype layout: the ruled direction (D24): Split on the dark ground, rail Black, pane Iron, status A.
   Sits on top of shared/cockpit.css (components) and shared/status-a.css (bands). Radius 2 px max, no shadows, no pills.
   Round-3 changes: rail head = lockup + date; five rail tiles one size; green band always open; current row Ash fill, no rule;
   Today = six tiles + five cards; athlete = four cards, the "until" control, the reason step; Roster sort headers;
   Billing keeps the full rail (D41); selects readable (the round-2 invisible-text bug); refusal toasts red-filled with an icon.
   Round-3 acceptance (D45): Open sheet right-aligned, tighter tick gaps, Notes as two buttons, three-line money tiles. */
:root{--ck-row:44px}
.split{display:grid;grid-template-columns:420px minmax(0,1fr);min-height:100vh}
.rail-q{background:var(--grit-black);color:var(--grit-white);padding:0 20px 20px;display:flex;flex-direction:column;gap:14px;position:sticky;top:0;height:100vh;overflow:auto;border-right:1px solid var(--ck-bar-rule)}
.rail-head{display:flex;align-items:center;justify-content:center;height:96px;border-bottom:1px solid var(--ck-bar-rule);flex:none}   /* lockup only, centred (markup 2026-09-15) */
.rail-q .lockup{width:150px;height:auto}
.rail-q .micro{color:var(--grit-ash)}
.rail-q .stats{grid-auto-flow:row;grid-template-columns:repeat(6,1fr);border-color:var(--ck-bar-rule)}
.rail-q .stat{padding:10px 10px 8px 0}
.rail-q .stat.band{grid-column:span 2}
.rail-q .stat.due{grid-column:span 3;border-top:1px solid var(--ck-bar-rule)}
.rail-q .stat.due:nth-child(4){border-left:0;padding-left:0}
.rail-q .stat .v{font-size:22px}
.rail-q .stat .s{display:none}
.rail-q .stat.due .label::after{content:" due";letter-spacing:.12em}
.rail-q .qhead{border-bottom-color:var(--grit-ash)}
.rail-q .qrow{grid-template-columns:18px 44px minmax(0,1fr) auto;gap:0 10px;padding-left:0;border-top-color:var(--ck-bar-rule);cursor:pointer}
.rail-q .qrow:hover{background:var(--grit-iron)}
.rail-q .qrow.is-current,.rail-q .qrow.is-current:hover{background:var(--grit-ash);color:var(--grit-iron);border-left:0;padding-left:0;margin-left:0}
.rail-q .qrow.is-current .note,.rail-q .qrow.is-current .flag,.rail-q .qrow.is-current .btn--row{color:var(--grit-iron);border-color:var(--grit-iron)}
.rail-q .qrow.is-current .sel{border-color:var(--grit-iron)}
.rail-q .qrow.is-selected .sel{background:var(--grit-white);border-color:var(--grit-white)}
.rail-q .qrow.is-current.is-selected .sel{background:var(--grit-iron);border-color:var(--grit-iron)}
.rail-q .qname .nm{font-size:13px}
.rail-q .qname .note{font-size:11px}
.rail-q .btn--row{border-color:var(--grit-ash);color:var(--grit-white)}
.rail-q .sel{border-color:var(--grit-ash);opacity:1;cursor:pointer}
.rail-foot{margin-top:auto;padding-top:14px;border-top:1px solid var(--ck-bar-rule);display:flex;flex-direction:column;gap:10px;flex:none}
.rail-meta{display:flex;gap:16px;font-size:11px;color:var(--grit-ash);align-items:center;flex-wrap:wrap}
.rail-meta a,.rail-meta button{font-weight:600;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--grit-ash)}
.rail-meta a:hover,.rail-meta button:hover{color:var(--grit-white);text-decoration:underline;text-underline-offset:.3em}
.rail-tools{display:flex;align-items:center;gap:12px;padding:6px 0;border-bottom:1px solid var(--ck-bar-rule)}
.rail-tools .field{flex:1}
.rail-tools .field .in{min-height:32px;padding:4px 0;font-size:13px;border-bottom-color:var(--grit-ash);color:var(--grit-white)}
.rail-tools .btn--fill{min-height:32px;padding:0 12px;font-size:10.5px}
.pane{padding:0 32px 48px;min-width:0;background:var(--grit-iron)}
.pane-nav{display:flex;align-items:center;gap:22px;height:48px;border-bottom:1px solid var(--ck-rule);margin:0 -32px 20px;padding:0 32px}
.pane-nav .tabs{height:100%;gap:22px}
.pane-nav .tabs a{color:var(--grit-ash);border-bottom-color:transparent}
.pane-nav .tabs a:hover{color:var(--grit-white)}
.pane-nav .tabs a[aria-current="page"]{color:var(--grit-white);border-bottom-color:var(--grit-white)}
.pane-nav .link{color:var(--grit-ash)}
.split.strip{grid-template-columns:72px minmax(0,1fr)}   /* named .strip: .wide is the 900-weight type utility in cockpit.css (round-3 markup: the bold Roster) */
.rail-q.compact{padding:0 12px 20px;align-items:center;gap:18px}
.rail-q.compact .icon-link{height:76px;display:flex;align-items:center;border-bottom:1px solid var(--ck-bar-rule);width:100%;justify-content:center}
.rail-q.compact .icon{width:40px;height:auto}
.rail-q.compact .cnt{display:flex;flex-direction:column;align-items:center;gap:4px}
.rail-q.compact .cnt b{font-weight:700;font-size:18px}
.rail-q.compact .cnt.red b{color:var(--st-red-ink)}
.rail-q.compact .cnt.amber b{color:var(--st-amber-ink)}
.rail-q.compact .cnt.green b{color:var(--st-green-ink)}
.rail-q.compact .expand{margin-top:auto;writing-mode:vertical-rl;transform:rotate(180deg);font-weight:600;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--grit-ash);min-height:44px;padding:8px 0}
.rail-q.compact .expand:hover{color:var(--grit-white);text-decoration:underline;text-underline-offset:.3em}
.page-head{display:flex;align-items:baseline;gap:16px;margin-bottom:18px;flex-wrap:wrap;margin-top:4px}
.page-title{font-size:22px}
.spacer{flex:1}

/* stat strip on Today: every number one size, no hero, the target tile carries its sub-line */
.today-stats .stat .v{font-size:28px}
.today-stats .stat.target .v small{font-size:13px;margin-left:6px}

/* Today cards: two columns, birthdays full width */
.today-cards{display:grid;grid-template-columns:1fr 1fr;gap:22px 28px;margin-top:24px;align-items:start}
.today-cards .card.full{grid-column:1/-1}
.card h2 .back{margin-left:auto;font-size:10.5px}
.card .sub+.sub{margin-top:10px}
.duehead .n{font-weight:400;letter-spacing:0;text-transform:none;color:var(--ck-ink-2)}
.duerow .badge{flex:none}
.duerow .who.plain{background:none;border:0;padding:0;font:inherit;font-weight:600;color:inherit;text-align:left;cursor:pointer;min-height:36px}
.duerow .who.plain:hover{text-decoration:underline;text-underline-offset:.25em}
.duerow.refused .kind{color:var(--st-red-ink)}
.chart g.drill{cursor:pointer}
.chart g.drill:hover text.lbl,.chart g.drill:focus-visible text.lbl{text-decoration:underline}
.chart g.drill:focus{outline:0}
.chart line.grid-minor{stroke:var(--ck-rule);stroke-width:1;stroke-dasharray:2 4}
.chart line.thr-acc{stroke:var(--grit-gunmetal);stroke-width:1.5}
table.sr{table-layout:fixed;width:1px;left:0;top:0}   /* a wide table twin (the heatmap's) must not widen the page */

.rail{display:grid;grid-template-columns:repeat(2,1fr);gap:22px 28px}
.settings .rail{grid-template-columns:1fr}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:24px}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.ath-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px 28px;margin-top:20px;align-items:start}
.sec{margin-top:28px}
.tbl-wrap{overflow:auto}
.tbl th{background:var(--grit-iron)}
.tbl th[data-action="sort"]{cursor:pointer;user-select:none}
.tbl th[data-action="sort"]:hover{color:var(--ck-ink);text-decoration:underline;text-underline-offset:.3em}
.tbl th.sorted{color:var(--ck-ink)}
.tbl th .dir{font-size:8px;margin-left:5px;vertical-align:middle}
.tbl td.note a{color:var(--ck-ink-2);display:block;max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.multi{grid-template-columns:repeat(3,1fr)}
.fgrid.pause{grid-template-columns:1fr 1fr 1.4fr 1fr 2fr auto;align-items:end;margin:8px 0 4px}
.fgrid.stop{grid-template-columns:1fr 2fr auto;align-items:end;margin:8px 0 4px}
.fgrid .yn{display:inline-flex;gap:8px}
.fgrid.add{grid-template-columns:2fr 1fr 1fr 1fr 1fr 1.2fr 1.2fr auto;align-items:end}
.sparks{grid-template-columns:repeat(4,1fr)}
.micro{color:var(--grit-ash)}
.flag{color:var(--grit-white)}
.tick{border-color:var(--grit-ash);color:var(--grit-iron)}
.tick[aria-checked="true"]{background:var(--grit-ash);border-color:var(--grit-ash)}
.days7 i{border-color:var(--grit-ash)}
.days7 i.on{background:var(--grit-ash);border-color:var(--grit-ash)}
.days7.edit i{cursor:pointer;width:14px;height:14px}
.days7.edit{grid-template-columns:repeat(7,14px);gap:4px}
.hbar .b{background:var(--grit-ash)}
.chart .dot{stroke:var(--grit-white)}
.qrow:hover{background:var(--grit-black)}
.phone-only{display:none}
.warn{color:var(--st-amber-ink)}
.admin-row{display:flex;align-items:center;gap:12px;padding:6px 0;flex-wrap:wrap}

/* Today lists (2026-09-15, Nicolas): the day column is a column, not a tail after the name */
.today-cards .duerow .who{flex:1 1 auto}
.today-cards .duerow .when{margin-left:0;flex:0 0 auto;min-width:8ch;text-align:center}
.today-cards .duerow .st{margin-left:0}
/* the sessions-feedbacked step (markup 2026-09-15): inline in the rail row, a panel for bulk, the athlete action row */
.sess-step{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap}
.sess-step .ask{font-weight:600;font-size:12px}
.in.sess{width:56px;min-height:32px;padding:2px 0;font:inherit;font-size:13px;text-align:right;font-variant-numeric:tabular-nums;border:0;border-bottom:1px solid var(--grit-ash);background:transparent;color:inherit}
.in.sess:focus{outline:0;border-bottom:2px solid var(--grit-gunmetal)}
.rail-q .qrow.is-asking{grid-template-columns:18px 44px minmax(0,1fr) auto}
.rail-q .qrow.is-asking .qname .name{max-width:90px}
.rail-q .btn--row.yes{background:var(--grit-gunmetal);border-color:var(--grit-gunmetal);color:var(--grit-white)}
.sess-panel{border-bottom:1px solid var(--ck-bar-rule);padding:6px 0 12px}
.sess-panel .duerow .in.sess{margin-left:auto}
.sess-panel .yn{display:flex;gap:10px;margin-top:10px}
.sess-panel .yn .btn{min-height:32px;padding:0 12px;font-size:10.5px}
.ath-actions.sess-step .in.sess{width:64px;min-height:36px;border-bottom-color:var(--grit-ash);color:var(--grit-white)}

/* Analytics money: NOW and AFTER tiles, three lines each: /4w, /m, /m excl. BTW (D44, D45) */
.stats.money{grid-auto-flow:row;grid-template-columns:1.5fr 1.5fr 1fr 1fr 1fr 1fr}
.stat.three .v{font-size:22px;margin-top:4px;white-space:nowrap}
.stat.three .v+.v{margin-top:2px;color:var(--ck-ink-2)}
.stat.three .v small{font-size:12px;margin-left:4px}
/* athlete action row (D45): Open sheet sits at the right edge; the Program and Check-in ticks sit close to their labels */
.ath-actions [data-action="sheet"]{margin-left:auto}
.ath-actions .two-step{gap:0}
/* Notes: two buttons under the textarea, no helper text (D45) */
.notes .undo{display:flex;gap:8px;align-items:center;margin-top:8px}
/* Billing chase list: three columns, the note left-aligned (markup 2026-09-15) */
.chase .duerow{display:grid;grid-template-columns:minmax(160px,220px) 1fr auto;gap:16px;align-items:center}
.chase .duerow .when{margin-left:0;text-align:left}
.chase .duerow .st{margin-left:0}

/* the "until" control: a button shows Today or the picked date; the native picker opens from a hidden date input */
.until{display:inline-flex;align-items:center;gap:8px;position:relative;font-size:13px}
.until .ask{font-weight:600}
.until .until-in{position:absolute;left:0;bottom:0;width:1px;height:1px;opacity:0;pointer-events:none}
.ath-actions.reason .in{min-height:36px;border-bottom:1px solid var(--grit-ash);color:var(--grit-white)}

/* editable cells and selects (round-2 bug: select text invisible on the dark ground) */
.cell-edit{border:0;border-bottom:1px solid transparent;background:transparent;color:inherit;font:inherit;padding:2px 0;width:100%;min-width:56px}
.cell-edit:hover{border-bottom-color:var(--grit-ash)}
.cell-edit:focus{outline:0;border-bottom:2px solid var(--grit-gunmetal)}
.cell-edit.num{text-align:right;font-variant-numeric:tabular-nums}
select.cell-edit{appearance:none;-webkit-appearance:none;cursor:pointer}
select,select.cell-edit,select.in{color:var(--grit-white);color-scheme:dark}
select option{background:var(--grit-iron);color:var(--grit-white)}
.tbl td .cell-edit{max-width:96px}
.tbl td .cell-edit[type="date"]{max-width:118px;font-size:11.5px}
.tbl td .cell-edit[type="number"]{max-width:54px}
.tbl td select.cell-edit{max-width:76px}
.tbl .days7.edit{grid-template-columns:repeat(7,11px);gap:3px}
.tbl .days7.edit i{width:11px;height:11px}
.kv .cell-edit[type="number"]{max-width:72px}
.kv select.cell-edit.wave{max-width:120px}
.tbl th,.tbl td{padding-right:8px}

/* toast with undo; a refusal is red-filled with an icon (D42) */
.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);background:var(--grit-black);color:var(--grit-white);border:1px solid var(--grit-ash);border-radius:var(--ck-radius);padding:10px 14px;font-size:13px;display:flex;align-items:center;gap:16px;z-index:20;max-width:min(92vw,720px)}
.toast .u{font-weight:600;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--grit-white);min-height:32px;display:inline-flex;align-items:center;padding:0 8px;border:1px solid var(--grit-ash);border-radius:var(--ck-radius)}
.toast .u:hover{text-decoration:underline;text-underline-offset:.3em}
.toast .t{font-variant-numeric:tabular-nums;color:var(--grit-ash);font-size:11px}
.toast.refused{background:var(--st-red);border-color:var(--st-red);color:var(--grit-white);font-weight:600}
.toast .ic{display:inline-flex;width:18px;height:18px;border:1px solid currentColor;border-radius:var(--ck-radius);align-items:center;justify-content:center;flex:none}
.toast .ic svg{width:10px;height:10px}
.toast[hidden]{display:none}

/* two-step inline confirm and the backwards-reason step */
.two-step .yn button{font-weight:600;font-size:11px;letter-spacing:.1em;text-transform:uppercase;min-height:32px;padding:0 8px;border:1px solid var(--grit-ash);border-radius:var(--ck-radius);margin-left:6px}
.two-step .yn button.yes{background:var(--grit-gunmetal);border-color:var(--grit-gunmetal);color:var(--grit-white)}

/* change list */
.changes .duerow{gap:14px}
.changes .kind{font-size:10.5px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--ck-ink-2)}

@media (max-width:480px){
  .phone-only{display:block}
  .phone-only .bar{background:var(--grit-black)}
  .phone-only .bar-in{width:min(100% - 32px,1392px);margin-inline:auto}
  .split{grid-template-columns:1fr}
  .rail-q,.rail-q.compact{display:none}
  .split.strip{grid-template-columns:1fr}
  .pane{padding:0 16px 40px;background:var(--grit-iron)}
  .pane-nav{margin:0 -16px 12px;padding:0 16px;overflow:auto}
  .pane-nav .tabs{display:flex;gap:14px}
  .pane-nav .small,.pane-nav .link{display:none}
  .toast{left:16px;right:16px;transform:none;max-width:none}
  .rail,.today-cards,.ath-grid,.grid2,.grid3{grid-template-columns:1fr}
  .queue-phone .stats{grid-template-columns:repeat(6,1fr)}
  .queue-phone .stat:nth-child(n+4){display:block}
  .queue-phone .stat.band{grid-column:span 2}
  .queue-phone .stat.due{grid-column:span 3;border-top:1px solid var(--ck-rule)}
  .queue-phone .stat.due:nth-child(4){border-left:0;padding-left:0}
  .queue-phone .stat .v{font-size:22px}
  .queue-phone .stat .s{display:none}
  .queue-phone .stat.due .label::after{content:" due"}
  .fgrid.pause,.fgrid.add,.fgrid.stop{grid-template-columns:1fr 1fr}
  .sparks{grid-template-columns:1fr 1fr}
  .stats.money{grid-template-columns:1fr 1fr}
  .chase .duerow{grid-template-columns:1fr auto;gap:6px 12px}
  .chase .duerow .when{grid-column:1/-1}
  .in.sess{min-height:44px;width:64px}
  .rail-q .btn--row.yes,.sess-step .btn--row{min-height:44px}
}
