:root{
  --bg:#111111; --surface:#1C1C1C; --surface-2:#2A2A2A; --surface-3:#232323;
  --text:#FFFFFF; --t2:#AAAAAA; --t3:#666666; --line:#333333;
  --lime:#AADD44; --red:#CC2222; --amber:#F5A623; --blue:#3B9EE8; --gray:#888888;
  --ff:"Helvetica Neue",Helvetica,Arial,system-ui,sans-serif;
}
.roster *{box-sizing:border-box;margin:0;padding:0}

/* ===== ROSTER ===== */
.roster{position:relative;height:100%;display:flex;flex-direction:column;background:var(--bg);
  color:var(--text);overflow:hidden;font-family:var(--ff);-webkit-font-smoothing:antialiased}
.d-comfortable{--rh:60px;--rowpad:8px;--av:38px;--ring:44px;--fs-name:16px}
.d-compact{--rh:48px;--rowpad:5px;--av:32px;--ring:40px;--fs-name:14.5px}
.m-tablet.l-lanes{--gcols:46px 38px minmax(0,1fr) 82px 124px 86px 44px;--gap:12px}
.m-tablet.l-rail{--gcols:56px 38px minmax(0,1fr) 82px 124px 86px 44px;--gap:12px}
.m-tablet.l-condensed{--gcols:44px 34px minmax(0,1fr) 132px 84px 40px;--gap:10px}
.m-phone{--gcols:42px 32px minmax(0,1fr) 78px 40px;--gap:10px;--av:34px;--ring:42px;--fs-name:15px}

/* header */
.rhead{flex:0 0 auto;display:flex;align-items:center;gap:14px;padding:14px 16px;border-bottom:1px solid var(--line)}
.backbtn{background:var(--surface);border:1px solid var(--line);color:var(--t2);border-radius:9px;
  padding:10px 13px;font-weight:700;font-size:13px;cursor:pointer;white-space:nowrap;font-family:var(--ff)}
.backbtn:hover{border-color:var(--gray);color:var(--text)}
.rtitle{min-width:0}
.rt-row{display:flex;align-items:center;gap:9px}
.rt-nm{font-size:19px;font-weight:800;letter-spacing:-.3px;white-space:nowrap}
.rt-live{font-size:11px;color:var(--t3);font-weight:700}
.rt-live.on{font-size:10px;letter-spacing:.5px;color:#15200a;background:var(--lime);padding:2px 7px;border-radius:5px}
.rt-meta{font-size:12px;color:var(--t3);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rhead-r{margin-left:auto;display:flex;align-items:center;gap:12px}
.count{display:flex;align-items:baseline;gap:5px;white-space:nowrap}
.count b{font-size:17px;font-weight:800}
.count span{font-size:11px;color:var(--t3);font-weight:600}
.addbtn{background:var(--surface-2);border:1px solid var(--line);color:var(--text);border-radius:9px;
  padding:10px 13px;font-weight:700;font-size:13px;cursor:pointer;font-family:var(--ff)}
.addbtn:hover{border-color:var(--lime);color:var(--lime)}

/* legend */
.legend{flex:0 0 auto;display:flex;align-items:center;gap:16px;padding:8px 16px;border-bottom:1px solid var(--line);
  background:var(--surface);font-size:11px;color:var(--t2)}
.lg{display:flex;align-items:center;gap:6px;font-weight:600}
.sw{width:11px;height:11px;border-radius:3px}
.sw.enr{background:var(--surface-3);box-shadow:inset 0 0 0 1px var(--line)}
.sw.fir{background:var(--lime)}
.sw.tri{background:var(--blue)}
.season{margin-left:auto;color:var(--t3);font-weight:600;white-space:nowrap}

/* column header */
.colhead{flex:0 0 auto;display:grid;grid-template-columns:var(--gcols);column-gap:var(--gap);
  padding:9px 17px 5px;color:var(--t3);font-size:9.5px;letter-spacing:.5px;text-transform:uppercase;font-weight:700}
.colhead .ch-str{justify-self:start}
.colhead .ch-cls{justify-self:end}

/* list */
.rlist{flex:1;overflow-y:auto;padding:12px 16px 16px;display:flex;flex-direction:column;gap:8px}
.m-phone .rlist{padding:10px 12px 14px;gap:7px}
.rlist-end{text-align:center;color:var(--t3);font-size:10.5px;padding:12px 0 4px;letter-spacing:.2px;flex:0 0 auto}

/* ROW */
.row{position:relative;display:grid;grid-template-columns:var(--gcols);column-gap:var(--gap);
  align-items:center;align-content:center;min-height:var(--rh);flex:0 0 auto;
  background:var(--surface);border:1px solid var(--line);border-radius:12px;overflow:hidden;transition:border-color .12s}
.row:hover{border-color:#3d3d3d}
.accent{position:absolute;left:0;top:0;bottom:0;width:4px;background:transparent;z-index:3}
.row.first{background:linear-gradient(90deg,rgba(170,221,68,.13),rgba(170,221,68,.035));border-color:rgba(170,221,68,.5)}
.row.first .accent{background:var(--lime)}
.row.trial{background:linear-gradient(90deg,rgba(59,158,232,.13),rgba(59,158,232,.035));border-color:rgba(59,158,232,.5)}
.row.trial .accent{background:var(--blue)}
/* first-2-weeks enrolled member — same flag system as trials */
.row.newwin{background:linear-gradient(90deg,rgba(59,158,232,.1),rgba(59,158,232,.028));border-color:rgba(59,158,232,.4)}
.row.newwin .accent{background:var(--blue)}

.check{display:flex;align-items:center;justify-content:center;background:none;border:0;cursor:pointer;height:100%;padding:0}
.l-rail .check{background:rgba(0,0,0,.28);border-right:1px solid var(--line)}
.ring{width:var(--ring);height:var(--ring);border-radius:50%;border:2px solid var(--t3);
  display:flex;align-items:center;justify-content:center;transition:.1s}
.check:hover .ring{border-color:var(--t2)}
.row.checked .ring{border-color:var(--lime);background:var(--lime)}
.tick{color:#15200a;font-weight:900;font-size:calc(var(--ring)*.5);line-height:1}

.av{width:var(--av);height:var(--av);border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-weight:800;font-size:calc(var(--av)*.34);letter-spacing:.3px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.08);flex:0 0 auto}

.lane-name{min-width:0;padding:var(--rowpad) 0}
.nmrow{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.who{background:none;border:0;color:var(--text);font-weight:700;font-size:var(--fs-name);letter-spacing:-.2px;
  cursor:pointer;padding:0;display:inline-flex;align-items:center;gap:3px;white-space:nowrap;font-family:var(--ff)}
.who .chev{color:var(--t3);font-weight:600;font-size:1.15em}
.who:hover{color:var(--lime)}
.att{font-size:12px;color:var(--t2);font-weight:600;white-space:nowrap}
.lane-cls{display:flex;align-items:center;justify-content:flex-end}
.subline{font-size:12px;color:var(--t2);margin-top:3px}

.rankchip{font-size:10.5px;font-weight:800;letter-spacing:.4px;text-transform:uppercase;
  padding:3px 9px;border-radius:5px;border:1.5px solid var(--bc);background:transparent;white-space:nowrap}
.lane-rank{display:flex;align-items:center}

.stripebtn{background:var(--lime);color:#15200a;border:0;border-radius:8px;padding:8px 12px;font-weight:800;
  font-size:12px;cursor:pointer;white-space:nowrap;font-family:var(--ff);min-height:34px;box-shadow:0 1px 0 rgba(0,0,0,.25)}
.stripebtn:hover{filter:brightness(1.07)}
.stripebtn:active{transform:translateY(1px)}
.shortchip{border:1.5px dashed var(--amber);color:var(--amber);background:transparent;border-radius:8px;
  padding:6px 9px;font-weight:800;font-size:11.5px;white-space:nowrap}

.tag{font-size:10px;font-weight:800;letter-spacing:.3px;text-transform:uppercase;padding:3px 8px;border-radius:5px;white-space:nowrap}
.tag.first{background:var(--lime);color:#15200a}
.tag.trial{background:var(--blue);color:#06223a}
.tag.newwin{background:var(--blue);color:#06223a}

.lane-str{display:flex;align-items:center}
.stripes{display:flex;gap:6px;align-items:center}
.stbox{width:30px;height:19px;border-radius:4px;display:flex;align-items:center;justify-content:center;box-sizing:border-box;flex:0 0 auto}
.st-locked{opacity:.24;border:1px solid rgba(255,255,255,.15)}
.st-short{width:auto;min-width:32px;padding:0 5px;background:transparent;border:1.5px dashed var(--amber);
  color:var(--amber);font-size:8.5px;font-weight:800;letter-spacing:.2px;white-space:nowrap}
.st-closed{background:transparent;opacity:.3;border:1px dotted var(--t3)}
.stchk{font-size:12px;font-weight:900;line-height:1}

.more{background:none;border:0;color:var(--t2);font-size:20px;cursor:pointer;border-radius:8px;
  height:38px;width:38px;justify-self:center;align-self:center;font-family:var(--ff)}
.more:hover{color:var(--lime);background:rgba(255,255,255,.05)}

.fbflag{grid-column:1/-1;display:flex;align-items:center;gap:8px;margin:0 10px 9px 56px;padding:7px 10px;
  background:rgba(59,158,232,.1);border:1px solid rgba(59,158,232,.28);border-radius:8px;font-size:11.5px;color:#9fd0f5}
.m-phone .fbflag{margin-left:46px}
.fb-ic{flex:0 0 auto}
.fb-tx{line-height:1.35}

.grpdiv{display:flex;align-items:center;gap:11px;margin:8px 2px 2px;flex:0 0 auto}
.grpdiv .ln{flex:1;height:1px;background:var(--line)}
.grpdiv .lab{font-size:9.5px;letter-spacing:.5px;text-transform:uppercase;color:var(--t3);font-weight:700}

/* phone header tweaks */
.m-phone .rhead{padding:12px}
.m-phone .rt-nm{font-size:17px}
.m-phone .backbtn{padding:9px 11px;font-size:12px}
.m-phone .addbtn{padding:9px 12px}
.m-phone .legend{padding:7px 12px;font-size:10.5px}

/* ===== class slide-over ===== */
.menu-scrim{position:absolute;inset:0;background:rgba(0,0,0,.55);z-index:40;display:flex;animation:fade .15s ease}
.menu{width:330px;max-width:86%;height:100%;background:var(--surface);border-right:1px solid var(--line);
  display:flex;flex-direction:column;box-shadow:24px 0 70px rgba(0,0,0,.55);animation:slideL .22s cubic-bezier(.2,.7,.2,1)}
@keyframes slideL{from{transform:translateX(-100%)}to{transform:none}}
@keyframes fade{from{opacity:0}to{opacity:1}}
.menu-head{display:flex;align-items:center;padding:16px;border-bottom:1px solid var(--line)}
.menu-t{font-size:15px;font-weight:800}
.menu-d{font-size:11px;color:var(--t3);margin-top:2px}
.menu-x{margin-left:auto;background:none;border:0;color:var(--t3);font-size:18px;cursor:pointer;font-family:var(--ff)}
.menu-list{overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:8px}
.menu-sec{font-size:9.5px;letter-spacing:.5px;text-transform:uppercase;color:var(--t3);font-weight:700;padding:8px 2px 0}
.mcls{text-align:left;background:var(--surface-2);border:1px solid var(--line);border-radius:10px;padding:11px 12px;
  cursor:pointer;font-family:var(--ff);color:var(--text);transition:.12s}
.mcls:hover{border-color:var(--gray)}
.mcls.live{border-color:var(--lime);box-shadow:inset 0 0 0 1px var(--lime)}
.mcls.active{background:var(--surface-3)}
.mcls.past{opacity:.5}
.mcls-l{display:flex;align-items:center;gap:8px}
.mcls-tm{font-size:12px;font-weight:700;color:var(--t2)}
.mcls-now{font-size:9px;font-weight:800;letter-spacing:.5px;color:#15200a;background:var(--lime);padding:1px 6px;border-radius:4px}
.mcls-nm{font-size:15px;font-weight:800;margin-top:3px;letter-spacing:-.2px;display:flex;align-items:center;gap:8px}
.mcls-view{font-size:9px;font-weight:700;color:var(--lime);border:1px solid var(--lime);border-radius:4px;padding:1px 5px;letter-spacing:.3px}
.mcls-mt{display:flex;align-items:center;gap:7px;font-size:11px;color:var(--t3);margin-top:6px;flex-wrap:wrap}
.mcls-sep{opacity:.5}
.mcls-cap{margin-left:auto;font-weight:700;color:var(--t2)}
.mcls-cap.full{color:var(--amber)}
.mcls-dots{display:inline-flex;align-items:center;gap:3px;color:var(--lime);font-weight:700}
.mcls-dots .dot{width:6px;height:6px;border-radius:50%;background:var(--lime)}

/* ===== praise / feedback sheet ===== */
.sheet-scrim{position:absolute;inset:0;background:rgba(0,0,0,.55);z-index:50;display:flex;align-items:flex-end;justify-content:center;animation:fade .15s}
.sheet{width:100%;max-width:640px;background:var(--surface);border:1px solid var(--line);border-bottom:0;
  border-radius:18px 18px 0 0;box-shadow:0 -24px 70px rgba(0,0,0,.55);animation:slideUp .24s cubic-bezier(.2,.7,.2,1);
  max-height:94%;display:flex;flex-direction:column}
@keyframes slideUp{from{transform:translateY(100%)}to{transform:none}}
.sheet-grab{width:38px;height:4px;border-radius:3px;background:var(--line);margin:9px auto 2px}
.sheet-head{display:flex;align-items:center;gap:12px;padding:8px 16px 14px;border-bottom:1px solid var(--line)}
.sheet-av{width:42px;height:42px;border-radius:11px;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:15px}
.sheet-nm{font-size:17px;font-weight:800}
.sheet-sub{font-size:11.5px;color:var(--t3)}
.sheet-x{margin-left:auto;background:none;border:0;color:var(--t3);font-size:18px;cursor:pointer;font-family:var(--ff)}
.fork{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--line)}
.fork-b{background:var(--surface);border:0;padding:13px;cursor:pointer;font-family:var(--ff);color:var(--text);
  display:flex;flex-direction:column;align-items:center;gap:3px;font-weight:700;font-size:13px}
.fork-ic{font-size:19px}
.fork-d{font-size:9.5px;color:var(--t2);font-weight:600}
.fork-b.praise.on .fork-d,.fork-b.fb.on .fork-d{color:rgba(255,255,255,.82)}
.fork-b.praise.on{background:rgba(170,221,68,.12);color:var(--lime)}
.fork-b.fb.on{background:rgba(59,158,232,.12);color:var(--blue)}
.dedup{display:flex;gap:8px;align-items:flex-start;padding:10px 16px;background:rgba(170,221,68,.1);
  border-bottom:1px solid var(--line);font-size:11.5px;color:rgba(255,255,255,.85)}
.dedup-ck{color:var(--lime);font-weight:900}
.sheet-body{padding:14px 16px;display:flex;flex-direction:column;gap:10px;overflow-y:auto}
.grp{font-size:9.5px;letter-spacing:.4px;text-transform:uppercase;color:var(--t3);font-weight:700;display:flex;align-items:center;gap:6px}

/* FD-CP267 — the quick-tap phrase editors. Scoped under the sheet, low-contrast until
   hovered: this is a config affordance sitting on an operational surface, so it must be
   findable without competing with the chips an instructor is actually here to tap. */
.chipgear{background:none;border:0;color:var(--t3);cursor:pointer;font-size:12px;line-height:1;padding:2px 4px;border-radius:4px;opacity:.55}
.chipgear:hover{opacity:1;background:rgba(255,255,255,.06)}
.chipedit{border:1px solid var(--line);border-radius:10px;padding:10px;margin:2px 0 8px;background:rgba(255,255,255,.02)}
.chipedit-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}
.chipedit-h .t{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.4px}
.chipedit-h .x{background:none;border:0;color:var(--t3);cursor:pointer;font-size:13px}
.chipedit-note{font-size:10.5px;color:var(--t3);line-height:1.4;margin-bottom:8px}
.chipedit-row{display:flex;gap:6px;margin-bottom:6px}
.chipedit-row input{flex:1;min-width:0;background:var(--bg2,#1a1a1f);border:1px solid var(--line);border-radius:7px;color:#fff;font-size:12px;padding:6px 8px}
.chipedit-row .rm,.chipedit-row .add{width:28px;flex-shrink:0;background:none;border:1px solid var(--line);border-radius:7px;color:var(--t3);cursor:pointer;font-size:14px}
.chipedit-row .add:disabled{opacity:.4;cursor:default}
.chipedit-ok{font-size:10px;color:var(--t3)}
.chipedit-err{font-size:10.5px;color:var(--red,#CC2222);line-height:1.4}
.chiprow{display:flex;flex-wrap:wrap;gap:7px}
.pchip{border:1px solid var(--line);background:var(--surface-2);color:var(--text);border-radius:18px;
  padding:8px 13px;font-size:12.5px;font-weight:600;cursor:pointer;font-family:var(--ff);white-space:nowrap}
.pchip:hover{border-color:var(--gray)}
.pchip.praise.pick{background:var(--lime);color:#15200a;border-color:var(--lime)}
.pchip.fb.pick{background:var(--blue);color:#06223a;border-color:var(--blue)}
.badgepick{display:flex;gap:10px;flex-wrap:wrap}
.bdg{width:60px;background:none;border:0;cursor:pointer;font-family:var(--ff)}
.bdg-ico{width:46px;height:46px;border-radius:12px;background:var(--surface-2);border:1px solid var(--line);
  display:flex;align-items:center;justify-content:center;font-size:22px;margin:0 auto}
.bdg.pick .bdg-ico{border-color:var(--lime);background:rgba(170,221,68,.15)}
.bdg-cap{display:block;font-size:9px;color:var(--t2);margin-top:4px;font-weight:600}
.freetext{width:100%;border:1px solid var(--line);background:var(--bg);color:var(--text);border-radius:9px;
  padding:10px 12px;font-family:var(--ff);font-size:13px;resize:none;height:58px;outline:none}
.freetext:focus{border-color:var(--gray)}
.blockpick{height:30px;border:1px solid var(--line);background:var(--surface-2,#20242c);color:var(--text,#e8ecf2);font-family:var(--ff);font-size:12px;border-radius:7px;padding:0 8px;cursor:pointer;max-width:150px}
.blockpick:hover{border-color:var(--lime)}
.sheet-remove{padding:10px 16px;border-top:1px solid var(--line);display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.sheet-remove .rm-link{background:none;border:none;color:var(--red);font:inherit;font-size:12px;padding:4px 2px;cursor:pointer;opacity:.85}
.sheet-remove .rm-link:hover{opacity:1;text-decoration:underline}
.sheet-remove .rm-q{font-size:12px;color:var(--t2,#c8d0dc)}
.sheet-remove .rm-acts{margin-left:auto;display:flex;gap:8px}
.sheet-remove .rm-cancel{background:none;border:1px solid var(--line);color:inherit;font:inherit;font-size:12px;padding:5px 12px;border-radius:6px;cursor:pointer}
.sheet-remove .rm-go{background:var(--red);border:1px solid var(--red);color:#fff;font:inherit;font-size:12px;padding:5px 12px;border-radius:6px;cursor:pointer}
.sheet-remove .rm-go:disabled,.sheet-remove .rm-cancel:disabled{opacity:.5;cursor:default}
.sheet-foot{padding:13px 16px;border-top:1px solid var(--line);display:flex;align-items:center;gap:10px}
.foot-hint{font-size:11px;color:var(--t3);flex:1;line-height:1.3}
.send{border:0;border-radius:9px;padding:11px 18px;font-weight:800;font-size:13px;cursor:pointer;font-family:var(--ff)}
.send:disabled{opacity:.4;cursor:default}
.send.praise{background:var(--lime);color:#15200a}
.send.fb{background:var(--blue);color:#06223a}
.send.warn{background:var(--amber);color:#3a2a00}

/* ===== toast ===== */
.toast{position:absolute;left:50%;bottom:20px;transform:translateX(-50%);background:#000;border:1px solid var(--line);
  color:var(--text);padding:11px 16px;border-radius:12px;font-size:13px;font-weight:600;display:flex;align-items:center;
  gap:16px;z-index:60;box-shadow:0 14px 34px rgba(0,0,0,.55);animation:toastIn .2s;max-width:90%}
.toast-undo{background:none;border:0;color:var(--lime);font-weight:800;cursor:pointer;font-family:var(--ff);font-size:13px}
@keyframes toastIn{from{opacity:0;transform:translate(-50%,10px)}to{opacity:1;transform:translate(-50%,0)}}

/* scrollbars */
.rlist::-webkit-scrollbar,.menu-list::-webkit-scrollbar,.sheet-body::-webkit-scrollbar{width:8px}
.rlist::-webkit-scrollbar-thumb,.menu-list::-webkit-scrollbar-thumb,.sheet-body::-webkit-scrollbar-thumb{
  background:var(--surface-2);border-radius:5px;border:2px solid var(--bg)}

/* FD-CP239 — why a student has no resolvable block (replaces the block picker) */
.roster .blocknote{
  font-size:11px;color:var(--m3-amber,#F5A623);max-width:340px;line-height:1.35;
  border:1px solid rgba(245,166,35,.35);border-radius:6px;padding:3px 8px
}

/* FD-CP242/244 — stripe availability. Colour = earnable; grey = not this one. */
.roster .stbox.st-locked{background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.14)}
.roster .stbox.st-closed{background:rgba(255,255,255,.05);border:1px dotted rgba(255,255,255,.22)}
.roster .seasonwk{font-size:11.5px;color:var(--m3-text-2);white-space:nowrap}
