*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{
  --navy:#171F69;--navy-700:#1E2A85;--red:#E31937;--gray:#5F6062;--cyan:#009AC7;
  --navy-soft:rgba(23,31,105,.06);--navy-mid:rgba(23,31,105,.12);
  --bg:#EBEDF2;--surf:#fff;--surf2:#F7F8FB;--surf3:#F0F2F6;
  --bd:rgba(15,23,42,.08);--bd2:rgba(15,23,42,.14);--bd3:rgba(15,23,42,.22);
  --tx:#0F172A;--tx2:#475569;--tx3:#94A3B8;
  /* Session type system */
  --prac:#15803D;--prac-bg:#F0FDF4;--prac-bd:#BBF7D0;--prac-tint:#DCFCE7;
  --train:#6B7280;--train-bg:#F9FAFB;--train-bd:#E5E7EB;
  --prelim:#15803D;--prelim-bg:#F0FDF4;--prelim-bd:#86EFAC;
  --final:#DC2626;--final-bg:#FEF2F2;--final-bd:#FECACA;
  --qual:#1D4ED8;--qual-bg:#EFF6FF;--qual-bd:#BFDBFE;
  --wu:#D97706;--wu-bg:#FFFBEB;--wu-bd:#FDE68A;
  --split-bg:#FFFBEB;--split-bd:#FCD34D;--split-tx:#92400E;
  --ok:#16A34A;--warn:#D97706;--err:#DC2626;
  --r:8px;--r-lg:12px;--r-xl:16px;--r-2xl:20px;
  --sh-xs:0 1px 2px rgba(15,23,42,.05);
  --sh:0 1px 3px rgba(15,23,42,.08),0 1px 2px rgba(15,23,42,.04);
  --sh-md:0 4px 14px rgba(15,23,42,.1),0 2px 6px rgba(15,23,42,.05);
  --sh-lg:0 16px 48px rgba(15,23,42,.18),0 6px 16px rgba(15,23,42,.08);
  --ease:cubic-bezier(.32,.72,0,1);
}
html,body{height:100%;overflow:hidden;font-family:'Inter',system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--tx);font-size:14px;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
button,input,select,textarea{font-family:inherit}
button{cursor:pointer;border:none;background:none}
::selection{background:rgba(23,31,105,.15)}

#app{display:grid;grid-template-rows:auto 1fr;grid-template-columns:minmax(0,1fr);height:100vh;max-width:100%;overflow:hidden}

/* ════ TOP BAR ════ */
/* Two-tier structure. .bar-top holds identity (logo + meet name, which keeps
   flex room and stays readable) and the action cluster. .bar-days-row is a
   dedicated full-width strip for day pills + add-day + undo/redo — day tabs
   no longer compete with action buttons for the same row, so neither gets
   crushed no matter how many days a master schedule spans. */
.bar{background:var(--navy);display:flex;flex-direction:column;border-bottom:1px solid rgba(255,255,255,.06);z-index:300;box-shadow:0 1px 12px rgba(0,0,0,.25);min-width:0;max-width:100%}
.bar-top{display:flex;flex-wrap:wrap;align-items:center;min-height:52px;width:100%;min-width:0;max-width:100%}
.bar-logo{display:flex;align-items:center;padding:0 18px;height:52px;border-right:1px solid rgba(255,255,255,.08);flex-shrink:0;text-decoration:none;transition:background .15s}
.bar-logo:hover{background:rgba(255,255,255,.05)}
.bar-logo img{height:26px;width:auto;display:block}
.bar-meet{flex:1;padding:0 16px;cursor:pointer;min-width:120px;overflow:hidden;transition:background .12s}
.bar-meet:hover{background:rgba(255,255,255,.04)}
.bar-meet-name{font-size:13.5px;font-weight:600;color:rgba(255,255,255,.95);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3;letter-spacing:-.01em}
.bar-meet-meta{font-size:11px;color:rgba(255,255,255,.4);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bar-days-row{display:flex;align-items:center;width:100%;border-top:1px solid rgba(255,255,255,.07);background:rgba(0,0,0,.14);min-height:42px}
.bar-days{display:flex;align-items:center;gap:3px;padding:5px 10px;flex:1;min-width:0;overflow-x:auto;scrollbar-width:none}
.bar-days::-webkit-scrollbar{display:none}
.bar-days-right{display:flex;align-items:center;gap:4px;padding:0 10px;flex-shrink:0;border-left:1px solid rgba(255,255,255,.07)}
.dp{height:32px;padding:0 13px;border-radius:8px;font-size:12px;font-weight:500;color:rgba(255,255,255,.55);transition:.14s;white-space:nowrap;flex-shrink:0;position:relative;display:flex;align-items:center;gap:5px}
.dp-wd{font-weight:500}
.dp-num{font-size:11px;font-weight:700;opacity:.75}
.dp.active .dp-num{opacity:1}
.dp-tag-dot{display:inline-block;width:6px;height:6px;border-radius:50%;flex-shrink:0}
.dp:hover{background:rgba(255,255,255,.1);color:rgba(255,255,255,.9)}
.dp.active{background:#fff;color:var(--navy);font-weight:600}
.dp-add{width:32px;height:32px;border-radius:8px;font-size:16px;color:rgba(255,255,255,.4);display:flex;align-items:center;justify-content:center;transition:.14s;flex-shrink:0}
.dp-add:hover{background:rgba(255,255,255,.1);color:#fff}
.dp.drop-active{background:rgba(74,222,128,.3);box-shadow:inset 0 0 0 2px #4ADE80}
.bar-right{display:flex;align-items:center;gap:4px;padding:0 8px;flex-shrink:0}
.bb{height:30px;padding:0 10px;border-radius:8px;font-size:12px;font-weight:500;color:rgba(255,255,255,.82);background:rgba(255,255,255,.09);transition:.14s;white-space:nowrap;display:flex;align-items:center;gap:5px;flex-shrink:0}
.bb:hover{background:rgba(255,255,255,.16);color:#fff}
.bb svg{width:14px;height:14px}
.bb.red{background:var(--red);color:#fff}
.bb.red:hover{background:#CC1530}
.bb.icon-only{padding:0;width:30px;justify-content:center}
.bb:disabled{opacity:.35;cursor:not-allowed}
.bar-status{height:24px;padding:0 10px;border-radius:12px;font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;transition:.14s}
.bar-status.draft{background:rgba(255,255,255,.1);color:rgba(255,255,255,.55)}
.bar-status.review{background:rgba(251,191,36,.18);color:#FCD34D}
.bar-status.ready{background:rgba(74,222,128,.18);color:#86EFAC}
.bar-status.published{background:rgba(56,189,248,.2);color:#7DD3FC}
.bar-sep{width:1px;height:22px;background:rgba(255,255,255,.1);margin:0 2px}
.bar-sync{display:flex;align-items:center;gap:6px;padding:0 10px 0 6px;flex-shrink:0}
.sync-pip{width:7px;height:7px;border-radius:50%;background:#4ADE80;transition:.3s;flex-shrink:0;box-shadow:0 0 0 3px rgba(74,222,128,.15)}
.sync-pip.saving{background:#FBBF24;box-shadow:0 0 0 3px rgba(251,191,36,.15)}
.sync-pip.error{background:#F87171;box-shadow:0 0 0 3px rgba(248,113,113,.15)}
.sync-lbl{font-size:11px;color:rgba(255,255,255,.4);white-space:nowrap}

/* ════ WORKSPACE ════ */
.workspace{display:flex;height:100%;overflow:hidden;position:relative;min-width:0;max-width:100%}

/* ════ TIMELINE ════ */
.tl-wrap{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}
.tl-bar{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;padding:6px 18px;min-height:42px;background:var(--surf);border-bottom:1px solid var(--bd);flex-shrink:0;box-shadow:var(--sh-xs);container-type:inline-size}
.tl-title{font-size:12px;font-weight:700;color:var(--tx);letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:40px}
.tl-spacer{flex:1 1 0;min-width:0}
.tl-day-info{font-size:11px;color:var(--tx3);font-weight:500;display:flex;align-items:center;gap:5px;flex-shrink:0}
.tl-day-info b{color:var(--tx2);font-weight:600}
.tl-iconbtn{width:30px;height:30px;border-radius:8px;border:1px solid var(--bd2);background:var(--surf);color:var(--tx2);display:flex;align-items:center;justify-content:center;transition:.12s;flex-shrink:0}
.tl-iconbtn:hover{background:var(--surf2);border-color:var(--bd3)}
.tl-iconbtn.active{background:var(--navy);color:#fff;border-color:var(--navy)}
.tl-iconbtn svg{width:16px;height:16px}
.tl-addbtn{height:30px;padding:0 14px;border-radius:8px;background:var(--navy);color:#fff;font-size:12px;font-weight:600;display:flex;align-items:center;gap:5px;transition:.12s;flex-shrink:0;white-space:nowrap}
.tl-addbtn:hover{background:var(--navy-700)}
.tl-addbtn svg{width:14px;height:14px}

/* Container query, not viewport: this bar's real available width depends on
   the day column, which shrinks when a sidebar/edit panel is open — a
   viewport media query can't see that. The day-info summary ("N sessions ·
   time range") is the least essential piece here (title and action buttons
   are load-bearing), so it's what gives way first. Threshold is generous —
   checked against a real ~740px-wide window that still needed this hidden,
   so erring well on the side of hiding it too early rather than not enough.
   flex-wrap above is the final backstop regardless: if this bar is ever
   still too tight, the remaining pieces wrap to a second line rather than
   clip or need horizontal scroll. */
@container (max-width: 900px) {
  .tl-day-info{display:none}
}

.tl-body{flex:1;overflow-y:auto;overflow-x:auto;padding:16px 18px 60px;display:flex;flex-direction:column;gap:10px;min-width:0}
.tl-body::-webkit-scrollbar{width:8px}
.tl-body::-webkit-scrollbar-track{background:transparent}
.tl-body::-webkit-scrollbar-thumb{background:var(--bd3);border-radius:4px;border:2px solid var(--bg)}
.tl-body::-webkit-scrollbar-thumb:hover{background:var(--tx3)}

.tl-dayhead{display:flex;align-items:center;gap:10px;font-size:11px;font-weight:700;color:var(--tx3);text-transform:uppercase;letter-spacing:.7px;margin:4px 0 0}
.tl-dayhead::after{content:'';flex:1;height:1px;background:var(--bd)}

/* ════ SESSION CARD ════ */
.sc{background:var(--surf);border-radius:var(--r-lg);box-shadow:var(--sh);overflow:hidden;transition:box-shadow .16s,transform .16s;position:relative;border:1px solid var(--bd);flex-shrink:0;container-type:inline-size}
.sc::before{content:'';position:absolute;left:0;top:0;bottom:0;width:4px;border-radius:var(--r-lg) 0 0 var(--r-lg)}
.sc.prac::before{background:var(--prac)}
.sc.train::before{background:var(--train)}
.sc.comp::before{background:var(--navy)}
.sc.finals::before{background:var(--red)}
.sc:hover{box-shadow:var(--sh-md)}
.sc.editing{box-shadow:0 0 0 2px var(--navy),var(--sh-md)}
.sc.drag-over{box-shadow:0 0 0 2px var(--cyan),var(--sh-md)}
.sc.dragging{opacity:.45}

.sc-hd{display:flex;align-items:center;gap:13px;padding:13px 16px 13px 18px;cursor:pointer;user-select:none;flex-wrap:wrap;row-gap:6px}
.sc-hd:hover{background:rgba(15,23,42,.012)}

/* Badge — FIXED consistent treatment */
.badge{display:inline-flex;align-items:center;justify-content:center;height:24px;padding:0 11px;border-radius:6px;font-size:10.5px;font-weight:700;letter-spacing:.02em;white-space:nowrap;flex-shrink:0;line-height:1;text-transform:uppercase}
.badge.prac{background:var(--prac);color:#fff}
.badge.train{background:var(--train);color:#fff}
.badge.comp{background:var(--navy);color:#fff}
.badge.prelim{background:var(--prelim);color:#fff}
.badge.final{background:var(--final);color:#fff}
.badge.qualifier{background:var(--qual);color:#fff}
.badge.semifinal{background:#7C3AED;color:#fff}

.sc-titles{flex:0 1 auto;max-width:440px;min-width:0}
.sc-name{font-size:14.5px;font-weight:600;color:var(--tx);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.25;letter-spacing:-.01em}
.sc-sub{font-size:11.5px;color:var(--tx3);margin-top:2px;font-weight:500}
.sc-time{text-align:right;flex-shrink:0;display:flex;flex-direction:column;align-items:flex-end}
.sc-time-main{font-size:16px;font-weight:700;color:var(--tx);line-height:1;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.sc-time-sub{font-size:11px;color:var(--tx3);margin-top:3px;font-variant-numeric:tabular-nums}
.sc-actions{display:flex;gap:5px;flex-shrink:0;margin-left:4px}
.sc-act{width:28px;height:28px;border-radius:7px;border:1px solid var(--bd);background:var(--surf);color:var(--tx3);display:flex;align-items:center;justify-content:center;transition:.12s}
.sc-act:hover{background:var(--surf2);color:var(--tx2);border-color:var(--bd2)}
.sc-act svg{width:14px;height:14px}
.sc-act.drag-handle{cursor:grab}
.sc-act.drag-handle:active{cursor:grabbing}

/* Warm-up band */
.sc-wu{display:flex;align-items:center;gap:9px;padding:9px 16px 9px 18px;background:var(--wu-bg);border-top:1px solid var(--wu-bd)}
.sc-wu-icon{width:7px;height:7px;border-radius:50%;background:var(--wu);flex-shrink:0}
.sc-wu-lbl{font-size:11.5px;font-weight:600;color:var(--wu);flex:1}
.sc-wu-time{font-size:11.5px;font-weight:600;color:var(--wu);font-variant-numeric:tabular-nums}

/* Pool open (practice) */
.sc-pool{display:flex;align-items:center;gap:9px;padding:10px 16px 10px 18px;background:var(--prac-bg);border-top:1px solid var(--prac-bd)}
.sc-pool-icon{width:7px;height:7px;border-radius:50%;background:var(--prac);flex-shrink:0}
.sc-pool-lbl{font-size:12px;font-weight:600;color:var(--prac);flex:1}
.sc-pool-time{font-size:12px;font-weight:600;color:var(--prac);font-variant-numeric:tabular-nums}

/* Flights */
.sc-flights{padding:4px 16px 10px 18px;border-top:1px solid var(--bd)}
.sc-flight{display:flex;align-items:center;gap:10px;padding:7px 0;border-bottom:1px solid var(--bd)}
.sc-flight:last-child{border-bottom:none}
.sc-flight-bar{width:4px;height:30px;border-radius:2px;flex-shrink:0}
.sc-flight-name{flex:1;font-size:12.5px;font-weight:600;color:var(--tx)}
.sc-flight-time{font-size:11.5px;color:var(--tx2);font-variant-numeric:tabular-nums;white-space:nowrap}
.sc-flight-dur{font-size:11px;color:var(--tx3);white-space:nowrap}

/* Event rows */
/* flex-wrap, not scroll: whatever doesn't fit on one line wraps to a second
   line within the row instead of being clipped or needing horizontal
   scroll. The card has no fixed height, so it just grows to fit — nothing
   is ever rendered somewhere the person can't see without scrolling. The
   container queries below still handle the common case (compact instead
   of wrap) so most cards stay single-line at normal widths; wrapping is
   the guaranteed fallback for whatever width those don't anticipate. */
.sc-events{padding:2px 0 4px}
.sc-ev{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;padding:9px 12px 9px 14px;border-top:1px solid var(--bd);transition:background .1s;min-width:0}
.sc-ev:hover{background:var(--surf2)}
.sc-ev.dragging{opacity:.4}

/* Container queries: compact the row based on the CARD's actual rendered
   width, not the browser window's width — a sidebar or edit panel eats
   into the card's real estate in a way viewport @media rules can't see.
   Thresholds here are intentionally generous (checked against a real ~740px
   narrow-window case that still needed compacting at what looked like
   comfortable width) — better to compact a little early than not enough. */
@container (max-width: 900px) {
  .ev-time{min-width:80px;font-size:10.5px}
  .ev-stat-lbl{display:none}
}
@container (max-width: 720px) {
  .ev-handle{display:none}
  .ev-time{min-width:68px}
  .sc-ev{gap:6px;padding:9px 10px 9px 12px}
  .ev-splitbtn{padding:0 6px;font-size:9px}
}
@container (max-width: 480px) {
  .ev-splitbtn{display:none}
  /* Practice/competition card headers: compact before falling back to wrap.
     pcard-time-dur is safe to hide here — the same duration is already shown
     in pcard-meta ("3 flights · 4h 30m"), so nothing is lost, just de-duped. */
  .pcard-name,.sc-name{font-size:13px}
  .pcard-time-dur{display:none}
  .sc-actions .sc-act{width:26px;height:26px}
  .pcard-time,.sc-time{margin-left:auto}
}
@container (max-width: 360px) {
  .pcard-time-range,.sc-time-main{font-size:13px}
  .pcard-flight-time,.pcard-flight-dur,.sc-flight-time,.sc-flight-dur{font-size:10.5px}
}
.ev-handle{color:var(--tx3);font-size:13px;flex-shrink:0;opacity:.4;cursor:grab;line-height:1;letter-spacing:-2px}
.ev-handle:hover{opacity:.75}
.ev-info{flex:0 1 auto;max-width:260px;min-width:0}
.ev-name{font-size:13px;font-weight:500;color:var(--tx);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}
.ev-sub{font-size:10.5px;color:var(--tx3);margin-top:2px}
.ev-stat{display:flex;flex-direction:column;align-items:center;gap:2px;flex-shrink:0}
.ev-stat-val{font-size:13px;font-weight:700;color:var(--tx);font-variant-numeric:tabular-nums;line-height:1}
.ev-stat-val.empty{color:var(--tx3);font-weight:500}
.ev-stat-lbl{font-size:9px;color:var(--tx3);text-transform:uppercase;letter-spacing:.04em;font-weight:600}
.ev-badge{font-size:9px;font-weight:700;padding:3px 7px;border-radius:5px;white-space:nowrap;flex-shrink:0;letter-spacing:.03em;text-transform:uppercase}
.ev-badge.prelim{background:var(--prelim-bg);color:var(--prelim);border:1px solid var(--prelim-bd)}
.ev-badge.final{background:var(--final-bg);color:var(--final);border:1px solid var(--final-bd)}
.ev-badge.qualifier{background:var(--qual-bg);color:var(--qual);border:1px solid var(--qual-bd)}
.ev-badge.semifinal{background:#EDE9FE;color:#6D28D9;border:1px solid #C4B5FD}
.ev-badge.split{background:var(--split-bg);color:var(--split-tx);border:1px solid var(--split-bd)}
.ev-split-btn{height:24px;padding:0 9px;border-radius:6px;font-size:10px;font-weight:700;border:1px solid var(--bd2);background:var(--surf);color:var(--tx3)}.ev-split-btn.on{background:var(--split-bg);border-color:var(--split-bd);color:var(--split-tx)}
.ev-splitbtn{height:24px;padding:0 9px;border-radius:6px;font-size:10px;font-weight:700;border:1px solid var(--bd2);background:var(--surf);color:var(--tx3);transition:.1s;white-space:nowrap;text-transform:uppercase;letter-spacing:.02em}
.ev-splitbtn:hover:not(.on){background:var(--surf2);border-color:var(--bd3)}
.ev-splitbtn.on{background:var(--split-bg);border-color:var(--split-bd);color:var(--split-tx)}
.ev-splitbtn.rec{border-color:var(--split-bd);color:var(--split-tx);background:var(--split-bg)}
.ev-time{font-size:11px;color:var(--tx2);white-space:nowrap;font-variant-numeric:tabular-nums;flex-shrink:0;min-width:100px;text-align:right;font-weight:500}
.ev-remove{width:22px;height:22px;border-radius:5px;color:var(--tx3);font-size:15px;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:.1s}.ev-remove:hover{background:var(--final-bg);color:var(--final)}
.ev-rm{width:22px;height:22px;border-radius:5px;color:var(--tx3);font-size:15px;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:.1s}
.ev-rm:hover{background:var(--final-bg);color:var(--final)}

/* Card footer */
.sc-foot{display:flex;align-items:center;gap:8px;padding:9px 16px 9px 18px;border-top:1px solid var(--bd);background:var(--surf2)}
.sc-foot-lbl{font-size:10.5px;color:var(--tx3);font-weight:600;flex-shrink:0}
.bufchips{display:flex;gap:3px}
.bufchip{height:22px;min-width:30px;padding:0 8px;border-radius:11px;font-size:10px;font-weight:600;border:1px solid var(--bd2);background:var(--surf);color:var(--tx3);transition:.1s}
.bufchip:hover{background:var(--surf3)}
.bufchip.on{background:var(--prac);border-color:var(--prac);color:#fff}
.sc-foot-sp{flex:1}
.sc-addev{height:26px;padding:0 11px;border-radius:7px;font-size:11px;font-weight:600;border:1px solid var(--navy-mid);background:var(--navy-soft);color:var(--navy);display:flex;align-items:center;gap:4px;transition:.1s}
.sc-addev:hover{background:var(--navy-mid)}
.sc-warn{display:flex;align-items:center;gap:8px;padding:8px 16px 8px 18px;background:var(--wu-bg);border-top:1px solid var(--wu-bd)}
.sc-warn-icon{width:7px;height:7px;border-radius:50%;background:var(--warn);flex-shrink:0}
.sc-warn-txt{font-size:11px;color:var(--split-tx);flex:1;font-weight:500}
.sc-warn-ack{font-size:10px;color:var(--split-tx);text-decoration:underline;font-weight:600}

/* Add row */
.addrow{display:flex;align-items:center;gap:10px;opacity:0;transition:opacity .2s;margin:4px 0;flex-shrink:0}
.tl-body:hover .addrow,.addrow:hover{opacity:1}
.addrow-line{flex:1;height:1px;background:var(--bd)}
.addrow-btn{height:28px;padding:0 14px;border-radius:14px;font-size:11px;font-weight:600;border:1px dashed var(--bd3);background:var(--surf);color:var(--tx2);transition:.12s;display:flex;align-items:center;gap:5px}
.addrow-btn:hover{background:var(--navy);color:#fff;border-color:var(--navy)}

/* ════ RIGHT PANEL (preview / edit / entries) ════ */
.rpanel{width:0;flex-shrink:0;overflow:hidden;border-left:1px solid var(--bd);background:var(--surf);transition:width .24s var(--ease);display:flex;flex-direction:column}
.rpanel.open-sm{width:300px}
.rpanel.open-md{width:340px}
.rpanel.open-lg{width:600px}
.rp-hd{display:flex;align-items:flex-start;justify-content:space-between;padding:14px 16px 12px;border-bottom:1px solid var(--bd);flex-shrink:0}
.rp-title{font-size:14px;font-weight:700;color:var(--tx);letter-spacing:-.01em}
.rp-sub{font-size:11px;color:var(--tx3);margin-top:2px;font-weight:500}
.rp-close{width:28px;height:28px;border-radius:7px;border:1px solid var(--bd);color:var(--tx3);display:flex;align-items:center;justify-content:center;transition:.12s;flex-shrink:0}
.rp-close:hover{background:var(--surf2)}
.rp-close svg{width:15px;height:15px}
.rp-body{flex:1;overflow-y:auto;padding:14px 16px}
.rp-body::-webkit-scrollbar{width:5px}
.rp-body::-webkit-scrollbar-thumb{background:var(--bd3);border-radius:3px}
.rp-foot{display:flex;gap:7px;padding:11px 16px;border-top:1px solid var(--bd);flex-shrink:0}

/* Preview mini */
.mini-day{font-size:10px;font-weight:700;color:#fff;background:var(--navy);border-radius:6px;padding:5px 10px;margin-bottom:8px;letter-spacing:.04em;text-transform:uppercase}
.mini-sess{margin-bottom:12px}
.mini-sess-hd{display:flex;align-items:center;gap:7px;margin-bottom:5px}
.mini-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}
.mini-sess-name{font-size:12px;font-weight:600;color:var(--tx)}
.mini-sess-time{font-size:10px;color:var(--tx3);font-weight:500;margin-left:auto;font-variant-numeric:tabular-nums}
.mini-wu{font-size:10px;color:var(--wu);padding:3px 9px;background:var(--wu-bg);border-radius:5px;margin-bottom:4px;font-weight:500}
.mini-ev{font-size:11px;color:var(--tx2);padding:3px 0 3px 11px;border-left:2px solid var(--bd);margin-left:3px;display:flex;align-items:baseline;gap:6px}
.mini-ev-name{flex:1}
.mini-ev-time{font-size:9.5px;color:var(--tx3);white-space:nowrap;font-variant-numeric:tabular-nums}
.mini-prac{font-size:11px;color:var(--prac);padding:5px 9px;background:var(--prac-bg);border-radius:6px;margin-bottom:6px;font-weight:500;display:flex;align-items:center;gap:6px}

/* Form fields */
.fg{margin-bottom:14px}
.fl{font-size:10px;font-weight:700;color:var(--tx2);margin-bottom:6px;display:block;text-transform:uppercase;letter-spacing:.05em}
.fi{width:100%;font-size:13px;padding:8px 11px;border:1px solid var(--bd2);border-radius:var(--r);background:var(--surf);color:var(--tx);transition:.12s}
.fi:focus{outline:none;border-color:var(--navy);box-shadow:0 0 0 3px rgba(23,31,105,.08)}
.fg2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.chiprow{display:flex;gap:5px;flex-wrap:wrap}
.chip{height:30px;padding:0 12px;border-radius:8px;font-size:11px;font-weight:600;border:1px solid var(--bd2);background:var(--surf);color:var(--tx2);transition:.1s}
.chip:hover{background:var(--surf2)}
.chip.on{background:var(--navy);border-color:var(--navy);color:#fff}
.chip.on-g{background:var(--prac);border-color:var(--prac);color:#fff}
.chip.on-r{background:var(--red);border-color:var(--red);color:#fff}
.fdiv{height:1px;background:var(--bd);margin:14px 0}
.fsec{font-size:11px;font-weight:700;color:var(--tx2);display:flex;align-items:center;gap:8px;margin-bottom:9px;text-transform:uppercase;letter-spacing:.03em}
.fsec::after{content:'';flex:1;height:1px;background:var(--bd)}
.ep-evtable{width:100%;border-collapse:collapse;font-size:12px}
.ep-evtable th{font-size:9px;font-weight:700;color:var(--tx3);text-transform:uppercase;letter-spacing:.5px;padding:6px;border-bottom:1px solid var(--bd);text-align:left;background:var(--surf2)}
.ep-evtable td{padding:7px 6px;border-bottom:1px solid var(--bd);vertical-align:middle}
.ep-evtable tr:last-child td{border-bottom:none}
.ep-inp{width:48px;font-size:12px;padding:4px 5px;border-radius:5px;border:1px solid var(--bd2);text-align:center;font-weight:500;background:var(--surf);color:var(--tx)}
.ep-inp:focus{outline:none;border-color:var(--navy)}
.flightrow{display:flex;align-items:center;gap:7px;padding:6px 0;border-bottom:1px solid var(--bd)}
.flightrow:last-child{border-bottom:none}
.flightbar{width:4px;height:30px;border-radius:2px;flex-shrink:0}
.flight-name-inp{flex:1;font-size:12px;padding:5px 8px;border-radius:6px;border:1px solid var(--bd2);background:var(--surf);color:var(--tx)}
.flight-name-inp:focus{outline:none;border-color:var(--navy)}
.flight-dur-inp{width:46px;font-size:12px;padding:5px;border-radius:6px;border:1px solid var(--bd2);text-align:center;background:var(--surf);color:var(--tx)}
.flight-dur-inp:focus{outline:none;border-color:var(--navy)}
.flight-time-lbl{font-size:10px;color:var(--tx3);white-space:nowrap;min-width:104px;text-align:right;font-variant-numeric:tabular-nums}
.flight-rm{width:22px;height:22px;border-radius:5px;color:var(--tx3);font-size:14px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.flight-rm:hover{background:var(--final-bg);color:var(--final)}
.addflightbtn{margin-top:8px;width:100%;padding:7px;border-radius:7px;border:1px dashed var(--bd3);background:transparent;font-size:11px;color:var(--tx3);font-weight:600;display:flex;align-items:center;justify-content:center;gap:5px;transition:.1s}
.addflightbtn:hover{background:var(--surf2);color:var(--tx2)}

/* ════ ENTRIES (projected/final) ════ */
.enp-subtitle{font-size:11px;color:var(--tx3);margin-top:2px;font-weight:500}
.enp-daybar{display:flex;gap:4px;padding:9px 16px;border-bottom:1px solid var(--bd);flex-shrink:0;overflow-x:auto}
.enp-daybar::-webkit-scrollbar{display:none}
.enp-daybtn{height:27px;padding:0 11px;border-radius:7px;font-size:11px;font-weight:600;border:1px solid var(--bd2);background:var(--surf);color:var(--tx2);white-space:nowrap;flex-shrink:0;transition:.1s}
.enp-daybtn:hover{background:var(--surf2)}
.enp-daybtn.active{background:var(--navy);color:#fff;border-color:var(--navy)}
.enp-legend{display:flex;align-items:center;gap:14px;padding:9px 16px;background:var(--surf2);border-bottom:1px solid var(--bd);flex-wrap:wrap;font-size:11px;color:var(--tx3)}
.enp-legitem{display:flex;align-items:center;gap:6px}
.enp-legpill{font-size:9px;font-weight:700;padding:2px 7px;border-radius:5px;letter-spacing:.04em;text-transform:uppercase}
.enp-legpill.proj{background:var(--qual-bg);color:var(--qual);border:1px solid var(--qual-bd)}
.enp-legpill.final{background:var(--final-bg);color:var(--final);border:1px solid var(--final-bd)}
.enp-legpill.adv{background:rgba(0,154,199,.10);color:var(--cyan);border:1px solid rgba(0,154,199,.35)}
.enp-matchall{height:24px;padding:0 11px;border-radius:6px;font-size:10px;font-weight:600;border:1px solid var(--bd2);background:var(--surf);color:var(--tx2);margin-left:auto;transition:.1s}
.enp-matchall:hover{background:var(--navy);color:#fff;border-color:var(--navy)}
.enp-body{flex:1;overflow-y:auto}
.enp-body::-webkit-scrollbar{width:5px}
.enp-body::-webkit-scrollbar-thumb{background:var(--bd3);border-radius:3px}
.enp-daygrp{font-size:10px;font-weight:700;color:var(--tx3);text-transform:uppercase;letter-spacing:.7px;padding:11px 16px 5px;background:var(--surf2);border-bottom:1px solid var(--bd);position:sticky;top:0;z-index:3}
.enp-sess-wrap{border-bottom:1px solid var(--bd)}
.enp-sesshd{display:flex;align-items:center;gap:10px;padding:10px 16px;cursor:pointer;position:sticky;top:0;z-index:2}
.enp-sesshd.comp{background:var(--navy)}
.enp-sesshd.final{background:var(--red)}
.enp-sesshd-lbl{font-size:12px;font-weight:700;color:#fff;flex:1}
.enp-sesshd-time{font-size:11px;color:rgba(255,255,255,.7);font-variant-numeric:tabular-nums}
.enp-chevron{font-size:11px;color:rgba(255,255,255,.7);transition:transform .2s}
.enp-chevron.open{transform:rotate(180deg)}
.enp-table{width:100%;border-collapse:collapse}
.enp-table th{font-size:9px;font-weight:700;color:var(--tx3);text-transform:uppercase;letter-spacing:.5px;padding:8px 10px;text-align:left;border-bottom:1px solid var(--bd);background:var(--surf2)}
.enp-table td{padding:9px 10px;border-bottom:1px solid var(--bd);vertical-align:middle}
.enp-table tr:last-child td{border-bottom:none}
.enp-table tr:hover td{background:var(--surf2)}
.enp-evname{font-size:12px;font-weight:600;color:var(--tx);min-width:150px}
.enp-inp{width:54px;font-size:13px;padding:6px 7px;border-radius:6px;border:1.5px solid var(--bd2);text-align:center;background:var(--surf);color:var(--tx);font-weight:500;transition:.12s}
.enp-inp:focus{outline:none;box-shadow:0 0 0 3px rgba(23,31,105,.1)}
.enp-inp.proj{border-color:var(--qual-bd)}
.enp-inp.proj:focus{border-color:var(--qual)}
.enp-inp.proj.filled{background:var(--qual-bg);border-color:var(--qual);color:var(--qual);font-weight:700}
.enp-inp.final{border-color:var(--final-bd)}
.enp-inp.final:focus{border-color:var(--final)}
.enp-inp.final.filled{background:var(--final-bg);border-color:var(--final);color:var(--final);font-weight:700}
.enp-inp.final.matches{background:var(--prac-bg);border-color:var(--prac);color:var(--prac)}
.enp-inp.sm{width:46px;border-width:1px}
.enp-copy{width:26px;height:26px;border-radius:6px;border:1px solid var(--bd2);background:var(--surf2);color:var(--tx2);font-size:14px;font-weight:700;transition:.1s}
.enp-copy:hover{background:var(--navy);color:#fff;border-color:var(--navy)}
.enp-split{height:26px;padding:0 9px;border-radius:6px;font-size:10px;font-weight:700;border:1.5px solid var(--bd2);background:var(--surf);color:var(--tx3);transition:.12s;white-space:nowrap;text-transform:uppercase}
.enp-split:hover:not(.on){background:var(--surf2)}
.enp-split.on{background:var(--split-bg);border-color:var(--split-bd);color:var(--split-tx)}
.enp-split.rec{border-color:var(--split-bd);color:var(--split-tx);background:var(--split-bg)}
.enp-evtime{font-size:10.5px;color:var(--tx3);white-space:nowrap;font-variant-numeric:tabular-nums}
.enp-foot{display:flex;align-items:center;justify-content:space-between;padding:11px 16px;border-top:1px solid var(--bd);flex-shrink:0;background:var(--surf2)}
.enp-footinfo{font-size:11px;color:var(--tx3);font-weight:500}
.enp-finalsbtn{height:28px;padding:0 12px;border-radius:7px;font-size:11px;font-weight:700;background:var(--red);color:#fff;transition:.1s}
.enp-finalsbtn:hover{background:#CC1530}

/* ════ MODALS (real, in-app, centered) ════ */
.modal-bg{position:fixed;inset:0;background:rgba(15,23,42,.45);backdrop-filter:blur(2px);z-index:600;display:flex;align-items:center;justify-content:center;padding:24px}
/* Edit dialog: keep the schedule readable behind it — light, unblurred veil
   and the dialog offset right of center, so live reflows are visible while
   you type. */
.modal-bg.edit-bg{background:rgba(15,23,42,.18);backdrop-filter:none;justify-content:flex-end;padding-right:5vw}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.modal{background:var(--surf);border-radius:var(--r-xl);width:500px;max-width:100%;max-height:calc(100vh - 48px);overflow-y:auto;box-shadow:var(--sh-lg)}
@keyframes modalIn{from{opacity:0;transform:scale(.96) translateY(8px)}to{opacity:1;transform:scale(1) translateY(0)}}
.modal-sm{width:420px}
.modal-lg{width:680px}
.modal-hd{display:flex;align-items:center;justify-content:space-between;padding:18px 22px;border-bottom:1px solid var(--bd);position:sticky;top:0;background:var(--surf);z-index:1;border-radius:var(--r-xl) var(--r-xl) 0 0}
.modal-title{font-size:16px;font-weight:700;letter-spacing:-.01em}
.modal-close{width:30px;height:30px;border-radius:7px;border:1px solid var(--bd);color:var(--tx3);font-size:16px;display:flex;align-items:center;justify-content:center;transition:.12s}
.modal-close:hover{background:var(--surf2)}
.modal-body{padding:20px 22px}
.modal-foot{display:flex;justify-content:flex-end;gap:8px;padding:14px 22px;border-top:1px solid var(--bd)}

/* Add-block chooser (the GOOD replacement for confirm()) */
.choose-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.choose-card{padding:20px 16px;border-radius:var(--r-lg);border:2px solid var(--bd);background:var(--surf);cursor:pointer;transition:.14s;text-align:center}
.choose-card:hover{border-color:var(--navy);background:var(--navy-soft);transform:translateY(-2px);box-shadow:var(--sh-md)}
.choose-icon{width:52px;height:52px;border-radius:14px;display:flex;align-items:center;justify-content:center;margin:0 auto 12px;font-size:24px}
.choose-icon.comp{background:var(--navy-soft);color:var(--navy)}
.choose-icon.prac{background:var(--prac-bg);color:var(--prac)}
.choose-name{font-size:14px;font-weight:700;color:var(--tx);margin-bottom:4px}
.choose-desc{font-size:11px;color:var(--tx3);line-height:1.4}

/* Event picker */
.evsearch{width:100%;font-size:13px;padding:9px 12px;border:1px solid var(--bd2);border-radius:var(--r);background:var(--surf);color:var(--tx);margin-bottom:12px}
.evsearch:focus{outline:none;border-color:var(--navy);box-shadow:0 0 0 3px rgba(23,31,105,.08)}
.evgrid{display:grid;grid-template-columns:1fr 1fr;gap:5px;max-height:280px;overflow-y:auto;margin-bottom:14px}
.evgrid::-webkit-scrollbar{width:4px}
.evgrid::-webkit-scrollbar-thumb{background:var(--bd3);border-radius:2px}
.evpick{padding:9px 11px;border-radius:var(--r);border:1px solid var(--bd);cursor:pointer;transition:.1s}
.evpick:hover{background:var(--surf2);border-color:var(--bd2)}
.evpick.sel{border-color:var(--navy);background:var(--navy-soft)}
.evpick-name{font-size:12px;font-weight:600;color:var(--tx)}
.evpick-meta{font-size:10px;color:var(--tx3);margin-top:2px}
.evpick-status{font-size:9px;padding:2px 6px;border-radius:4px;margin-top:4px;display:inline-block;font-weight:600}
.evpick-status.avail{background:var(--prac-bg);color:var(--prac)}
.evpick-status.used{background:var(--qual-bg);color:var(--qual)}
.roundbtns{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}
.roundbtn{height:32px;padding:0 14px;border-radius:8px;font-size:12px;font-weight:600;border:1px solid var(--bd2);background:var(--surf);color:var(--tx2);transition:.1s}
.roundbtn:hover{background:var(--surf2)}
.roundbtn.active{background:var(--navy);border-color:var(--navy);color:#fff}
.roundbtn.used{opacity:.4;cursor:not-allowed}

/* Library */
.lib-tabs{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:16px;padding-bottom:14px;border-bottom:1px solid var(--bd)}
.lib-tab{height:30px;padding:0 13px;border-radius:15px;font-size:12px;font-weight:600;border:1px solid var(--bd2);background:var(--surf);color:var(--tx2);white-space:nowrap;transition:.12s}
.lib-tab:hover{background:var(--surf2)}
.lib-tab.active{background:var(--navy);border-color:var(--navy);color:#fff}
.lib-list{display:flex;flex-direction:column;gap:7px;margin-bottom:14px}
.lib-card{display:flex;align-items:center;gap:13px;padding:12px 14px;border-radius:var(--r-lg);border:1px solid var(--bd);background:var(--surf);transition:.1s}
.lib-card:hover{border-color:var(--bd2);background:var(--surf2);transform:translateX(2px)}
.lib-card.pending{border-color:#f59e0b;background:rgba(245,158,11,.06)}
.lib-card.pending:hover{background:rgba(245,158,11,.1)}
.lib-card.pending .lib-card-icon{background:rgba(245,158,11,.15);border-color:#f59e0b}
.lib-pending-badge{display:inline-block;background:#f59e0b;color:#fff;font-size:10px;font-weight:700;padding:2px 7px;border-radius:10px;margin-right:6px;text-transform:uppercase;letter-spacing:.4px}
.lib-pending-banner{background:rgba(245,158,11,.12);border:1px solid #f59e0b;color:#92400e;padding:10px 12px;border-radius:8px;font-size:12px;font-weight:500;margin-bottom:12px;line-height:1.4}
.lib-pending-banner:hover{background:rgba(245,158,11,.18)}
.lib-cicon{width:38px;height:38px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:17px;flex-shrink:0;background:var(--surf2);border:1px solid var(--bd)}
.lib-cinfo{flex:1;min-width:0}
.lib-cname{font-size:13px;font-weight:600;color:var(--tx)}
.lib-cmeta{font-size:11px;color:var(--tx3);margin-top:1px}
.lib-act{height:26px;padding:0 11px;border-radius:6px;font-size:11px;font-weight:600;border:1px solid var(--bd2);background:var(--surf);color:var(--tx2);transition:.1s}
.lib-act:hover{background:var(--surf2)}
.lib-act.p{background:var(--navy);color:#fff;border-color:var(--navy)}
.lib-act.p:hover{background:var(--navy-700)}
.lib-seclbl{font-size:10px;font-weight:700;color:var(--tx3);text-transform:uppercase;letter-spacing:.7px;margin:14px 0 7px}
/* Folder tab row */
.lib-folder-tabs{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:16px;padding-bottom:14px;border-bottom:1px solid var(--bd)}
.lib-ftab{height:30px;padding:0 13px;border-radius:15px;font-size:12px;font-weight:600;border:1px solid var(--bd2);background:var(--surf);color:var(--tx2);white-space:nowrap;cursor:pointer;transition:.12s}
.lib-ftab:hover{background:var(--surf2)}
.lib-ftab.active{background:var(--navy);border-color:var(--navy);color:#fff}
/* Card inner element aliases (JS renders lib-card-* but CSS originally used lib-c*) */
.lib-card-icon{width:38px;height:38px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:17px;flex-shrink:0;background:var(--surf2);border:1px solid var(--bd)}
.lib-card-info{flex:1;min-width:0}
.lib-card-name{font-size:13px;font-weight:600;color:var(--tx)}
.lib-card-meta{font-size:11px;color:var(--tx3);margin-top:1px}
.lib-card-acts{flex-shrink:0}
/* Section label alias (JS renders lib-sec-lbl, CSS had lib-seclbl) */
.lib-sec-lbl{font-size:10px;font-weight:700;color:var(--tx3);text-transform:uppercase;letter-spacing:.7px;margin:14px 0 7px}
/* New library architecture: top tabs */
.lib-toptabs{display:flex;gap:4px;padding:4px;background:var(--surf2);border-radius:10px;margin-bottom:14px}
.lib-toptab{flex:1;height:36px;padding:0 14px;border-radius:7px;font-size:13px;font-weight:600;border:none;background:transparent;color:var(--tx2);cursor:pointer;transition:.14s;display:flex;align-items:center;justify-content:center;gap:6px}
.lib-toptab:hover{color:var(--tx);background:rgba(255,255,255,.04)}
.lib-toptab.active{background:var(--surf);color:var(--navy);font-weight:700;box-shadow:0 1px 4px rgba(23,31,105,.1)}
.lib-count{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--navy);color:#fff;font-size:10px;font-weight:700}
.lib-toptab.active .lib-count{background:var(--red)}
.lib-note{font-size:11px;color:var(--tx3);padding:6px 10px;background:var(--surf2);border-radius:6px;margin-bottom:14px;line-height:1.5}
.lib-pill-ct{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--bd3);color:var(--tx3);font-size:9px;font-weight:700;margin-left:3px}
.lib-ftab.active .lib-pill-ct{background:#fff;color:var(--navy)}
.lib-act.danger{color:var(--final);border-color:var(--final-bd);padding:0 9px;font-size:13px;line-height:1}
.lib-act.danger:hover{background:var(--final);color:#fff;border-color:var(--final)}
/* Folder picker in save dialog */
.folder-picker{display:flex;flex-direction:column;gap:5px}
.folder-pick{display:flex;align-items:center;gap:8px;height:34px;padding:0 12px;border-radius:7px;font-size:12.5px;font-weight:600;border:1.5px solid var(--bd2);background:var(--surf);color:var(--tx2);cursor:pointer;transition:.12s;text-align:left}
.folder-pick:hover{background:var(--surf2);border-color:var(--bd3)}
.folder-pick.active{background:var(--navy);border-color:var(--navy);color:#fff}

.tog{position:relative;width:34px;height:18px;flex-shrink:0}
.tog input{opacity:0;width:0;height:0}
.togsl{position:absolute;cursor:pointer;inset:0;background:var(--bd3);border-radius:9px;transition:.2s}
.togsl::before{content:'';position:absolute;width:14px;height:14px;left:2px;bottom:2px;background:#fff;border-radius:50%;transition:.2s}
.tog input:checked+.togsl{background:var(--navy)}
.tog input:checked+.togsl::before{transform:translateX(16px)}

/* Print preview */














/* Move dialog (proper centered modal now) */
.move-day-list,.move-pos-list{display:flex;flex-direction:column;gap:5px}
.move-btn{padding:10px 12px;border-radius:8px;border:1px solid var(--bd);background:var(--surf);color:var(--tx);font-size:12px;text-align:left;cursor:pointer;transition:.1s;display:flex;align-items:center;justify-content:space-between}
.move-btn:hover{background:var(--surf2);border-color:var(--navy);color:var(--navy)}
.move-btn.active{background:var(--navy);color:#fff;border-color:var(--navy)}
.move-meta{font-size:10px;color:var(--tx3);font-weight:400}
.move-btn.active .move-meta,.move-btn:hover .move-meta{color:rgba(255,255,255,.7)}
/* Redesigned Move dialog: day chips + visual insertion-slot timeline */
.move-day-row{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:4px}
.move-day-chip{height:32px;padding:0 12px;border-radius:8px;border:1px solid var(--bd2);background:var(--surf);color:var(--tx2);font-size:11.5px;font-weight:600;cursor:pointer;transition:.1s;display:flex;align-items:center;gap:6px}
.move-day-chip:hover{background:var(--surf2);border-color:var(--navy);color:var(--navy)}
.move-day-chip.active{background:var(--navy);border-color:var(--navy);color:#fff}
.move-day-cur{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:2px 5px;border-radius:4px;background:rgba(0,154,199,.14);color:var(--cyan)}
.move-day-chip.active .move-day-cur{background:rgba(255,255,255,.2);color:#fff}
.move-timeline{display:flex;flex-direction:column;gap:3px;margin-top:4px}
.move-sess-row{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-radius:8px;background:var(--surf2);border:1px solid var(--bd)}
.move-sess-name{font-size:12px;font-weight:600;color:var(--tx);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:10px}
.move-sess-time{font-size:11px;color:var(--tx3);font-variant-numeric:tabular-nums;white-space:nowrap}
.move-slot{display:flex;align-items:center;gap:8px;padding:7px 12px;border-radius:8px;border:1.5px dashed var(--bd2);background:transparent;color:var(--tx3);font-size:11.5px;cursor:pointer;transition:.1s;text-align:left;width:100%}
.move-slot:hover{border-color:var(--cyan);color:var(--cyan);background:rgba(0,154,199,.05)}
.move-slot.active{border-style:solid;border-color:var(--navy);background:var(--navy);color:#fff}
.move-slot-dot{width:8px;height:8px;border-radius:50%;border:2px solid currentColor;flex-shrink:0}
.move-slot.active .move-slot-dot{background:#fff;border-color:#fff}
.move-slot-lbl{font-weight:600}
.move-slot-time{margin-left:auto;font-variant-numeric:tabular-nums;font-size:11px;opacity:.85;white-space:nowrap}
.move-empty{padding:14px 12px;font-size:12px;color:var(--tx3);text-align:center;background:var(--surf2);border-radius:8px;border:1px solid var(--bd)}
/* Meet overview board */
.modal-xl{width:min(1400px,calc(100vw - 40px));max-height:calc(100vh - 48px)}
.ov-body-wrap{padding:14px;overflow-x:auto}
.ov-board{display:flex;gap:10px;min-height:340px;align-items:stretch}
.ov-col{flex:1;min-width:158px;display:flex;flex-direction:column;border-radius:12px;background:var(--surf2);border:1.5px solid var(--bd);transition:.12s}
.ov-col.ov-drop{border-color:var(--cyan);background:rgba(0,154,199,.06)}
.ov-col-hd{display:flex;flex-direction:column;gap:1px;padding:9px 10px;border:0;border-bottom:1.5px solid var(--bd);background:transparent;cursor:pointer;border-radius:12px 12px 0 0;text-align:left;transition:.1s}
.ov-col-hd:hover{background:var(--surf)}
.ov-col-hd.active .ov-col-date{color:var(--navy)}
.ov-col-hd.active{box-shadow:inset 0 3px 0 var(--navy)}
.ov-col-date{font-weight:700;font-size:12.5px;color:var(--tx)}
.ov-col-meta{font-size:10px;color:var(--tx3);font-variant-numeric:tabular-nums}
.ov-col-body{flex:1;padding:7px;display:flex;flex-direction:column;gap:5px;overflow-y:auto;max-height:calc(100vh - 240px)}
.ov-card{border-radius:8px;padding:7px 9px;cursor:grab;border:1px solid var(--bd);background:var(--surf);transition:.1s;border-left-width:3px}
.ov-card:hover{box-shadow:0 2px 8px rgba(15,23,42,.1);transform:translateY(-1px)}
.ov-card:active{cursor:grabbing}
.ov-card.comp{border-left-color:var(--navy)}
.ov-card.prac{border-left-color:var(--prac);background:var(--prac-bg)}
.ov-card.train{border-left-color:var(--train);background:var(--train-bg)}
.ov-card-name{font-weight:700;font-size:11.5px;color:var(--tx)}
.ov-card.prac .ov-card-name{color:var(--prac)}
.ov-card.train .ov-card-name{color:var(--train)}
.ov-card-detail{font-size:9.5px;color:var(--tx2);margin-top:1px;line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ov-card-time{font-size:10px;color:var(--tx3);margin-top:2px;font-variant-numeric:tabular-nums}
.ov-empty{font-size:10.5px;color:var(--tx3);text-align:center;padding:18px 6px;border:1.5px dashed var(--bd2);border-radius:8px}
/* Time-scale view */
.ts-wrap{position:relative;margin:4px 6px 0 6px}
.ts-hour{position:absolute;left:0;right:0;display:flex;align-items:flex-start;pointer-events:none}
.ts-hour-lbl{font-size:10px;font-weight:600;color:var(--tx3);width:62px;flex-shrink:0;transform:translateY(-6px);font-variant-numeric:tabular-nums}
.ts-hour-line{flex:1;border-top:1px solid var(--bd)}
.ts-half{position:absolute;left:62px;right:0;border-top:1px dashed rgba(15,23,42,.05);pointer-events:none}
.ts-cards{position:absolute;top:0;left:70px;right:4px;bottom:0}
.ts-card{position:absolute;left:0;right:0;border-radius:8px;padding:5px 11px;cursor:pointer;overflow:hidden;border:1px solid var(--bd);border-left:4px solid var(--navy);background:var(--surf);box-shadow:0 1px 3px rgba(15,23,42,.06);transition:box-shadow .12s}
.ts-card:hover{box-shadow:0 3px 10px rgba(15,23,42,.14);z-index:5}
.ts-card.prac{border-left-color:var(--prac);background:var(--prac-bg)}
.ts-card.train{border-left-color:var(--train);background:var(--train-bg)}
.ts-card.overlap{border-color:var(--red);border-left-color:var(--red)}
.ts-card-name{font-weight:700;font-size:12px;color:var(--tx);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ts-card.prac .ts-card-name{color:var(--prac)}
.ts-card.train .ts-card-name{color:var(--train)}
.ts-overlap-flag{color:var(--red);font-size:10px;font-weight:700}
.ts-card-detail{font-size:10px;color:var(--tx2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}
.ts-card-time{font-size:10px;color:var(--tx3);font-variant-numeric:tabular-nums;position:absolute;right:10px;top:5px}
/* Flight duration hot buttons */
.fdur-chip{height:26px;padding:0 9px;border-radius:7px;font-size:10.5px;font-weight:700;border:1px solid var(--bd2);background:var(--surf);color:var(--tx2);cursor:pointer;transition:.1s;font-variant-numeric:tabular-nums}
.fdur-chip:hover{border-color:var(--navy);color:var(--navy)}
.fdur-chip.on{background:var(--navy);border-color:var(--navy);color:#fff}
/* Version history diff panel */
.hist-diff{background:var(--surf2);border:1px solid var(--bd);border-radius:10px;padding:12px 14px;margin-bottom:14px;max-height:300px;overflow-y:auto}
/* Gap chips between session cards on the timeline */
.gap-chip{align-self:center;display:flex;align-items:center;gap:5px;margin:-4px 0;padding:3px 10px;border-radius:99px;font-size:10.5px;font-weight:600;color:var(--tx3);background:var(--surf3);border:1px solid var(--bd);cursor:pointer;transition:.12s;z-index:1;font-variant-numeric:tabular-nums}
.gap-chip:hover{color:var(--navy);border-color:var(--navy);background:var(--surf)}
.gap-chip.zero{opacity:.55;font-weight:500}
.gap-chip.zero:hover{opacity:1}
.gap-chip.overlap{color:#fff;background:var(--red);border-color:var(--red);opacity:1;font-weight:700}
.gap-chip.overlap:hover{background:#c01430}

/* Conflicts panel */
.conflicts-list{display:flex;flex-direction:column;gap:8px}
.conflict-item{display:flex;align-items:flex-start;gap:10px;padding:11px 13px;border-radius:var(--r-lg);border:1px solid var(--bd)}
.conflict-item.err{background:var(--final-bg);border-color:var(--final-bd)}
.conflict-item.warn{background:var(--wu-bg);border-color:var(--wu-bd)}
.conflict-item.info{background:var(--qual-bg);border-color:var(--qual-bd)}
.conflict-icon{width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;color:#fff;flex-shrink:0;margin-top:1px}
.conflict-icon.err{background:var(--err)}
.conflict-icon.warn{background:var(--warn)}
.conflict-icon.info{background:var(--qual)}
.conflict-body{flex:1}
.conflict-title{font-size:12px;font-weight:600;color:var(--tx)}
.conflict-detail{font-size:11px;color:var(--tx2);margin-top:2px;line-height:1.4}
.conflict-loc{font-size:10px;color:var(--tx3);margin-top:3px;font-weight:600}
.conflict-ok{padding:24px;text-align:center}
.conflict-ok-icon{width:48px;height:48px;border-radius:50%;background:var(--prac-bg);color:var(--prac);display:flex;align-items:center;justify-content:center;font-size:24px;margin:0 auto 12px}

/* History panel */
.hist-list{display:flex;flex-direction:column;gap:6px}
.hist-item{display:flex;align-items:center;gap:11px;padding:10px 13px;border-radius:var(--r);border:1px solid var(--bd);background:var(--surf);transition:.1s}
.hist-item:hover{border-color:var(--bd2);background:var(--surf2)}
.hist-dot{width:9px;height:9px;border-radius:50%;background:var(--navy);flex-shrink:0}
.hist-dot.current{background:var(--prac);box-shadow:0 0 0 3px var(--prac-bg)}
.hist-info{flex:1;min-width:0}
.hist-label{font-size:12px;font-weight:600;color:var(--tx)}
.hist-time{font-size:10px;color:var(--tx3);margin-top:1px}
.hist-restore{height:26px;padding:0 11px;border-radius:6px;font-size:11px;font-weight:600;border:1px solid var(--bd2);background:var(--surf);color:var(--tx2)}
.hist-restore:hover{background:var(--navy);color:#fff;border-color:var(--navy)}

/* Buttons */
.btn{height:36px;padding:0 18px;border-radius:var(--r);font-size:13px;font-weight:600;border:1px solid var(--bd2);background:var(--surf);color:var(--tx);transition:.12s}
.btn:hover{background:var(--surf2)}
.btn:disabled{opacity:.4;cursor:not-allowed}
.btn-p{background:var(--navy);color:#fff;border-color:var(--navy)}
.btn-p:hover{background:var(--navy-700)}
.btn-d{background:var(--red);color:#fff;border-color:var(--red)}
.btn-d:hover{background:#CC1530}
.btn-sm{height:30px;padding:0 13px;font-size:12px;border-radius:7px}
.btn-gh{background:transparent;border-color:transparent;color:var(--tx2)}
.btn-gh:hover{background:var(--surf2)}

/* Empty */
.empty{padding:48px 24px;text-align:center}
.empty-icon{font-size:30px;margin-bottom:10px;opacity:.4}
.empty-title{font-size:14px;font-weight:600;color:var(--tx2);margin-bottom:4px}
.empty-sub{font-size:12px;color:var(--tx3)}

/* Toast */
.toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%) translateY(8px);background:#0F172A;color:#fff;padding:10px 18px;border-radius:10px;font-size:12.5px;font-weight:500;z-index:1000;opacity:0;transition:opacity .2s,transform .2s;pointer-events:none;white-space:nowrap;box-shadow:var(--sh-lg)}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* Keyboard hint */
.kbd{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:4px;background:var(--surf3);border:1px solid var(--bd2);font-size:10px;font-weight:600;color:var(--tx2);font-family:inherit}



/* ── COMPATIBILITY ALIASES (entries + edit panels use these names) ── */
.entries-panel{width:0;flex-shrink:0;overflow:hidden;border-left:1px solid var(--bd);background:var(--surf);transition:width .24s var(--ease);display:flex;flex-direction:column}
.entries-panel.open{width:620px}
.edit-panel{width:0;flex-shrink:0;overflow:hidden;border-left:1px solid var(--bd);background:var(--surf);transition:width .24s var(--ease);display:flex;flex-direction:column}
.edit-panel.open{width:340px}
.enp-head{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid var(--bd);flex-shrink:0}
.enp-title{font-size:14px;font-weight:700;letter-spacing:-.01em}
.enp-close,.ep-close{width:28px;height:28px;border-radius:7px;border:1px solid var(--bd);color:var(--tx3);font-size:16px;display:flex;align-items:center;justify-content:center;transition:.12s}
.enp-close:hover,.ep-close:hover{background:var(--surf2)}
.enp-day-bar{display:flex;gap:4px;padding:9px 16px;border-bottom:1px solid var(--bd);flex-shrink:0;overflow-x:auto}
.enp-day-bar::-webkit-scrollbar{display:none}
.enp-day-btn{height:27px;padding:0 11px;border-radius:7px;font-size:11px;font-weight:600;border:1px solid var(--bd2);background:var(--surf);color:var(--tx2);white-space:nowrap;flex-shrink:0;transition:.1s}
.enp-day-btn:hover{background:var(--surf2)}
.enp-day-btn.active{background:var(--navy);color:#fff;border-color:var(--navy)}
.enp-sub-title{font-size:11px;color:var(--tx3);margin-top:2px;font-weight:500}
.enp-legend-item{display:flex;align-items:center;gap:6px}
.enp-leg-pill{font-size:9px;font-weight:700;padding:2px 7px;border-radius:5px;letter-spacing:.04em;text-transform:uppercase}
.enp-leg-pill.proj{background:var(--qual-bg);color:var(--qual);border:1px solid var(--qual-bd)}
.enp-leg-pill.final{background:var(--final-bg);color:var(--final);border:1px solid var(--final-bd)}
.enp-match-all-btn{height:24px;padding:0 11px;border-radius:6px;font-size:10px;font-weight:600;border:1px solid var(--bd2);background:var(--surf);color:var(--tx2);margin-left:auto;transition:.1s}
.enp-match-all-btn:hover{background:var(--navy);color:#fff;border-color:var(--navy)}
.enp-day-grp{font-size:10px;font-weight:700;color:var(--tx3);text-transform:uppercase;letter-spacing:.7px;padding:11px 16px 5px;background:var(--surf2);border-bottom:1px solid var(--bd);position:sticky;top:0;z-index:3}
.enp-sess-head{display:flex;align-items:center;gap:10px;padding:10px 16px;cursor:pointer;position:sticky;top:0;z-index:2}
.enp-sess-head.comp-hd{background:var(--navy)}
.enp-sess-head.final-hd{background:var(--red)}
.enp-sess-label{font-size:12px;font-weight:700;color:#fff;flex:1}
.enp-sess-time{font-size:11px;color:rgba(255,255,255,.7);font-variant-numeric:tabular-nums}
.enp-sess-chevron{font-size:11px;color:rgba(255,255,255,.7);transition:transform .2s}
.enp-sess-chevron.open{transform:rotate(180deg)}
.enp-ev-name{font-size:12px;font-weight:600;color:var(--tx);min-width:150px}
.enp-ev-time{font-size:10.5px;color:var(--tx3);white-space:nowrap;font-variant-numeric:tabular-nums}
.enp-foot-info{font-size:11px;color:var(--tx3);font-weight:500}
.enp-finals-btn{height:28px;padding:0 12px;border-radius:7px;font-size:11px;font-weight:700;background:var(--red);color:#fff;transition:.1s}
.enp-finals-btn:hover{background:#CC1530}
.enp-copy-btn{width:26px;height:26px;border-radius:6px;border:1px solid var(--bd2);background:var(--surf2);color:var(--tx2);font-size:14px;font-weight:700;transition:.1s}
.enp-copy-btn:hover{background:var(--navy);color:#fff;border-color:var(--navy)}
.enp-inp.proj{border-color:var(--qual-bd)}
.enp-inp.proj:focus{border-color:var(--qual)}
.enp-inp.proj.filled-p{background:var(--qual-bg);border-color:var(--qual);color:var(--qual);font-weight:700}
.enp-inp.final{border-color:var(--final-bd)}
.enp-inp.final:focus{border-color:var(--final)}
.enp-inp.final.filled-f{background:var(--final-bg);border-color:var(--final);color:var(--final);font-weight:700}
.enp-inp.final.matches{background:var(--prac-bg);border-color:var(--prac);color:var(--prac)}
.enp-inp.small{width:46px;border-width:1px}
.ep-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;padding:14px 16px 12px;border-bottom:1px solid var(--bd);flex-shrink:0}
.ep-head>div:first-child{min-width:0;flex:1}
.ep-title{font-size:14px;font-weight:700;color:var(--tx);letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ep-sub{font-size:11px;color:var(--tx3);margin-top:2px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ep-body{flex:1;overflow-y:auto;padding:14px 16px}
.ep-body::-webkit-scrollbar{width:5px}
.ep-body::-webkit-scrollbar-thumb{background:var(--bd3);border-radius:3px}
.ep-foot{display:flex;gap:7px;padding:11px 16px;border-top:1px solid var(--bd);flex-shrink:0}

/* Clear split ON/OFF toggle */
.split-toggle{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 12px;border-radius:7px;font-size:10px;font-weight:800;letter-spacing:.05em;border:1.5px solid var(--bd2);background:var(--surf);color:var(--tx3);transition:.12s}
.split-toggle-dot{width:8px;height:8px;border-radius:50%;background:var(--tx3);transition:.12s}
.split-toggle.off{border-color:var(--bd2);background:var(--surf);color:var(--tx3)}
.split-toggle.off .split-toggle-dot{background:var(--tx3)}
.split-toggle.off:hover{border-color:var(--split-bd);color:var(--split-tx)}
.split-toggle.on{border-color:var(--split-bd);background:var(--split-bg);color:var(--split-tx)}
.split-toggle.on .split-toggle-dot{background:var(--split-tx);box-shadow:0 0 0 3px rgba(217,119,6,.18)}
.split-toggle.rec{border-color:var(--split-bd);background:var(--surf);color:var(--split-tx);animation:recPulse 2s infinite}
.split-toggle.rec .split-toggle-dot{background:var(--warn)}
@keyframes recPulse{0%,100%{border-color:var(--split-bd)}50%{border-color:var(--warn)}}
.split-toggle.sm{height:26px;padding:0 9px}

/* Session reorder drop indicators */
.sc.sess-drop-above{box-shadow:0 -3px 0 -1px var(--cyan),var(--sh-md)}
.sc.sess-drop-below{box-shadow:0 3px 0 -1px var(--cyan),var(--sh-md)}

/* PRACTICE / TRAINING CARDS — distinct, readable */
.sc.pcard{overflow:visible}
.pcard-hd{display:flex;align-items:center;gap:14px;padding:14px 16px 14px 18px;cursor:pointer;border-radius:var(--r-lg);flex-wrap:wrap;row-gap:6px}
.pcard-icon{font-size:20px;flex-shrink:0;width:36px;height:36px;display:flex;align-items:center;justify-content:center;border-radius:10px;background:rgba(255,255,255,.6)}
.pcard-main{flex:1;min-width:0}
.pcard-name{font-size:14.5px;font-weight:700;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pcard-meta{font-size:11.5px;color:var(--tx2);margin-top:2px;font-weight:500}
.pcard-time{text-align:right;flex-shrink:0}
.pcard-time-range{font-size:14px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.01em;white-space:nowrap}
.pcard-time-dur{font-size:11px;color:var(--tx3);margin-top:2px}
.pcard-flights{padding:4px 16px 10px 18px;border-top:1px solid var(--bd)}
.pcard-flight{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--bd);flex-wrap:wrap;row-gap:2px}
.pcard-flight:last-child{border-bottom:none}
.pcard-flight-bar{width:4px;height:28px;border-radius:2px;flex-shrink:0}
.pcard-flight-name{flex:1;font-size:12.5px;font-weight:600;color:var(--tx)}
.pcard-flight-time{font-size:11.5px;color:var(--tx2);font-variant-numeric:tabular-nums;white-space:nowrap}
.pcard-flight-dur{font-size:11px;color:var(--tx3);white-space:nowrap;min-width:40px;text-align:right}

/* FAST ENTRY GRID */
.feg-table{width:100%;border-collapse:collapse}
.feg-table thead th{font-size:9px;font-weight:700;color:var(--tx3);text-transform:uppercase;letter-spacing:.5px;padding:9px 10px;text-align:center;border-bottom:1px solid var(--bd);background:var(--surf2);position:sticky;top:0;z-index:2}
.feg-table thead th:first-child{text-align:left}
.feg-table td{padding:7px 10px;border-bottom:1px solid var(--bd);vertical-align:middle;text-align:center}
.feg-day-row td{background:var(--navy);color:#fff;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.7px;padding:7px 12px;text-align:left;position:sticky;top:31px;z-index:1}
.feg-sess-row td{background:var(--surf3);font-size:12px;font-weight:600;color:var(--tx);padding:8px 12px;text-align:left}
.feg-sess-row.finals td{background:#FEF2F2}
.feg-sess-badge{display:inline-flex;align-items:center;height:18px;padding:0 7px;border-radius:5px;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;margin-right:7px;color:#fff}
.feg-sess-badge.prelim{background:var(--prelim)}
.feg-sess-badge.final{background:var(--final)}
.feg-sess-time{font-size:10px;color:var(--tx3);font-weight:500;margin-left:6px;font-variant-numeric:tabular-nums}
.feg-name{text-align:left!important;font-size:12px;font-weight:500;color:var(--tx);min-width:160px}
.feg-cell{padding:5px 6px!important}
.feg-inp{width:60px;font-size:14px;padding:7px 6px;border-radius:7px;border:1.5px solid var(--bd2);text-align:center;background:var(--surf);color:var(--tx);font-weight:600;font-variant-numeric:tabular-nums;transition:border-color .1s,background .1s}
.feg-inp:focus{outline:none;box-shadow:0 0 0 3px rgba(23,31,105,.12);border-color:var(--navy)}
.feg-inp.proj{border-color:var(--qual-bd)}
.feg-inp.proj:focus{border-color:var(--qual);box-shadow:0 0 0 3px rgba(29,78,216,.12)}
.feg-inp.proj.on{background:var(--qual-bg);border-color:var(--qual);color:var(--qual)}
.feg-inp.final{border-color:var(--final-bd)}
.feg-inp.final:focus{border-color:var(--final);box-shadow:0 0 0 3px rgba(220,38,38,.12)}
.feg-inp.final.on{background:var(--final-bg);border-color:var(--final);color:var(--final)}
/* Advancing in — divers seeded from an earlier event at the same meet (e.g. the
   top 12 out of each National Qualifier event moving into the Senior Nationals
   prelim). Pool-blue so it reads as a distinct, staff-owned number rather than
   another flavour of the projected/final pair. */
.feg-inp.adv{border-color:rgba(0,154,199,.35)}
.feg-inp.adv.capped{border-color:var(--pool,#009AC7);background:rgba(0,154,199,.06)}
/* The rule is still what's typed; this says what is actually being used. */
.feg-cap{font-size:9px;font-weight:700;letter-spacing:.02em;color:var(--pool,#009AC7);
  margin-top:2px;text-align:center;white-space:nowrap}
.feg-inp.adv:focus{border-color:var(--cyan);box-shadow:0 0 0 3px rgba(0,154,199,.14)}
.feg-inp.adv.on{background:rgba(0,154,199,.10);border-color:var(--cyan);color:var(--cyan)}
.feg-total{width:54px}
.feg-total-num{font-size:14px;font-weight:700;color:var(--tx2);font-variant-numeric:tabular-nums}
.feg-total-num.plus{color:var(--cyan)}
.feg-total-math{font-size:9px;color:var(--tx3);font-variant-numeric:tabular-nums;line-height:1.2;margin-top:1px}
/* Sync-modal row selection. Big hit area — these get tapped on a tablet on the
   pool deck, not clicked with a mouse. */
.es-tick{width:17px;height:17px;accent-color:var(--cyan);cursor:pointer;margin:0;vertical-align:middle}
.es-tick:disabled{cursor:default;opacity:.4}
.es-opt{display:flex;align-items:flex-start;gap:9px;margin-top:12px;padding:10px 12px;border:1px solid var(--bd);border-radius:8px;background:var(--surf2);font-size:11.5px;color:var(--tx);line-height:1.45;cursor:pointer}
.es-opt:hover{border-color:var(--cyan)}
.es-opt input{margin-top:1px;flex-shrink:0}
.feg-using{width:48px}
.feg-tag{font-size:9px;font-weight:700;padding:2px 6px;border-radius:4px;text-transform:uppercase;letter-spacing:.03em}
.feg-tag.final{background:var(--final-bg);color:var(--final);border:1px solid var(--final-bd)}
.feg-tag.proj{background:var(--qual-bg);color:var(--qual);border:1px solid var(--qual-bd)}
.feg-dives{font-size:13px;font-weight:700;color:var(--tx2);font-variant-numeric:tabular-nums}
.feg-dives-lbl{font-size:8px;color:var(--tx3);text-transform:uppercase;display:block;font-weight:600;margin-top:1px}
.feg-split{width:64px}
.feg-window{font-size:10.5px;color:var(--tx3);font-variant-numeric:tabular-nums;white-space:nowrap}

/* Finals auto-sync flash */
.feg-inp.synced-flash{animation:syncFlash .6s ease}
@keyframes syncFlash{0%{background:var(--final);color:#fff}100%{background:var(--final-bg);color:var(--final)}}

/* Fit-to-close control */
.fitclose-box{margin-top:14px;padding:12px 14px;background:var(--train-bg);border:1px solid var(--train-bd,var(--bd));border-radius:10px}
.fitclose-toggle-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.fitclose-label{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:600;color:var(--train);cursor:pointer}
.fitclose-label input{width:16px;height:16px;accent-color:var(--train);cursor:pointer}
.fitclose-time{display:flex;align-items:center;gap:7px;font-size:11px;color:var(--tx2);font-weight:500}
.fitclose-time.dim{opacity:.55}
.fi-sm{height:30px;padding:0 8px;border-radius:7px;border:1.5px solid var(--bd2);background:var(--surf);font-size:12px;font-weight:600;color:var(--tx);font-variant-numeric:tabular-nums}
.fi-sm:focus{outline:none;border-color:var(--train);box-shadow:0 0 0 3px rgba(5,150,105,.12)}
.fitclose-note{margin-top:9px;font-size:11px;color:var(--tx2);line-height:1.5}

/* Styled dialogs (replace native confirm/prompt) */
.dialog-bg{z-index:1000}
.dialog{background:var(--surf);border-radius:16px;box-shadow:0 24px 60px rgba(0,0,0,.28);width:min(420px,calc(100vw - 40px));padding:22px 22px 18px;animation:dialogIn .16s ease}
@keyframes dialogIn{from{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:none}}
.dialog-title{font-size:17px;font-weight:700;color:var(--tx);letter-spacing:-.01em;margin-bottom:7px}
.dialog-msg{font-size:13.5px;color:var(--tx2);line-height:1.5;margin-bottom:16px}
.dialog-input{width:100%;height:42px;padding:0 13px;border-radius:9px;border:1.5px solid var(--bd2);background:var(--surf);font-size:14px;color:var(--tx);font-weight:500;margin-bottom:18px}
.dialog-input:focus{outline:none;border-color:var(--navy);box-shadow:0 0 0 3px rgba(23,31,105,.12)}
.dialog-actions{display:flex;justify-content:flex-end;gap:9px}
.btn-danger{background:var(--red);color:#fff;border:1px solid var(--red)}
.btn-danger:hover{background:#b91c1c;border-color:#b91c1c}
/* Warm-up hot buttons */
.wu-hotrow{display:flex;align-items:center;gap:6px}
.wu-hot{height:38px;min-width:46px;padding:0 12px;border-radius:8px;font-size:13px;font-weight:700;border:1.5px solid var(--bd2);background:var(--surf);color:var(--tx2);transition:.12s;font-variant-numeric:tabular-nums;cursor:pointer}
.wu-hot:hover{border-color:var(--navy);color:var(--navy)}
.wu-hot.on{background:var(--navy);border-color:var(--navy);color:#fff}
.wu-hotinp{flex:1;min-width:60px}

/* Clickable conflicts / warnings */
.conflict-item.clickable{cursor:pointer;transition:background .12s,transform .06s}
.conflict-item.clickable:hover{background:var(--surf2)}
.conflict-item.clickable:active{transform:scale(.995)}
.conflict-fix{margin-left:auto;flex-shrink:0;height:30px;padding:0 13px;border-radius:8px;font-size:11.5px;font-weight:700;border:1.5px solid var(--navy);background:var(--navy);color:#fff;cursor:pointer;transition:.12s;white-space:nowrap;align-self:center}
.conflict-fix:hover{background:var(--navy-d,#0f1547);border-color:var(--navy-d,#0f1547)}
.sc-warn.clickable{cursor:pointer}
.sc-warn-fix{height:24px;padding:0 10px;border-radius:6px;font-size:10.5px;font-weight:700;border:1px solid var(--warn);background:var(--warn);color:#fff;cursor:pointer;margin-left:auto;white-space:nowrap}
.sc-warn-fix:hover{filter:brightness(.93)}

/* Remove number input spinners everywhere — cleaner, no accidental clamping */
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
input[type=number]{-moz-appearance:textfield;appearance:textfield}

/* Combined / Simultaneous indicators on event rows */
.ev-tag{display:inline-block;font-size:8px;font-weight:800;letter-spacing:.04em;padding:2px 5px;border-radius:4px;margin-left:7px;vertical-align:middle}
.ev-tag.combined{background:#EDE9FE;color:#6D28D9}
.ev-tag.simul{background:#DBEAFE;color:#1D4ED8}
.sc-ev.is-combined{background:linear-gradient(to right,rgba(109,40,217,.04),transparent)}
.sc-ev.is-simul{background:linear-gradient(to right,rgba(29,78,216,.04),transparent)}
/* Combine panel in editor */
.combine-panel{border:1px solid var(--bd);border-radius:10px;padding:12px;margin-bottom:14px;background:var(--surf2)}
.combine-head{margin-bottom:10px}
.combine-title{font-size:13px;font-weight:700;color:var(--tx)}
.combine-sub{display:block;font-size:11px;color:var(--tx3);margin-top:1px}
.combine-actions{display:flex;gap:8px;flex-wrap:wrap}
.combine-btn{display:inline-flex;align-items:center;gap:7px;height:34px;padding:0 13px;border-radius:8px;font-size:12px;font-weight:600;border:1.5px solid var(--bd2);background:var(--surf);color:var(--tx);cursor:pointer;transition:.12s}
.combine-btn:hover{border-color:var(--navy);color:var(--navy)}
.cb-ic{font-size:13px}
.combine-list{margin-top:10px;display:flex;flex-direction:column;gap:6px}
.combine-cluster{display:flex;align-items:center;gap:8px;padding:7px 9px;background:var(--surf);border:1px solid var(--bd);border-radius:7px}
.cc-tag{font-size:8px;font-weight:800;padding:2px 5px;border-radius:4px;flex-shrink:0}
.cc-tag.combined{background:#EDE9FE;color:#6D28D9}
.cc-tag.simul{background:#DBEAFE;color:#1D4ED8}
.cc-names{flex:1;font-size:11.5px;color:var(--tx);font-weight:500}
.cc-split{flex-shrink:0;height:26px;padding:0 10px;border-radius:6px;font-size:10.5px;font-weight:700;border:1px solid var(--bd2);background:var(--surf);color:var(--tx2);cursor:pointer}
.cc-split:hover{border-color:var(--red);color:var(--red)}
/* Combine picker */
.cpick-list{display:flex;flex-direction:column;gap:6px}
.cpick-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1.5px solid var(--bd2);border-radius:8px;background:var(--surf);cursor:pointer;transition:.1s;text-align:left;width:100%}
.cpick-item:hover{border-color:var(--navy)}
.cpick-item.sel{border-color:var(--navy);background:var(--navy-soft,#EEF)}
.cpick-check{width:22px;height:22px;border-radius:6px;border:1.5px solid var(--bd2);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:800;color:var(--navy);flex-shrink:0}
.cpick-item.sel .cpick-check{background:var(--navy);color:#fff;border-color:var(--navy)}
.cpick-name{flex:1;font-size:13px;font-weight:600;color:var(--tx)}
.cpick-meta{font-size:11px;color:var(--tx3)}
/* Print toggle for combine/simul labels */
.print-label-row{display:flex;align-items:center;gap:8px;margin-top:8px;font-size:12px;color:var(--tx2)}



/* ════ Generate modal layout (brand) ════ */
/* Full-height modal: header and footer pinned, body fills the rest. The preview column
   stretches to use ALL remaining vertical space (it used to be capped at 460px, leaving a
   large dead area under it); the controls column scrolls independently on the left. */
.gen-modal{width:min(1080px,calc(100vw - 48px));height:calc(100vh - 48px);display:flex;flex-direction:column;overflow:hidden}
.gen-modal .modal-body{flex:1;min-height:0;overflow:hidden;display:flex}
.gen-layout{display:grid;grid-template-columns:300px 1fr;gap:22px;align-items:stretch;flex:1;min-height:0;min-width:0}
.gen-controls{display:flex;flex-direction:column;overflow-y:auto;min-height:0;padding-right:4px}
.gen-sec-lbl{font-size:10px;font-weight:800;color:var(--tx3);text-transform:uppercase;letter-spacing:.08em;margin:0 0 9px}
.gen-sec-lbl:not(:first-child){margin-top:18px}
.audgrid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.audcard{padding:11px 13px;border-radius:9px;border:1.5px solid var(--bd2);background:var(--surf);cursor:pointer;transition:.12s;text-align:left}
.audcard:hover{border-color:var(--navy)}
.audcard.sel{border-color:var(--navy);background:var(--navy);}
.audcard.sel .audname{color:#fff}
.audname{font-size:13px;font-weight:700;color:var(--tx)}
.gen-aud-desc{font-size:11.5px;color:var(--tx2);line-height:1.5;margin:10px 0 0;min-height:34px}
.gen-toggles{display:flex;flex-direction:column;gap:2px}
.togrow{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:9px 0;border-bottom:1px solid var(--bd);font-size:12.5px;color:var(--tx);font-weight:500;cursor:pointer}
.togrow:last-child{border-bottom:none}
.gen-preview{min-width:0;display:flex;flex-direction:column;min-height:0}
.gen-preview .pp{flex:1;max-height:none;min-height:0}
.pp-scrollhint{font-size:9px;font-weight:600;color:var(--tx3);text-transform:none;letter-spacing:0;margin-left:8px;opacity:.7}
@media (max-width:820px){
  .gen-layout{grid-template-columns:1fr;align-items:start}
  /* Stacked layout: let the whole modal scroll as before, and re-cap the preview so the
     controls below it stay reachable. */
  .gen-modal{height:auto;overflow-y:auto;display:block}
  .gen-modal .modal-body{display:block;overflow:visible}
  .gen-controls{overflow:visible}
  .gen-preview{display:block}
  .gen-preview .pp{max-height:460px}
}
/* ════════════════════════════════════════════════════════════
   USA DIVING — PUBLISHABLE SCHEDULE REPORT (brand-compliant)
   Blue #171F69 · Red #E31937 · Gray #5F6062 · ADA: no red on blue
   ════════════════════════════════════════════════════════════ */
.pp{background:#E9ECF2;border-radius:14px;max-height:460px;overflow-y:auto;border:1px solid var(--bd);padding:18px;font-family:'Inter',system-ui,sans-serif}
.pp-empty{text-align:center;color:var(--tx3);font-size:13px;padding:48px 16px;background:#fff;border-radius:10px}
/* A page sheet — sizes to content on screen, becomes a physical page in print */
.pp-page{background:#fff;border-radius:8px;box-shadow:0 2px 16px rgba(23,31,105,.12);margin:0 auto 18px;width:100%;max-width:760px;display:flex;flex-direction:column;overflow:hidden;height:fit-content}
.pp-page:last-child{margin-bottom:0}
/* Header — navy band, just the meet name + white logo (ADA-safe) */
.pp-hd{background:var(--navy);color:#fff;padding:20px 30px;display:flex;align-items:center;justify-content:space-between;gap:24px;position:relative}
.pp-hd::after{content:'';position:absolute;left:0;right:0;bottom:0;height:4px;background:var(--red)}
.pp-meet{font-size:22px;font-weight:800;letter-spacing:-.015em;line-height:1.1;color:#fff;min-width:0}
.pp-logo{height:44px;width:auto;flex-shrink:0}
/* Body */
.pp-body{padding:22px 30px 6px;flex:1}
.pp-day{margin-bottom:20px}
.pp-day:last-child{margin-bottom:2px}
.pp-day-hd{display:flex;align-items:center;gap:9px;font-size:15px;font-weight:800;color:var(--navy);letter-spacing:-.01em;padding-bottom:6px;border-bottom:2px solid var(--navy);margin-bottom:12px}
.pp-day-dot{width:9px;height:9px;border-radius:50%;background:var(--red);flex-shrink:0}
/* Session — header line keeps badge, number, window, and warm-up all together */
.pp-sess{margin-bottom:13px;break-inside:avoid;page-break-inside:avoid}
.pp-sess:last-child{margin-bottom:2px}
.pp-sess-hd{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:5px;padding-bottom:5px;border-bottom:1.5px solid #E4E7EE}
.pp-sess-badge{font-size:9px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;padding:3px 9px;border-radius:5px;background:var(--navy);color:#fff;flex-shrink:0}
.pp-sess-badge.finals{background:var(--red)}
.pp-sess-n{font-size:15px;font-weight:800;color:var(--navy);letter-spacing:-.01em}
.pp-sess-win{font-size:13px;font-weight:700;color:#1a1c2e;font-variant-numeric:tabular-nums}
.pp-sess-wu{margin-left:auto;font-size:11px;font-weight:600;color:var(--gray);font-variant-numeric:tabular-nums;background:#F2F4F8;padding:3px 8px;border-radius:5px}
/* Event table — clear rows with subtle banding + dividers */
.pp-tbl{width:100%;border-collapse:collapse}
.pp-x{display:flex;align-items:baseline;gap:8px;padding:4px 8px;margin:4px 0;border-radius:6px;font-size:11.5px;border-left:3px solid transparent}
.pp-x-nm{font-weight:700}
.pp-x-ev{font-size:10.5px;opacity:.8}
.pp-x-tm{margin-left:auto;font-weight:600;font-variant-numeric:tabular-nums}
.pp-x.intro{background:#EEF6FB;border-left-color:#009AC7;color:#0A5E7A}
.pp-x.awards{background:#FDF0F2;border-left-color:#E31937;color:#8E1223}
.pe td{padding:8px 0;vertical-align:middle}
.pe.alt{background:#F7F8FB}
.pe td:first-child{padding-left:10px;border-radius:6px 0 0 6px}
.pe td:last-child{padding-right:10px;border-radius:0 6px 6px 0}
.pe-nm{font-size:13px;font-weight:600;color:#1a1c2e;padding-right:14px!important}
.pe-tag{display:inline-block;font-size:8px;font-weight:800;letter-spacing:.03em;padding:2px 6px;border-radius:4px;margin-left:8px;vertical-align:middle;text-transform:uppercase}
.pe-tag.combined{background:var(--navy);color:#fff}
.pe-tag.simul{background:#8FC3EA;color:var(--navy)}
.pe-tag.split{background:#FFF1DC;color:#92400E}
.pe-tag.altsplit{background:#F1F5F9;color:var(--navy)}
.pe-div{font-size:13px;font-weight:800;color:var(--red);white-space:nowrap;text-align:right;padding-right:20px!important;font-variant-numeric:tabular-nums}
.pe-sec{font-size:12px;font-weight:600;color:var(--gray);white-space:nowrap;text-align:right;padding-right:20px!important;font-variant-numeric:tabular-nums}
.pe-tm{font-size:12.5px;font-weight:700;color:var(--navy);white-space:nowrap;text-align:right;font-variant-numeric:tabular-nums}
.pe-u{font-size:9px;font-weight:600;color:var(--gray);margin-left:3px;text-transform:lowercase}
.pe-dash{color:#C8CCD6}
/* Open Training — left-bordered block, NO tiny logo (kept clean per brand) */
.pp-prac{background:#F5F7FB;border-left:3px solid var(--navy);border-radius:0 7px 7px 0;padding:9px 14px;margin-bottom:11px;break-inside:avoid}
.pp-prac-t{display:flex;align-items:center;gap:10px}
.pp-prac-name{font-size:13px;font-weight:700;color:var(--navy)}
.pp-prac-time{margin-left:auto;font-size:11.5px;font-weight:600;color:var(--gray);font-variant-numeric:tabular-nums}
.pp-prac-flights{margin-top:5px;display:flex;flex-direction:column;gap:2px}
.pp-prac-f{display:flex;justify-content:space-between;font-size:11px;color:var(--gray);font-weight:500;max-width:360px}
/* Footer */
.pp-ft{display:flex;justify-content:space-between;align-items:center;padding:11px 30px;border-top:2px solid var(--navy);font-size:10px;font-weight:600;color:var(--gray);letter-spacing:.01em}
.pp-ft-l{color:var(--navy);font-weight:700}
.pp-ft-r{color:var(--gray);font-style:italic}
@page{size:letter portrait;margin:0}
@media print{body *{display:none}.pp-print-direct{display:block}}

/* ════ RESPONSIVE: tighten for narrow viewports ════ */
@media (max-width: 1400px) {
  .bb { padding: 0 9px; font-size: 11.5px }
  .ev-stat-lbl { font-size: 8.5px }
}
@media (max-width: 1280px) {
  .bb { padding: 0 8px; font-size: 11px }
  .bar-meet-meta { font-size: 10.5px }
  .sync-lbl { display: none }
  .bar-sync { padding: 0 8px 0 4px }
  .sc-ev { gap: 7px; padding: 9px 10px 9px 12px }
  .ev-time { min-width: 92px; font-size: 10.5px }
  .ev-stat-lbl { display: none }
  .ev-stat { min-width: auto }
  .ev-handle { font-size: 11px }
  .ev-splitbtn { padding: 0 7px; font-size: 9.5px }
}
@media (max-width: 1100px) {
  .bar-meet-meta { display: none }
  .ev-handle { display: none }
  .sc-ev { gap: 6px; padding: 9px 10px 9px 12px }
  .ev-time { min-width: 84px }
}

/* ════════════════════════════════════════════════════════════════
   MEDIUM DESKTOP (821–1180px) — bar reflow only.
   The day strip already has its own full-width row at every size now;
   on narrower desktops the remaining risk is the ACTION cluster in
   .bar-top not fitting beside the meet name, so the cluster gets its
   own full-width scrollable row (nothing hidden), same as phones —
   WITHOUT the touch / full-screen-panel changes of the ≤820px layer.
   ════════════════════════════════════════════════════════════════ */
@media (min-width: 821px) and (max-width: 1180px) {
  #app { grid-template-rows: auto 1fr; }
  .bar-top { flex-wrap: wrap; height: auto; min-height: 52px; row-gap: 0; }
  .bar-meet { order: 2; flex: 1 1 auto; min-width: 0; }
  .bar-sync { order: 3; flex-shrink: 0; }
  .bar-right {
    order: 5; flex: 0 0 100%; width: 100%; max-width: 100%; min-width: 0;
    justify-content: flex-start; flex-wrap: nowrap;
    border-top: 1px solid rgba(255,255,255,.06);
    padding: 6px 8px; overflow-x: auto; scrollbar-width: none;
  }
  .bar-right::-webkit-scrollbar { display: none; }
  .bar-right .bb, .bar-right .bar-status, .bar-right .bar-sep { flex-shrink: 0; }
}

/* ════════════════════════════════════════════════════════════════
   MOBILE LAYER — phones & small tablets.
   Everything below is inside a max-width query, so the desktop app
   (>820px) is completely unaffected. Goal: full functionality on a
   phone — top-bar controls all reachable, panels & modals full-screen,
   tables scrollable, and touch drag-to-reorder (see touch bridge JS).
   ════════════════════════════════════════════════════════════════ */
@media (max-width: 820px) {
  /* Shell: let the top bar grow to the rows it needs; use dynamic vh */
  #app { grid-template-rows: auto 1fr; height: 100dvh; }

  /* ----- TOP BAR reflow: identity row + scrollable action row.
     The day strip (.bar-days-row) already has its own row at every size. */
  .bar-top { flex-wrap: wrap; height: auto; min-height: 48px; row-gap: 0; }
  .bar-logo { height: 46px; padding: 0 12px; }
  .bar-logo img { height: 22px; }
  .bar-meet { order: 2; flex: 1 1 auto; min-width: 0; padding: 0 10px; }
  .bar-meet-name { font-size: 13px; }
  .bar-sync { order: 3; padding: 0 10px; flex-shrink: 0; }
  .sync-lbl { display: none; }

  /* Day strip: bigger touch targets, momentum scroll */
  .bar-days {
    padding: 6px 8px; gap: 4px;
    -webkit-overflow-scrolling: touch;
  }
  .bar-days-right .bb { height: 34px; width: 34px; }

  /* Action buttons get their own full-width scrolling row — nothing hidden */
  .bar-right {
    order: 5; flex: 0 0 100%; width: 100%; max-width: 100%; min-width: 0;
    justify-content: flex-start; flex-wrap: nowrap;
    border-top: 1px solid rgba(255,255,255,.06);
    padding: 6px 8px; gap: 5px;
    overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none;
  }
  .bar-right::-webkit-scrollbar { display: none; }
  .bar-right .bb, .bar-right .bar-status, .bar-right .bar-sep { flex-shrink: 0; }
  .bar-right .bb { height: 34px; }

  /* ----- TIMELINE sub-bar */
  .tl-bar { padding: 0 12px; gap: 6px; }
  .tl-body { padding: 14px 12px 80px; }

  /* ----- SESSION cards: re-enable the drag grip as a touch target */
  .ev-handle {
    display: flex !important; align-items: center; justify-content: center;
    min-width: 34px; min-height: 34px; margin-left: -6px;
    font-size: 17px; opacity: .5; cursor: grab;
    touch-action: none;          /* the touch bridge owns this gesture */
  }
  .sc-actions .tl-iconbtn,
  .sc-actions button { min-width: 34px; min-height: 34px; }

  /* ----- RIGHT PANEL (Entries / Preview) → full-screen overlay */
  .rpanel.open-sm, .rpanel.open-md, .rpanel.open-lg {
    position: fixed; inset: 0;
    width: 100vw !important; max-width: 100vw;
    z-index: 550; border-left: none;
    box-shadow: none;
    animation: fadeIn .16s ease;
  }
  .enp-table { font-size: 13px; }
  .enp-inp { min-height: 36px; font-size: 16px; }  /* 16px → no iOS zoom */

  /* ----- MODALS → near full-screen */
  .modal-bg { padding: 12px; }
  .modal, .modal-lg, .modal-sm {
    width: 100% !important; max-width: 100% !important;
  }
  .modal input, .modal select, .modal textarea { font-size: 16px; }
}

/* ════ PHONE (≤ 600px) — final tightening ════ */
@media (max-width: 600px) {
  /* Full-screen modals with a pinned header/footer and a scrolling body */
  .modal-bg { padding: 0; }
  .modal, .modal-lg, .modal-sm {
    height: 100dvh !important; max-height: 100dvh !important;
    border-radius: 0 !important;
    display: flex; flex-direction: column;
  }
  .modal-hd, .modal-foot { flex-shrink: 0; }
  .modal-body { flex: 1 1 auto; overflow-y: auto; -webkit-overflow-scrolling: touch; }
  .modal-foot { flex-wrap: wrap; gap: 8px; }

  .tl-day-info { display: none; }
  .tl-addbtn { padding: 0 12px; }

  .dp { height: 34px; padding: 0 14px; font-size: 12.5px; }   /* easier to tap */
  .dp-add { min-width: 34px; height: 34px; }

  .sc-hd { padding: 14px 14px 14px 16px; }   /* roomier tap area */
  .ev-handle { min-width: 38px; min-height: 38px; }
}

/* ════════════════════════════════════════════════════════════════
   PHONE FIT — everything on screen, everything reachable.

   The bug this fixes: a row with `overflow-x:auto` still has the default
   `min-width:auto`, which floors it at the width of ALL its contents. So
   .bar-right (the Entries / Projections / Library cluster) never actually
   scrolled — it grew to ~900px, pushed .bar-top → .bar → the #app grid
   column out to that width, and since html,body are `overflow:hidden` the
   whole app was laid out at desktop width and simply clipped at the edge of
   the phone screen with no way to scroll to the rest. Cards, day tabs, meet
   name and session times all lost their right-hand side.

   Fixed at the source (min-width:0 on the scrollers, minmax(0,1fr) on the
   #app column). This block is the phone-facing follow-through.
   ════════════════════════════════════════════════════════════════ */
@media (max-width: 820px) {
  /* Nothing may be wider than the screen. */
  .bar-days, .bar-right, .tl-bar, .tl-wrap, .sc { max-width: 100% }

  /* Scroll affordance. Pure background layers — the two solid "cover" layers
     are attached `local` so they ride with the content and uncover the shadow
     underneath only when there is genuinely more to scroll to. No mask, no
     filter, so this cannot trap the position:fixed menu below. Cover colour is
     a variable so deck (dark) mode can restate it without repeating the rule. */
  .bar-right, .bar-days {
    background:
      linear-gradient(var(--hs-cover),var(--hs-cover)) 0 0/22px 100% no-repeat local,
      linear-gradient(var(--hs-cover),var(--hs-cover)) 100% 0/22px 100% no-repeat local,
      radial-gradient(farthest-side at 0 50%,var(--hs-shade),rgba(0,0,0,0)) 0 0/13px 100% no-repeat scroll,
      radial-gradient(farthest-side at 100% 50%,var(--hs-shade),rgba(0,0,0,0)) 100% 0/13px 100% no-repeat scroll;
  }
  .bar-right { --hs-cover:#171F69; --hs-shade:rgba(0,0,0,.42) }
  .bar-days  { --hs-cover:#141B5A; --hs-shade:rgba(0,0,0,.42) }
  html[data-theme="deck"] .bar-right { --hs-cover:#0D1426 }
  html[data-theme="deck"] .bar-days  { --hs-cover:#0B1121 }

  /* The ⋮ menu lives INSIDE the scrolling action row, so its absolute dropdown
     was being clipped to a 34px-tall strip — unopenable on a phone. On touch
     it becomes a bottom sheet instead: nothing to clip it, and it lands under
     the thumb rather than up by the status bar. */
  .bar-menu {
    position: fixed; top: auto; bottom: 10px; left: 10px; right: 10px;
    min-width: 0; max-height: 62vh; overflow-y: auto;
    -webkit-overflow-scrolling: touch; z-index: 700;
  }

  /* Session cards: wrap rather than run off the card (the card clips, so
     anything past its edge is gone for good). */
  .sc-titles { max-width: none; flex: 1 1 150px }
  .sc-flight { flex-wrap: wrap; row-gap: 2px }
  .sc-flight-name { min-width: 0 }
  .sc-ev { flex-wrap: wrap }
}

@media (max-width: 760px) {
  .tl-bar {
    --hs-cover: var(--surf,#fff); --hs-shade: rgba(15,23,42,.16);
    background:
      linear-gradient(var(--hs-cover),var(--hs-cover)) 0 0/22px 100% no-repeat local,
      linear-gradient(var(--hs-cover),var(--hs-cover)) 100% 0/22px 100% no-repeat local,
      radial-gradient(farthest-side at 0 50%,var(--hs-shade),rgba(15,23,42,0)) 0 0/12px 100% no-repeat scroll,
      radial-gradient(farthest-side at 100% 50%,var(--hs-shade),rgba(15,23,42,0)) 100% 0/12px 100% no-repeat scroll,
      var(--hs-cover);   /* shorthand resets background-color — restate it */
  }
  html[data-theme="deck"] .tl-bar { --hs-shade: rgba(0,0,0,.5) }
}

/* ═══ PREMIER UI PASS ═══════════════════════════════════════════════ */
:root{--font-display:'Barlow Condensed','Arial Narrow',sans-serif}
/* Scoreboard numerals for the big times */
.sc-time-main{font-family:var(--font-display);font-size:19px;font-weight:700;letter-spacing:.01em}
.tl-title{font-family:var(--font-display);letter-spacing:.01em}
/* Card motion — settle + lift */
.sc{transition:box-shadow .16s ease,transform .16s ease,border-color .16s ease}
.sc:hover{box-shadow:0 3px 14px rgba(15,23,42,.10)}
@keyframes overlapPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.06)}}
.gap-chip.overlap{animation:overlapPulse .5s ease 2}

/* Schedule Health chip */
.health-chip{display:flex;align-items:center;gap:5px;padding:0 10px;border-radius:8px;font-weight:800}
.health-chip .health-num{font-family:var(--font-display);font-size:16px;line-height:1}
.health-chip.good{color:#7CE8A4}
.health-chip.ok{color:#FFD37C}
.health-chip.bad{color:#FF9DA6}

/* Command palette */
.pal-bg{position:fixed;inset:0;background:rgba(10,14,30,.45);backdrop-filter:blur(2px);z-index:800;display:flex;justify-content:center;align-items:flex-start;padding-top:12vh}
.pal{width:min(620px,calc(100vw - 32px));background:var(--surf);border-radius:14px;box-shadow:0 24px 70px rgba(0,0,0,.35);overflow:hidden;border:1px solid var(--bd2)}
.pal-input{width:100%;border:0;outline:0;padding:16px 18px;font-size:15px;font-family:inherit;background:transparent;color:var(--tx);border-bottom:1px solid var(--bd)}
.pal-list{max-height:46vh;overflow-y:auto;padding:6px}
.pal-row{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:10px 12px;border:0;background:transparent;border-radius:8px;cursor:pointer;font-size:13px;color:var(--tx)}
.pal-row:hover,.pal-row:first-child{background:var(--surf2)}
.pal-row:first-child{box-shadow:inset 2px 0 0 var(--cyan)}
.pal-hint{margin-left:auto;font-size:10px;color:var(--tx3);text-transform:uppercase;letter-spacing:.05em}
.pal-create strong{color:var(--navy)}
.pal-sub{display:block;font-size:11px;color:var(--tx3);margin-top:1px}
.pal-plus{width:22px;height:22px;border-radius:6px;background:var(--navy);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:800;flex-shrink:0}
.pal-kbd{margin-left:auto;font-size:11px;color:var(--tx3);border:1px solid var(--bd2);border-radius:4px;padding:1px 6px}
.pal-empty{padding:18px;font-size:12px;color:var(--tx3);text-align:center}
.pal-foot{padding:8px 16px;font-size:11px;color:var(--tx3);line-height:1.45;border-top:1px solid var(--bd)}

/* Presentation mode */
.present{position:fixed;inset:0;z-index:900;background:linear-gradient(160deg,#0D1330 0%,#171F69 90%);color:#fff;display:flex;flex-direction:column;padding:48px 7vw 24px}
.pr-hd{display:flex;justify-content:space-between;align-items:baseline;gap:20px}
.pr-meet{font-family:var(--font-display);font-weight:700;font-size:clamp(20px,3vw,34px);text-transform:uppercase;letter-spacing:.03em;opacity:.85}
.pr-date{font-family:var(--font-display);font-weight:700;font-size:clamp(28px,4.5vw,52px);text-align:right}
.pr-accent{height:5px;border-radius:3px;background:linear-gradient(90deg,#E31937 0 33%,#fff 33% 66%,#009AC7 66% 100%);margin:14px 0 26px}
.pr-list{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:4px;padding-right:8px}
.pr-row{display:flex;gap:26px;padding:14px 6px;border-bottom:1px solid rgba(255,255,255,.12);align-items:baseline}
.pr-time{font-family:var(--font-display);font-weight:700;font-size:clamp(26px,3.4vw,42px);line-height:1;min-width:180px;color:#8FC3EA;font-variant-numeric:tabular-nums}
.pr-row.prac .pr-time{color:#7CE8A4}
.pr-end{display:block;font-size:.42em;color:rgba(255,255,255,.5);margin-top:4px;font-family:'Inter',sans-serif;font-weight:600}
.pr-name{font-weight:800;font-size:clamp(16px,1.8vw,22px)}
.pr-awards{color:#FF9DA6;font-size:.6em;font-weight:800;letter-spacing:.06em}
.pr-detail{font-size:clamp(11px,1.1vw,14px);color:rgba(255,255,255,.65);margin-top:5px;line-height:1.5}
.pr-empty{color:rgba(255,255,255,.5);font-size:16px;padding:30px 0}
.pr-foot{display:flex;align-items:center;justify-content:center;gap:18px;padding-top:16px;font-size:12px;color:rgba(255,255,255,.55)}
.pr-nav{width:38px;height:38px;border-radius:10px;border:1px solid rgba(255,255,255,.25);background:rgba(255,255,255,.06);color:#fff;font-size:16px;cursor:pointer}
.pr-nav:hover:not(:disabled){background:rgba(255,255,255,.15)}
.pr-nav:disabled{opacity:.3;cursor:default}
.pr-close{position:absolute;top:16px;right:20px;width:38px;height:38px;border-radius:10px;border:1px solid rgba(255,255,255,.25);background:rgba(255,255,255,.06);color:#fff;font-size:18px;cursor:pointer}

/* Time-scale resize handle */
.ts-resize{position:absolute;left:0;right:0;bottom:0;height:9px;cursor:ns-resize;border-radius:0 0 8px 8px}
.ts-resize::after{content:'';position:absolute;left:50%;bottom:3px;transform:translateX(-50%);width:34px;height:3px;border-radius:2px;background:var(--bd3);opacity:0;transition:.12s}
.ts-card:hover .ts-resize::after{opacity:1}
.ts-card.ts-resizing{box-shadow:0 6px 18px rgba(15,23,42,.2);z-index:8}

/* Drag reorder — insertion line with live start-time chip */
.sc.sess-drop-above{box-shadow:0 -3px 0 var(--cyan)}
.sc.sess-drop-below{box-shadow:0 3px 0 var(--cyan)}
.sc.sess-drop-above::before,.sc.sess-drop-below::before{content:attr(data-drop-time);position:absolute;right:10px;background:var(--cyan);color:#fff;font-size:10px;font-weight:700;padding:2px 8px;border-radius:99px;z-index:6}
.sc.sess-drop-above::before{top:-11px}
.sc.sess-drop-below::before{bottom:-11px}

/* ═══ DECK MODE (dark theme for poolside) ═══════════════════════════ */
html[data-theme="deck"]{
  --bg:#0B1220;--surf:#131B2D;--surf2:#0F1626;--surf3:#1B2439;
  --bd:rgba(255,255,255,.07);--bd2:rgba(255,255,255,.14);--bd3:rgba(255,255,255,.25);
  --tx:#EDF1F8;--tx2:#B9C3D4;--tx3:#5C6A82;
  --navy:#8FC3EA;--navy-700:#A8D2F2;
  --navy-soft:rgba(143,195,234,.09);--navy-mid:rgba(143,195,234,.16);
  --prac:#4ADE80;--prac-bg:#0D2318;--prac-bd:#1D4230;--prac-tint:#123122;
  --train:#94A3B8;--train-bg:#141A26;--train-bd:#232D3E;
}
html[data-theme="deck"] .bar{background:#0D1426}
html[data-theme="deck"] .chip.on,html[data-theme="deck"] .bufchip.on,html[data-theme="deck"] .fdur-chip.on,html[data-theme="deck"] .move-slot.active,html[data-theme="deck"] .move-btn.active,html[data-theme="deck"] .move-day-chip.active,html[data-theme="deck"] .pal-plus{color:#0B1220}
html[data-theme="deck"] .btn-p{color:#0B1220}
html[data-theme="deck"] .rh-seg.comp{background:#8FC3EA}
html[data-theme="deck"] .sc:hover{box-shadow:0 3px 14px rgba(0,0,0,.5)}
html[data-theme="deck"] .pal{box-shadow:0 24px 70px rgba(0,0,0,.7)}

/* Athlete Impact stats in the Health panel */
.ai-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.ai-stat{background:var(--surf2);border:1px solid var(--bd);border-radius:10px;padding:10px 12px}
.ai-stat.warn{border-color:rgba(217,119,6,.4);background:rgba(217,119,6,.06)}
.ai-num{font-family:var(--font-display);font-size:24px;font-weight:700;color:var(--tx);line-height:1}
.ai-stat.warn .ai-num{color:var(--warn)}
.ai-lbl{font-size:10px;color:var(--tx3);margin-top:3px;line-height:1.3}
@media (max-width:720px){.ai-grid{grid-template-columns:repeat(2,1fr)}}

/* Entry-sync: registered diver name chips */
.es-expand{border:0;background:transparent;cursor:pointer;color:var(--tx3);font-size:11px;padding:0 2px}
.es-who{display:flex;flex-wrap:wrap;gap:4px;padding:4px 0 0 18px}
.es-name{font-size:11px;padding:2px 8px;border-radius:99px;background:var(--surf3);border:1px solid var(--bd);color:var(--tx2)}
.es-name.new{background:rgba(217,119,6,.1);border-color:rgba(217,119,6,.4);color:var(--warn);font-weight:600}
.es-legend{width:100%;font-size:11px;color:var(--tx3);line-height:1.45;margin-top:5px}

/* Multi-event: filter chips, tag pills, bar menu */
.evf-row{display:flex;align-items:center;gap:4px;margin-left:10px}
.evf-chip{height:26px;padding:0 10px;border-radius:99px;font-size:10.5px;font-weight:700;border:1.5px solid var(--bd2);background:var(--surf);color:var(--tx2);cursor:pointer;transition:.1s}
.evf-chip:hover{border-color:var(--tagc,var(--navy));color:var(--tagc,var(--navy))}
.evf-chip.on{background:var(--tagc,var(--navy));border-color:var(--tagc,var(--navy));color:#fff}
.tag-pill{display:inline-block;margin-left:7px;padding:1.5px 7px;border-radius:99px;font-size:9px;font-weight:800;letter-spacing:.05em;background:var(--tagc,var(--navy));color:#fff;vertical-align:2px}
.bar-menu-wrap{position:relative}
.bar-menu{position:absolute;top:calc(100% + 6px);right:0;min-width:230px;background:var(--surf);border:1px solid var(--bd2);border-radius:12px;box-shadow:0 14px 40px rgba(0,0,0,.25);padding:6px;z-index:700}
.bm-item{display:flex;align-items:center;gap:9px;width:100%;text-align:left;padding:9px 11px;border:0;background:transparent;border-radius:8px;cursor:pointer;font-size:12.5px;color:var(--tx);font-weight:500}
.bm-item:hover{background:var(--surf2)}
.bm-item svg{width:14px;height:14px;color:var(--tx3);flex-shrink:0}
.bm-hint{margin-left:auto;font-size:10px;color:var(--tx3)}
html[data-theme="deck"] .evf-chip.on{color:#0B1220}
html[data-theme="deck"] .tag-pill{color:#0B1220}

/* ── Add-event picker (modal) ─────────────────────────────────────────
   Cards in a responsive grid; selected card gets a navy ring + check mark.
   Statuses: green "Available" pill vs neutral "In schedule" pill. */
.ev-search-inp{width:100%;height:40px;padding:0 14px;border:1px solid var(--bd2);border-radius:var(--r);font-size:14px;font-family:inherit;color:var(--tx);background:var(--surf2);margin-bottom:12px;transition:border-color .15s,box-shadow .15s,background .15s}
.ev-search-inp::placeholder{color:var(--tx3)}
.ev-search-inp:focus{outline:none;border-color:var(--cyan);background:var(--surf);box-shadow:0 0 0 3px rgba(0,154,199,.14)}
.ev-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(186px,1fr));gap:8px;max-height:46vh;overflow-y:auto;padding:3px;margin-bottom:12px}
.ev-pick-card{position:relative;background:var(--surf);border:1px solid var(--bd2);border-radius:var(--r-lg);padding:12px 34px 10px 12px;cursor:pointer;display:flex;flex-direction:column;gap:4px;transition:border-color .12s var(--ease),box-shadow .12s var(--ease),transform .12s var(--ease)}
.ev-pick-card:hover{border-color:var(--bd3);box-shadow:var(--sh-md);transform:translateY(-1px)}
.ev-pick-card.sel{border-color:var(--navy);box-shadow:0 0 0 1.5px var(--navy),var(--sh-md);background:var(--navy-soft)}
/* Selection indicator: empty circle → navy check when chosen */
.ev-pick-card::after{content:"";position:absolute;top:10px;right:10px;width:18px;height:18px;border:2px solid var(--bd3);border-radius:50%;background:var(--surf);box-sizing:border-box;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:800;line-height:1;transition:background .12s,border-color .12s}
.ev-pick-card.sel::after{content:"✓";color:#fff;background:var(--navy);border-color:var(--navy)}
.epc-name{font-size:13px;font-weight:700;color:var(--tx);line-height:1.3}
.epc-meta{font-size:11px;color:var(--tx3)}
.epc-status{align-self:flex-start;font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:3px 8px;border-radius:99px;margin-top:3px}
.epc-status.avail{background:var(--prelim-bg);color:var(--prelim);border:1px solid var(--prelim-bd)}
.epc-status.used{background:var(--surf3);color:var(--tx2);border:1px solid var(--bd2)}
/* Round picker pills */
.round-btns{display:flex;gap:8px;flex-wrap:wrap}
.round-btn{height:34px;padding:0 16px;border-radius:99px;border:1px solid var(--bd2);background:var(--surf);font-size:12.5px;font-weight:600;color:var(--tx);cursor:pointer;font-family:inherit;transition:background .12s,border-color .12s,color .12s}
.round-btn:hover:not(:disabled){border-color:var(--bd3);background:var(--surf2)}
.round-btn.active{background:var(--navy);border-color:var(--navy);color:#fff}
.round-btn.used{opacity:.45;cursor:not-allowed;text-decoration:line-through}

/* ═══ BROADCAST RUN-OF-SHOW ═══════════════════════════════════════════
   Senior finals on the broadcast clock. Pool blue is the broadcast accent
   (never red on navy — ADA). */
.bc-panel{border:1px solid var(--bd);border-left:4px solid var(--pool,#009AC7);border-radius:var(--r);background:var(--surf);padding:12px 14px;margin-top:14px}
.bc-panel.off{border-left-color:var(--bd);background:var(--surf2,#F7F8FB)}
.bc-hd{display:flex;align-items:center;gap:8px;margin-bottom:6px;flex-wrap:wrap}
.bc-title{font-size:12.5px;font-weight:800;color:var(--navy);letter-spacing:-.01em}
.bc-dot{width:9px;height:9px;border-radius:50%;background:#C9CFDA;flex-shrink:0}
.bc-dot.on{background:var(--pool,#009AC7);box-shadow:0 0 0 3px rgba(0,154,199,.18)}
.bc-live{font-size:8.5px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;color:#fff;background:var(--pool,#009AC7);padding:2px 7px;border-radius:4px}
.bc-help{font-size:11px;color:var(--tx3);line-height:1.45;margin-bottom:10px}
.bc-help code{font-family:'JetBrains Mono',monospace;font-size:10px;background:var(--surf3,#EEF1F6);padding:1px 4px;border-radius:3px}
.bc-sum{display:flex;gap:18px;flex-wrap:wrap;background:var(--surf3,#EEF1F6);border-radius:var(--r);padding:9px 12px;margin-bottom:12px}
.bc-sum>div{display:flex;flex-direction:column;gap:2px}
.bc-sum-l{font-size:8.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--tx3)}
.bc-sum-v{font-family:'JetBrains Mono',monospace;font-size:13px;font-weight:700;color:var(--navy)}
.bc-sum-v.up{color:var(--red)}
.bc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-bottom:10px}
.bc-f{display:flex;flex-direction:column;gap:4px}
.bc-f.wide{margin-bottom:10px}
.bc-f label{font-size:9px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--tx3)}
.bc-hint{font-size:11px;color:var(--tx3);line-height:1.45}
.bc-hint.warn{color:var(--red);font-weight:600}
.bc-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px;padding-top:10px;border-top:1px solid var(--bd)}
/* per-event block */
.bc-ev{margin-top:10px;padding-top:10px;border-top:1px dashed var(--bd)}
.bc-ev-hd{display:flex;align-items:center;gap:7px;font-size:10px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--pool,#009AC7);margin-bottom:8px}
.bc-ev-row{display:flex;gap:14px;align-items:flex-end;flex-wrap:wrap}
.bc-ev-l{font-size:9px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--tx3);margin-bottom:4px}
.bc-ev-calc{font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--tx2);margin-left:auto}
.bc-ev-calc strong{color:var(--navy);font-size:12.5px}
.bc-spdrow{display:flex;gap:5px;flex-wrap:wrap}
.bc-spd{font-family:'JetBrains Mono',monospace;font-size:11.5px;font-weight:700;padding:5px 10px;border-radius:6px;border:1px solid var(--bd);background:var(--surf);color:var(--tx2);cursor:pointer}
.bc-spd.on{background:var(--pool,#009AC7);border-color:var(--pool,#009AC7);color:#fff}
.bc-brs{display:flex;flex-direction:column;gap:5px}
.bc-br{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.bc-br.last{opacity:.6}
.bc-br-n{font-size:10px;font-weight:700;color:var(--tx3);min-width:96px}
.bc-br-name{flex:1;min-width:140px;font-size:12px;padding:5px 8px}
.bc-br-note{font-size:10.5px;color:var(--tx3);font-style:italic;line-height:1.45;width:100%;padding-left:103px}
.bc-br.off .bc-br-name{opacity:.55}
/* Seconds-accurate break length: quick picks + explicit min / sec boxes */
.bc-br-hd{display:flex;align-items:baseline;gap:12px;margin-top:12px;flex-wrap:wrap}
.bc-br-tot{margin-left:auto;font-family:'JetBrains Mono',monospace;font-size:10.5px;color:var(--tx3)}
.bc-br-tot strong{color:var(--navy);font-size:11.5px}
.bc-br-all{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin:6px 0 8px;padding-left:103px}
.bc-br-all>span{font-size:10px;font-weight:700;color:var(--tx3);margin-right:2px}
.bc-dur{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.bc-dp-row{display:flex;gap:4px;flex-wrap:wrap}
.bc-dp{font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:700;padding:4px 9px;border-radius:6px;border:1px solid var(--bd);background:var(--surf);color:var(--tx2);cursor:pointer;line-height:1.35}
.bc-dp:hover{border-color:var(--pool,#009AC7);color:var(--pool,#009AC7)}
.bc-dp.on{background:var(--pool,#009AC7);border-color:var(--pool,#009AC7);color:#fff}
.bc-dp.ghost{border-style:dashed;font-weight:600}
.bc-dur-ms{display:inline-flex;align-items:center;gap:4px}
.bc-dur-ms em{font-style:normal;font-size:9.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--tx3);margin-right:4px}
.bc-dur-i{width:52px;text-align:center}
.bcc-list{display:flex;flex-direction:column;gap:5px;max-height:260px;overflow-y:auto}
.bcc-row{display:flex;align-items:center;gap:9px;width:100%;text-align:left;padding:8px 10px;border:1px solid var(--bd);border-radius:8px;background:var(--surf);cursor:pointer;font:inherit}
.bcc-row:hover{border-color:var(--pool,#009AC7)}
.bcc-row.on{border-color:var(--pool,#009AC7);background:rgba(0,154,199,.07)}
.bcc-box{flex:0 0 17px;height:17px;border:1.5px solid var(--bd);border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:800;color:#fff;background:#fff}
.bcc-row.on .bcc-box{background:var(--pool,#009AC7);border-color:var(--pool,#009AC7)}
.bcc-main{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}
.bcc-ev{font-size:12.5px;font-weight:700;color:var(--navy);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bcc-meta{font-size:10.5px;color:var(--tx3)}
.bcc-tags{display:flex;gap:4px;flex-shrink:0}
.bcc-tag{font-size:9px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;padding:2px 6px;border-radius:4px}
.bcc-tag.off{background:#eef0f5;color:var(--tx3)}
.bcc-tag.diff{background:rgba(0,154,199,.14);color:var(--pool,#009AC7)}
.bcc-chk{display:flex;align-items:flex-start;gap:8px;padding:7px 0;cursor:pointer}
.bcc-chk input{margin-top:2px;flex-shrink:0}
.bcc-chk span{display:flex;flex-direction:column;gap:2px;font-size:12px;color:var(--tx2)}
.bcc-chk b{font-weight:700;color:var(--navy)}
.bcc-chk em{font-style:normal;font-size:10.5px;color:var(--tx3);line-height:1.4}
.bcs .bcr.k-handoff td{background:#F5F2FA;color:var(--navy);font-style:italic}
.bcs-plus{font-weight:600;color:var(--pool,#009AC7);font-size:11px}
.bc-covered{display:flex;gap:8px;align-items:flex-start;padding:9px 11px;border-radius:8px;background:rgba(0,154,199,.08);border:1px solid rgba(0,154,199,.28)}
.bc-covered-i{flex:0 0 16px;height:16px;border-radius:50%;background:var(--pool,#009AC7);color:#fff;font-size:10px;font-weight:800;display:flex;align-items:center;justify-content:center;margin-top:1px}
.bc-covered>span:last-child{font-size:11.5px;color:var(--tx2);line-height:1.5}
.bc-covered em{display:block;font-style:normal;font-size:10.5px;color:var(--tx3);margin-top:3px}
.bcs .bcr.k-introsdone td{background:#EAF6FB;color:var(--navy);font-style:italic}
.bc-opt{font-size:8.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--tx3);background:#eef0f5;border-radius:4px;padding:1px 5px;margin-left:5px}
.bc-pos{margin-top:8px}
.bc-pos-l{display:block;font-size:9px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--tx3);margin-bottom:5px}
.bc-pos .chiprow{margin-bottom:5px}
.bc-split{display:flex;align-items:center;gap:6px;margin-top:7px;font-size:11px;color:var(--tx2);flex-wrap:wrap}
.bc-br-v{font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:700;color:var(--navy);min-width:56px;text-align:right}
.bc-br.off .bc-br-v{color:var(--tx3);font-weight:500}
/* PA cue editor */
.pac-row{padding:11px 0;border-bottom:1px solid var(--bd)}
.pac-hd{display:flex;align-items:center;gap:8px}
.pac-lbl{font-size:12px;font-weight:800;color:var(--navy)}
.pac-edited{font-size:8px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;background:var(--pool,#009AC7);color:#fff;padding:1px 6px;border-radius:4px}
.pac-help{font-size:10.5px;color:var(--tx3);margin:2px 0 6px}
.pac-ta{width:100%;font-family:inherit;font-size:12px;line-height:1.45;padding:8px 10px;border:1px solid var(--bd);border-radius:var(--r);background:var(--surf);color:var(--tx);resize:vertical}
.pac-ta:focus{outline:none;border-color:var(--pool,#009AC7);box-shadow:0 0 0 3px rgba(0,154,199,.15)}
/* run-of-show sheet (on screen) */
.bcs{background:#fff;border-radius:var(--r);overflow:auto}
/* Picking days and blocks on the Generate screen */
.gen-blk-tog{border:none;background:none;padding:0;margin-left:8px;cursor:pointer;font-family:var(--font-ui,inherit);
  font-size:10px;font-weight:700;color:var(--pool,#009AC7);text-decoration:underline;text-underline-offset:2px;
  text-transform:none;letter-spacing:0}
.gen-blk-tog:hover{color:#0086AD}
.gen-blks{max-height:230px;overflow:auto;border:1px solid var(--bd,#DDE1EC);border-radius:8px;
  background:var(--surf,#fff);padding:4px 2px;margin-bottom:8px}
.gen-blk{display:flex;align-items:center;gap:8px;padding:5px 9px;border-radius:6px;cursor:pointer;font-size:11.5px}
.gen-blk:hover{background:var(--surf2,#F2F4F8)}
.gen-blk input{margin:0;cursor:pointer;flex:none}
.gen-blk-t{font-family:var(--font-mono,monospace);font-size:10.5px;font-weight:700;color:var(--navy,#171F69);
  white-space:nowrap;flex:none;min-width:64px}
.gen-blk-n{flex:1;min-width:0;color:var(--tx1,#1B1F2A);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gen-blk-d{font-size:10px;color:var(--tx3,#8A90A2);white-space:nowrap;flex:none}
.gen-blk-none{padding:10px;font-size:11.5px;color:var(--tx3,#8A90A2)}
/* One day, one page — on screen the pages are shown separated, as they print. */
.bcs-page{background:#fff}
.bcs-page+.bcs-page{margin-top:16px;border-top:2px dashed var(--bd,#DDE1EC);padding-top:16px}
.bcs-pday{font-size:11px;font-weight:700;color:var(--sky,#8FC3EA);letter-spacing:.02em;white-space:nowrap}
.bcs-phd{background:var(--navy);color:#fff;padding:11px 16px;display:flex;align-items:center;justify-content:space-between;border-bottom:3px solid var(--pool,#009AC7)}
.bcs-pmeet{font-size:15px;font-weight:800;line-height:1.15}
.bcs-pmeet span{display:block;font-size:9px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--sky,#8FC3EA);margin-top:2px}
.bcs-plogo{height:26px}
.bcs-body{padding:12px 14px}
.bcs-sess{margin-bottom:16px}
.bcs-hd{display:flex;align-items:center;gap:9px;flex-wrap:wrap;padding-bottom:5px;margin-bottom:6px;border-bottom:2px solid var(--navy)}
.bcs-badge{font-size:8px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;background:var(--pool,#009AC7);color:#fff;padding:2px 7px;border-radius:4px}
.bcs-nm{font-size:13px;font-weight:800;color:var(--navy)}
.bcs-day{font-size:10.5px;font-weight:600;color:var(--tx3)}
.bcs-win{margin-left:auto;font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:700;color:var(--navy)}
.bcs-tbl{width:100%;border-collapse:collapse}
.bcs-tbl th{background:#F2F4F8;color:var(--navy);font-size:8px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;text-align:left;padding:4px 7px;border-bottom:1px solid #D9DEE8;position:sticky;top:0}
.bcs-tbl td{padding:4px 7px;font-size:11px;vertical-align:top;border-bottom:1px solid #EDF0F5;color:#1a1c2e}
.bcr-t{font-family:'JetBrains Mono',monospace;font-weight:700;color:var(--navy);white-space:nowrap}
.bcr-k{font-size:7.5px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:#5F6062}
.bcr-l{font-weight:700}
.bcr-note{display:block;font-size:9px;font-weight:500;color:#5F6062;margin-top:1px}
.bcr-p,.bcr-d{font-family:'JetBrains Mono',monospace;font-size:10px;white-space:nowrap;color:#33374d}
.bcr-c{font-size:10px;color:#33374d;line-height:1.35;font-style:italic}
/* Dive order printed under ATHLETE PRESENTATION on the run-of-show */
.bcr-ord{margin-top:5px;padding-top:5px;border-top:1px dashed #C8D0DE}
.bcr-ord-ev{font-size:8.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--pool,#009AC7);margin:4px 0 2px}
/* The dive order gets the full width of the sheet, not the Element column. */
.bcr-ordrow td{padding:5px 11px 8px;border-top:none}
.bcr-ordrow .bcr-ord{margin-top:0;padding-top:0;border-top:none}
.bcr-ord-l{margin:0;padding:0;list-style:none;columns:190px;column-gap:20px}
.bcr-ord-l li{font-size:10px;font-weight:600;line-height:1.5;break-inside:avoid;color:#1a1c2e;padding-left:16px;text-indent:-16px}
.bcr-ord-l li b{font-family:'JetBrains Mono',monospace;font-weight:700;color:var(--navy);margin-right:5px}
.bcr-ord-l li span{font-weight:500;color:#5F6062}
/* Show elements added on the Flow tab — countdown video, moment of silence */
.bcs .bcr.k-item{background:#FFFBEF}
.bcs .bcr.k-item .bcr-l{color:#8A6100}
.bcr.k-round{background:#EAF6FB}
.bcr.k-round .bcr-l{color:var(--navy)}
.bcr.k-break,.bcr.k-reset{background:#FFF6F8}
.bcr.k-break .bcr-l,.bcr.k-reset .bcr-l{color:var(--red)}
.bcr.k-ceremony,.bcr.k-ceremonyprep,.bcr.k-flash{background:#F5F2FA}
.bcr.k-boardsclose,.bcr.k-presentation{background:#F2F4F8}
.bcr.k-finish{background:var(--navy)}
.bcr.k-finish td{color:#fff;font-weight:800}
.bcs-pft{display:flex;justify-content:space-between;padding:8px 16px;border-top:2px solid var(--navy);font-size:9px;color:#5F6062}

/* ── BLOCKS THAT RUN AT THE SAME TIME ────────────────────────────────
   A side-by-side block is drawn indented under its partner, joined by a pool
   rail, so a schedule reader instantly sees "these two share the window"
   instead of reading it as a stacking mistake. Pool cyan throughout —
   never red on the navy cards (ADA). */
.tl-row{display:flex;flex-direction:column;gap:0;flex-shrink:0}
.tl-along{display:flex;align-items:stretch;gap:0;padding-left:22px;margin-top:-2px;position:relative}
.along-rail{width:3px;border-radius:0 0 0 3px;background:linear-gradient(180deg,var(--cyan) 0%,rgba(0,154,199,.35) 100%);flex-shrink:0}
.along-rail::before{content:'';position:absolute;left:0;top:0;width:22px;height:3px;background:var(--cyan);border-radius:0 2px 2px 0;opacity:.55}
.along-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px;padding:8px 0 0 12px}
.along-chip{align-self:flex-start;display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:99px;font-size:10.5px;font-weight:700;letter-spacing:.01em;color:#0A6E8C;background:#E3F4FA;border:1px solid #B9E2F0;cursor:pointer;transition:.12s;font-variant-numeric:tabular-nums}
.along-chip:hover{background:#D2ECF6;border-color:#8FC3EA}
.along-pill{display:inline-block;font-size:9px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:#0A6E8C;background:#E3F4FA;border:1px solid #B9E2F0;border-radius:5px;padding:1px 6px;margin-left:8px;vertical-align:middle}
.sc.is-along{box-shadow:0 1px 3px rgba(15,23,42,.07)}
.sc.is-along::before{background:repeating-linear-gradient(180deg,var(--cyan) 0 6px,rgba(0,154,199,.3) 6px 12px)}
.ts-card.along{border-left-color:var(--cyan);border-style:dashed;background:#F2FAFD}
.ts-along-flag{display:inline-block;font-size:9px;font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:#0A6E8C;background:#E3F4FA;border:1px solid #B9E2F0;border-radius:4px;padding:0 4px;margin-left:5px;vertical-align:middle}
.along-box{border:1px solid var(--bd);border-radius:var(--r);padding:11px 13px;margin-bottom:14px;background:var(--surf2)}
.along-box.on{border-color:#B9E2F0;background:#F2FAFD}
.along-toggle{display:flex;align-items:flex-start;gap:9px;cursor:pointer;font-size:12.5px;color:var(--tx)}
.along-toggle input{margin-top:2px;flex-shrink:0}
.along-toggle strong{font-weight:700;display:block}
.along-hint{display:block;font-size:11px;color:var(--tx3);margin-top:3px;font-weight:400;line-height:1.45}
.along-cfg{display:grid;grid-template-columns:1.4fr 1fr;gap:10px;margin-top:11px}
.along-off{display:flex;align-items:center;gap:7px}
.along-off input{max-width:74px}
.along-off span{font-size:10.5px;color:var(--tx3);line-height:1.3}
.along-note{margin-top:10px;padding:8px 10px;border-radius:var(--r);background:#fff;border:1px solid #D2ECF6;font-size:11.5px;color:var(--tx2);line-height:1.5}
.along-note strong{color:var(--navy);font-variant-numeric:tabular-nums}
.along-warn{margin-top:5px;font-size:11px;font-weight:600;color:#B45309}
@media(max-width:720px){.along-cfg{grid-template-columns:1fr}.tl-along{padding-left:12px}.along-body{padding-left:9px}}
html[data-theme="deck"] .along-chip{color:#8FC3EA;background:rgba(0,154,199,.16);border-color:rgba(143,195,234,.32)}
html[data-theme="deck"] .along-chip:hover{background:rgba(0,154,199,.26);border-color:#8FC3EA}
html[data-theme="deck"] .along-pill,html[data-theme="deck"] .ts-along-flag{color:#8FC3EA;background:rgba(0,154,199,.16);border-color:rgba(143,195,234,.3)}
html[data-theme="deck"] .along-box.on{border-color:rgba(143,195,234,.3);background:rgba(0,154,199,.08)}
html[data-theme="deck"] .along-note{background:var(--surf);border-color:rgba(143,195,234,.24)}
html[data-theme="deck"] .along-warn{color:#FBBF24}
html[data-theme="deck"] .ts-card.along{background:rgba(0,154,199,.13)}

/* ── FACILITY HOURS ───────────────────────────────────────────────────
   The "Pool 6:30 AM – 8:00 PM" chip in the day bar, and the editor behind
   it. Turns amber when something on the day sits outside the window. */
.tl-hours{display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 10px;border-radius:8px;border:1px solid var(--bd2);background:var(--surf);color:var(--tx2);font-size:11.5px;font-weight:600;font-variant-numeric:tabular-nums;transition:.12s;flex-shrink:0;white-space:nowrap}
.tl-hours:hover{background:var(--surf2);border-color:var(--bd3);color:var(--tx)}
.tl-hours svg{width:14px;height:14px;color:var(--cyan);flex-shrink:0}
.tl-hours.warn{border-color:#FDE68A;background:#FFFBEB;color:#92400E}
.tl-hours.warn svg{color:var(--warn)}
.tl-hours.warn:hover{background:#FEF3C7;border-color:#FCD34D}
.hours-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:4px}
.hours-note{font-size:12px;color:var(--tx2);background:var(--surf2);border:1px solid var(--bd);border-radius:8px;padding:9px 12px;margin-bottom:10px;line-height:1.45}
.hours-note b{color:var(--navy);font-weight:700}
.hours-note.warn{background:#FFFBEB;border-color:#FDE68A;color:#92400E}
.hours-note.bad{background:#FEF2F2;border-color:#FECACA;color:#991B1B;font-weight:600}
.hours-help{font-size:11px;color:var(--tx3);line-height:1.5;margin:0 0 14px}
html[data-theme="deck"] .tl-hours{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.14)}
html[data-theme="deck"] .hours-note{background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.12)}

/* ── LOCKING ──────────────────────────────────────────────────────────
   A locked day is read-only. Editing controls are removed from the markup
   rather than merely greyed out, and everything that is still on screen for
   that day is made non-interactive here as a second line of defence — on a
   phone the failure mode we are guarding against is a stray fingertip.
   Amber (not red) is used on the navy top bar: red on blue fails our ADA
   contrast rule, and a lock is a "held, on purpose" state, not an error. */
.lock-chip{gap:6px;font-weight:600}
.lock-chip .lock-lbl{font-size:11.5px;letter-spacing:.01em}
.lock-chip.on{background:#F5A524;border-color:#F5A524;color:#1A1400}
.lock-chip.on:hover{background:#FFB93D;border-color:#FFB93D}
.lock-chip.partial{background:rgba(245,165,36,.18);border-color:rgba(245,165,36,.55);color:#FFD79A}
.dp.locked{opacity:.92}
.dp-lock{font-size:9px;line-height:1;margin-left:1px;filter:grayscale(1) brightness(1.7)}
.dp.active .dp-lock{filter:none}

/* Labeled toolbar action. The day toolbar had grown to six identical unlabeled
   30x30 glyphs in a row, which made real actions undiscoverable — you had to
   hover each one to find out what it did. Actions that CHANGE the schedule get
   a written label; view toggles can stay as icons. */
.tl-textbtn{display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 11px;border-radius:8px;
  font-size:11.5px;font-weight:600;font-family:var(--font-ui,inherit);cursor:pointer;transition:.14s;
  border:1px solid var(--bd2);background:var(--surf);color:var(--tx2);flex-shrink:0;white-space:nowrap}
.tl-textbtn svg{width:14px;height:14px;flex-shrink:0}
.tl-textbtn:hover{background:var(--surf2);border-color:var(--bd3);color:var(--tx)}
.tl-textbtn:disabled{opacity:.45;cursor:not-allowed}
.tl-textbtn:disabled:hover{background:var(--surf);border-color:var(--bd2);color:var(--tx2)}
/* Recording is a mode. It should be obvious at a glance that you're in it. */
.tl-textbtn.on{background:var(--pool,#009AC7);border-color:var(--pool,#009AC7);color:#fff}
.tl-textbtn.on:hover{background:#0086AD;border-color:#0086AD;color:#fff}
html[data-theme="deck"] .tl-textbtn.on{background:var(--pool,#009AC7);border-color:var(--pool,#009AC7);color:#fff}
html[data-theme="deck"] .tl-textbtn{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.14)}

.tl-lockbtn{display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 11px;border-radius:8px;
  font-size:11.5px;font-weight:600;font-family:var(--font-ui,inherit);cursor:pointer;transition:.14s;
  border:1px solid var(--bd,#DDE1EC);background:var(--sf,#fff);color:var(--tx2,#5A6072);flex-shrink:0}
.tl-lockbtn svg{width:14px;height:14px}
.tl-lockbtn:hover{border-color:#F5A524;color:#8A5A00;background:#FFF8EC}
.tl-lockbtn.on{background:#F5A524;border-color:#F5A524;color:#1A1400}
.tl-lockbtn.on:hover{background:#FFB93D;border-color:#FFB93D}

.lock-banner{display:flex;align-items:center;gap:12px;margin:10px 14px 0;padding:11px 14px;
  border:1px solid #F0C77E;border-left:4px solid #F5A524;border-radius:9px;background:#FFF8EC}
.lock-banner>svg{width:20px;height:20px;color:#8A5A00;flex-shrink:0}
.lock-banner .lb-txt{display:flex;flex-direction:column;gap:2px;min-width:0}
.lock-banner .lb-txt b{font-size:12.5px;font-weight:700;color:#6B4600}
.lock-banner .lb-txt span{font-size:11.5px;line-height:1.45;color:#8A5A00}
.lock-banner .lb-btn{flex-shrink:0;height:30px;padding:0 13px;border-radius:8px;border:1px solid #8A5A00;
  background:#fff;color:#6B4600;font-size:11.5px;font-weight:700;cursor:pointer;transition:.14s;
  font-family:var(--font-ui,inherit)}
.lock-banner .lb-btn:hover{background:#8A5A00;color:#fff}

/* Second line of defence: nothing inside a locked day's body responds to a tap,
   drag or keystroke. The banner's own Unlock button is deliberately exempt. */
.tl-wrap.day-locked .tl-body{opacity:.97}
.tl-wrap.day-locked .tl-body,
.tl-wrap.day-locked .tl-body *{
  -webkit-user-drag:none;user-select:text}
.tl-wrap.day-locked .tl-body button,
.tl-wrap.day-locked .tl-body input,
.tl-wrap.day-locked .tl-body select,
.tl-wrap.day-locked .tl-body textarea,
.tl-wrap.day-locked .tl-body [draggable],
.tl-wrap.day-locked .tl-body .sc-hd,
.tl-wrap.day-locked .tl-body .sc-ev,
.tl-wrap.day-locked .tl-body .ts-resize,
.tl-wrap.day-locked .tl-body .gap-chip{pointer-events:none!important}
.tl-wrap.day-locked .tl-body .sc{cursor:default}
@media (max-width:760px){
  .lock-chip .lock-lbl{display:none}
  .lock-banner{margin:8px 10px 0;padding:10px 12px;gap:10px}
  .lock-banner .lb-txt span{font-size:11px}
  .tl-lockbtn span{display:none}
  .tl-lockbtn{padding:0 9px}
}

/* ── LIVE RUN SHEET ───────────────────────────────────────────────────
   Actuals sit alongside the plan and are visually distinct from it: the
   plan is navy/pool, the run sheet is Pool-blue accents on white with a
   single amber/green delta chip. Controls carry .live-ctl, which re-enables
   pointer events inside a locked day — recording reality has to keep working
   while the published plan is frozen. */
.live-strip{display:flex;gap:10px;align-items:stretch;flex-wrap:wrap;margin:10px 14px 0;padding:11px 12px;
  border:1px solid var(--bd,#DDE1EC);border-left:4px solid var(--pool,#009AC7);border-radius:10px;
  background:linear-gradient(180deg,#F7FCFE,#fff)}
.live-strip .lv-card{flex:1 1 190px;min-width:170px;display:flex;flex-direction:column;gap:2px;
  padding:0 12px 0 0;border-right:1px solid var(--bd,#E6E9F2)}
.live-strip .lv-card:last-of-type{border-right:none}
.lv-k{font-size:9.5px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;color:var(--pool,#009AC7)}
.lv-card.idle .lv-k{color:var(--tx3,#8A90A2)}
.lv-v{font-family:var(--font-display,inherit);font-size:19px;font-weight:600;line-height:1.15;
  color:var(--navy,#171F69);display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.lv-m{font-size:11px;color:var(--tx2,#5A6072);display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.lv-m2{font-size:10.5px;color:var(--tx2,#5A6072);line-height:1.4}
.lv-m.dim,.lv-m2.dim{color:var(--tx3,#8A90A2)}
.lv-since{color:var(--tx3,#8A90A2)}
.lv-chip{font-family:var(--font-mono,monospace);font-size:10px;font-weight:700;padding:1.5px 6px;
  border-radius:5px;white-space:nowrap;letter-spacing:-.01em}
.lv-chip.sm{font-size:9.5px;padding:1px 5px}
.lv-chip.ontime{background:#E7F7EE;color:#1B7F4B;border:1px solid #BFE8D1}
.lv-chip.early{background:#E9F4FE;color:#1D5E96;border:1px solid #C4E0F7}
.lv-chip.slip{background:#FFF8EC;color:#8A5A00;border:1px solid #F0C77E}
.lv-chip.late{background:#FDECEE;color:#A3182C;border:1px solid #F2C0C8}
.lv-go{margin-top:5px;align-self:flex-start;height:27px;padding:0 11px;border-radius:7px;border:none;
  background:var(--pool,#009AC7);color:#fff;font-size:11px;font-weight:700;cursor:pointer;
  font-family:var(--font-ui,inherit)}
.lv-go:hover{background:#0086AD}
.lv-tools{display:flex;flex-direction:column;gap:5px;justify-content:center;flex:0 0 auto}
.lv-tool{height:26px;padding:0 10px;border-radius:7px;border:1px solid var(--bd,#DDE1EC);background:#fff;
  color:var(--tx2,#5A6072);font-size:10.5px;font-weight:600;cursor:pointer;white-space:nowrap;
  font-family:var(--font-ui,inherit)}
.lv-tool:hover{border-color:var(--pool,#009AC7);color:var(--pool,#009AC7)}
.lv-off{font-size:12px;color:var(--tx2,#5A6072);flex:1}

/* per-session row inside a card */
.lv-sess{display:flex;align-items:center;gap:9px;flex-wrap:wrap;padding:8px 13px;
  border-top:1px solid var(--bd,#EDEFF6);background:#F8FCFE}
.lv-sess.is-run{background:#FFFBF2;border-top-color:#F0C77E}
.lv-sess.is-done{background:#F4FAF6;border-top-color:#BFE8D1}
.lv-sess-state{display:flex;align-items:center;gap:7px;flex-wrap:wrap;flex:1;min-width:0}
.lv-sess-btns{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.lv-badge{font-size:10.5px;font-weight:700;padding:2px 7px;border-radius:5px;white-space:nowrap}
.lv-badge.todo{background:#EEF1F7;color:var(--tx2,#5A6072)}
.lv-badge.run{background:#F5A524;color:#1A1400}
.lv-badge.done{background:#1B7F4B;color:#fff}
.lv-exp{font-size:10.5px;color:var(--tx3,#8A90A2)}
.lv-btn{height:28px;padding:0 11px;border-radius:7px;border:1px solid var(--bd,#DDE1EC);background:#fff;
  color:var(--tx1,#1B1F2A);font-size:11px;font-weight:700;cursor:pointer;white-space:nowrap;
  font-family:var(--font-ui,inherit);transition:.13s}
.lv-btn:hover{border-color:var(--pool,#009AC7);color:var(--pool,#009AC7)}
.lv-btn.primary{background:var(--pool,#009AC7);border-color:var(--pool,#009AC7);color:#fff}
.lv-btn.primary:hover{background:#0086AD;border-color:#0086AD;color:#fff}
.lv-btn.ghost{border-style:dashed;color:var(--tx3,#8A90A2)}

/* Backdating a stamp, on the row. Opens itself the moment a time is recorded,
   because the tap almost never happens at the moment the thing did. */
.lv-adj{flex-basis:100%;display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  margin-top:7px;padding:8px 10px;border:1px solid #F0C77E;border-left:3px solid #F5A524;
  border-radius:0 8px 8px 0;background:#FFFDF7}
.lv-adj-q{font-size:11.5px;color:var(--tx2,#5A6072);white-space:nowrap}
.lv-adj-q strong{font-family:var(--font-mono,monospace);font-weight:700;color:var(--navy,#171F69)}
.lv-adj-set{display:inline-flex;align-items:center;gap:5px;flex-wrap:wrap}
.lv-adj-b{height:27px;min-width:40px;padding:0 9px;border-radius:6px;border:1px solid var(--bd,#DDE1EC);
  background:#fff;color:var(--navy,#171F69);font-family:var(--font-mono,monospace);font-size:11.5px;
  font-weight:700;cursor:pointer;transition:.12s}
.lv-adj-b:hover{border-color:var(--pool,#009AC7);color:var(--pool,#009AC7);background:rgba(0,154,199,.07)}
.lv-adj-b.plus{color:var(--tx3,#8A90A2)}
.lv-adj-b.go{background:var(--pool,#009AC7);border-color:var(--pool,#009AC7);color:#fff;
  font-family:var(--font-ui,inherit);min-width:0}
.lv-adj-b.go:hover{background:#0086AD;border-color:#0086AD;color:#fff}
.lv-adj-in{height:27px;padding:0 7px;border-radius:6px;border:1px solid var(--bd,#DDE1EC);
  background:#fff;font-family:var(--font-mono,monospace);font-size:11.5px;color:var(--navy,#171F69)}
.lv-adj-ok{margin-left:auto;height:27px;padding:0 11px;border-radius:6px;border:1px solid transparent;
  background:transparent;color:var(--tx3,#8A90A2);font-size:11px;font-weight:700;cursor:pointer;
  font-family:var(--font-ui,inherit);white-space:nowrap}
.lv-adj-ok:hover{color:var(--navy,#171F69);border-color:var(--bd,#DDE1EC);background:#fff}
@media (max-width:760px){
  .lv-adj{gap:7px}
  .lv-adj-q{flex-basis:100%}
  .lv-adj-b{height:34px;min-width:48px;font-size:13px}
  .lv-adj-in{height:34px;font-size:13px;flex:1}
  .lv-adj-ok{height:34px;margin-left:0;flex-basis:100%;border:1px solid var(--bd,#DDE1EC);background:#fff}
}

/* Edit recorded times — hand entry for the live run sheet */
.lt-help{font-size:12px;color:var(--tx2);line-height:1.5;margin:0 0 12px}
.lt-help b{color:var(--navy);font-weight:700}
.lt-err{font-size:12px;font-weight:600;color:#991B1B;background:#FEF2F2;border:1px solid #FECACA;
  border-radius:8px;padding:9px 12px;margin-bottom:12px;line-height:1.45}
.lt-head{font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--tx3);
  margin:16px 0 8px;padding-top:12px;border-top:1px solid var(--bd)}
.lt-row{margin-bottom:12px}
.lt-name{font-size:12.5px;font-weight:600;color:var(--tx);margin-bottom:5px;display:flex;
  align-items:center;gap:8px;flex-wrap:wrap}
.lt-planned{font-size:11px;font-weight:500;color:var(--tx3);font-variant-numeric:tabular-nums}
.lt-hand{font-size:9.5px;font-weight:700;letter-spacing:.03em;text-transform:uppercase;
  background:#EEF1F7;color:var(--tx2);padding:2px 6px;border-radius:4px}
.lt-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
/* A time box says whether it is a reading or an empty box. Nothing in between. */
.lt-fld{display:flex;flex-direction:column;gap:4px}
.lt-in{font-family:var(--font-mono,monospace)}
.lt-fld:not(.is-set) .lt-in{background:var(--surf2,#F7F8FC)}
.lt-fmeta{display:flex;align-items:center;gap:7px;flex-wrap:wrap;min-height:19px}
.lt-tag{font-size:9.5px;font-weight:700;letter-spacing:.03em;text-transform:uppercase;
  padding:2px 6px;border-radius:4px;white-space:nowrap}
.lt-tag.yes{background:#E7F7EE;color:#1B7F4B;border:1px solid #BFE8D1}
.lt-tag.no{background:var(--surf2,#EEF1F7);color:var(--tx3,#8A90A2)}
.lt-fld .lt-tag.yes,.lt-fld.is-set .lt-tag.no{display:none}
.lt-fld.is-set .lt-tag.yes{display:inline}
.lt-fld .lt-x{display:none}
.lt-fld.is-set .lt-x{display:inline-block}
.lt-fld.is-set .lt-use{display:none}
.lt-x,.lt-use{border:none;background:none;padding:0;cursor:pointer;font-family:var(--font-ui,inherit);
  font-size:10.5px;font-weight:600;text-decoration:underline;text-underline-offset:2px}
.lt-x{color:var(--tx3,#8A90A2)}
.lt-x:hover{color:#A3182C}
.lt-use{color:var(--pool,#009AC7)}
.lt-use:hover{color:#0086AD}
@media (max-width:760px){
  .lt-grid{grid-template-columns:1fr;gap:12px}
  .lt-fmeta{min-height:22px}
  .lt-x,.lt-use{font-size:12px}
}
/* The event row you tapped in from, so it's obvious which one you're correcting. */
.lt-row.is-focus{background:rgba(0,154,199,.06);border:1px solid rgba(0,154,199,.35);
  border-radius:9px;padding:10px 11px;margin:-1px -11px 15px}
/* A recorded time on an event row doubles as its edit control. */
.lv-ev-edit{border:1px dashed var(--bd2,#DDE1EC);background:transparent;border-radius:6px;
  padding:2px 7px;cursor:pointer;transition:.12s;font-family:inherit}
.lv-ev-edit:hover{border-color:var(--pool,#009AC7);color:var(--pool,#009AC7);
  background:rgba(0,154,199,.06);border-style:solid}
/* Session phases: warm-up and introductions, timed separately from the diving */
.lv-phases{display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  padding-top:7px;margin-top:1px;border-top:1px dashed var(--bd,#E6E9F2)}
.lv-ph{display:inline-flex;align-items:center;gap:6px}
.lv-ph-n{font-size:10px;font-weight:700;letter-spacing:.03em;text-transform:uppercase;color:var(--tx3,#8A90A2)}
.lv-ph.run .lv-ph-n{color:#B45309}
.lv-ph.done .lv-ph-n{color:#1B7F4B}
.lv-ph-t{font-family:var(--font-mono,monospace);font-size:10px;color:var(--tx2,#5A6072);
  border:1px dashed var(--bd2,#DDE1EC);background:transparent;border-radius:6px;padding:2px 7px;cursor:pointer}
.lv-ph-t:hover{border-color:var(--pool,#009AC7);color:var(--pool,#009AC7);border-style:solid;
  background:rgba(0,154,199,.06)}
.lv-ph-d{font-size:10px;font-weight:700;color:var(--navy,#171F69);font-variant-numeric:tabular-nums}
.lt-optional{font-size:9.5px;font-weight:600;letter-spacing:.03em;text-transform:uppercase;
  color:var(--tx3,#8A90A2);background:var(--surf2,#EEF1F7);padding:2px 6px;border-radius:4px}
@media (max-width:760px){
  .lv-phases{flex-direction:column;align-items:stretch;gap:8px}
  .lv-ph{justify-content:space-between}
  .lv-ph-n,.lv-ph-t,.lv-ph-d{font-size:12px}
  .lv-ph .lv-xbtn{min-width:74px}
}

.lv-ev-proj{font-family:var(--font-mono,monospace);font-size:10px;font-weight:600;
  color:var(--pool,#009AC7);white-space:nowrap}
.lv-ev-proj.dim{color:var(--tx3,#8A90A2);font-weight:500}

/* Split boards on the deck — one line per physical board */
.lv-ev.split{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap}
.lv-bds{display:flex;flex-direction:column;gap:5px}
.lv-bd{display:inline-flex;align-items:center;gap:6px}
.lv-bd-n{display:inline-flex;align-items:center;justify-content:center;min-width:22px;height:20px;
  padding:0 6px;border-radius:5px;font-size:11px;font-weight:800;letter-spacing:.02em;
  background:var(--navy,#171F69);color:#fff;flex-shrink:0}
.lv-bd.running .lv-bd-n{background:#F5A524;color:#1A1400}
.lv-bd.done .lv-bd-n{background:#1B7F4B;color:#fff}
.lv-bd-t{font-family:var(--font-mono,monospace);font-size:10px;color:var(--tx2,#5A6072);
  white-space:nowrap;border:1px dashed var(--bd2,#DDE1EC);background:transparent;border-radius:6px;
  padding:2px 7px;cursor:pointer;transition:.12s}
.lv-bd-t:hover{border-color:var(--pool,#009AC7);color:var(--pool,#009AC7);
  background:rgba(0,154,199,.06);border-style:solid}

/* Split boards in the Edit times screen */
.lt-splittag{font-size:9.5px;font-weight:700;letter-spacing:.03em;text-transform:uppercase;
  background:rgba(0,154,199,.10);color:var(--cyan,#009AC7);border:1px solid rgba(0,154,199,.35);
  padding:2px 6px;border-radius:4px}
.lt-board{margin:0 0 10px 12px;padding-left:11px;border-left:2px solid var(--bd,#E6E9F2)}
.lt-board.is-focus{border-left-color:var(--pool,#009AC7);background:rgba(0,154,199,.05);
  border-radius:0 8px 8px 0;padding:8px 10px 8px 11px}
.lt-bname{font-size:11.5px;font-weight:700;color:var(--tx2,#5A6072);margin-bottom:5px;
  display:flex;align-items:center;gap:7px}

/* Approve run sheet times — the preview of what would change */
.ap-list{display:flex;flex-direction:column;gap:2px;margin-top:4px}
.ap-row{display:flex;align-items:center;gap:12px;padding:9px 11px;border-radius:8px;
  border:1px solid var(--bd,#E6E9F2);background:var(--surf,#fff)}
.ap-row+.ap-row{margin-top:-1px}
.ap-name{flex:1;min-width:0;font-size:12.5px;font-weight:600;color:var(--tx);
  display:flex;flex-direction:column;gap:2px}
.ap-why{font-size:10.5px;font-weight:500;color:var(--tx3)}
.ap-times{display:flex;align-items:center;gap:7px;flex-shrink:0;
  font-family:var(--font-mono,monospace);font-size:11.5px;font-variant-numeric:tabular-nums}
.ap-from{color:var(--tx3);text-decoration:line-through}
.ap-arrow{color:var(--tx3)}
.ap-to{font-weight:700;color:var(--navy,#171F69)}
.lv-tool.primary{background:var(--pool,#009AC7);border-color:var(--pool,#009AC7);color:#fff;font-weight:700}
.lv-tool.primary:hover{background:#0086AD;border-color:#0086AD;color:#fff}
@media (max-width:760px){
  .ap-row{flex-direction:column;align-items:flex-start;gap:6px}
  .ap-times{font-size:13px}
  .ap-name{font-size:13.5px}
}
@media(max-width:420px){.lt-grid{grid-template-columns:1fr}}
html[data-theme="deck"] .lt-hand{background:rgba(255,255,255,.10);color:rgba(255,255,255,.75)}

/* per-event controls */
.lv-ev{display:inline-flex;align-items:center;gap:5px;flex-shrink:0}
.lv-ev-t{font-family:var(--font-mono,monospace);font-size:10px;color:var(--tx2,#5A6072);white-space:nowrap}
.lv-xbtn{height:23px;padding:0 8px;border-radius:6px;border:1px solid var(--bd,#DDE1EC);background:#fff;
  color:var(--tx2,#5A6072);font-size:10px;font-weight:700;cursor:pointer;font-family:var(--font-ui,inherit)}
.lv-xbtn:hover{border-color:var(--pool,#009AC7);color:var(--pool,#009AC7)}
.lv-xbtn.end{background:#F5A524;border-color:#F5A524;color:#1A1400}
.lv-xbtn.end:hover{background:#FFB93D;border-color:#FFB93D}

/* The run sheet stays usable while the plan is locked. */
.tl-wrap.day-locked .tl-body .live-ctl,
.tl-wrap.day-locked .tl-body .live-ctl *,
.tl-wrap.day-locked .tl-body button.live-ctl{pointer-events:auto!important}

@media (max-width:760px){
  .live-strip{margin:8px 10px 0;padding:10px;gap:8px}
  .live-strip .lv-card{flex:1 1 100%;border-right:none;border-bottom:1px solid var(--bd,#E6E9F2);
    padding:0 0 8px}
  .live-strip .lv-card:last-of-type{border-bottom:none;padding-bottom:0}
  .lv-tools{flex-direction:row;width:100%}
  .lv-tool{flex:1}
  .lv-v{font-size:17px}
  .lv-sess{padding:8px 10px}
  .lv-btn{height:32px;padding:0 12px;font-size:11.5px}   /* bigger tap targets on deck */
  .lv-xbtn{height:27px;padding:0 10px}
}

/* ── RUNNING THE MEET FROM A PHONE ────────────────────────────────────
   Standing at the pool with one hand on the rail. Three things have to hold:
   controls are thumb-sized, the day toolbar does not eat four rows of vertical
   space wrapping, and the run sheet is the first thing you can reach. */
@media (max-width:760px){
  /* One scrolling row instead of a wrapped pile. Same pattern the dark top bar
     already uses, so the gesture is one the app has taught before. */
  .tl-bar{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;
    scrollbar-width:none;gap:6px;padding:7px 12px;min-width:0;max-width:100%}
  .tl-bar::-webkit-scrollbar{display:none}
  .tl-bar>*{flex-shrink:0}
  .tl-spacer{display:none}          /* a growing spacer makes no sense in a scroller */
  /* Recording is what you came here to do — put it first, before the date. */
  .tl-runsheet{order:-1}
  .tl-textbtn{height:34px;padding:0 12px;font-size:12px}
  .tl-iconbtn{width:34px;height:34px}
  .tl-hours{height:34px}
  .tl-lockbtn,.tl-addbtn{height:34px}

  /* Session controls: state on one line, full-width buttons under it. Reading
     and tapping stop competing for the same cramped row. */
  .lv-sess{flex-direction:column;align-items:stretch;gap:8px;padding:10px 12px}
  .lv-sess-state{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
  .lv-sess-btns{gap:7px}
  .lv-sess-btns .lv-btn{flex:1 1 auto;height:42px;padding:0 12px;font-size:13px;
    justify-content:center;min-width:0}
  .lv-sess-btns .lv-btn.primary{flex:2 1 140px}   /* Start / Finish is the big one */
  .lv-sess-btns .lv-btn.ghost{flex:1 1 90px}
  .lv-badge{font-size:11.5px;padding:3px 8px}

  /* Per-event Start / End / re-open on an event row */
  .lv-ev{gap:7px}
  .lv-xbtn{height:34px;padding:0 13px;font-size:12px}
  .lv-ev-t{font-size:11.5px}

  /* Split boards: stack the row so each board's controls get full width */
  .lv-ev.split{display:flex;flex-direction:column;align-items:stretch;gap:7px;width:100%}
  .lv-bds{gap:7px}
  .lv-bd{gap:7px;flex-wrap:wrap}
  .lv-bd-n{min-width:28px;height:28px;font-size:13px}
  .lv-bd-t{font-size:12px;padding:5px 9px}
  .lv-bd .lv-xbtn{margin-left:auto}

  /* Editing recorded times */
  .lt-grid{grid-template-columns:1fr;gap:8px}
  .lt-board{margin-left:0;padding-left:9px}
  .lt-bname{font-size:13px}
  .lt-row{margin-bottom:16px}
  .lt-name{font-size:13.5px}
  .lt-row .fi{height:46px;font-size:16px}   /* 16px keeps iOS from zooming the page */
  .lt-help{font-size:13px}
}
.lv-stale{font-size:10.5px;font-weight:700;color:#8A5A00;background:#FFF8EC;border:1px solid #F0C77E;
  border-radius:5px;padding:2px 7px;white-space:nowrap}

/* "+N adv" chip in the DiveMeets entry-sync modal */
.es-adv{font-size:9px;font-weight:700;padding:2px 6px;border-radius:4px;letter-spacing:.03em;text-transform:uppercase;background:rgba(0,154,199,.10);color:var(--cyan);border:1px solid rgba(0,154,199,.35);white-space:nowrap}

/* ── Live pace + recovery options ─────────────────────────────────────── */
.lv-tool.on{background:var(--cyan);border-color:var(--cyan);color:#fff}
.lv-pace-set{font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:6px;
  border:1px dashed var(--cyan);background:transparent;color:var(--cyan);cursor:pointer;
  margin-left:5px;white-space:nowrap}
.lv-pace-set:hover{background:rgba(0,154,199,.10);border-style:solid}
.lv-pace-chip{font-family:'JetBrains Mono',monospace;font-size:10px;font-weight:700;
  padding:2px 6px;border-radius:5px;margin-left:5px;white-space:nowrap}
.lv-pace-chip.slow{background:#FDECEF;color:var(--red)}
.lv-pace-chip.fast{background:#E7F6EE;color:#0C7A53}
.lv-pace-chip.ok{background:#F0F2F6;color:var(--tx3)}
.lv-ev-proj.from-pace{color:var(--cyan);font-weight:700}
.lp-grid{display:flex;gap:12px}
.lp-f{flex:1;display:flex;flex-direction:column;gap:4px;font-size:12px;font-weight:600;color:var(--tx2)}
.lp-f input{font-size:22px;font-weight:700;font-family:'JetBrains Mono',monospace;
  padding:10px 12px;border:1px solid var(--bd);border-radius:9px;background:var(--surf);color:var(--tx);
  text-align:center;width:100%}
.lp-f input:focus{outline:none;border-color:var(--cyan);box-shadow:0 0 0 3px rgba(0,154,199,.14)}
.lp-f em{font-style:normal;font-size:11px;color:var(--tx3);text-align:center}
.lp-now{margin-top:12px;padding:11px 13px;border-radius:9px;background:rgba(0,154,199,.08);
  border:1px solid rgba(0,154,199,.25);font-size:12.5px;line-height:1.55}
.rc-banner{padding:11px 13px;border-radius:9px;font-size:13px;font-weight:600;margin-bottom:13px}
.rc-banner.ok{background:#E7F6EE;color:#0B6B49;border:1px solid #A7E8CD}
.rc-banner.warn{background:#FEF3C7;color:#8A5A08;border:1px solid #FDE68A}
.rc-opt{border:1px solid var(--bd);border-radius:11px;padding:12px 14px;margin-bottom:10px;
  background:var(--surf2)}
.rc-opt.accept{border-style:dashed}
.rc-opt-hd{display:flex;align-items:baseline;gap:10px;margin-bottom:5px}
.rc-opt-t{font-weight:700;font-size:14px;flex:1}
.rc-gain{font-family:'JetBrains Mono',monospace;font-size:11.5px;font-weight:700;
  color:#0C7A53;white-space:nowrap}
.rc-gain.none{color:var(--tx3)}
.rc-detail{font-size:12.5px;color:var(--tx2);line-height:1.5}
.rc-cost{font-size:12.5px;color:var(--tx);margin-top:6px;line-height:1.5}
.rc-how{font-size:11.5px;color:var(--tx3);margin-top:5px;font-style:italic}

/* ══════════════════════════════════════════════════════════════════════
   QUALITY FLOOR
   Audited against WCAG 2.1 AA. Three gaps, all of them invisible until
   they are not: no keyboard focus indicator of our own, no reduced-motion
   honouring behind 93 transitions, and tap targets sized for a mouse on a
   tool that gets used standing at a pool.
   Brand rule holds throughout: red never sits on blue.
   ══════════════════════════════════════════════════════════════════════ */

/* Where the keyboard is. :focus-visible only, so it never fires on a mouse
   click. Pool blue on light ground; on navy the ring inverts to white with a
   pool halo, because a navy ring on a navy chip is not a ring. */
:focus-visible{outline:2px solid var(--cyan);outline-offset:2px}
.btn:focus-visible,.chip:focus-visible,.lv-btn:focus-visible,.lv-adj-b:focus-visible,
.lv-adj-ok:focus-visible,.modal-close:focus-visible,.lt-x:focus-visible,.lt-use:focus-visible,
.gen-blk-tog:focus-visible{outline:2px solid var(--cyan);outline-offset:2px}
.chip.on:focus-visible,.btn-p:focus-visible,.lv-btn.primary:focus-visible,
.lv-adj-b.go:focus-visible{outline:2px solid #fff;outline-offset:-4px;box-shadow:0 0 0 3px var(--cyan)}
.gen-blk:focus-within{background:var(--surf2);outline:2px solid var(--cyan);outline-offset:-2px}
/* Inputs replace the native ring rather than removing it. */
.fi:focus-visible,.dialog-input:focus-visible,.lv-adj-in:focus-visible,
.lt-in:focus-visible,.evsearch:focus-visible{outline:none;border-color:var(--cyan);
  box-shadow:0 0 0 3px rgba(0,154,199,.32)}

/* Asked not to animate, do not animate. */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;
    transition-duration:.01ms !important;scroll-behavior:auto !important}
}

/* A finger is not a cursor. 44px on phone-width screens, where this gets used
   on the deck rather than at the desk. */
@media (max-width:760px){
  .btn{height:44px;padding:0 18px}
  .btn-sm{height:40px}
  .chip{height:40px;padding:0 15px;font-size:12.5px}
  .lv-btn{min-height:40px}
  .modal-close{min-width:44px;min-height:44px}
  .gen-blk{padding:9px 10px}
  .gen-blk input{width:20px;height:20px}
}

/* ══════════════════════════════════════════════════════════════════════
   PRESSED AND BUSY
   Two rules out of the ui-ux-pro-max set that matter here more than they
   would in an office: "add a pressed state" and "never rely on hover for
   an important action". There were 118 :hover rules and three :active
   ones, two of which only change a drag cursor. On a tablet at the pool
   there IS no hover — you tap a control and nothing acknowledges it until
   the app finishes re-rendering, which on a big schedule is long enough to
   tap again.
   ══════════════════════════════════════════════════════════════════════ */
.btn:active:not(:disabled),.chip:active:not(:disabled),.lv-btn:active:not(:disabled),
.lv-adj-b:active,.lv-adj-ok:active,.bb:active,.gen-blk-tog:active,.lt-x:active,.lt-use:active,
.modal-close:active,.lib-act:active,.ev-rm:active,.dp-add:active,.tl-iconbtn:active,
.flight-rm:active,.pr-nav:active,.ep-close:active{
  transform:translateY(1px) scale(.985);
  filter:brightness(.94);
}
.gen-blk:active{background:var(--surf3)}
/* The press must land instantly; the release can ease. */
.btn,.chip,.lv-btn,.lv-adj-b,.bb{transition:background .14s,border-color .14s,color .14s,
  transform .09s ease-out,filter .09s ease-out}

/* An action that talks to the network or builds a file cannot be fired twice
   by an impatient second tap. */
.is-busy{opacity:.62;pointer-events:none;position:relative}
.is-busy::after{content:'';position:absolute;left:0;right:0;bottom:0;height:2px;border-radius:0 0 6px 6px;
  background:linear-gradient(90deg,transparent,var(--cyan),transparent);
  background-size:200% 100%;animation:busyslide 1s linear infinite}
@keyframes busyslide{from{background-position:200% 0}to{background-position:-200% 0}}
@media (prefers-reduced-motion:reduce){
  .is-busy::after{animation:none;background:var(--cyan);opacity:.5}
}

/* ════ NEW SCHEDULE + RELATIVE DAYS ════
   A schedule is often built as "Day 1, Day 2…" long before the host confirms
   dates. These are the surfaces that say so, plus the wizard that starts one. */

/* Banner above the timeline whenever the schedule is still numbered. Pool blue,
   not the amber the lock banner owns — this is information, not a restriction. */
.dates-banner{display:flex;align-items:center;gap:12px;margin:10px 14px 0;padding:11px 14px;
  border:1px solid #A8DCEE;border-left:4px solid var(--cyan);border-radius:9px;background:#F0FAFD}
.dates-banner>svg{width:20px;height:20px;color:#046C8C;flex-shrink:0}
.dates-banner .db-txt{display:flex;flex-direction:column;gap:2px;min-width:0}
.dates-banner .db-txt b{font-size:12.5px;font-weight:700;color:#05536B}
.dates-banner .db-txt span{font-size:11.5px;line-height:1.45;color:#046C8C}
.dates-banner .db-btn{flex-shrink:0;height:30px;padding:0 13px;border-radius:8px;border:1px solid #046C8C;
  background:#fff;color:#05536B;font-size:11.5px;font-weight:700;cursor:pointer;transition:.14s}
.dates-banner .db-btn:hover{background:#046C8C;color:#fff}

/* Numbered / dated switch at the top of Meet setup's day list. */
.dates-mode{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px;padding:9px 11px;
  border:1px solid var(--bd2);border-radius:9px;background:var(--surf2)}
.dates-mode .dm-state{flex:1;min-width:180px;font-size:11.5px;line-height:1.45;color:var(--tx2)}
.dates-mode .dm-state b{color:var(--tx);font-weight:700}

/* "Day 3" standing in for a date field that would otherwise be fiction. */
.day-num-chip{display:inline-flex;align-items:center;justify-content:center;width:160px;height:32px;
  border-radius:8px;border:1px dashed var(--bd3);background:var(--surf3);
  font-family:'Barlow Condensed',var(--font-ui,inherit);font-weight:700;font-size:15px;
  letter-spacing:.03em;text-transform:uppercase;color:var(--navy)}
.day-num-chip.lg{width:100%;height:40px;font-size:17px;margin-top:2px}

/* Set-the-dates preview: Day N → real date, one row each. */
.sd-list{margin-top:12px;border:1px solid var(--bd);border-radius:9px;overflow:hidden;
  max-height:210px;overflow-y:auto;background:var(--surf2)}
.sd-row{display:flex;align-items:center;gap:10px;padding:7px 12px;border-bottom:1px solid var(--bd)}
.sd-row:last-child{border-bottom:none}
.sd-num{font-family:'Barlow Condensed',var(--font-ui,inherit);font-weight:700;font-size:14px;
  letter-spacing:.03em;text-transform:uppercase;color:var(--navy);width:56px;flex-shrink:0}
.sd-arrow{color:var(--tx3);flex-shrink:0}
.sd-date{font-size:12.5px;font-weight:600;color:var(--tx)}

/* Library front door. */
.lib-newcard{display:flex;align-items:center;gap:13px;width:100%;text-align:left;margin-bottom:12px;
  padding:13px 15px;border:1px solid var(--navy-mid);border-radius:var(--r-lg);
  background:linear-gradient(180deg,#fff,var(--surf2));box-shadow:var(--sh-xs);transition:.14s;cursor:pointer}
.lib-newcard:hover{border-color:var(--navy);box-shadow:var(--sh-md);transform:translateY(-1px)}
.lib-newcard .lnc-plus{flex-shrink:0;width:34px;height:34px;border-radius:9px;background:var(--navy);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:21px;font-weight:600;line-height:1}
.lib-newcard .lnc-txt{display:flex;flex-direction:column;gap:2px;min-width:0}
.lib-newcard .lnc-txt b{font-size:13.5px;font-weight:700;color:var(--tx)}
.lib-newcard .lnc-txt span{font-size:11.5px;line-height:1.45;color:var(--tx2)}

/* New-schedule wizard. */
.nw-src,.nw-when{display:flex;flex-direction:column;gap:5px}
.nw-tplgroup{display:flex;flex-direction:column;gap:5px;margin-top:8px}
.nw-tplhd{font-size:10.5px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;
  color:var(--tx3);padding:2px 2px 1px}
.nw-fixed{font-size:12px;line-height:1.5;color:var(--tx2);padding:9px 11px;border:1px solid var(--bd);
  border-radius:9px;background:var(--surf2)}
.nw-stepper{display:flex;align-items:center;gap:9px}
.nw-step{width:34px;height:34px;border-radius:9px;border:1px solid var(--bd2);background:var(--surf);
  font-size:19px;font-weight:600;line-height:1;color:var(--navy);transition:.14s}
.nw-step:hover{border-color:var(--navy);background:var(--navy-soft)}
.nw-count{font-family:'Barlow Condensed',var(--font-ui,inherit);font-size:26px;font-weight:700;
  color:var(--navy);min-width:34px;text-align:center;line-height:1}
.nw-steplbl{font-size:12px;color:var(--tx2)}
.nw-summary{margin-top:16px;padding:10px 13px;border-radius:9px;background:var(--navy);color:#fff;
  font-family:'Barlow Condensed',var(--font-ui,inherit);font-size:16px;font-weight:600;letter-spacing:.02em}

/* Deck (dark) mode. */
html[data-theme="deck"] .dates-banner{background:rgba(0,154,199,.11);border-color:rgba(0,154,199,.4)}
html[data-theme="deck"] .dates-banner .db-txt b{color:#8FD8ED}
html[data-theme="deck"] .dates-banner .db-txt span,
html[data-theme="deck"] .dates-banner>svg{color:#7FC9E0}
html[data-theme="deck"] .dates-banner .db-btn{background:transparent;color:#8FD8ED;border-color:#4E9BB5}
html[data-theme="deck"] .dates-banner .db-btn:hover{background:#4E9BB5;color:#fff}
html[data-theme="deck"] .day-num-chip,
html[data-theme="deck"] .nw-count,
html[data-theme="deck"] .sd-num{color:#8FC3EA}
html[data-theme="deck"] .lib-newcard{background:var(--surf2)}
html[data-theme="deck"] .lib-newcard .lnc-plus{background:var(--cyan)}
html[data-theme="deck"] .nw-summary{background:var(--cyan)}

/* ════ BLOCK NOTES ════
   A short line that travels with a block — "Deck opens 30 minutes before" —
   instead of being crammed into the block's name. Shown on the working
   timeline for both practice and competition cards; click to edit. */
.sc-note{display:flex;align-items:flex-start;gap:8px;padding:8px 18px;cursor:pointer;
  background:#F7F9FC;border-top:1px solid var(--bd);transition:background .14s}
.sc-note:hover{background:#EFF3F9}
.sc-note-icon{flex-shrink:0;width:14px;height:14px;margin-top:1px;border-radius:3px;
  background:var(--cyan);position:relative}
.sc-note-icon::before,.sc-note-icon::after{content:'';position:absolute;left:3px;right:3px;
  height:1.5px;border-radius:1px;background:#fff}
.sc-note-icon::before{top:4px}
.sc-note-icon::after{top:8px;right:6px}
.sc-note-txt{flex:1;min-width:0;font-size:12px;line-height:1.45;color:var(--tx2);font-weight:500}
.sc-note-tag{flex-shrink:0;font-size:9px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;
  color:#B45309;background:#FEF3C7;border:1px solid #FDE68A;border-radius:5px;padding:1px 6px;margin-top:1px}
/* Staff-only notes read as a held-back aside rather than part of the schedule. */
.sc-note.staff{background:#FFFBEB;border-top-color:#FDE68A}
.sc-note.staff:hover{background:#FEF6DC}
.sc-note.staff .sc-note-icon{background:#D97706}

/* The practice card is denser than the competition card, so the note sits
   tighter under it and lines up with the card's own left padding. */
.pcard .sc-note{padding:7px 16px}

/* Editor: the staff-only switch under the note field. */
.note-staff{display:flex;align-items:center;gap:7px;margin-top:7px;font-size:11.5px;
  line-height:1.4;color:var(--tx2);cursor:pointer;user-select:none}
.note-staff input{flex-shrink:0;margin:0;cursor:pointer}

html[data-theme="deck"] .sc-note{background:rgba(255,255,255,.04);border-top-color:rgba(255,255,255,.09)}
html[data-theme="deck"] .sc-note:hover{background:rgba(255,255,255,.07)}
html[data-theme="deck"] .sc-note-txt{color:#C7D2E0}
html[data-theme="deck"] .sc-note.staff{background:rgba(217,119,6,.13);border-top-color:rgba(253,230,138,.28)}
html[data-theme="deck"] .sc-note.staff:hover{background:rgba(217,119,6,.19)}

/* Older note text found on a block, offered in the editor. Deliberately styled
   as something to check rather than something already true — several of these
   were written against a block name that has since changed. */
.note-old{margin-top:8px;padding:9px 11px;border:1px solid #F0C77E;border-left:3px solid #F5A524;
  border-radius:8px;background:#FFF8EC}
.note-old-hd{font-size:10px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:#8A5A00}
.note-old-txt{font-size:12px;line-height:1.45;color:#5B3D00;margin-top:4px;font-style:italic}
.note-old-warn{font-size:11px;line-height:1.4;color:#8A5A00;margin-top:5px}
.note-old-acts{display:flex;gap:7px;margin-top:9px}
html[data-theme="deck"] .note-old{background:rgba(245,165,36,.12);border-color:rgba(245,165,36,.4)}
html[data-theme="deck"] .note-old-hd,
html[data-theme="deck"] .note-old-warn{color:#F0C77E}
html[data-theme="deck"] .note-old-txt{color:#F5DFB8}

/* ── Event planner — events × days grid ─────────────────────────────── */
.pl-modal{display:flex;flex-direction:column;overflow:hidden}
.pl-modal .pl-body{flex:1;overflow:auto;padding:14px 18px 10px;display:flex;flex-direction:column;gap:10px;min-height:0}
.pl-tools{display:flex;flex-wrap:wrap;gap:8px 18px;align-items:center}
.pl-filters{padding-bottom:4px;border-bottom:1px solid var(--bd)}
.pl-fgroup{display:flex;flex-wrap:wrap;gap:5px;align-items:center}
.pl-fgroup .chip{height:26px;padding:0 10px;font-size:11px}
.pl-flabel{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--tx3);margin-right:3px}
.pl-flabel:empty{display:none}
.pl-spacer{flex:1}
.pl-bulk{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;padding:9px 12px;border-radius:10px;background:var(--navy-soft);border:1px solid var(--navy-mid);font-size:12px}
.pl-bulk-item{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--tx2)}
.pl-bulk-item .fi-sm{height:28px;font-size:11.5px;cursor:pointer}
.pl-scroll{overflow:auto;border:1px solid var(--bd);border-radius:12px;background:var(--surf);min-height:0}
.pl-table{border-collapse:separate;border-spacing:0;min-width:100%;font-size:12px}
.pl-table th,.pl-table td{border-bottom:1px solid var(--bd);border-right:1px solid var(--bd);vertical-align:middle}
.pl-table thead th{position:sticky;top:0;z-index:3;background:var(--surf2);padding:8px 8px 6px;text-align:center;font-weight:600}
.pl-sticky{position:sticky;left:0;z-index:2;background:var(--surf);min-width:168px;text-align:left;padding:5px 10px}
.pl-table thead .pl-sticky{z-index:4;background:var(--surf2)}
.pl-th-ev{font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--tx3)}
.pl-th-day{min-width:118px}
.pl-th-day.cur{box-shadow:inset 0 3px 0 var(--navy)}
.pl-th-day.locked{opacity:.6}
.pl-th-stat{min-width:104px;font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--tx3)}
.pl-daybtn{background:transparent;border:0;cursor:pointer;display:flex;flex-direction:column;align-items:center;line-height:1.1;color:var(--tx);padding:2px 6px;border-radius:7px;width:100%}
.pl-daybtn:hover{background:var(--navy-soft)}
.pl-wd{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--tx3)}
.pl-num{font-family:'Barlow Condensed',sans-serif;font-size:19px;font-weight:700;color:var(--navy)}
.pl-daycounts{display:flex;flex-wrap:wrap;gap:3px;justify-content:center;margin-top:4px;min-height:16px}
.pl-cnt{font-size:9.5px;font-weight:700;padding:1px 5px;border-radius:5px;background:var(--surf3);color:var(--tx2);font-variant-numeric:tabular-nums}
.pl-cnt.r-prelim{background:var(--prelim-bg);color:var(--prelim)}
.pl-cnt.r-semifinal{background:var(--wu-bg);color:var(--wu)}
.pl-cnt.r-final{background:var(--final-bg);color:var(--final)}
.pl-cnt.r-qualifier{background:var(--qual-bg);color:var(--qual)}
.pl-cnt.empty{font-weight:500;color:var(--tx3)}
.pl-cnt.lock{background:var(--surf3);color:var(--tx3)}
.pl-cnt.brd{background:var(--surf);border:1px solid var(--bd2);color:var(--tx2);font-weight:600}
.pl-cnt.hrs{background:var(--navy-soft);color:var(--navy)}
.pl-cnt.hrs.est{border:1px dashed var(--navy)}
.pl-cnt.clash{background:#FEF3C7;color:#92400E}
html[data-theme="deck"] .pl-cnt.clash{background:#3A2A0C;color:#FCD34D}
.pl-cell.clash{background:#FFFBEB;box-shadow:inset 0 0 0 1.5px #F59E0B}
html[data-theme="deck"] .pl-cell.clash{background:#2A2110}
.pl-status.warn{color:#B45309}
.pl-fold{background:transparent;border:0;cursor:pointer;font:inherit;font-size:11px;font-weight:600;color:var(--navy);padding:2px 6px;border-radius:6px}
.pl-fold:hover{background:var(--surf)}
.pl-grp td{background:var(--navy-soft);padding:6px 10px;font-family:'Barlow Condensed',sans-serif;font-size:14px;font-weight:700;letter-spacing:.02em;color:var(--navy)}
.pl-grp .pl-sticky{background:#EEF0F7}
html[data-theme="deck"] .pl-grp .pl-sticky{background:#1B2439}
.pl-row.sel td{background:rgba(0,154,199,.06)}
.pl-row.sel .pl-sticky{background:#EAF6FB}
html[data-theme="deck"] .pl-row.sel .pl-sticky{background:#12283A}
.pl-chk{display:flex;align-items:center;gap:8px;cursor:pointer;user-select:none}
.pl-chk input{width:15px;height:15px;accent-color:var(--navy);cursor:pointer;margin:0}
.pl-name{font-weight:600;white-space:nowrap}
.pl-name em{font-style:normal;font-weight:500;font-size:10.5px;color:var(--tx3)}
.pl-cell{padding:4px 6px;text-align:center;white-space:nowrap}
.pl-cell.locked{background:var(--surf3)}
.pl-chip{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;min-width:30px;height:30px;margin:1px;padding:0 4px;border-radius:7px;border:1.5px dashed var(--bd3);background:transparent;color:var(--tx3);font-size:11px;font-weight:800;line-height:1;cursor:pointer;transition:.1s;font-variant-numeric:tabular-nums}
.pl-chip:hover:not(:disabled){border-style:solid;background:var(--surf2);color:var(--tx)}
.pl-chip:disabled{cursor:not-allowed;opacity:.45}
.pl-chip.away{border-style:dotted;color:var(--tx3);opacity:.55}
.pl-chip.on{border-style:solid;color:#fff}
.pl-chip.on.r-prelim{background:var(--prelim);border-color:var(--prelim)}
.pl-chip.on.r-semifinal{background:var(--wu);border-color:var(--wu)}
.pl-chip.on.r-final{background:var(--final);border-color:var(--final)}
.pl-chip.on.r-qualifier{background:var(--qual);border-color:var(--qual)}
.pl-chip.on:hover:not(:disabled){filter:brightness(1.08);color:#fff}
.pl-chip-s{font-size:8.5px;font-weight:600;opacity:.9;margin-top:1px}
.pl-chip.demo{cursor:default;height:22px;min-width:22px;vertical-align:middle;margin:0 2px 0 8px}
.pl-statcell{padding:4px 8px;text-align:left;white-space:nowrap}
.pl-status{font-size:11px;font-weight:600}
.pl-status.ok{color:var(--ok)}
.pl-status.part{color:var(--warn)}
.pl-status.none{color:var(--tx3);font-weight:500}
.pl-status.bad{color:var(--red)}
.pl-legend{font-size:11px;color:var(--tx3);display:flex;flex-wrap:wrap;align-items:center;gap:2px 6px;padding:2px 2px 0}
@media (max-width:720px){
  .pl-modal{width:100vw;max-width:100vw;height:100vh;max-height:100vh;border-radius:0}
  .pl-modal .pl-body{padding:10px}
  .pl-sticky{min-width:130px;padding:5px 7px}
  .pl-name{white-space:normal;font-size:11.5px}
  .pl-th-day{min-width:100px}
  .pl-chip{min-width:36px;height:36px;font-size:13px}
  .pl-chip-s{font-size:9.5px}
}
