/* ============================================================
   SHORELINE EVENT HUB
   Colour: Shoreline College Identity Guide (Comms & Marketing)
   Type:   Libre Franklin (for ITC Franklin Gothic)
           EB Garamond   (for Adobe Garamond)
   ============================================================ */

:root{
  /* — Official brand palette (Shoreline College Identity Guide) — */
  --shoreline-green:#00685E;   /* PMS 329C  — primary */
  --dark-blue:#00629B;         /* PMS 3015C */
  --light-blue:#00B0B9;        /* PMS 7466C */
  --light-green:#43B02A;       /* PMS 361C  */
  --golden-yellow:#FFB500;     /* PMS 7549C */
  --orange:#DC4405;            /* PMS 1665C */
  --athletics-green:#00573F;   /* PMS 7484C */
  --athletics-gold:#F0B323;    /* PMS 7409C */

  /* — Green ramp, anchored on Shoreline Green — */
  --brand-50:#F0F6F4;
  --brand-100:#DCEBE7;
  --brand-200:#B8D7D0;
  --brand-300:#7FB8AE;
  --brand-400:#3C9086;
  --brand-500:#0F7A6F;
  --brand-600:#00685E;         /* the official green */
  --brand-700:#005A51;
  --brand-800:#00473F;
  --brand-900:#00332D;

  /* — Paper-white surfaces — */
  --bg-0:#F4F7F5;              /* sidebar */
  --bg-1:#FAFBFA;              /* page */
  --bg-2:#FFFFFF;              /* cards, panels */
  --bg-3:#F3F6F4;              /* hover */
  --bg-4:#E8EEEB;              /* pressed / tracks */
  --line:#E2E9E5;
  --line-2:#CFDAD5;

  --txt-1:#152522;
  --txt-2:#51635E;
  --txt-3:#66766F;

  /* status — muted so nothing glows */
  --ok:#2E7D32;
  --warn:#9A6000;
  --bad:#C03A10;
  --info:#00629B;

  /* booking types — see the .bk rules below */
  --rental:#6B4E86;

  --r-sm:5px; --r-md:8px; --r-lg:11px; --r-xl:14px;
  --sh-1:0 1px 2px rgba(20,45,40,.06);
  --sh-2:0 2px 8px rgba(20,45,40,.08);
  --sh-3:0 12px 32px -8px rgba(20,45,40,.18);
  --sans:"Libre Franklin",Calibri,"Segoe UI",system-ui,sans-serif;
  --serif:"EB Garamond",Cambria,Garamond,serif;
  --mono:var(--sans);          /* no developer-console monospace */
  --num:"Libre Franklin",Calibri,system-ui,sans-serif;

  /* ── Light mode: booking types, card internals, toggles ── */
  --rent-wash:#E9F5E0; --rent-wash-hi:#DEEFD0; --rent-bar:#43B02A;
  --rent-fg:#2F6B1C;   --rent-br:#C2E0B2;      --rent-bg:#EDF7E6;
  /* college is purple: gold read as "pending", teal sat too close to department blue */
  --coll-wash:#F2EDFA; --coll-wash-hi:#E8DFF6; --coll-bar:#7E57C2;
  --coll-fg:#5B3A9E;   --coll-br:#D6C8EE;      --coll-bg:#F4EFFC;
  /* status: pending is orange, cancelled is red — the same in the list, the panel and the bar */
  --pend-wash:#FFF1E0; --pend-wash-hi:#FFE6CC; --pend-bar:#F28A1A; --pend-br:#F6C58C;
  --pend-fg:#9A4B00;   --pend-solid:#B65A00;
  --dept-wash:#E4EFF8; --dept-wash-hi:#D6E6F4; --dept-bar:#00629B;
  --dept-fg:#00548A;   --dept-br:#BBD6E8;      --dept-bg:#EDF4F9;
  /* cancelled overrides the booking colour — it is the only thing you need to know */
  --canc-wash:#FDECEC; --canc-wash-hi:#FADADA; --canc-bar:#D32F2F; --canc-fg:#B71C1C; --canc-solid:#C62828;

  --card-txt-1:#31423D; --card-txt-2:#5A6A64;
  --card-track:rgba(21,37,34,.10);
  --card-datebg:rgba(255,255,255,.72);
  --card-chip-bg:rgba(255,255,255,.66);
  --card-chip-bg-strong:rgba(255,255,255,.82);

  --stog-on-fg:#1F6B23; --stog-on-br:#A8D6AA; --stog-on-bg:#EAF6EA;
  --stog-on-bg-hi:#DDF0DE; --stog-on-fill:#2E7D32;
  --stog-pd-fg:#8A5600; --stog-pd-br:#E8C88A; --stog-pd-bg:#FDF3E0;
  --stog-pd-bg-hi:#FAEACB;

  --sidebar-bg:var(--brand-600);
  --sidebar-line:var(--brand-700);
  --scrim:rgba(20,45,40,.28);
  --scrim-strong:rgba(20,45,40,.34);

  --sidebar-w:264px;
  --panel-w:min(560px,100vw);
  --ease:cubic-bezier(.32,.72,0,1);
}

*,*::before,*::after{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0; background:var(--bg-1); color:var(--txt-1);
  font-family:var(--sans); font-size:14px; line-height:1.5;
  -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
  overflow:hidden;
}
h1,h2,h3,h4{margin:0; font-weight:650; letter-spacing:-.018em; line-height:1.15}
p{margin:0}
button,input,select,textarea{font:inherit; color:inherit}
button{background:none;border:0;cursor:pointer}
a{color:var(--brand-600);text-decoration:none}
a:hover{text-decoration:underline}
[hidden]{display:none!important}
.ico{width:17px;height:17px;flex:none;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
::selection{background:var(--brand-100);color:var(--brand-900)}

:where(button,input,select,textarea,a,[tabindex]):focus-visible{
  outline:2px solid var(--brand-600); outline-offset:2px; border-radius:var(--r-sm);
}

/* scrollbars */
*::-webkit-scrollbar{width:10px;height:10px}
*::-webkit-scrollbar-track{background:transparent}
*::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:9px;border:3px solid transparent;background-clip:content-box}
*::-webkit-scrollbar-thumb:hover{background:var(--line-2);background-clip:content-box;border:3px solid transparent}

/* ══════════════ BOOT ══════════════ */
.boot{position:fixed;inset:0;display:grid;place-items:center;background:var(--bg-1);z-index:200}
.boot__spin{width:30px;height:30px;border:2.5px solid var(--line);border-top-color:var(--brand-600);border-radius:50%;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* ══════════════ GATE ══════════════ */
.gate{position:fixed;inset:0;display:grid;place-items:center;padding:24px;overflow:auto;background:var(--bg-0);z-index:100}
.gate__bg{position:absolute;inset:0;overflow:hidden}
.gate__waves{position:absolute;inset:0;width:100%;height:100%;opacity:.5}
.gate__bg::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(to bottom,var(--brand-50),var(--bg-1) 55%);
}
.gate__card{
  position:relative;width:100%;max-width:398px;padding:40px 36px 30px;
  background:var(--bg-2);
  border:1px solid var(--line-2);border-radius:var(--r-xl);
  box-shadow:var(--sh-3);
  animation:rise .5s var(--ease) both;
}
@keyframes rise{from{opacity:0;transform:translateY(14px) scale(.985)}}
.gate__mark{display:grid;place-items:center;width:64px;height:64px;margin:0 auto 20px;
  background:var(--brand-50);border:1px solid var(--brand-100);border-radius:var(--r-lg)}
.gate__title{text-align:center;font-size:26px;letter-spacing:-.026em}
.gate__title span{font-family:var(--serif);font-style:italic;font-weight:500;color:var(--brand-600);letter-spacing:-.01em}
.gate__sub{text-align:center;margin-top:7px;color:var(--txt-3);font-size:12.5px;letter-spacing:.05em;text-transform:uppercase}
.gate__form{margin-top:26px;display:grid;gap:15px}
.gate__error{color:var(--bad);font-size:13px;text-align:center;margin-top:-4px}
.gate__foot{margin-top:24px;text-align:center;color:var(--txt-3);font-size:11.5px}

/* ══════════════ FORM PRIMITIVES ══════════════ */
.field{display:grid;gap:7px}
.field__label{font-size:12px;font-weight:600;color:var(--txt-2);letter-spacing:.015em}
.field__hint{font-size:11.5px;color:var(--txt-3)}
.field__wrap{position:relative;display:flex}
.field__eye{position:absolute;right:9px;top:50%;transform:translateY(-50%);color:var(--txt-3);padding:5px;border-radius:6px}
.field__eye:hover{color:var(--txt-1);background:var(--bg-4)}

.input,.select,.textarea{
  width:100%;padding:9px 12px;background:var(--bg-1);color:var(--txt-1);
  border:1px solid var(--line-2);border-radius:var(--r-sm);
  transition:border-color .15s,box-shadow .15s,background .15s;
}
.input::placeholder,.textarea::placeholder{color:var(--txt-3)}
.input:hover,.select:hover,.textarea:hover{border-color:var(--brand-800)}
.input:focus,.select:focus,.textarea:focus{
  outline:0;border-color:var(--brand-600);background-color:var(--bg-2);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--brand-600) 24%,transparent);
}
.textarea{resize:vertical;min-height:76px;line-height:1.55}
.select{appearance:none;padding-right:32px;cursor:pointer;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%237C8C87' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 9px center;background-size:15px}
input,textarea,select{color-scheme:light}

.check{display:flex;align-items:center;gap:9px;cursor:pointer;font-size:13.5px;color:var(--txt-2);user-select:none}
.check input{width:16px;height:16px;accent-color:var(--brand-600);cursor:pointer;flex:none}
.check:hover{color:var(--txt-1)}

/* ══════════════ BUTTONS ══════════════ */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:7px;
  padding:8px 14px;border-radius:var(--r-sm);font-size:13.5px;font-weight:600;
  border:1px solid transparent;white-space:nowrap;
  transition:background .14s,border-color .14s,color .14s,transform .08s,box-shadow .14s;
}
.btn:active{transform:translateY(.5px)}
.btn[disabled]{opacity:.5;pointer-events:none}
.btn--primary{background:var(--brand-600);color:#fff;border-color:var(--brand-600);box-shadow:var(--sh-1)}
.btn--primary:hover{background:var(--brand-700);border-color:var(--brand-700)}
.btn--ghost{color:var(--txt-2);border-color:var(--line-2);background:var(--bg-2)}
.btn--ghost:hover{color:var(--txt-1);background:var(--bg-3);border-color:var(--line-2)}
.btn--quiet{color:var(--txt-2)}
.btn--quiet:hover{color:var(--txt-1);background:var(--bg-3)}
.btn--danger{color:var(--bad);border-color:color-mix(in srgb,var(--bad) 40%,transparent);background:color-mix(in srgb,var(--bad) 10%,transparent)}
.btn--danger:hover{background:color-mix(in srgb,var(--bad) 18%,transparent)}
.btn--sm{padding:5px 10px;font-size:12.5px}
.btn--lg{padding:11px 18px;font-size:14.5px}
.btn--block{width:100%}
.btn.is-busy .btn__text{opacity:.45}

/* ══════════════ APP SHELL ══════════════ */
.app{display:grid;grid-template-columns:var(--sidebar-w) 1fr;height:100dvh;background:var(--bg-1)}

.sidebar{
  display:flex;flex-direction:column;min-height:0;
  background:var(--sidebar-bg);border-right:1px solid var(--sidebar-line);
  --s-line:rgba(255,255,255,.16);
  --s-dim:#CFE7E2;
  color:#fff;
}
.sidebar__brand{display:flex;align-items:center;gap:11px;padding:16px 16px 14px;border-bottom:1px solid var(--line)}
.sidebar__mark{flex:none}
.sidebar__wordmark{display:flex;flex-direction:column;line-height:1.15;min-width:0}
.sidebar__wordmark strong{font-size:15px;letter-spacing:-.022em}
.sidebar__wordmark span{font-family:var(--serif);font-style:italic;font-size:13px;color:var(--brand-600)}

.sidebar__nav{display:grid;gap:2px;padding:12px 10px}
.navitem{
  display:flex;align-items:center;gap:11px;width:100%;padding:8px 10px;border-radius:var(--r-sm);
  color:var(--txt-2);font-size:13.5px;font-weight:550;text-align:left;transition:background .14s,color .14s;
}
.navitem:hover{background:var(--bg-2);color:var(--txt-1)}
.navitem.is-active{background:var(--brand-50);color:var(--brand-700);font-weight:650;box-shadow:inset 2px 0 0 var(--brand-600)}
.navitem.is-active .ico{color:var(--brand-600)}
.navitem span{flex:1}
.navitem__count{font-style:normal;font-size:11.5px;font-family:var(--mono);color:var(--txt-3);background:var(--bg-3);padding:1px 6px;border-radius:20px}

.sidebar__scroll{flex:1;min-height:0;overflow-y:auto;padding:4px 10px 12px}
.sidebar__block{padding:12px 6px 4px;border-top:1px solid var(--line);margin-top:6px}
.sidebar__block:first-child{border-top:0;margin-top:0}
.sidebar__h{font-size:10.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--txt-3);margin-bottom:9px}
.sidebar__link{font-size:12.5px;color:var(--brand-600);font-weight:600;padding:5px 0 0}
.sidebar__link:hover{text-decoration:underline}

.monthnav{display:flex;align-items:center;gap:4px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-sm);padding:3px}
.monthnav__btn{display:grid;place-items:center;width:26px;height:26px;border-radius:5px;color:var(--txt-2)}
.monthnav__btn:hover{background:var(--bg-4);color:var(--txt-1)}
.monthnav__label{flex:1;font-size:12.5px;font-weight:600;color:var(--txt-1);padding:4px 2px;border-radius:5px}
.monthnav__label:hover{background:var(--bg-4)}

.filters{display:grid;gap:3px}
.filter{display:flex;align-items:center;gap:8px;padding:5px 6px;border-radius:6px;font-size:13px;color:var(--txt-2);cursor:pointer;user-select:none}
.filter:hover{background:var(--bg-2);color:var(--txt-1)}
.filter input{width:15px;height:15px;accent-color:var(--brand-600);cursor:pointer;flex:none}
.filter__dot{width:7px;height:7px;border-radius:50%;flex:none}
.filter__dot[data-s=confirmed]{background:var(--ok)}
.filter__dot[data-s=tentative]{background:var(--warn)}
.filter__dot[data-s=cancelled]{background:var(--bad)}

.sidebar__foot{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:11px 14px;border-top:1px solid var(--line)}
.sidebar__session{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--txt-3)}
.dot{width:7px;height:7px;border-radius:50%;background:var(--txt-3)}
.dot--live{background:var(--ok);box-shadow:0 0 0 3px color-mix(in srgb,var(--ok) 20%,transparent)}

.sidebar__toggle{display:none;position:fixed;top:11px;left:11px;z-index:40;width:36px;height:36px;
  place-items:center;background:var(--bg-2);border:1px solid var(--line-2);border-radius:var(--r-sm);color:var(--txt-1);box-shadow:var(--sh-1)}

/* ══════════════ MAIN ══════════════ */
.main{display:flex;flex-direction:column;min-width:0;min-height:0}
.topbar{
  display:flex;align-items:center;gap:12px;padding:12px 20px;
  border-bottom:1px solid var(--line);background:var(--bg-2);
  position:sticky;top:0;z-index:12;
}
.topbar__search{position:relative;display:flex;align-items:center;flex:1;max-width:520px}
.topbar__search .ico{position:absolute;left:11px;color:var(--txt-3);pointer-events:none}
.topbar__input{width:100%;padding:8px 46px 8px 35px;background:var(--bg-2);border:1px solid var(--line-2);
  border-radius:var(--r-sm);transition:border-color .15s,box-shadow .15s}
.topbar__input::placeholder{color:var(--txt-3)}
.topbar__input:focus{outline:0;border-color:var(--brand-600);box-shadow:0 0 0 3px color-mix(in srgb,var(--brand-600) 22%,transparent)}
.topbar__input::-webkit-search-cancel-button{filter:invert(.55)}
.topbar__kbd{position:absolute;right:9px;font-family:var(--mono);font-size:11px;color:var(--txt-3);
  background:var(--bg-4);border:1px solid var(--line-2);border-bottom-width:2px;border-radius:5px;padding:1px 6px;pointer-events:none}
.topbar__actions{display:flex;gap:8px;margin-left:auto}

.view{flex:1;min-height:0;overflow-y:auto;padding:20px 20px 72px}
.view__inner{max-width:1080px;margin:0 auto}

/* ══════════════ STATS ══════════════ */
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:11px;margin-bottom:22px}
.stat{padding:13px 15px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-md);position:relative;overflow:hidden}
.stat::before{content:"";position:absolute;inset:0 auto 0 0;width:2.5px;background:var(--accent,var(--brand-600))}
.stat__n{font-size:25px;font-weight:700;letter-spacing:-.035em;line-height:1.1;font-variant-numeric:tabular-nums}
.stat__l{font-size:11.5px;color:var(--txt-3);margin-top:3px;letter-spacing:.02em}

/* ══════════════ SECTION HEADS ══════════════ */
.dayhead{display:flex;align-items:center;gap:11px;margin:22px 0 9px;position:sticky;top:0;z-index:4;
  padding:5px 0;background:linear-gradient(var(--bg-1) 68%,transparent)}
.dayhead:first-child{margin-top:0}
.dayhead__d{font-size:12px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--txt-2)}
.dayhead__rule{flex:1;height:1px;background:var(--line)}
.dayhead__n{font-size:11.5px;color:var(--txt-3);font-family:var(--mono)}
.dayhead.is-today .dayhead__d{color:var(--brand-400)}

/* ══════════════ EVENT CARD ══════════════ */
.cards{display:grid;gap:8px}
.card{
  display:grid;grid-template-columns:58px 1fr auto;gap:15px;align-items:start;
  padding:13px 15px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-md);
  cursor:pointer;text-align:left;width:100%;position:relative;
  transition:border-color .15s,background .15s,transform .1s,box-shadow .15s;
}
.card:hover{border-color:var(--line-2);box-shadow:var(--sh-2)}
.card.is-open{border-color:var(--brand-600);box-shadow:0 0 0 1px var(--brand-600)}
.card.is-cancelled{opacity:.72}
.card.is-cancelled .card__name{text-decoration:line-through;text-decoration-color:var(--bad)}

.card__date{display:grid;place-items:center;padding:7px 0;background:var(--bg-3);border:1px solid var(--line);border-radius:var(--r-sm);line-height:1.05;position:sticky;top:0}
.card.is-today .card__date{background:var(--brand-600);border-color:var(--brand-600);color:#fff}
.card__mon{font-size:9.5px;font-weight:750;letter-spacing:.11em;text-transform:uppercase;color:var(--txt-3)}
.card.is-today .card__mon,.card.is-today .card__day,.card.is-today .card__dow{color:#fff}
.card__day{font-size:19px;font-weight:700;letter-spacing:-.035em;font-variant-numeric:tabular-nums;margin-top:1px}
.card__dow{font-size:9.5px;color:var(--txt-3);margin-top:1px;letter-spacing:.05em}

.card__body{min-width:0}
.card__name{font-size:14.5px;font-weight:620;letter-spacing:-.014em;display:flex;align-items:center;gap:7px}
.card__name span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.card__meta{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-top:5px;font-size:12.5px;color:var(--txt-3)}
.card__meta b{font-weight:550;color:var(--txt-2)}
.card__sep{opacity:.45}
.card__chips{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-top:8px}
.card__flags{display:inline-flex;gap:5px;flex-wrap:wrap;padding-left:5px;margin-left:2px;
  border-left:1px solid var(--card-chip-br,var(--line))}

/* ── Set-up time vs event time ──
   Set-up is the quiet one, the event is the loud one, the total sits out to
   the right. Tabular numerals so the columns line up down the list. */
.times{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:6px;
  font-size:12px;font-variant-numeric:tabular-nums}
.times__seg{display:inline-flex;align-items:center;gap:5px;min-width:0}
.times__seg .ico{width:12.5px;height:12.5px;flex:none;opacity:.75}
.times__seg b{font-weight:750;font-size:9.5px;letter-spacing:.09em;text-transform:uppercase;
  color:var(--txt-3)}
.times__seg--setup{color:var(--card-txt-2)}
.times__seg--event{color:var(--card-txt-1);font-weight:600}
.times__seg--event b{color:var(--brand-700)}
.times__seg--event .ico{opacity:1;color:var(--brand-700)}
.times__total{display:inline-flex;align-items:center;gap:5px;margin-left:auto;flex:none;
  font-size:11px;font-weight:700;color:var(--brand-700);font-family:var(--mono)}
.times__total b{font-weight:750;font-size:9.5px;letter-spacing:.09em;text-transform:uppercase;
  color:var(--txt-3);font-family:var(--sans,inherit)}
.times__note{color:var(--card-txt-2);font-size:12px}

/* ── State flags: lit means yes, outlined means no ── */
.flag{display:inline-flex;align-items:center;gap:5px;padding:2px 9px 2px 7px;border-radius:20px;
  font-size:10.5px;font-weight:650;letter-spacing:.012em;white-space:nowrap;
  border:1px dashed var(--line-2);color:var(--txt-3);background:transparent}
.flag__dot{width:6px;height:6px;border-radius:50%;flex:none;border:1.5px solid currentColor}
.flag.is-on{border-style:solid;background:var(--card-chip-bg,transparent)}
.flag.is-on .flag__dot{background:currentColor}
.flag--ok  {color:var(--ok);  border-color:color-mix(in srgb,var(--ok) 40%,transparent)}
.flag--info{color:var(--info);border-color:color-mix(in srgb,var(--info) 40%,transparent)}
.flag--warn{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 42%,transparent)}

/* Nobody is wanted on this one — said plainly, where the faces would be. */
.notech{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;
  font-size:11px;font-weight:600;color:var(--txt-3);
  border:1px dashed var(--line-2);border-radius:20px;padding:3px 10px}
.notech .ico{width:13px;height:13px;opacity:.8}

.card__right{display:flex;align-items:center;gap:14px}
.crewstack{display:flex}
.crewstack .av{margin-left:-7px;border:2px solid var(--bg-2)}
.crewstack .av:first-child{margin-left:0}
.card:hover .crewstack .av{border-color:var(--bg-3)}
.card__prog{display:grid;gap:5px;justify-items:end;min-width:82px}
.card__progbar{width:82px;height:4px;background:var(--bg-4);border-radius:4px;overflow:hidden}
.card__progfill{height:100%;background:var(--brand-600);border-radius:4px;transition:width .3s var(--ease)}
.card__progfill.is-done{background:var(--ok)}
.card__progtxt{font-size:11px;color:var(--txt-3);font-family:var(--mono)}

/* ══════════════ CHIPS / BADGES ══════════════ */
.chip{display:inline-flex;align-items:center;gap:4.5px;padding:2px 8px;border-radius:20px;font-size:11px;font-weight:600;
  letter-spacing:.012em;border:1px solid var(--line-2);color:var(--txt-2);background:var(--bg-3);white-space:nowrap}
.chip .ico{width:12px;height:12px;stroke-width:2.1}
.chip--ok{color:var(--ok);border-color:color-mix(in srgb,var(--ok) 34%,transparent);background:color-mix(in srgb,var(--ok) 11%,transparent)}
.chip--warn{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 34%,transparent);background:color-mix(in srgb,var(--warn) 11%,transparent)}
.chip--bad{color:var(--bad);border-color:color-mix(in srgb,var(--bad) 38%,transparent);background:color-mix(in srgb,var(--bad) 12%,transparent)}
.chip--info{color:var(--info);border-color:color-mix(in srgb,var(--info) 34%,transparent);background:color-mix(in srgb,var(--info) 11%,transparent)}
.chip--brand{color:var(--brand-700);border-color:var(--brand-200);background:var(--brand-50)}
.chip--blue{color:var(--dept-fg);border-color:var(--dept-br);background:var(--dept-bg)}

.statusdot{width:7px;height:7px;border-radius:50%;flex:none}
.statusdot[data-s=confirmed]{background:var(--ok)}
.statusdot[data-s=tentative]{background:var(--warn)}
.statusdot[data-s=cancelled]{background:var(--bad)}

/* avatars */
.av{display:grid;place-items:center;width:26px;height:26px;border-radius:50%;flex:none;
  font-size:10.5px;font-weight:700;letter-spacing:.01em;color:#fff;background:var(--brand-700)}
.av--lg{width:34px;height:34px;font-size:12.5px}
.av--ghost{background:var(--bg-4);color:var(--txt-3);border:1px dashed var(--line-2)!important}

/* ══════════════ EMPTY ══════════════ */
.empty{display:grid;justify-items:center;gap:11px;padding:64px 24px;text-align:center}
.empty__ico{display:grid;place-items:center;width:52px;height:52px;border-radius:15px;background:var(--bg-2);border:1px solid var(--line);color:var(--txt-3)}
.empty__ico .ico{width:23px;height:23px}
.empty h3{font-size:15.5px}
.empty p{color:var(--txt-3);font-size:13.5px;max-width:340px}

/* ══════════════ CALENDAR ══════════════ */
.cal{background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden}
.cal__dows{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));border-bottom:1px solid var(--line);background:var(--bg-3)}
.cal__dow{padding:8px 10px;font-size:10.5px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--txt-3)}
.cal__grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}
.cal__cell{min-width:0;min-height:112px;padding:7px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:4px}
.cal__cell:nth-child(7n){border-right:0}
.cal__cell.is-out{background:color-mix(in srgb,var(--bg-1) 55%,transparent)}
.cal__n{font-size:11.5px;color:var(--txt-3);font-variant-numeric:tabular-nums;font-weight:600;padding:1px 2px}
.cal__cell.is-today .cal__n{color:#fff;background:var(--brand-600);border-radius:4px;padding:1px 6px;align-self:flex-start}
.cal__ev{display:flex;align-items:center;gap:5px;padding:3px 6px;border-radius:5px;background:var(--bg-3);border:1px solid var(--line);
  font-size:11.5px;text-align:left;width:100%;min-width:0;overflow:hidden;transition:background .13s,border-color .13s}
.cal__ev:hover{background:var(--bg-4);border-color:var(--line-2)}
.cal__ev span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cal__ev.is-cancelled{opacity:.5;text-decoration:line-through}
.cal__more{font-size:10.5px;color:var(--txt-3);padding:1px 6px;text-align:left}
.cal__more:hover{color:var(--brand-400)}

/* ══════════════ CREW VIEW ══════════════ */
.grid-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(268px,1fr));gap:11px}
.tile{padding:15px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-md);display:grid;gap:10px;transition:border-color .15s,background .15s}
.tile:hover{border-color:var(--line-2);background:var(--bg-3)}
.tile__top{display:flex;align-items:center;gap:11px}
.tile__name{font-size:14px;font-weight:620;letter-spacing:-.012em}
.tile__role{font-size:12px;color:var(--txt-3)}
.tile__rows{display:grid;gap:6px;font-size:12.5px;color:var(--txt-2)}
.tile__row{display:grid;grid-template-columns:74px 1fr;gap:9px}
.tile__row b{font-weight:600;color:var(--txt-3);font-size:11.5px;letter-spacing:.02em}
.tile__acts{display:flex;gap:6px;justify-content:flex-end;border-top:1px solid var(--line);padding-top:9px;margin-top:1px}

.viewhead{display:flex;align-items:flex-end;justify-content:space-between;gap:14px;margin-bottom:18px;flex-wrap:wrap}
.viewhead h1{font-size:20px;letter-spacing:-.03em}
.viewhead p{color:var(--txt-3);font-size:13px;margin-top:4px}

/* ══════════════ PANEL ══════════════ */
.panel-scrim{position:fixed;inset:0;background:var(--scrim);z-index:28;animation:fade .2s ease both}
@keyframes fade{from{opacity:0}}
.panel{
  position:fixed;top:0;right:0;bottom:0;width:var(--panel-w);z-index:30;
  background:var(--bg-1);border-left:1px solid var(--line-2);box-shadow:var(--sh-3);
  display:flex;flex-direction:column;animation:slidein .22s cubic-bezier(.2,.8,.2,1) both;
  will-change:transform;
}
@keyframes slidein{from{transform:translateX(100%)}}
.panel__head{padding:16px 18px 0;border-bottom:1px solid var(--line);background:var(--bg-2)}
.panel__top{display:flex;align-items:flex-start;gap:11px}
.panel__title{flex:1;min-width:0}
.panel__title h2{font-size:17.5px;letter-spacing:-.024em;line-height:1.25}
.panel__sub{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-top:7px;font-size:12.5px;color:var(--txt-3)}
.panel__close{display:grid;place-items:center;width:30px;height:30px;border-radius:var(--r-sm);color:var(--txt-3);flex:none}
.panel__close:hover{background:var(--bg-4);color:var(--txt-1)}
.panel__chips{display:flex;gap:5px;flex-wrap:wrap;margin-top:11px}

/* ── Two ways to look at the list ── */
.segs{display:inline-flex;border:1px solid var(--line-2);border-radius:8px;overflow:hidden;
  background:var(--bg-2);flex:none}
.segs__b{display:grid;place-items:center;width:34px;min-height:32px;align-self:stretch;color:var(--txt-3);
  border-right:1px solid var(--line-2);transition:background .14s,color .14s}
.segs__b:last-child{border-right:0}
.segs__b .ico{width:15px;height:15px}
.segs__b:hover{background:var(--bg-3);color:var(--txt-1)}
.segs__b.is-on{background:var(--brand-600);color:#fff}

/* The compact row: date, day, name, and whether it needs crewing. Nothing else. */
.erows{display:grid;gap:3px}
.erow{display:grid;grid-template-columns:38px 30px 1fr auto;gap:11px;align-items:center;
  padding:6px 12px 6px 9px;background:var(--bk-wash,var(--bg-2));border:1px solid var(--line);
  border-left-width:4px;border-radius:var(--r-sm);cursor:pointer;
  transition:border-color .14s,background .14s}
.erow:hover{background:var(--bk-wash-hi,var(--bg-3));border-color:var(--line-2)}
.erow.is-open{border-color:var(--brand-600);box-shadow:0 0 0 1px var(--brand-600)}
.erow.is-cancelled{opacity:.72}
.erow.is-cancelled .erow__n{text-decoration:line-through;text-decoration-color:var(--bad)}
.erow.bk--rental {--bk-wash:var(--rent-wash); --bk-wash-hi:var(--rent-wash-hi); border-left-color:var(--rent-bar)}
.erow.bk--college{--bk-wash:var(--coll-wash); --bk-wash-hi:var(--coll-wash-hi); border-left-color:var(--coll-bar)}
.erow.bk--dept   {--bk-wash:var(--dept-wash); --bk-wash-hi:var(--dept-wash-hi); border-left-color:var(--dept-bar)}
.erow.bk--work   {--bk-wash:var(--work-wash,var(--bg-2)); border-left-color:var(--work-br,var(--line-2))}
.erow.bk--other  {--bk-wash:var(--bg-2); --bk-wash-hi:var(--bg-3); border-left-color:var(--line-2)}
/* the same little date block as the full card, scaled down */
.erow__date{display:grid;place-items:center;padding:3px 0 4px;line-height:1.02;
  background:var(--card-datebg,var(--bg-3));border:1px solid var(--card-track,var(--line));
  border-radius:5px}
.erow__mon{font-size:8px;font-weight:750;letter-spacing:.1em;text-transform:uppercase;
  color:var(--card-txt-2)}
.erow__day{font-size:14px;font-weight:700;letter-spacing:-.035em;font-variant-numeric:tabular-nums;
  color:var(--card-txt-1);margin-top:1px}
.erow.is-today .erow__date{background:var(--brand-600);border-color:var(--brand-600)}
.erow.is-today .erow__mon,.erow.is-today .erow__day{color:#fff}
.erow__w{font-size:11px;color:var(--card-txt-2);white-space:nowrap}
.erow__n{font-size:13.5px;font-weight:550;color:var(--card-txt-1);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.erow__end{display:flex;align-items:center;gap:9px;justify-content:flex-end;min-width:0}
.erow__k{font-size:9.5px;font-weight:750;letter-spacing:.07em;text-transform:uppercase;
  color:var(--work-fg);white-space:nowrap}
.erow__r{flex:none;white-space:nowrap}
/* the day headings shouldn't outweigh the rows they head */
.erows-mode .dayhead{margin:13px 0 5px}
.erows-mode .dayhead:first-child{margin-top:0}

.erow:focus-visible{outline:2px solid var(--brand-600);outline-offset:2px}
@media (max-width:620px){
  .erow{grid-template-columns:38px 1fr auto}
  .erow__w{display:none}
}
.tabs{display:flex;gap:2px;margin-top:14px}
.tab{padding:8px 12px;font-size:13px;font-weight:600;color:var(--txt-3);border-bottom:2px solid transparent;margin-bottom:-1px;transition:color .14s,border-color .14s}
.tab:hover{color:var(--txt-1)}
.tab.is-active{color:var(--brand-700);border-bottom-color:var(--brand-600)}
.tab__n{font-family:var(--mono);font-size:10.5px;color:var(--txt-3);margin-left:5px}
.panel__body{flex:1;min-height:0;overflow-y:auto;padding:18px}
.panel__foot{display:flex;gap:8px;padding:12px 18px;border-top:1px solid var(--line);background:var(--bg-2)}

.section{margin-bottom:22px}
.section:last-child{margin-bottom:0}
.section__h{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}
.section__h h3{font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--txt-3)}
/* Inside the panel each section gets a rule of its own, so the four groups
   stop blurring into one long list. */
.panel__body .section{margin-bottom:26px}
.panel__body .section__h{margin-bottom:11px;padding-bottom:7px;
  border-bottom:1.5px solid var(--brand-600)}
.panel__body .section__h h3{font-size:11.5px;color:var(--brand-700);font-weight:750}

.deflist{display:grid;gap:0;background:var(--bg-2);border:1px solid var(--line);
  border-radius:var(--r-md);overflow:hidden}
.deflist--after{margin-top:8px}
/* Notes get a page to themselves, so the label steps above the writing space. */
.deflist--stack .def{grid-template-columns:1fr;border-top:0}
.deflist--stack .def dt{background:none;border-right:0;border-bottom:1px solid var(--line);
  padding:9px 12px}
.deflist--stack .def dd{align-items:flex-start;min-height:180px;padding:12px;
  line-height:1.6;white-space:pre-wrap}
.deflist--stack .def__v{min-height:156px;align-items:flex-start}
.deflist--stack .def--edit{grid-template-columns:1fr auto}
.deflist--stack .def--edit dt{grid-column:1/-1}
/* The label column is tinted and ruled off, so the eye never has to hunt for
   where the name ends and the value starts. */
.def{display:grid;grid-template-columns:132px 1fr;gap:0;background:var(--bg-2);font-size:13px;
  border-top:1px solid var(--line)}
.def:first-child{border-top:0}
.def dt{display:flex;align-items:center;padding:10px 12px;background:var(--bg-3);
  border-right:1px solid var(--line);color:var(--txt-2);
  font-size:11.5px;font-weight:650;letter-spacing:.02em;line-height:1.3}
.def dd{margin:0;padding:9px 12px;display:flex;align-items:center;min-height:40px;
  color:var(--txt-1);font-size:13.5px;font-weight:500;word-break:break-word}
.def dd.is-empty{color:var(--txt-3);font-style:italic}

/* Times as tiles — four things you read at once, not four rows you scan down. */
.deftiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(122px,1fr));gap:8px;
  background:none;border:0;border-radius:0;overflow:visible}
.deftiles .def{display:block;border:1px solid var(--line);border-radius:var(--r-sm);
  background:var(--bg-2);padding:9px 11px;grid-template-columns:none}
.deftiles .def dt{display:block;padding:0;background:none;border:0;
  font-size:9.5px;font-weight:750;letter-spacing:.09em;text-transform:uppercase;color:var(--txt-3)}
.deftiles .def dd{display:block;padding:0;margin-top:4px;min-height:0;
  font-size:14px;font-weight:620;letter-spacing:-.01em}
.deftiles .def--edit{grid-template-columns:none}
.deftiles .def__v{width:100%}
.deftiles .def__copy{position:absolute;top:5px;right:5px}
.deftiles .def{position:relative}
.def--static dd{color:var(--brand-700);font-family:var(--mono)}

/* task rows */
.rows{display:grid;gap:6px}
.row{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-sm);transition:border-color .14s,background .14s}
.row:hover{border-color:var(--line-2);background:var(--bg-3)}
.row__box{width:17px;height:17px;margin-top:1px;accent-color:var(--brand-600);cursor:pointer;flex:none}
.row__main{flex:1;min-width:0}
.row__t{font-size:13.5px;line-height:1.4}
.row.is-done .row__t{color:var(--txt-3);text-decoration:line-through}
.row__m{display:flex;gap:8px;flex-wrap:wrap;margin-top:4px;font-size:11.5px;color:var(--txt-3)}
.row__acts{display:flex;gap:3px;opacity:0;transition:opacity .14s}
.row:hover .row__acts,.row:focus-within .row__acts{opacity:1}
.iconbtn{display:grid;place-items:center;width:27px;height:27px;border-radius:6px;color:var(--txt-3)}
.iconbtn:hover{background:var(--bg-4);color:var(--txt-1)}
.iconbtn--danger:hover{background:color-mix(in srgb,var(--bad) 18%,transparent);color:var(--bad)}

.progress{display:flex;align-items:center;gap:10px;padding:11px 13px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-md);margin-bottom:12px}
.progress__bar{flex:1;height:6px;background:var(--bg-4);border-radius:6px;overflow:hidden}
.progress__fill{height:100%;background:var(--brand-600);border-radius:6px;transition:width .35s var(--ease)}
.progress__fill.is-done{background:var(--ok)}
.progress__txt{font-size:12px;color:var(--txt-2);font-family:var(--mono);white-space:nowrap}

/* shift rows */
.shift{display:flex;align-items:center;gap:11px;padding:10px 12px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-sm);transition:border-color .14s,background .14s}
.shift:hover{border-color:var(--line-2);background:var(--bg-3)}
.shift__main{flex:1;min-width:0}
.shift__n{font-size:13.5px;font-weight:600;display:flex;align-items:center;gap:7px}
.shift__m{font-size:12px;color:var(--txt-3);margin-top:3px;display:flex;gap:8px;flex-wrap:wrap}
.shift__hours{font-size:12px;font-weight:600;color:var(--brand-700);white-space:nowrap}
.shift__acts{display:flex;gap:3px;opacity:0;transition:opacity .14s}
.shift:hover .shift__acts,.shift:focus-within .shift__acts{opacity:1}

/* attachments */
.att{display:flex;align-items:center;gap:11px;padding:10px 12px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-sm);transition:border-color .14s,background .14s}
.att:hover{border-color:var(--line-2);background:var(--bg-3)}
.att__ico{display:grid;place-items:center;width:33px;height:33px;border-radius:8px;background:var(--bg-4);color:var(--brand-400);flex:none}
.att__main{flex:1;min-width:0}
.att__n{font-size:13.5px;font-weight:550;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.att__m{font-size:11.5px;color:var(--txt-3);margin-top:2px}
.att__acts{display:flex;gap:3px}

.dropzone{display:grid;place-items:center;gap:7px;padding:22px;border:1.5px dashed var(--line-2);border-radius:var(--r-md);
  color:var(--txt-3);font-size:13px;text-align:center;transition:border-color .15s,background .15s;cursor:pointer}
.dropzone:hover,.dropzone.is-over{border-color:var(--brand-500);background:var(--brand-50);color:var(--txt-2)}
.dropzone strong{color:var(--brand-700);font-weight:600}

/* ══════════════ MODAL ══════════════ */
.modal-root{position:fixed;inset:0;z-index:50;display:grid;place-items:center;padding:20px;background:var(--scrim-strong);
  animation:fade .16s ease both;overflow:auto}
.modal{width:100%;max-width:640px;background:var(--bg-2);border:1px solid var(--line-2);border-radius:var(--r-lg);
  box-shadow:var(--sh-3);animation:pop .24s var(--ease) both;margin:auto;display:flex;flex-direction:column;max-height:calc(100dvh - 40px)}
.modal--sm{max-width:430px}
@keyframes pop{from{opacity:0;transform:translateY(10px) scale(.98)}}
.modal__head{display:flex;align-items:center;gap:11px;padding:16px 18px;border-bottom:1px solid var(--line)}
.modal__head h2{font-size:15.5px;letter-spacing:-.02em;flex:1}
.modal__body{padding:18px;overflow-y:auto;flex:1;min-height:0}
.modal__foot{display:flex;gap:8px;justify-content:flex-end;padding:13px 18px;border-top:1px solid var(--line);background:var(--bg-1);
  border-radius:0 0 var(--r-lg) var(--r-lg)}
.formgrid{display:grid;gap:14px}
.formrow{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.formrow--3{grid-template-columns:1fr 1fr 1fr}
.fieldset{border:1px solid var(--line);border-radius:var(--r-md);padding:14px;display:grid;gap:13px}
.fieldset legend{font-size:10.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--txt-3);padding:0 6px}

/* ══════════════ TOASTS ══════════════ */
.toasts{position:fixed;bottom:18px;left:50%;transform:translateX(-50%);z-index:80;display:grid;gap:8px;justify-items:center;pointer-events:none}
.toast{display:flex;align-items:center;gap:9px;padding:10px 15px;background:var(--bg-3);border:1px solid var(--line-2);
  border-radius:var(--r-md);box-shadow:var(--sh-3);font-size:13.5px;animation:toastin .28s var(--ease) both;pointer-events:auto;max-width:min(92vw,460px)}
@keyframes toastin{from{opacity:0;transform:translateY(12px)}}
.toast.is-out{animation:toastout .22s ease forwards}
@keyframes toastout{to{opacity:0;transform:translateY(8px)}}
.toast--ok .ico{color:var(--ok)}
.toast--bad .ico{color:var(--bad)}

.skel{background:linear-gradient(90deg,var(--bg-2),var(--bg-3),var(--bg-2));background-size:200% 100%;
  animation:shimmer 1.3s linear infinite;border-radius:var(--r-md);height:74px}
@keyframes shimmer{to{background-position:-200% 0}}

/* ══════════════ RESPONSIVE ══════════════ */
@media (max-width:1080px){ .stats{grid-template-columns:repeat(2,1fr)} }

@media (max-width:860px){
  .app{grid-template-columns:1fr}
  .sidebar{position:fixed;top:0;bottom:0;left:0;width:var(--sidebar-w);z-index:35;
    transform:translateX(-102%);transition:transform .3s var(--ease);box-shadow:var(--sh-3)}
  .sidebar.is-open{transform:none}
  .sidebar__toggle{display:grid}
  body.panel-open .sidebar__toggle{display:none}
  .topbar{padding-left:58px}
  .view{padding:16px 14px 72px}
  .card{grid-template-columns:50px 1fr;gap:12px;padding:12px;align-items:start}
  .card__date{position:sticky;top:0}
  .card__right{grid-column:1/-1;justify-content:space-between;border-top:1px solid var(--line);padding-top:10px;margin-top:2px}
  .formrow,.formrow--3{grid-template-columns:1fr}
  .cal__cell{min-height:76px;padding:4px}
  .cal__ev span{display:none}
  .panel{--panel-w:100vw}
  .def{grid-template-columns:100px 1fr}
}
@media (max-width:520px){
  .topbar__kbd{display:none}
  .stats{grid-template-columns:1fr 1fr;gap:8px}
  .stat__n{font-size:21px}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}
}

/* ══════════════════════════════════════════════════════════
   UPDATE 2 — READINESS, BOOKING COLOURS, SIMPLER JOBS
   ══════════════════════════════════════════════════════════ */

/* ── Booking type: three distinct colours ──
   Rental earns money. College and Dept sponsored both cost money,
   out of different budgets, so they never share a colour. */
.bk{border-width:1px;font-weight:650}
/* Violet for rentals: the only hue left that a status colour doesn't already
   own, so a booking type can never be misread as "confirmed". */
:root{--rental:#A78BFA; --rental-deep:#7C5CD6}
.chip.bk--rental  {color:var(--rent-fg);border-color:var(--rent-br);background:var(--rent-bg)}
.chip.bk--college {color:var(--coll-fg);border-color:var(--coll-br);background:var(--coll-bg)}
.chip.bk--dept    {color:var(--dept-fg);border-color:var(--dept-br);background:var(--dept-bg)}
.chip.bk--other   {color:var(--txt-2)}

/* The whole card is washed in its booking colour, with a solid bar down
   the edge — so you can tell a rental from a college event across the room. */
.card{border-left-width:5px;background:var(--bk-wash,var(--bg-2))}
.card:hover{background:var(--bk-wash-hi,var(--bg-3))}

.card.bk--rental {--bk-wash:var(--rent-wash); --bk-wash-hi:var(--rent-wash-hi); border-left-color:var(--rent-bar)}
.card.bk--college{--bk-wash:var(--coll-wash); --bk-wash-hi:var(--coll-wash-hi); border-left-color:var(--coll-bar)}
.card.bk--dept   {--bk-wash:var(--dept-wash); --bk-wash-hi:var(--dept-wash-hi); border-left-color:var(--dept-bar)}
.card.bk--other  {--bk-wash:var(--bg-2); --bk-wash-hi:var(--bg-3); border-left-color:var(--line-2)}
/* last word: a cancelled event reads red whatever kind of booking it was */
.card.is-cancelled,.erow.is-cancelled{
  --bk-wash:var(--canc-wash); --bk-wash-hi:var(--canc-wash-hi);
  border-left-color:var(--canc-bar)!important;
}
.card.is-cancelled .card__name span,.erow.is-cancelled .erow__n{color:var(--canc-fg)}
.cal__ev.is-cancelled{background:var(--canc-wash)!important;border-left-color:var(--canc-bar)!important;color:var(--canc-fg)}
.cal__ev.is-pending{background:var(--pend-wash)!important;border-left-color:var(--pend-bar)!important;color:var(--pend-fg)}

/* on a tinted card the greenish tracks look wrong — neutralise them */
.card .mini__track{background:var(--card-track)}
.card .card__date{background:var(--card-datebg);border-color:var(--card-track)}
.card .crewstack .av{border-color:var(--bk-wash,var(--bg-2))}
.card:hover .crewstack .av{border-color:var(--bk-wash-hi,var(--bg-3))}

/* calendar pills carry the same coding */
.cal__ev{border-left-width:3px}
.cal__ev.bk--rental {background:var(--rent-wash);border-left-color:var(--rent-bar)}
.cal__ev.bk--college{background:var(--coll-wash);border-left-color:var(--coll-bar)}
.cal__ev.bk--dept   {background:var(--dept-wash);border-left-color:var(--dept-bar)}

/* ── Readiness badge ── */
.ready{
  display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:20px;
  font-size:11.5px;font-weight:650;white-space:nowrap;border:1px solid transparent;letter-spacing:.01em;
}
.ready__dot{width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}
.ready--ok  {color:var(--ok);  border-color:color-mix(in srgb,var(--ok) 42%,transparent);  background:color-mix(in srgb,var(--ok) 14%,transparent)}
.ready--warn{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 42%,transparent);background:color-mix(in srgb,var(--warn) 14%,transparent)}
.ready--bad {color:var(--bad); border-color:color-mix(in srgb,var(--bad) 48%,transparent); background:color-mix(in srgb,var(--bad) 15%,transparent)}
.ready--canc{color:var(--canc-fg);border-color:color-mix(in srgb,var(--canc-bar) 48%,transparent);background:color-mix(in srgb,var(--canc-bar) 14%,transparent)}

.ready--lg{font-size:13px;padding:5px 13px}

.readycard{display:grid;gap:8px;padding:13px 15px;border-radius:var(--r-md);border:1px solid var(--line);background:var(--bg-2)}
.readycard--ok  {border-color:color-mix(in srgb,var(--ok) 34%,transparent)}
.readycard--warn{border-color:color-mix(in srgb,var(--warn) 34%,transparent)}
.readycard--bad {border-color:color-mix(in srgb,var(--bad) 38%,transparent)}
.readycard__why{color:var(--txt-2);font-size:13px;line-height:1.55}
.readycard .ready{justify-self:start}

/* ── Card right-hand column ── */
.card__right{flex-direction:column;align-items:flex-end;gap:8px;padding-top:1px}
.card__bars{display:grid;gap:4px;min-width:132px}
.mini{display:grid;grid-template-columns:46px 1fr auto;align-items:center;gap:7px;font-size:10.5px;color:var(--txt-3)}
.mini__l{letter-spacing:.02em}
.mini__track{height:4px;background:var(--bg-4);border-radius:4px;overflow:hidden}
.mini__fill{display:block;height:100%;background:var(--brand-600);border-radius:4px;transition:width .3s var(--ease)}
.mini__fill.is-done{background:var(--ok)}
.mini__n{font-family:var(--mono);font-size:10px;min-width:26px;text-align:right}
.mini--empty .mini__n{opacity:.55}

/* ── Clickable stat tiles ── */
.stat{text-align:left;width:100%;transition:border-color .15s,background .15s,transform .08s}
button.stat{cursor:pointer}
button.stat:hover{background:var(--bg-3);border-color:var(--line-2)}
button.stat:active{transform:translateY(.5px)}
.stat.is-on{border-color:var(--brand-600);background:var(--brand-50)}
.stat--bad {--accent:var(--bad)}
.stat--warn{--accent:var(--warn)}
.stat--info{--accent:var(--light-blue)}
.stat--ok  {--accent:var(--ok)}

/* ── Requirements ── */
.hint{font-size:12px;color:var(--txt-3);margin:-2px 0 10px}
.reqs{display:grid;gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden}
.req{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:11px;padding:9px 13px;background:var(--bg-2)}
.req__tick{
  display:grid;place-items:center;width:19px;height:19px;border-radius:5px;flex:none;
  border:1.5px solid var(--line-2);background:var(--bg-1);color:#fff;font-size:12px;line-height:1;
  transition:background .14s,border-color .14s,color .14s;
}
.req__tick:hover{border-color:var(--brand-500)}
.req__tick .ico{width:13px;height:13px;stroke-width:3}
.req__l{font-size:13px}
.req__s{font-size:11px;color:var(--txt-3);font-family:var(--mono)}
.req--done .req__tick{background:var(--ok);border-color:var(--ok)}
.req--done .req__l{color:var(--txt-2)}
.req--done .req__s{color:var(--ok)}
.req--na .req__tick{background:var(--bg-3);border-color:var(--line-2);color:var(--txt-3)}
.req--na .req__l{color:var(--txt-3);text-decoration:line-through;text-decoration-color:var(--line-2)}
.req--todo .req__tick{border-color:color-mix(in srgb,var(--warn) 55%,transparent)}
.req--todo .req__s{color:var(--warn)}

/* ── Jobs: quick add, one-click remove ── */
.section__count{font-size:11.5px;color:var(--txt-3);font-family:var(--mono)}
.bar{height:4px;background:var(--bg-4);border-radius:4px;overflow:hidden;margin-bottom:10px}
.bar__fill{display:block;height:100%;background:var(--brand-600);border-radius:4px;transition:width .35s var(--ease)}
.bar__fill.is-done{background:var(--ok)}

.row{align-items:center}
.row__t{flex:1;min-width:0;font-size:13.5px;line-height:1.4;cursor:text;border-radius:4px;padding:1px 3px;margin:-1px -3px}
.row__t:hover{background:var(--bg-4)}
.row.is-done .row__t{color:var(--txt-3);text-decoration:line-through}
.row__x{opacity:0;transition:opacity .14s}
.row:hover .row__x,.row:focus-within .row__x{opacity:1}

.quickadd{display:flex;align-items:center;gap:9px;margin-top:6px;padding:9px 12px;
  border:1px dashed var(--line-2);border-radius:var(--r-sm);transition:border-color .15s,background .15s}
.quickadd:focus-within{border-style:solid;border-color:var(--brand-600);background:var(--bg-2)}
.quickadd__plus{display:grid;place-items:center;color:var(--txt-3);flex:none}
.quickadd:focus-within .quickadd__plus{color:var(--brand-600)}
.quickadd__in{flex:1;min-width:0;background:none;border:0;outline:0;font-size:13.5px;padding:0}
.quickadd__in::placeholder{color:var(--txt-3)}

@media (max-width:860px){
  .card__right{flex-direction:row;align-items:center;flex-wrap:wrap}
  .card__bars{min-width:0;flex:1}
}

/* ══════════════════════════════════════════════════════════
   UPDATE 3 — EDIT IN PLACE, FAST TIMES, REAL DATE PICKER
   ══════════════════════════════════════════════════════════ */

/* ── Editable rows ── */
.def--edit{grid-template-columns:132px 1fr auto;align-items:stretch;gap:0}
.def--edit dd{flex:1}
.def__v{
  margin:0;min-width:0;width:100%;word-break:break-word;border-radius:5px;padding:3px 6px;
  margin-left:-6px;cursor:text;transition:background .13s,box-shadow .13s;
}
.def__v:hover{background:var(--bg-3);box-shadow:inset 0 0 0 1px var(--line-2)}
.def__v:focus-visible{outline:2px solid var(--brand-400);outline-offset:1px}
.def__v .is-empty{color:var(--txt-3);font-style:italic}
.def__v a{display:inline-flex;align-items:center;gap:4px}
.def__v a .ico{width:12px;height:12px}
.def__copy{
  display:grid;place-items:center;width:26px;height:26px;border-radius:6px;flex:none;
  align-self:center;margin-right:8px;
  color:var(--txt-3);opacity:0;transition:opacity .14s,background .14s,color .14s;
}
.def:hover .def__copy,.def:focus-within .def__copy{opacity:1}
.def__copy:hover{background:var(--bg-4);color:var(--brand-700)}
.def__copy .ico{width:14px;height:14px}
.edit{width:100%;font-size:13px;padding:6px 9px}
select.edit{padding-right:30px}
textarea.edit{min-height:88px;line-height:1.55}

.section__h .btn--sm{opacity:.5;transition:opacity .14s}
.section:hover .section__h .btn--sm{opacity:1}

/* ── Fast time box ── */
.timein{font-variant-numeric:tabular-nums}
.timein.is-bad{border-color:var(--bad);box-shadow:0 0 0 3px color-mix(in srgb,var(--bad) 20%,transparent)}
.timein__echo{color:var(--brand-600);min-height:14px}
.hint code{
  font-family:var(--sans);font-weight:650;font-size:11.5px;padding:1px 6px;border-radius:4px;
  background:var(--brand-50);border:1px solid var(--brand-100);color:var(--brand-700);
}

/* ── Date field ── */
.datefield__wrap{position:relative;display:flex;width:100%}
.datein{cursor:pointer;padding-right:36px}
.datefield__btn{
  position:absolute;right:7px;top:50%;transform:translateY(-50%);
  display:grid;place-items:center;width:26px;height:26px;border-radius:6px;color:var(--txt-3);
}
.datefield__btn:hover{background:var(--bg-4);color:var(--brand-700)}

/* ── The calendar itself ── */
.cal2{
  position:fixed;z-index:90;width:280px;padding:12px;
  background:var(--bg-2);border:1px solid var(--line-2);border-radius:var(--r-lg);
  box-shadow:var(--sh-3);animation:pop .18s var(--ease) both;
}
.cal2__head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:10px}
.cal2__title{font-size:13.5px;font-weight:650;letter-spacing:-.015em}
.cal2__nav{display:grid;place-items:center;width:28px;height:28px;border-radius:7px;color:var(--txt-2)}
.cal2__nav:hover{background:var(--bg-4);color:var(--txt-1)}
.cal2__dows{display:grid;grid-template-columns:repeat(7,1fr);margin-bottom:4px}
.cal2__dows span{text-align:center;font-size:10px;font-weight:700;letter-spacing:.08em;color:var(--txt-3)}
.cal2__grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.cal2__d{
  height:34px;border-radius:8px;font-size:13px;font-variant-numeric:tabular-nums;color:var(--txt-1);
  transition:background .12s,color .12s,box-shadow .12s;
}
.cal2__d:hover{background:var(--bg-4)}
.cal2__d.is-out{color:var(--txt-3);opacity:.55}
.cal2__d.is-today{box-shadow:inset 0 0 0 1px var(--brand-400);color:var(--brand-700);font-weight:650}
.cal2__d.is-sel{background:var(--brand-600);color:#fff;font-weight:650;box-shadow:none}
.cal2__d.is-sel:hover{background:var(--brand-600)}
.cal2__foot{display:flex;gap:6px;margin-top:10px;padding-top:10px;border-top:1px solid var(--line)}
.cal2__quick{flex:1;padding:6px;border-radius:7px;font-size:12.5px;font-weight:600;color:var(--txt-2);border:1px solid var(--line-2)}
.cal2__quick:hover{background:var(--bg-3);color:var(--txt-1)}

@media (max-width:860px){
  .def--edit{grid-template-columns:100px 1fr auto}
  .def__copy{opacity:1}
}

/* ══════════════════════════════════════════════════════════
   SOLID SHORELINE GREEN SIDEBAR
   White text on #00685E is 6.7:1; the dimmed tone is 5.2:1.
   ══════════════════════════════════════════════════════════ */
.sidebar__brand{border-bottom-color:var(--s-line)}
.sidebar__wordmark strong{color:#fff}
.sidebar__wordmark span{color:var(--s-dim)}
.sidebar__mark path{stroke:#fff}
.sidebar__mark path:last-child{stroke:rgba(255,255,255,.55)}

.navitem{color:var(--s-dim)}
.navitem:hover{background:rgba(255,255,255,.12);color:#fff}
.navitem.is-active{background:rgba(255,255,255,.18);color:#fff;box-shadow:inset 3px 0 0 #fff}
.navitem.is-active .ico{color:#fff}
.navitem__count{background:rgba(255,255,255,.18);color:#fff}

.sidebar__block{border-top-color:var(--s-line)}
.sidebar__h{color:rgba(255,255,255,.62)}
.sidebar__link{color:#fff;text-decoration:underline;text-underline-offset:2px}
.sidebar__link:hover{color:var(--s-dim)}

.monthnav{background:rgba(255,255,255,.12);border-color:var(--s-line)}
.monthnav__btn{color:var(--s-dim)}
.monthnav__btn:hover{background:rgba(255,255,255,.18);color:#fff}
.monthnav__label{color:#fff}
.monthnav__label:hover{background:rgba(255,255,255,.16)}

.filter{color:var(--s-dim)}
.filter:hover{background:rgba(255,255,255,.12);color:#fff}
.filter input{accent-color:#fff}
/* status dots need to lift off the green */
.filter__dot[data-s=confirmed]{background:#8FE07A}
.filter__dot[data-s=tentative]{background:#FFA64D}
.filter__dot[data-s=cancelled]{background:#FF7474}

.sidebar__foot{border-top-color:var(--s-line)}
.sidebar__session{color:var(--s-dim)}
.dot--live{background:#8FE07A;box-shadow:0 0 0 3px rgba(143,224,122,.22)}
.sidebar .btn--ghost{background:rgba(255,255,255,.14);border-color:rgba(255,255,255,.28);color:#fff}
.sidebar .btn--ghost:hover{background:rgba(255,255,255,.24);color:#fff}

.sidebar *::-webkit-scrollbar-thumb{background:rgba(255,255,255,.28)}
.sidebar *::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.42)}
.sidebar :where(button,input,label,a):focus-visible{outline-color:#fff}

/* A deeper wash needs darker secondary text to stay readable (AA on all three). */
.card .card__meta,.card .mini__l,.card .mini__n,.card .card__mon,.card .card__dow{color:var(--card-txt-2)}
.card .times__seg b,.card .flag,.card .notech{color:var(--card-txt-2)}
.card .flag.is-on.flag--ok{color:var(--ok)}
.card .flag.is-on.flag--info{color:var(--info)}
.card .flag.is-on.flag--warn{color:var(--warn)}
.card .times__seg--event b{color:var(--brand-700)}
.card .card__meta b{color:var(--card-txt-1)}
.card .chip{background:var(--card-chip-bg);border-color:var(--card-chip-br)}
.card .chip.bk{background:var(--card-chip-bg-strong)}

/* ── Confirmed ⇄ Pending toggle ── */
.stog{
  display:inline-flex;align-items:center;gap:6px;padding:2px 9px 2px 4px;border-radius:20px;
  font-size:11px;font-weight:650;letter-spacing:.012em;white-space:nowrap;
  border:1px solid var(--line-2);background:var(--card-chip-bg-strong);color:var(--txt-2);
  transition:background .14s,border-color .14s,color .14s;
}
.stog__box{
  display:grid;place-items:center;width:15px;height:15px;border-radius:50%;flex:none;
  border:1.5px solid currentColor;background:transparent;color:inherit;
}
.stog__box .ico{width:10px;height:10px;stroke-width:3.4;color:#fff}
.stog--on{color:var(--stog-on-fg);border-color:var(--stog-on-br);background:var(--stog-on-bg)}
.stog--on .stog__box{background:var(--stog-on-fill);border-color:var(--stog-on-fill)}
.stog--on:hover{background:var(--stog-on-bg-hi);border-color:var(--stog-on-fill)}
.stog--pending{color:var(--stog-pd-fg);border-color:var(--stog-pd-br);background:var(--stog-pd-bg)}
.stog--pending .stog__box{border-style:dashed}
.stog--pending:hover{background:var(--stog-pd-bg-hi);border-color:var(--stog-pd-fg)}
.panel__topacts{display:flex;align-items:center;gap:8px;flex:none}
.times__seg.is-unset{opacity:.5}
.times__seg.is-unset b{color:var(--txt-3)}

/* ── Can you work it? Three answers, one control ──
   A squared-off segmented control, not a pill. The chosen answer fills in;
   the other two stay quiet so the card doesn't shout. */
.avail{display:inline-flex;flex:none;border:1px solid var(--line-2);border-radius:8px;
  overflow:hidden;background:var(--bg-2);box-shadow:var(--sh-1,0 1px 2px rgba(16,32,28,.05))}
.avail__b{display:inline-flex;align-items:center;justify-content:center;gap:5px;
  padding:5px 10px;font-size:11.5px;font-weight:650;letter-spacing:.01em;white-space:nowrap;
  color:var(--txt-3);background:transparent;border-right:1px solid var(--line-2);
  transition:background .14s,color .14s}
.avail__b:last-child{border-right:0}
.avail__b .ico{width:13px;height:13px;stroke-width:2.5;flex:none}
.avail__b:hover{background:var(--bg-3);color:var(--txt-1)}
.avail__b.is-on{color:#fff}
.avail__b.is-on:hover{color:#fff;filter:brightness(1.06)}
.avail__b--ok.is-on  {background:var(--ok)}
.avail__b--warn.is-on{background:var(--warn)}
.avail__b--bad.is-on {background:var(--bad)}
.avail--sm .avail__b{padding:5px 8px}
.card .avail{background:var(--card-chip-bg-strong)}
/* On a mouse, the options stay out of the way until you point at the card.
   Whatever you already answered stays visible; the other two join it on hover.
   Touch screens have no hover, so there they are simply always there. */
@media (hover:hover) and (pointer:fine){
  .card .avail{opacity:0;transition:opacity .14s}
  .card .avail:has(.is-on){opacity:1}
  .card .avail:has(.is-on) .avail__b:not(.is-on){display:none}
  .card:hover .avail,.card:focus-within .avail{opacity:1}
  /* must out-specify the rule above that hides the answers you didn't pick */
  .card:hover .avail:has(.is-on) .avail__b:not(.is-on),
  .card:focus-within .avail:has(.is-on) .avail__b:not(.is-on){display:inline-flex}
}
.section__h .avail{margin-left:auto}
.shift > .avail{flex:none;margin-left:auto}
.shift > .avail + .btn{margin-left:8px}
#av-pick{width:100%}
#av-pick .avail__b{flex:1;justify-content:center}

/* What a tech answered, shown beside their name */
.ans{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;font-weight:700;
  letter-spacing:.02em;padding:1px 7px 1px 5px;border-radius:6px;border:1px solid transparent}
.ans .ico{width:11px;height:11px;stroke-width:2.6}
.ans--ok  {color:var(--ok);  border-color:color-mix(in srgb,var(--ok) 38%,transparent);  background:color-mix(in srgb,var(--ok) 11%,transparent)}
.ans--warn{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 40%,transparent);background:color-mix(in srgb,var(--warn) 11%,transparent)}
.ans--bad {color:var(--bad); border-color:color-mix(in srgb,var(--bad) 40%,transparent); background:color-mix(in srgb,var(--bad) 11%,transparent)}

/* ── Yes / no as a tick or a cross ── */
.mark{display:inline-flex;align-items:center;gap:6px}
.mark .ico{width:15px;height:15px;stroke-width:2.8;padding:2px;border-radius:50%;flex:none}
.mark--yes .ico{color:#fff;background:var(--ok)}
.mark--no  .ico{color:var(--txt-3);background:var(--bg-4);opacity:.85}
.mark__t{font-size:12.5px;font-weight:600}
.mark--yes .mark__t{color:var(--txt-1)}
.mark--no  .mark__t{color:var(--txt-3)}
.mark__note{margin-left:8px;font-size:12px;color:var(--txt-3)}

/* ── Crew notes ── */
.notes{display:grid;gap:7px}
.note{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;background:var(--bg-2);
  border:1px solid var(--line);border-radius:var(--r-sm);transition:border-color .14s}
.note:hover{border-color:var(--line-2)}
.note__main{flex:1;min-width:0}
.note__head{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.note__head b{font-size:13px;font-weight:650}
.note__when{font-size:11.5px;color:var(--txt-3);font-family:var(--mono)}
.note__body{margin-top:4px;font-size:13.5px;line-height:1.55;color:var(--txt-2);white-space:pre-wrap;
  word-break:break-word}
.note .iconbtn{opacity:0;transition:opacity .14s}
.note:hover .iconbtn,.note:focus-within .iconbtn{opacity:1}

.noteadd{display:grid;gap:8px;margin-bottom:10px;padding:11px;background:var(--bg-2);
  border:1px solid var(--brand-400,var(--line-2));border-radius:var(--r-sm)}
.noteadd__acts{display:flex;justify-content:flex-end;gap:7px}

/* a tab that just says "there is something in here" */
.tab__dot{width:5px;height:5px;border-radius:50%;background:var(--brand-600);
  margin-left:6px;display:inline-block;vertical-align:middle}
.stog--off{color:var(--txt-3);border-style:dashed;cursor:default}
.stog--off .stog__box{display:none}
.stog--off .ico{width:11px;height:11px}
button.stog{cursor:pointer}
.card{cursor:pointer}
.card:focus-visible{outline:2px solid var(--brand-600);outline-offset:2px}
.panel__chips .stog{font-size:11.5px}

/* version stamp in the sidebar footer */
.sidebar__ver{margin-left:auto;font-size:10.5px;color:rgba(255,255,255,.55);letter-spacing:.02em}

/* ══════════════════════════════════════════════════════════
   DARK MODE
   Shoreline Green is the anchor in both modes. The dark ground is
   that same green pulled almost to black rather than a neutral grey,
   so the two modes read as one brand.
   Follows the system unless the toggle in the sidebar overrides it.
   ══════════════════════════════════════════════════════════ */
/* The system preference is applied by setting data-theme in JS on load, so the
   palette lives in exactly one place instead of being duplicated in a media query. */
:root[data-theme="dark"]{
  color-scheme: dark;
  /* surfaces — green-blacks, not neutral greys */
  --bg-0:#0A1211;
  --bg-1:#0E1716;
  --bg-2:#14201E;
  --bg-3:#1A2825;
  --bg-4:#22322F;
  --line:#22322F;
  --line-2:#31433F;

  --txt-1:#E8EFED;
  --txt-2:#A9BBB6;
  --txt-3:#899B96;

  /* the green ramp flips: lighter tints do the work on a dark ground */
  --brand-50:#0D211E;
  --brand-100:#123029;
  --brand-200:#1B473E;
  --brand-300:#8FD4C8;
  --brand-400:#6BC4B6;
  --brand-500:#44AB9C;
  --brand-600:#00857A;
  --brand-700:#00685E;
  --brand-800:#004B44;
  --brand-900:#00332D;

  /* status — lifted so they clear 4.5:1 on the dark surfaces */
  --ok:#6FCB74;
  --warn:#E3AC4A;
  --bad:#F0784E;
  --info:#6FB6E8;

  /* booking types — the same three brand hues, as deep washes */
  --rent-wash:#16240F; --rent-wash-hi:#1D2F14; --rent-bar:#5FC93F;
  --rent-fg:#8FDC70;   --rent-br:#2F4A22;      --rent-bg:#16240F;
  --coll-wash:#1C1530; --coll-wash-hi:#241B3D; --coll-bar:#A98BE4;
  --coll-fg:#C7B2F2;   --coll-br:#3D3160;      --coll-bg:#1C1530;
  --pend-wash:#2C1A07; --pend-wash-hi:#38220A; --pend-bar:#FF9B3D; --pend-br:#5C3812;
  --pend-fg:#FFB066;   --pend-solid:#A9520A;
  --dept-wash:#0E202D; --dept-wash-hi:#132A3A; --dept-bar:#3C93CE;
  --dept-fg:#7FC1EC;   --dept-br:#1D3B50;      --dept-bg:#0E202D;
  --canc-wash:#2B1111; --canc-wash-hi:#381616; --canc-bar:#FF6B6B; --canc-fg:#FF8A8A; --canc-solid:#C93636;

  --card-txt-1:#C6D6D1; --card-txt-2:#9BAFA9;
  --card-track:rgba(255,255,255,.12);
  --card-datebg:rgba(255,255,255,.07);
  --card-chip-bg:rgba(255,255,255,.07);
  --card-chip-bg-strong:rgba(255,255,255,.10);

  --stog-on-fg:#7FD283; --stog-on-br:#2B4A2D; --stog-on-bg:#13220F;
  --stog-on-bg-hi:#1A2E16; --stog-on-fill:#3D8C41;
  --stog-pd-fg:#EFBE6A; --stog-pd-br:#4D3A15; --stog-pd-bg:#261C07;
  --stog-pd-bg-hi:#31250A;

  /* the sidebar stays Shoreline Green — a shade deeper so it doesn't glare */
  --sidebar-bg:#00473F;
  --sidebar-line:#00332D;

  --scrim:rgba(0,0,0,.55);
  --scrim-strong:rgba(0,0,0,.62);

  --sh-1:0 1px 2px rgba(0,0,0,.45);
  --sh-2:0 2px 10px rgba(0,0,0,.45);
  --sh-3:0 14px 38px -10px rgba(0,0,0,.65);
}

/* pieces that need more than a token swap */
:root[data-theme="dark"] .gate__bg::after{
  background:linear-gradient(to bottom,#0F2320,var(--bg-1) 58%);
}
:root[data-theme="dark"] .gate__waves{opacity:.34}
:root[data-theme="dark"] .gate__mark{background:var(--brand-100);border-color:var(--brand-200)}
:root[data-theme="dark"] .btn--primary{background:var(--brand-600);border-color:var(--brand-600);color:#fff}
:root[data-theme="dark"] .btn--primary:hover{background:var(--brand-500);border-color:var(--brand-500)}
:root[data-theme="dark"] .navitem.is-active{background:rgba(255,255,255,.14)}
:root[data-theme="dark"] .req__tick{background:var(--bg-0)}
:root[data-theme="dark"] .card.is-today .card__date{background:var(--brand-600);border-color:var(--brand-500)}
:root[data-theme="dark"] .hint code{background:var(--brand-100);border-color:var(--brand-200);color:var(--brand-300)}
:root[data-theme="dark"] ::selection{background:var(--brand-800);color:#fff}
:root[data-theme="dark"] .select{
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23A9BBB6' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
}
:root[data-theme="dark"] input,:root[data-theme="dark"] textarea,:root[data-theme="dark"] select{color-scheme:dark}

/* ── The toggle ── */
.themetog{
  display:grid;place-items:center;width:28px;height:28px;border-radius:7px;flex:none;
  color:var(--s-dim);transition:background .14s,color .14s;
}
.themetog:hover{background:rgba(255,255,255,.16);color:#fff}
.themetog .ico{width:15px;height:15px}
.themetog .ico--moon{display:none}
:root[data-theme="dark"] .themetog .ico--sun{display:none}
:root[data-theme="dark"] .themetog .ico--moon{display:block}

/* ── Sign in / sign up ── */
.gate__ok{color:var(--ok);font-size:13px;text-align:center;line-height:1.5}
.gate__switch{margin-top:2px;text-align:center;font-size:12.5px;color:var(--txt-3)}
.linkbtn{color:var(--brand-600);font-weight:600;font-size:12.5px;text-decoration:underline;text-underline-offset:2px}
.linkbtn:hover{color:var(--brand-700)}

/* ── Waiting for approval ── */
.pending{display:grid;justify-items:center;gap:14px;text-align:center;padding:8px 0 2px}
.pending__ico{display:grid;place-items:center;width:52px;height:52px;border-radius:14px;
  background:var(--brand-50);border:1px solid var(--brand-100);color:var(--brand-600)}
.pending__ico .ico{width:24px;height:24px}
.pending h2{font-size:17px;letter-spacing:-.02em}
.pending p{color:var(--txt-2);font-size:13.5px;line-height:1.6;max-width:320px}
.pending code{font-family:var(--sans);font-weight:650;color:var(--txt-1)}

/* ── Role badge in the sidebar ── */
.sidebar__who{display:flex;align-items:center;gap:8px;padding:9px 14px;border-top:1px solid var(--s-line);min-width:0}
.sidebar__who .av{width:24px;height:24px;font-size:10px}
.sidebar__whoname{min-width:0;line-height:1.2}
.sidebar__whoname b{display:block;font-size:12.5px;font-weight:600;color:#fff;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sidebar__whoname span{font-size:10.5px;color:var(--s-dim);letter-spacing:.03em;text-transform:uppercase}
.def__v.is-locked{cursor:default}
.def__v.is-locked:hover{background:none;box-shadow:none}
.req__tick:disabled{cursor:default;opacity:.85}

/* ── People ── */
.prows{display:grid;gap:9px}
.prow{display:grid;grid-template-columns:auto 1fr 190px 190px;gap:14px;align-items:center;
  padding:13px 15px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-md)}
.prow--pending{border-color:color-mix(in srgb,var(--warn) 46%,transparent);
  background:color-mix(in srgb,var(--warn) 7%,var(--bg-2))}
.prow__main{min-width:0}
.prow__name{font-size:14px;font-weight:620;letter-spacing:-.012em;display:flex;align-items:center;gap:7px}
.prow__mail{font-size:12.5px;color:var(--txt-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.prow__f{display:grid;gap:4px;min-width:0}
.prow__f > span{font-size:10.5px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--txt-3)}
.prow__f .select{font-size:13px;padding:7px 30px 7px 10px}

.notice{display:flex;align-items:flex-start;gap:10px;padding:12px 15px;border-radius:var(--r-md);
  font-size:13.5px;line-height:1.55;margin-bottom:18px;border:1px solid var(--line);background:var(--bg-2)}
.notice .ico{flex:none;margin-top:2px}
.notice--warn{color:var(--txt-1);border-color:color-mix(in srgb,var(--warn) 46%,transparent);
  background:color-mix(in srgb,var(--warn) 9%,var(--bg-2))}
.notice--warn .ico{color:var(--warn)}

@media (max-width:860px){ .prow{grid-template-columns:auto 1fr;gap:10px} .prow__f{grid-column:1/-1} }

/* ── Accounts block inside Crew ── */
.arows{display:grid;gap:8px}
.arow{display:grid;grid-template-columns:1fr 180px 180px;gap:12px;align-items:center;
  padding:11px 14px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-md)}
.arow--pending{border-color:color-mix(in srgb,var(--warn) 46%,transparent);
  background:color-mix(in srgb,var(--warn) 7%,var(--bg-2))}
.arow__main{min-width:0}
.arow__name{font-size:13.5px;font-weight:600;display:flex;align-items:center;gap:7px}
.arow__mail{font-size:12px;color:var(--txt-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.arow .select{font-size:12.5px;padding:6px 28px 6px 9px}
@media (max-width:860px){ .arow{grid-template-columns:1fr} }
.shift__hours.is-adjusted{color:var(--warn);font-weight:650}

/* ── Calendar month navigation ── */
.calnav{display:flex;align-items:center;gap:6px}
.calnav h1{min-width:186px;text-align:center}
.calnav__btn{display:grid;place-items:center;width:32px;height:32px;border-radius:8px;
  color:var(--txt-2);border:1px solid var(--line-2);background:var(--bg-2)}
.calnav__btn:hover{background:var(--bg-3);color:var(--txt-1);border-color:var(--line-2)}
.stats--3{grid-template-columns:repeat(3,1fr)}
@media (max-width:1080px){ .stats--3{grid-template-columns:repeat(3,1fr)} }
@media (max-width:520px){ .stats--3{grid-template-columns:1fr 1fr} }

/* ── Work days: neutral slate, so they never read as a booking ── */
:root{--work-wash:#EEF1F3; --work-wash-hi:#E3E8EC; --work-bar:#6B7A86; --work-fg:#3E4C57; --work-br:#C9D2D9; --work-bg:#EEF1F3}
:root[data-theme="dark"]{--work-wash:#171D21; --work-wash-hi:#1D252A; --work-bar:#7E8E9A; --work-fg:#B3C0CA; --work-br:#2E3A42; --work-bg:#171D21}
.card.bk--work   {--bk-wash:var(--work-wash); --bk-wash-hi:var(--work-wash-hi); border-left-color:var(--work-bar)}
.cal__ev.bk--work{background:var(--work-wash);border-left-color:var(--work-bar)}
.chip.bk--work   {color:var(--work-fg);border-color:var(--work-br);background:var(--work-bg);text-transform:uppercase;letter-spacing:.06em;font-size:10px}
/* the label text pushes the count to the end — but the colour dot is a span too,
   and it must keep its 7px, so exclude it */
.filter > span:not(.filter__dot){flex:1}
.filter__n{font-style:normal;font-size:11px;font-weight:650;color:#fff;background:rgba(255,255,255,.18);padding:1px 7px;border-radius:20px;min-width:22px;text-align:center}
.filter__n:empty{display:none}


/* ══════════════════════════════════════════════════════════
   v1.21 — colour in the panel, branded pop-ups, in-place crew
   ══════════════════════════════════════════════════════════ */

/* The panel header wears the event's own booking colour, so it reads as the
   same thing as the card you clicked. Cancelled overrides it, as on the card. */
.panel__head{border-top:4px solid var(--ph-bar,var(--brand-600));
  background:linear-gradient(180deg,var(--ph-wash,var(--bg-2)) 0%,var(--bg-2) 92%)}
.panel__head[data-bk=rental]   {--ph-bar:var(--rent-bar);  --ph-wash:var(--rent-wash)}
.panel__head[data-bk=college]  {--ph-bar:var(--coll-bar);  --ph-wash:var(--coll-wash)}
.panel__head[data-bk=dept]     {--ph-bar:var(--dept-bar);  --ph-wash:var(--dept-wash)}
.panel__head[data-bk=work]     {--ph-bar:var(--work-bar);  --ph-wash:var(--work-wash)}
.panel__head[data-bk=other]    {--ph-bar:var(--line-2);    --ph-wash:var(--bg-2)}
.panel__head[data-bk=cancelled]{--ph-bar:var(--canc-bar);  --ph-wash:var(--canc-wash)}
.panel__head[data-bk=pending]  {--ph-bar:var(--pend-bar);  --ph-wash:var(--pend-wash)}

/* the event name edits in place like every other value */
.panel__name{border-radius:6px;margin:-2px -6px;padding:2px 6px;transition:background .13s,box-shadow .13s}
.panel__name:not(.is-locked){cursor:text}
.panel__name:not(.is-locked):hover{background:rgba(255,255,255,.55);box-shadow:inset 0 0 0 1px var(--line-2)}
:root[data-theme="dark"] .panel__name:not(.is-locked):hover{background:rgba(255,255,255,.06)}
.panel__name .edit{font:inherit;font-size:17px;font-weight:650;letter-spacing:-.02em;width:100%}

/* a small coloured mark on each Overview heading */
.sec-ico{width:14px;height:14px;margin-right:7px;vertical-align:-2px;color:var(--brand-600);stroke-width:2.1}

/* time tiles pick up a brand tint; the event time is the one that matters */
.deftiles .def{background:var(--brand-50);border-color:var(--brand-100)}
.deftiles .def[data-field=event_time]{background:var(--bg-2);border-color:var(--brand-600);
  box-shadow:inset 0 3px 0 var(--brand-600)}
.deftiles .def[data-field=event_time] dt{color:var(--brand-700)}

/* ── Branded pop-ups: Shoreline Green header, like the sidebar ── */
.modal{border:0;overflow:hidden}
.modal__head{background:var(--brand-600);border-bottom:0;padding:15px 18px}
.modal__head h2{color:#fff;font-weight:650}
.modal__head .iconbtn{color:rgba(255,255,255,.78)}
.modal__head .iconbtn:hover{background:rgba(255,255,255,.14);color:#fff}
.modal-root{animation:fade .14s ease both}
.modal{animation:pop .18s cubic-bezier(.2,.8,.2,1) both}

/* Few choices become one button group — never a native dropdown list */
.segpick{display:flex;flex-wrap:wrap;border:1px solid var(--line-2);border-radius:8px;overflow:hidden;background:var(--bg-2)}
.segpick__o{flex:1 1 auto;display:flex;min-width:0}
.segpick__o input{position:absolute;opacity:0;pointer-events:none;width:1px;height:1px}
.segpick__o span,.segpick__b{flex:1;display:grid;place-items:center;padding:8px 12px;font-size:13px;font-weight:600;
  color:var(--txt-2);cursor:pointer;white-space:nowrap;border-right:1px solid var(--line-2);
  transition:background .13s,color .13s}
.segpick__o:last-child span,.segpick__b:last-child{border-right:0}
.segpick__o span:hover,.segpick__b:hover{background:var(--bg-3);color:var(--txt-1)}
.segpick__o input:checked + span,.segpick__b.is-on{background:var(--brand-600);color:#fff}
.segpick__o input:focus-visible + span,.segpick__b:focus-visible{outline:2px solid var(--brand-400);outline-offset:-2px}
.segpick--inline{display:inline-flex;flex-wrap:nowrap;max-width:100%}
.segpick--inline .segpick__b{padding:5px 10px;font-size:12.5px}

/* ── Crew tab: pick a person ── */
.btn.is-on{background:var(--brand-50);color:var(--brand-700);box-shadow:inset 0 0 0 1px var(--brand-100)}
.section__h .btn.is-on{opacity:1}
.techpick{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:6px;margin-bottom:12px;
  padding:10px;background:var(--brand-50);border:1px solid var(--brand-100);border-radius:var(--r-md);
  animation:fold .16s ease both}
.techpick--empty{display:block;color:var(--txt-3);font-size:13px;font-style:italic}
.techpick__b{display:flex;align-items:center;gap:9px;padding:8px 10px;text-align:left;
  background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-sm);
  transition:border-color .13s,box-shadow .13s,transform .1s}
.techpick__b:hover{border-color:var(--brand-600);box-shadow:0 0 0 1px var(--brand-600)}
.techpick__b:active{transform:scale(.985)}
.techpick__n{display:grid;flex:1;min-width:0;line-height:1.25}
.techpick__n b{font-size:13px;font-weight:620;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.techpick__n small{font-size:11px;color:var(--txt-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@keyframes fold{from{opacity:0;transform:translateY(-4px)}}

/* ── Crew tab: a schedule row opens in place ── */
.shift.is-editable{cursor:pointer}
.shift.is-editable:focus-visible{outline:2px solid var(--brand-600);outline-offset:2px}
.shift__chev{display:grid;place-items:center;color:var(--txt-3);flex:none;transition:transform .16s}
.shift__chev .ico{width:15px;height:15px}
.shift.is-open .shift__chev{transform:rotate(180deg);color:var(--brand-700)}
.shiftwrap.is-open{border:1px solid var(--brand-600);border-radius:var(--r-sm);overflow:hidden;
  box-shadow:0 0 0 1px var(--brand-600)}
.shiftwrap.is-open > .shift{border:0;border-radius:0;background:var(--brand-50)}
.shiftedit{display:grid;gap:12px;padding:14px;background:var(--bg-2);border-top:1px solid var(--brand-100);
  animation:fold .16s ease both}
.shiftedit__worked{display:grid;gap:10px;padding:11px;background:var(--bg-1);border:1px solid var(--line);border-radius:var(--r-sm)}
.shiftedit__h{font-size:10px;font-weight:750;letter-spacing:.09em;text-transform:uppercase;color:var(--txt-3)}
.shiftedit__acts{display:flex;align-items:center;gap:7px}
.shiftedit__sp{flex:1}
.rows--sub{margin-top:8px;padding-top:8px;border-top:1px dashed var(--line-2)}
.shift--quiet{background:var(--bg-1)}
@media (prefers-reduced-motion:reduce){ .panel{animation:none} }


/* ── Status: a bar at the top of the panel ── */
.statbar{display:flex;margin-top:12px;border:1px solid var(--line-2);border-radius:8px;overflow:hidden;
  background:var(--bg-2)}
.statbar__b{flex:1;display:grid;place-items:center;padding:7px 10px;font-size:12.5px;font-weight:650;
  color:var(--txt-3);border-right:1px solid var(--line-2);transition:background .13s,color .13s;white-space:nowrap}
.statbar__b:last-child{border-right:0}
button.statbar__b{cursor:pointer}
button.statbar__b:hover{background:var(--bg-3);color:var(--txt-1)}
button.statbar__b:focus-visible{outline:2px solid var(--brand-400);outline-offset:-2px}
.statbar__b.is-on{color:#fff}
/* each choice carries its own colour even when it isn't picked, so the bar
   reads green / orange / red at a glance — the same colours as the list */
.statbar__b:nth-child(1){color:var(--ok)}
.statbar__b:nth-child(2){color:var(--pend-fg)}
.statbar__b:nth-child(3){color:var(--canc-fg)}
.statbar__b--ok.is-on  {background:var(--ok);color:#fff}
.statbar__b--warn.is-on{background:var(--pend-solid);color:#fff}
.statbar__b--bad.is-on {background:var(--canc-solid);color:#fff}
/* crew see the same status bar as managers; it just isn't clickable */
.statbar.is-static .statbar__b{cursor:default}

/* ── Pending: confirmed says nothing, pending gets marked ── */
/* Pending: the whole tile goes orange, like cancelled goes red. */
.card.is-pending,.erow.is-pending{
  --bk-wash:var(--pend-wash); --bk-wash-hi:var(--pend-wash-hi);
  border-color:var(--pend-br); border-left-color:var(--pend-bar)!important;
}
.card.is-pending .card__date{border-color:var(--pend-br);padding-bottom:0;overflow:hidden}
.card__pend{display:block;align-self:stretch;margin-top:5px;padding:2px 0;text-align:center;
  font-size:7.5px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;
  background:var(--pend-solid);color:#fff}
.erow.is-pending .erow__date{border-color:var(--pend-br);box-shadow:inset 0 -3px 0 var(--pend-bar)}
.erow__pend{font-size:10px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:var(--pend-fg);white-space:nowrap}


/* ══════════════════════════════════════════════════════════
   v1.22 — smooth, live interactions
   ══════════════════════════════════════════════════════════ */

/* Anything you can click to change glows as you point at it */
.def--edit .def__v:not(.is-locked){transition:background .15s,box-shadow .15s}
.def--edit .def__v:not(.is-locked):hover{
  background:var(--brand-50);
  box-shadow:inset 0 0 0 1px var(--brand-100),0 0 0 3px color-mix(in srgb,var(--brand-600) 14%,transparent)}
.mark .ico{transition:background .2s ease,color .2s ease,transform .2s ease}
.def--edit .def__v:not(.is-locked):hover .mark .ico{transform:scale(1.12)}
.def--edit .def__v:not(.is-locked):hover .mark--no .ico{background:var(--brand-100);color:var(--brand-700);opacity:1}

/* the thing you just changed says so, briefly */
@keyframes popin{0%{transform:scale(.55);opacity:.4}60%{transform:scale(1.14);opacity:1}100%{transform:scale(1)}}
@keyframes glow{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--brand-600) 45%,transparent)}100%{box-shadow:0 0 0 9px transparent}}
.def.is-flash .mark .ico{animation:popin .32s cubic-bezier(.2,.9,.3,1.3)}
.def.is-flash .def__v{animation:glow .6s ease-out}
.avail.is-flash .avail__b.is-on{animation:popin .3s cubic-bezier(.2,.9,.3,1.3)}
.statbar.is-flash .statbar__b.is-on{animation:popin .3s cubic-bezier(.2,.9,.3,1.3)}
.shiftwrap.is-flash > .shift,.row.is-flash,.note.is-flash{animation:glow .7s ease-out}
.row.is-flash .row__box{animation:popin .3s cubic-bezier(.2,.9,.3,1.3)}

/* buttons respond to your finger/mouse, not after the save */
.avail__b,.statbar__b,.segpick__b,.techpick__b{transition:background .16s,color .16s,box-shadow .16s,transform .1s}
.avail__b:active,.statbar__b:active,.segpick__b:active{transform:scale(.94)}
.avail__b:not(.is-on):hover .ico{transform:scale(1.15)}
.avail__b .ico{transition:transform .15s}

/* Crew tab: the schedule row wrapper is always present now */
.shiftwrap{display:block}
.shiftwrap:not(.is-open) > .shift{margin:0}

/* the assign list: search on top, a tidy scrolling box underneath the schedule */
.techpick-wrap{margin-top:10px;padding:10px;background:var(--brand-50);border:1px solid var(--brand-100);
  border-radius:var(--r-md);animation:fold .16s ease both}
.techpick__q{margin-bottom:8px}
.techpick-wrap .techpick{margin:0;padding:0;border:0;background:none;animation:none;
  max-height:300px;overflow-y:auto;overscroll-behavior:contain}
.techpick__b[hidden]{display:none}

/* Copy confirms on the button itself */
.btn.is-copied{color:var(--ok);opacity:1!important}
.btn.is-copied .ico{color:var(--ok)}

/* a missing required field is marked where you're looking */
@keyframes nudge{0%,100%{transform:none}25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}
.input.is-invalid,.datein.is-invalid{border-color:var(--bad)!important;
  box-shadow:0 0 0 3px color-mix(in srgb,var(--bad) 22%,transparent)!important;animation:nudge .28s ease}

@media (prefers-reduced-motion:reduce){
  .def.is-flash .mark .ico,.def.is-flash .def__v,.avail.is-flash .avail__b.is-on,.statbar.is-flash .statbar__b.is-on,
  .shiftwrap.is-flash > .shift,.row.is-flash,.note.is-flash,.row.is-flash .row__box,.input.is-invalid{animation:none}
}


/* v1.22 review fixes */
/* read by screen readers, never seen */
.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}
/* dark mode: the unticked cross stays clearly visible while you hover it */
:root[data-theme="dark"] .def--edit .def__v:not(.is-locked):hover .mark--no .ico{background:var(--bg-4);color:var(--txt-1)}
/* room inside the assign list so focus and hover rings aren't clipped at its edges */
.techpick-wrap .techpick{padding:4px;margin:-4px;scroll-padding:4px}

/* ══════════════════════════════════════════════════════════
   v1.23 — right-click menu, the bin
   ══════════════════════════════════════════════════════════ */

/* The menu: Shoreline green along the top, the event it's about named first */
.ctx{position:fixed;z-index:95;min-width:224px;max-width:290px;padding:5px;
  background:var(--bg-2);border:1px solid var(--line-2);border-top:3px solid var(--brand-600);
  border-radius:var(--r-lg);box-shadow:var(--sh-3);animation:ctxin .13s cubic-bezier(.2,.8,.2,1) both}
@keyframes ctxin{from{opacity:0;transform:scale(.95)}}
.ctx__head{display:grid;gap:1px;padding:5px 10px 7px;margin-bottom:3px;border-bottom:1px solid var(--line)}
.ctx__head b{font-size:12.5px;font-weight:700;color:var(--txt-1);letter-spacing:-.01em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ctx__head span{font-size:11px;font-weight:650;color:var(--brand-600);letter-spacing:.02em}
.ctx__i{display:flex;align-items:center;gap:10px;width:100%;padding:7px 10px;border-radius:7px;
  font-size:13px;font-weight:520;color:var(--txt-1);text-align:left;transition:background .1s,color .1s}
.ctx__i > span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ctx__i .ico{width:16px;height:16px;color:var(--txt-3);transition:color .1s}
.ctx__i.is-strong{font-weight:650}
.ctx__i:not(:disabled):hover,.ctx__i:focus-visible{background:var(--brand-50);color:var(--brand-700);outline:none}
.ctx__i:not(:disabled):hover .ico,.ctx__i:focus-visible .ico{color:var(--brand-600)}
.ctx__i:disabled{opacity:.42;cursor:default}
.ctx__i--danger,.ctx__i--danger .ico,
.ctx__i--danger:not(:disabled):hover .ico,.ctx__i--danger:focus-visible .ico{color:var(--canc-fg)}
.ctx__i--danger:not(:disabled):hover,.ctx__i--danger:focus-visible{background:var(--canc-wash);color:var(--canc-fg)}
.ctx__i.is-copied,.ctx__i.is-copied .ico{color:var(--ok)}
.ctx__sep{height:1px;background:var(--line);margin:4px 6px}

/* status (or your answer) as three coloured choices, the current one filled */
.ctx__seg{display:flex;gap:3px;padding:3px;margin:3px 2px;background:var(--bg-1);border:1px solid var(--line);border-radius:8px}
.ctx__sb{flex:1;display:flex;align-items:center;justify-content:center;gap:5px;min-width:0;padding:6px 5px;
  border-radius:6px;font-size:11.5px;font-weight:650;white-space:nowrap;transition:background .12s,color .12s,transform .12s}
.ctx__sb .ico{width:13px;height:13px;stroke-width:2.4}
.ctx__dot{width:7px;height:7px;border-radius:50%;background:currentColor;flex:none}
.ctx__sb--ok{color:var(--ok)}
.ctx__sb--warn{color:var(--pend-fg)}
.ctx__sb--bad{color:var(--canc-fg)}
.ctx__sb:hover,.ctx__sb:focus-visible{background:var(--bg-3);outline:none;box-shadow:inset 0 0 0 1px var(--line-2)}
.ctx__sb:active{transform:scale(.96)}
.ctx__sb--ok.is-on{background:var(--ok);color:#fff}
.ctx__sb--warn.is-on{background:var(--pend-solid);color:#fff}
.ctx__sb--bad.is-on{background:var(--canc-solid);color:#fff}
.ctx__sb.is-on .ctx__dot{background:#fff}

/* what the menu is about stays marked while it's open */
.card.is-ctx,.erow.is-ctx,.cal__ev.is-ctx{box-shadow:0 0 0 2px var(--brand-400);border-color:var(--brand-400)}
.cal__cell.is-ctx{background:var(--brand-50);box-shadow:inset 0 0 0 2px var(--brand-300)}
.dayhead.is-ctx .dayhead__d{color:var(--brand-600)}

/* something that just arrived (a duplicate, a paste, a restore) pops in */
@keyframes arrive{0%{opacity:0;transform:translateY(-6px) scale(.98)}100%{opacity:1;transform:none}}
.is-arrived{animation:arrive .32s cubic-bezier(.2,.8,.2,1) both,glow .9s ease-out .15s}

/* phones: press and hold opens the menu, so no text-selection bubble on top of it */
@media (hover:none){
  .card,.erow,.cal__ev,.cal__cell,.dayhead{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}
}

/* ── Bin ── */
.binrow{grid-template-columns:38px 30px 1fr auto auto;cursor:default}
.binrow__when{font-size:11.5px;color:var(--txt-3);white-space:nowrap}
.binrow__acts{display:flex;align-items:center;gap:6px}
@media (max-width:620px){
  .binrow{grid-template-columns:38px 1fr auto}
  .binrow .erow__w,.binrow__when{display:none}
}
:root[data-theme="dark"] .ctx__i:not(:disabled):hover,:root[data-theme="dark"] .ctx__i:focus-visible{background:var(--brand-100);color:var(--brand-300)}
:root[data-theme="dark"] .ctx__i:not(:disabled):hover .ico,:root[data-theme="dark"] .ctx__i:focus-visible .ico,
:root[data-theme="dark"] .ctx__head span{color:var(--brand-400)}
:root[data-theme="dark"] .ctx__i--danger:not(:disabled):hover,:root[data-theme="dark"] .ctx__i--danger:focus-visible{background:var(--canc-wash);color:var(--canc-fg)}
:root[data-theme="dark"] .ctx__i--danger:not(:disabled):hover .ico,:root[data-theme="dark"] .ctx__i--danger:focus-visible .ico{color:var(--canc-fg)}
