:root{
  /* PITEX brand. Navy carries the structure — nav, selection, focus, headings.
     Orange is held back for the one action that matters on a page, so it stays
     loud by being rare. */
  --navy:#244477;
  --navy-dark:#152a4d;
  --navy-darker:#0e1c35;
  --orange:#f26445;
  --orange-light:#ff8a68;

  --brand:var(--navy);
  --accent:var(--orange);

  /* Stall states stay green and red. They say what a stall IS rather than who
     we are, and a map drawn in one hue cannot be read at a glance. */
  --available:#1f9d55;
  --booked:#d64545;
  --reserved:#e9ecef;

  /* The map is read the way a seat map is read, in four steps of weight rather
     than four hues: an open stall is an outline, a held one is filled grey, a
     taken one is filled navy, and a stall you have picked is orange -- the same
     orange as the button that will buy it. */
  --picked-edge:#b8391a;
  --ink:#1c2b3f;

  --tile-free:#ffffff;      --tile-free-ink:#244477;      --tile-free-edge:#b9c8de;
  --tile-taken:#244477;     --tile-taken-ink:#ffffff;     --tile-taken-edge:#1b3563;
  --tile-held:#e4e8ee;      --tile-held-ink:#8a97a8;      --tile-held-edge:#cfd6df;
  --tile-picked:#f26445;    --tile-picked-ink:#ffffff;

  --stall-row:28px;
  --stall-col:52px;

  --stall-gap:2px;

  --aisle:14px;

  --block:214px;

  --plan:346px;

  --paper:#ffffff;
  --ground:#f7f8fa;
  --edge:#e9ecef;
  --edge-soft:#f1f4f7;
  --edge-strong:#cfd8e3;
  --edge-hover:#b8c4d2;

  --fill:#eef1f6;
  --fill-hover:#e3e9f0;

  --ink-2:#47576e;
  --ink-3:#5b6b80;
  --ink-4:#8a99ad;
  --ink-5:#a8b4c3;

  --tint:#eef3fa;
  --tint-edge:#cddbef;
  --ink-brand:#1e3c6b;

  --danger-ink:#a32020;
  --danger-tint:#fdecec;
  --danger-edge:#f3c9c9;

  --warn:#c9862a;
  --warn-ink:#7a5310;
  --warn-tint:#fff6e6;
  --warn-edge:#f2d9a4;

  --ok-ink:#166b3c;
  --ok-tint:#e7f6ed;
  --ok-edge:#b6e2c7;

  --font-heading:'Poppins','Segoe UI',Arial,sans-serif;
  --font-body:'Inter','Segoe UI',Arial,sans-serif;

  --radius:14px;
  --radius-sm:9px;

  --shadow-1:0 1px 2px rgba(20,34,61,.06);
  --shadow-2:0 4px 14px rgba(20,34,61,.08), 0 1px 3px rgba(20,34,61,.05);
  --shadow-soft:0 10px 40px rgba(20,34,61,.08);
  --shadow-strong:0 20px 60px rgba(20,34,61,.18);

  /* the scrim is --navy-darker held back to 45% */
  --scrim:rgba(14,28,53,.45);

  --ring:0 0 0 3px rgba(36,68,119,.22);
}
*{box-sizing:border-box;}
body{
  margin:0;

  font-family:var(--font-body);
  font-size:14px;
  line-height:1.5;
  background:var(--ground);
  color:var(--ink);

  -webkit-text-size-adjust:100%;
  overflow-wrap:break-word;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
}

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

.topbar{
  background:rgba(255,255,255,.85);

  backdrop-filter:saturate(1.6) blur(10px);
  -webkit-backdrop-filter:saturate(1.6) blur(10px);
  border-bottom:1px solid var(--edge);

  padding:0 24px 0 0;display:flex;align-items:center;gap:24px;
  position:sticky;top:0;z-index:20;
}

.topbar .brand{
  flex:none;display:flex;align-items:center;
  padding:2px 0 2px 22px;
}
.topbar .brand img{
  display:block;width:auto;height:42px;
  border:2px solid var(--orange);
}

.topbar .ico{
  flex:none;width:16px;height:16px;opacity:.68;
  transition:opacity .13s ease, color .13s ease;
}
.topbar nav a:hover .ico{opacity:1;}

.topbar nav a.active .ico{opacity:1;color:#fff;}
.topbar-right .ico{width:15px;height:15px;}

.topbar nav{display:flex;gap:2px;flex-wrap:wrap;}
.topbar.has-menu nav{
  align-self:stretch;align-items:center;
  background:var(--paper);
  border-left:1px solid var(--edge);
  border-right:1px solid var(--edge);
}
.topbar nav a{

  display:flex;align-items:center;gap:8px;
  padding:15px 13px;font-size:13px;font-weight:500;color:var(--ink-2);
  text-decoration:none;transition:color .13s ease, background-color .13s ease;
}

.topbar nav a:hover{background:var(--tint);color:var(--ink-brand);}

.topbar nav a.active,
.topbar nav a.active:hover{background:var(--brand);color:#fff;font-weight:650;}

.topbar-right{margin-left:auto;display:flex;align-items:center;gap:14px;font-size:13px;}
.topbar-right form{margin:0;}
.topbar-right .link-btn{display:inline-flex;align-items:center;gap:10px;}
.whoami{color:var(--ink-2);font-weight:500;}
.whoami .role{
  display:inline-block;margin-left:6px;padding:2.5px 8px;border-radius:20px;
  background:var(--tint);color:var(--ink-brand);
  border:1px solid var(--tint-edge);
  font-size:10px;font-weight:700;
  text-transform:uppercase;letter-spacing:.5px;
}
.link-btn{
  background:none;border:none;padding:0;font:inherit;color:var(--brand);
  font-weight:600;cursor:pointer;text-decoration:none;
  transition:color .13s ease;
}

.link-btn:hover{text-decoration:underline;text-underline-offset:2px;}
.link-btn.is-danger:hover{color:var(--danger-ink);}
.link-btn.is-quiet:hover{color:var(--ink);}
.page{padding:24px;}

/* The sign-in screens are a two-panel split: on the left a photograph held under
   a navy wash carries the brand, on the right sits the form. Below a narrow width
   the panels stack, the photo shrinking to a banner above the form. The photo is
   public/hero-collage.jpg; if it ever goes missing the gradient over
   --navy-darker keeps the left panel blue on its own. */
body.auth-page{
  min-height:100vh;
  min-height:100dvh;
  display:flex;
}

.auth-hero{
  flex:3 1 0;
  min-width:0;
  position:relative;
  display:flex;align-items:center;justify-content:center;
  padding:48px;
  background-color:var(--navy-darker);
  background-image:
    linear-gradient(150deg, rgba(6,12,26,.975), rgba(12,26,52,.93)),
    url('../hero-collage.jpg');
  background-size:cover;
  background-position:center;
  background-repeat:no-repeat;
}
/* Hero content sits on the photo in white, the marks of PITEX 2026 above the
   fold: a badge, the name, the dates and place, and the numbers that size it. */
.auth-hero-inner{text-align:left;color:#fff;max-width:820px;width:100%;}

.hero-badge{
  display:inline-flex;align-items:center;gap:9px;
  padding:7px 15px;border-radius:100px;
  background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.25);
  font-size:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;
}
.hero-badge .dot{
  width:8px;height:8px;border-radius:50%;background:var(--orange);
  box-shadow:0 0 0 4px rgba(242,100,69,.25);
}
.hero-badge .sep{opacity:.5;}

.hero-h1{
  margin:22px 0 0;font-family:var(--font-heading);
  font-size:clamp(20px,2.4vw,34px);font-weight:700;line-height:1.12;
  letter-spacing:-.01em;color:#fff;
}
.hero-mega{
  margin-top:6px;font-family:var(--font-heading);
  font-size:clamp(40px,7vw,86px);font-weight:700;line-height:1;
  letter-spacing:-.02em;color:var(--orange);
}
.hero-tagline{
  margin:14px 0 0;font-size:clamp(15px,1.5vw,20px);font-weight:500;
  color:rgba(255,255,255,.9);
}

.hero-location{display:flex;flex-wrap:wrap;gap:10px 24px;margin-top:24px;}
.hero-location span{
  display:inline-flex;align-items:center;gap:8px;
  font-size:14px;font-weight:500;color:rgba(255,255,255,.9);
}
.hero-location svg{width:16px;height:16px;flex:none;color:var(--orange-light);}

.hero-stats{
  display:flex;flex-wrap:wrap;gap:24px 32px;
  margin-top:30px;padding-top:26px;border-top:1px solid rgba(255,255,255,.18);
}
.hero-stats .stat-num{
  font-family:var(--font-heading);font-size:clamp(24px,3vw,36px);
  font-weight:700;line-height:1;color:#fff;
}
.hero-stats .stat-num sup{font-size:.5em;}
.hero-stats .stat-label{
  margin-top:5px;font-size:12px;font-weight:500;letter-spacing:.04em;
  text-transform:uppercase;color:rgba(255,255,255,.7);
}

/* The right panel keeps the light ground and centres the mark and card in it.
   The min-width keeps the form comfortable when the split would otherwise crush
   it -- the photo yields width rather than the form becoming unusable. */
body.auth-page .page{
  flex:1 1 0;min-width:380px;
  display:flex;flex-direction:column;
  align-items:center;justify-content:center;
}
.auth-mark{display:block;margin:0 auto 24px;}
.auth-mark img{display:block;width:auto;height:44px;border:2px solid var(--orange);}

.auth-card{
  max-width:380px;margin:56px auto;background:var(--paper);border:1px solid var(--edge);
  border-radius:var(--radius);padding:30px 32px;box-shadow:var(--shadow-soft);
}
body.auth-page .auth-card{margin:0;width:100%;}

/* Between the split and the stack the photo padding eases in so the hero text
   never runs to the panel edge on a small laptop. */
@media (max-width:1200px){
  .auth-hero{padding:40px 36px;}
}

/* Below this the two panels stack: the photo becomes a banner carrying the name,
   the form sits full-width beneath it. min-width resets so nothing overflows a
   narrow phone. */
@media (max-width:980px){
  body.auth-page{flex-direction:column;}
  .auth-hero{flex:none;padding:34px 24px;}
  .auth-hero-inner{max-width:none;}
  .hero-location,.hero-stats{display:none;}
  .hero-mega{font-size:clamp(38px,12vw,60px);}
  body.auth-page .page{flex:1 1 auto;min-width:0;padding:28px 20px 40px;}
  .auth-mark{margin-bottom:18px;}
}
.auth-card h1{margin:0 0 5px;font-size:20px;letter-spacing:-.02em;}
.auth-card .sub{margin-bottom:20px;}
.auth-card .field{margin-bottom:16px;}
.auth-card .field input{width:100%;min-width:0;}
.auth-card .checkbox{
  display:flex;align-items:center;gap:8px;font-size:13px;margin-bottom:8px;
}
.btn-block{width:100%;padding:12px;text-align:center;margin-top:4px;}
.auth-alt{font-size:13px;color:var(--ink-2);margin:18px 0 0;text-align:center;}

/* Poppins for the things that title something, Inter for everything read at
   length. Both fall back to the system stack if the webfont never lands. */
h1,h2,h3{font-family:var(--font-heading);}

h1{
  font-size:21px;font-weight:700;letter-spacing:-.02em;
  margin:0 0 16px;
}
.sub{color:var(--ink-2);font-size:13px;margin-bottom:16px;}

.toasts{
  position:fixed;top:60px;right:14px;z-index:60;
  display:flex;flex-direction:column;gap:8px;
  width:min(340px, calc(100vw - 28px));

  pointer-events:none;
}
.toast{
  pointer-events:auto;
  display:flex;align-items:flex-start;gap:10px;
  padding:11px 13px;border-radius:var(--radius-sm);
  background:var(--ok-tint);border:1px solid var(--ok-edge);color:var(--ok-ink);
  box-shadow:var(--shadow-2);
  font-size:13px;line-height:1.45;
  animation:toast-in .18s ease-out;
}
.toast.is-error{background:var(--danger-tint);border-color:var(--danger-edge);color:var(--danger-ink);}
.toast-text{flex:1 1 auto;min-width:0;}
.toast-x{
  flex:none;border:none;background:none;padding:0;margin:0;
  font-family:inherit;font-size:17px;line-height:1.2;
  color:inherit;opacity:.5;cursor:pointer;
}
.toast-x:hover{opacity:1;}
.toast.is-leaving{animation:toast-out .2s ease-in forwards;}
@keyframes toast-in{from{opacity:0;transform:translateY(-6px);}to{opacity:1;transform:none;}}
@keyframes toast-out{to{opacity:0;transform:translateY(-6px);}}
@media (prefers-reduced-motion:reduce){
  .toast,.toast.is-leaving{animation:none;}
}

.hall-page{position:relative;}
.hall-rail{min-width:0;}

@media screen and (min-width:940px){
  .hall-page{padding:0 278px;}
  .hall-rail{position:absolute;top:0;right:0;width:250px;}
}

.legend{
  display:flex;gap:8px;align-items:center;margin-bottom:20px;
  flex-wrap:wrap;font-size:12.5px;
}
.legend span{
  display:flex;align-items:center;gap:7px;
  padding:4px 10px 4px 8px;border-radius:20px;background:var(--fill);color:var(--ink-2);
  white-space:nowrap;
}
.legend .hint{color:var(--ink-3);background:none;padding:0;}

.hall-fit{
  overflow:hidden;
  width:fit-content;
  max-width:100%;
  margin:0 auto 14px;
  background:var(--paper);border:1px solid var(--edge);
  border-radius:var(--radius);
  padding:16px 20px 18px;
  box-shadow:var(--shadow-1);
}

@media screen and (min-width:940px){

  .hall-fit{margin-bottom:0;}
}

.hall{

  width:max-content;
  margin:0 auto;
  display:grid;
  grid-template-columns:var(--stall-col) auto var(--stall-col);
  gap:var(--aisle);

  align-items:stretch;
}

.wall{min-width:0;}
.col-side{
  display:grid;
  grid-auto-rows:var(--stall-row);
  gap:var(--stall-gap);
}

.stall{

  position:relative;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  text-align:center;
  border-radius:4px;
  font-size:8.5px;
  line-height:1.1;
  padding:2px 1px;
  cursor:pointer;
  user-select:none;
  transition:filter .12s ease;

  -webkit-tap-highlight-color:transparent;
  touch-action:manipulation;
}

.stall:active{filter:brightness(.96);}

.stall b{font-size:11.5px;font-weight:700;letter-spacing:-.01em;}
.stall > div{opacity:.72;font-weight:500;margin-top:1px;}

.hall.is-dense .stall{padding:1px;line-height:1.05;}
.hall.is-dense .stall b{font-size:var(--stall-font,11.5px);line-height:1.05;}
.hall.is-dense .stall > div{font-size:var(--stall-size-font,8.5px);line-height:1.05;margin-top:0;}

.stall.available{
  background:var(--tile-free);color:var(--tile-free-ink);
  box-shadow:inset 0 0 0 1px var(--tile-free-edge);
}
.stall.booked{
  background:var(--tile-taken);color:var(--tile-taken-ink);
  box-shadow:inset 0 0 0 1px var(--tile-taken-edge);
}

.stall.reserved{
  background:var(--tile-held);color:var(--tile-held-ink);
  box-shadow:inset 0 0 0 1px var(--tile-held-edge);
}

.stall.pending{
  background:var(--tile-held);color:var(--tile-held-ink);
  box-shadow:inset 0 0 0 1px var(--tile-held-edge);
  opacity:.7;
}
.stall.is-busy{opacity:.55;pointer-events:none;}
.stall.just-changed{animation:pulse .6s ease;}
@keyframes pulse{
  0%{box-shadow:0 0 0 0 rgba(14,28,53,.55);}
  100%{box-shadow:0 0 0 12px rgba(0,0,0,0);}
}

.stall.is-corner::before{
  content:'';position:absolute;top:3px;right:3px;
  width:4px;height:4px;border-radius:50%;
  background:currentColor;opacity:.45;
}

.stall.is-picked{
  background:var(--tile-picked);
  color:var(--tile-picked-ink);
  box-shadow:inset 0 0 0 2px var(--picked-edge);
  z-index:3;
}

.stall.is-picked::after{
  content:'✓';position:absolute;bottom:1px;left:4px;
  font-size:8px;font-weight:900;line-height:1;color:currentColor;opacity:.8;
}

.exit-label,.entry{
  display:block;
  border-radius:4px;
  padding:3px 4px;
  background:var(--danger-tint);color:var(--danger-ink);
  font-size:8px;font-weight:700;
  text-align:center;text-transform:uppercase;letter-spacing:.9px;
  white-space:nowrap;
}
.exit-label{margin-bottom:5px;}

.middle{
  display:flex;flex-direction:column;align-items:center;
  justify-content:space-between;gap:11px;
}

.stage{
  width:var(--block);
  border:1px dashed var(--edge-strong);
  border-radius:var(--radius-sm);
  text-align:center;
  padding:9px 10px;
  background:var(--ground);
}
.stage .name{
  font-size:10.5px;font-weight:700;color:var(--ink-2);
  text-transform:uppercase;letter-spacing:1.3px;
}
.stage .dim{font-size:9px;color:var(--ink-3);margin-top:2px;}

.block{
  width:var(--block);
  display:grid;
  grid-template-columns:repeat(4,var(--stall-col));
  grid-auto-rows:var(--stall-row);
  gap:var(--stall-gap);
}

.entry-wrap{text-align:center;}
.entry{display:inline-block;padding:3px 12px;}
.hall-title{
  font-size:10px;font-weight:650;color:var(--ink-2);margin-top:5px;
  letter-spacing:.02em;
}
.venue{
  font-size:9px;color:var(--ink-3);margin-top:1px;
  text-transform:uppercase;letter-spacing:.7px;
}

.picker{
  max-width:1150px;margin:0 auto 20px;background:#fff;border:1px solid var(--edge);
  border-radius:var(--radius);padding:14px 16px;display:flex;align-items:center;
  gap:12px;flex-wrap:wrap;font-size:13px;
}
.picker label{font-weight:700;}
.picker select,.picker input{
  padding:8px 10px;border:1px solid var(--edge-strong);border-radius:var(--radius-sm);font-size:13px;
  font-family:inherit;
}
.picker .hint{color:var(--ink-3);}

.overlay{
  position:fixed;inset:0;background:var(--scrim);
  backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);
  display:none;align-items:center;justify-content:center;z-index:50;
}
.overlay.show{display:flex;}

body.modal-open{overflow:hidden;}

.modal{
  background:var(--paper);border-radius:var(--radius);

  width:min(440px, calc(100vw - 32px));
  max-height:calc(100vh - 48px);

  display:flex;flex-direction:column;
  overflow:hidden;
  box-shadow:var(--shadow-strong);
}
.overlay.show .modal{animation:modal-in .18s ease-out;}
@keyframes modal-in{
  from{opacity:0;transform:translateY(10px) scale(.98);}
  to{opacity:1;transform:none;}
}
@media (prefers-reduced-motion:reduce){
  .overlay.show .modal{animation:none;}
}

.m-head{
  flex:none;display:flex;align-items:flex-start;gap:12px;
  padding:19px 22px 14px;border-bottom:1px solid var(--edge-soft);
}
.m-head-text{min-width:0;}
.modal h2{margin:0;font-size:17px;font-weight:650;letter-spacing:-.015em;}
.modal .status-pill{
  display:inline-block;padding:3px 11px;border-radius:20px;
  font-size:11px;font-weight:650;letter-spacing:.3px;color:#fff;margin:8px 0 0;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.2);
}

/* The pill wears the same four steps as the tile it was opened from. */
.modal .status-pill.is-available{
  background:var(--tile-free);color:var(--tile-free-ink);
  box-shadow:inset 0 0 0 1px var(--tile-free-edge);
}
.modal .status-pill.is-booked{background:var(--tile-taken);}
.modal .status-pill.is-reserved{background:var(--ink-4);}

.modal .m-x{
  margin:0 0 0 auto;flex:none;width:32px;height:32px;padding:0;
  border-radius:50%;background:var(--fill);color:var(--ink-3);
  font-size:20px;line-height:1;font-weight:400;
}
.modal .m-x:hover{background:var(--fill-hover);color:var(--ink);}

.m-scroll{flex:1 1 auto;overflow-y:auto;padding:14px 22px 14px;}
.modal > .btn-close{flex:none;margin:0;border-radius:0;padding:12px;}

.modal p{margin:4px 0;font-size:13px;color:var(--ink-2);}
.modal label{display:block;font-size:12px;font-weight:700;margin:14px 0 4px;}
.modal select,.modal input[type=text],.modal input[type=email],
.modal input[type=number],.modal textarea{
  width:100%;padding:9px 10px;border:1px solid var(--edge-strong);border-radius:var(--radius-sm);
  font-size:13px;font-family:inherit;
}
.modal textarea{resize:vertical;line-height:1.5;}

.modal.is-wide{width:min(560px, calc(100vw - 32px));}
.m-sub{font-size:12px;color:var(--ink-3);margin-top:4px;}

.modal .m-section{border-top:1px solid var(--edge);margin-top:14px;padding-top:2px;}
.modal .m-section:first-child{border-top:none;margin-top:4px;}

.modal .m-section > label:first-child{margin-top:10px;}
.modal .m-fold > label{margin-top:10px;}

.modal details.m-fold > summary{
  cursor:pointer;list-style:none;padding:10px 0 2px;
  font-size:12px;font-weight:600;color:var(--ink-2);
  display:flex;align-items:center;gap:7px;
}
.modal details.m-fold > summary::-webkit-details-marker{display:none;}

.modal details.m-fold > summary::before{
  content:'';flex:none;
  border-width:4px 0 4px 5px;border-style:solid;
  border-color:transparent transparent transparent var(--ink-5);
  transition:transform .16s ease;
}
.modal details.m-fold[open] > summary::before{transform:rotate(90deg);}
.modal details.m-fold > summary:hover{color:var(--ink);}

.modal .m-price{
  margin:13px 0 2px;border:1px solid var(--edge);border-radius:var(--radius-sm);
  padding:4px 13px;background:var(--ground);
}

.modal .m-price-value,.modal .m-price-row.is-total .m-price-value{
  font-variant-numeric:tabular-nums;
}
.modal .m-price-row{
  display:flex;align-items:baseline;justify-content:space-between;gap:14px;
  padding:8px 0;font-size:13px;border-bottom:1px solid var(--edge-soft);
}
.modal .m-price-row:last-child{border-bottom:none;}
.modal .m-price-label{color:var(--ink-2);min-width:0;}
.modal .m-price-value{font-weight:700;white-space:nowrap;}
.modal .m-price-row.is-total{
  border-top:1px solid var(--edge);padding-top:10px;padding-bottom:10px;
}
.modal .m-price-row.is-total .m-price-label{color:var(--ink);font-weight:700;}
.modal .m-price-row.is-total .m-price-value{font-size:17px;}

.modal .m-note{font-size:11.5px;color:var(--ink-3);margin:8px 0 0;line-height:1.45;}

.modal .picker-results{
  max-height:196px;overflow-y:auto;border:1px solid var(--edge);border-radius:var(--radius-sm);
  margin-top:6px;
}
.modal .picker-option{
  padding:9px 11px;font-size:13px;cursor:pointer;
  border-bottom:1px solid var(--edge-soft);
  transition:background-color .1s ease;
}
.modal .picker-option:last-child{border-bottom:none;}

.modal .picker-option:hover,.modal .picker-option.is-active{
  background:var(--tint);box-shadow:inset 3px 0 0 var(--brand);
}
.modal .picker-note{padding:9px 11px;font-size:11px;color:var(--ink-3);}

.opt-name{
  display:block;font-weight:700;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.opt-meta{display:block;font-size:11px;color:var(--ink-3);margin-top:1px;}
.modal .error{color:var(--danger-ink);font-size:12px;margin-top:8px;}

.modal .m-warn{
  background:var(--warn-tint);border:1px solid var(--warn-edge);border-radius:var(--radius-sm);
  padding:8px 10px;margin:10px 0 2px;font-size:12px;color:var(--warn-ink);
}
.modal button{
  margin-top:10px;width:100%;padding:10px;border:none;border-radius:var(--radius-sm);
  font-size:14px;font-weight:700;cursor:pointer;font-family:inherit;
}
.modal button:disabled{background:var(--edge-strong);color:var(--ink-3);cursor:not-allowed;}
.btn-primary{background:var(--accent);color:#fff;}
.btn-danger{background:var(--booked);color:#fff;}
.btn-secondary{background:var(--navy-dark);color:#fff;}
.btn-close{background:var(--fill);color:var(--ink-2);font-weight:600;}
.btn-close:hover{background:var(--fill-hover);color:var(--ink);}

.btn-primary,.btn-danger,.btn-secondary{
  box-shadow:inset 0 1px 0 rgba(255,255,255,.16), var(--shadow-1);
  transition:filter .13s ease, transform .07s ease;
}
.btn-primary:hover,.btn-danger:hover,.btn-secondary:hover{filter:brightness(1.07);}
.btn-primary:active,.btn-danger:active,.btn-secondary:active{transform:translateY(1px);}
button:disabled,button:disabled:hover,button:disabled:active{
  box-shadow:none;filter:none;transform:none;
}

.pickbar{
  position:fixed;left:0;right:0;bottom:0;z-index:40;
  background:rgba(255,255,255,.92);
  backdrop-filter:saturate(1.5) blur(10px);
  -webkit-backdrop-filter:saturate(1.5) blur(10px);

  border-top:2px solid var(--picked-edge);
  box-shadow:0 -6px 24px rgba(20,34,61,.13);
}
.pickbar-inner{
  max-width:900px;margin:0 auto;padding:10px 16px;
  display:flex;align-items:center;gap:14px;
}
.pickbar-count{font-size:13px;color:var(--ink-2);}
.pickbar-total{font-size:18px;font-weight:800;margin-left:auto;font-variant-numeric:tabular-nums;}
.pickbar .btn-primary{
  flex:none;padding:11px 18px;border:none;border-radius:var(--radius-sm);
  font-size:14px;font-weight:700;font-family:inherit;cursor:pointer;
  text-decoration:none;color:#fff;min-height:44px;display:flex;align-items:center;
}
.pickbar .link-btn{flex:none;font-size:12px;color:var(--ink-3);}

.pickbar-title{display:none;}

body:has(.pickbar:not([hidden])){padding-bottom:86px;}

@media screen and (min-width:940px){
  body:has(.pickbar:not([hidden])){padding-bottom:0;}

  .pickbar{

    position:static;
    background:var(--paper);
    border:1px solid var(--picked-edge);
    border-radius:var(--radius);
    box-shadow:var(--shadow-2);
  }
  .pickbar-inner{
    flex-direction:column;align-items:stretch;
    max-width:none;gap:0;padding:13px 15px 14px;
  }
  .pickbar-title{
    display:block;order:1;
    font-size:10px;font-weight:700;color:var(--ink-3);
    text-transform:uppercase;letter-spacing:.6px;
  }
  .pickbar-count{order:2;margin-top:3px;font-size:12.5px;}

  .pickbar-total{
    order:3;margin:7px 0 0;font-size:25px;font-weight:750;letter-spacing:-.025em;
  }
  .pickbar .btn-primary{order:4;justify-content:center;margin-top:13px;}
  .pickbar .link-btn{order:5;align-self:center;margin-top:9px;}
}

.panel.cart-panel{max-width:1040px;}

.cart-head{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  margin-bottom:14px;
}
.cart-head h2{margin:0;}

.cart-count{
  flex:none;padding:4px 11px;border-radius:20px;
  background:var(--tint);border:1px solid var(--tint-edge);color:var(--ink-brand);
  font-size:11px;font-weight:650;
  text-transform:uppercase;letter-spacing:.5px;
}

.cart-grid{
  display:grid;grid-template-columns:minmax(0, 1fr) 300px;
  gap:0 26px;align-items:start;
}
.cart-items{min-width:0;}
.cart-side{
  position:sticky;

  top:68px;
  border-left:1px solid var(--edge);padding-left:24px;
}

.cart-table th.num,.cart-table td.num{
  text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums;
}
.cart-table th{padding-bottom:10px;}
.cart-table td{padding:11px 8px;vertical-align:top;}
.cart-table tbody tr:last-child td{border-bottom:none;}
.cart-table tbody tr:hover{background:var(--ground);}
.cart-table td:first-child{padding-left:0;}
.cart-table th:first-child{padding-left:0;}
.cart-table td.col-actions,.cart-table th.col-actions{padding-right:0;}

.cart-table td.is-line-total{font-weight:800;color:var(--ink);}

.cart-table th.is-price,.cart-table td.is-price{width:110px;}
.cart-table td.is-price{padding-top:6px;padding-bottom:6px;}
.cart-table input.cart-price{
  width:100%;padding:6px 8px;border:1px solid var(--edge-strong);border-radius:var(--radius-sm);
  font:inherit;font-size:13px;text-align:right;font-variant-numeric:tabular-nums;
  background:#fff;color:inherit;
}
.cart-table input.cart-price::placeholder{color:var(--ink-5);}
.cart-table input.cart-price:focus{
  outline:none;border-color:var(--ink-4);box-shadow:0 0 0 3px rgba(36,68,119,.12);
}

.cart-table tr.is-saving{opacity:.55;}
.cart-table tr.is-saving input.cart-price{pointer-events:none;}

.cart-table tr.just-saved td{background:var(--ok-tint);transition:background .9s ease;}

.cart-pill{
  display:inline-block;margin-left:7px;padding:1px 7px;border-radius:20px;
  background:var(--warn-tint);border:1px solid var(--warn-edge);
  font-size:10.5px;font-weight:700;color:var(--warn-ink);
  text-transform:uppercase;letter-spacing:.4px;vertical-align:1px;
}

.cart-sums{
  background:var(--ground);border:1px solid var(--edge);border-radius:var(--radius-sm);
  padding:13px 15px;
}
.cart-sum{
  display:flex;justify-content:space-between;gap:14px;
  padding:5px 0;font-size:13px;color:var(--ink-2);
}
.cart-sum span:last-child{font-variant-numeric:tabular-nums;}
.cart-sum.is-total{
  margin-top:6px;padding-top:10px;border-top:1px solid var(--edge);
  font-size:17px;font-weight:800;color:var(--ink);
}

.cart-notice{
  background:var(--warn-tint);border:1px solid var(--warn-edge);border-radius:var(--radius-sm);
  padding:9px 11px;margin-bottom:12px;font-size:12.5px;color:var(--warn-ink);line-height:1.45;
}
.cart .error,.cart-error{
  color:var(--danger-ink);background:var(--danger-tint);border:1px solid var(--danger-edge);border-radius:var(--radius-sm);
  padding:9px 11px;margin-bottom:12px;font-size:12.5px;line-height:1.45;
}
.cart-note{font-size:11.5px;color:var(--ink-3);margin:8px 0 0;line-height:1.45;}

.cart-side .cart-error{margin:12px 0 0;}

.cart-drop{font-size:12px;color:var(--ink-4);font-weight:400;}
.cart-drop:hover{color:var(--booked);}

.cart-billing{
  margin-top:22px;padding-top:18px;
  border-top:1px solid var(--edge-soft);
}
.cart-billing h3{margin:0 0 3px;font-size:14px;}
.cart-billing-note{margin:0 0 14px;font-size:11.5px;color:var(--ink-3);line-height:1.5;}

.cart-actions{margin-top:14px;}
.cart-actions label{display:block;font-size:12px;font-weight:700;margin:2px 0 4px;}
.cart-actions input[type=text]{
  width:100%;padding:10px;border:1px solid var(--edge-strong);border-radius:var(--radius-sm);
  font-size:13px;font-family:inherit;
}
.cart-actions .btn-primary,.cart-actions .btn-secondary{
  display:block;width:100%;padding:12px;margin-top:10px;border:none;border-radius:var(--radius-sm);
  font-size:14px;font-weight:700;font-family:inherit;cursor:pointer;min-height:46px;
}
.cart-actions button:disabled{background:var(--edge-strong);color:var(--ink-3);cursor:not-allowed;}

#cart-page .picker-results{
  max-height:200px;overflow-y:auto;border:1px solid var(--edge);border-radius:var(--radius-sm);margin-top:6px;
}
#cart-page .picker-option{
  padding:9px 11px;font-size:13px;cursor:pointer;
  border-bottom:1px solid var(--edge-soft);
  transition:background-color .1s ease;
}
#cart-page .picker-option:last-child{border-bottom:none;}
#cart-page .picker-option:hover,#cart-page .picker-option.is-active{
  background:var(--tint);box-shadow:inset 3px 0 0 var(--brand);
}
#cart-page .picker-note{padding:9px 11px;font-size:11px;color:var(--ink-3);}

.cart-fold{margin-top:16px;border-top:1px solid var(--edge-soft);padding-top:4px;}
.cart-fold > summary{
  cursor:pointer;list-style:none;padding:9px 0 3px;
  font-size:12px;font-weight:600;color:var(--ink-2);
  display:flex;align-items:center;gap:7px;
}
.cart-fold > summary::-webkit-details-marker{display:none;}

.cart-fold > summary::before{
  content:'';flex:none;
  border-width:4px 0 4px 5px;border-style:solid;
  border-color:transparent transparent transparent var(--ink-5);
  transition:transform .16s ease;
}
.cart-fold[open] > summary::before{transform:rotate(90deg);}
.cart-fold > summary:hover{color:var(--ink);}

.panel.cart-blank{max-width:460px;text-align:center;padding:34px 28px 32px;}
.panel.cart-blank h2{margin:0 0 6px;font-size:17px;}
.cart-blank p{margin:0 0 20px;font-size:13px;color:var(--ink-3);line-height:1.55;}
.cart-blank-mark{
  width:52px;height:52px;margin:0 auto 16px;border-radius:50%;
  background:var(--fill);color:var(--ink-5);
  display:flex;align-items:center;justify-content:center;font-size:22px;
}

.cart-blank-mark.is-good{
  background:var(--ok-tint);color:var(--available);font-size:25px;
  box-shadow:0 0 0 5px rgba(31,157,85,.1);
}
.cart-done-text{font-size:15px;font-weight:700;line-height:1.5;margin:0 0 20px;}

.cart-done-actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;}

.receipt-head{text-align:center;padding:8px 0 20px;border-bottom:1px solid var(--edge);margin-bottom:20px;}
.receipt-head h2{margin:0 0 6px;font-size:17px;}
.receipt-head p{margin:0 auto;max-width:460px;font-size:13px;color:var(--ink-3);line-height:1.55;}

.receipt-grid{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));
  gap:16px 24px;margin:0;
}
.receipt-grid > div{min-width:0;}
.receipt-grid > div.is-wide{grid-column:1/-1;}
.receipt-grid dt{
  margin:0 0 4px;font-size:10.5px;font-weight:650;letter-spacing:.4px;
  text-transform:uppercase;color:var(--ink-4);
}
.receipt-grid dd{margin:0;font-size:13.5px;color:var(--ink);line-height:1.5;overflow-wrap:anywhere;}
.receipt-address{white-space:pre-line;}

.receipt-sub{margin:22px 0 12px;font-size:13px;font-weight:650;color:var(--ink);}
.receipt-actions{margin-top:18px;justify-content:flex-start;}

.panel-foot{display:flex;align-items:center;gap:16px;}
.cart-side .panel-foot{
  margin:16px 0 0;padding-top:13px;border-top:1px solid var(--edge);
  font-size:12.5px;justify-content:space-between;gap:12px;
}

.panel{
  max-width:900px;margin:0 auto 18px;background:var(--paper);
  border:1px solid var(--edge);border-radius:var(--radius);
  padding:20px 22px;box-shadow:var(--shadow-1);
}

.panel h2{
  margin:0 0 15px;font-size:15px;font-weight:650;letter-spacing:-.01em;
}
.form-row{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end;}
.field{display:flex;flex-direction:column;gap:4px;}
.field label{font-size:12px;font-weight:700;}
.field input,.field textarea{
  padding:9px 10px;border:1px solid var(--edge-strong);border-radius:var(--radius-sm);font-size:13px;
  font-family:inherit;min-width:220px;background:#fff;
}

.field textarea{resize:vertical;line-height:1.5;}
.field .err{color:var(--danger-ink);font-size:12px;}

.field .err[hidden]{display:none;}
.field-note{font-weight:400;color:var(--ink-4);font-size:11px;margin-left:4px;}

.form-grid{
  display:grid;grid-template-columns:repeat(2, minmax(0, 1fr));
  gap:12px 14px;margin-top:12px;
}
.form-grid .field{min-width:0;}
.form-grid .field input,.form-grid .field textarea{min-width:0;width:100%;}
.form-grid .is-wide{grid-column:1 / -1;}

.modal .form-grid{margin-top:6px;}
.modal .form-grid label{margin:0 0 4px;}

details.fold{margin-top:14px;border-top:1px solid var(--edge-soft);padding-top:4px;}
details.fold > summary{
  cursor:pointer;list-style:none;padding:9px 0 3px;
  font-size:12px;font-weight:600;color:var(--ink-2);
  display:flex;align-items:center;gap:7px;
  transition:color .13s ease;
}
details.fold > summary::-webkit-details-marker{display:none;}

details.fold > summary::before{
  content:'';flex:none;
  border-width:4px 0 4px 5px;border-style:solid;
  border-color:transparent transparent transparent var(--ink-5);
  transition:transform .16s ease;
}
details.fold[open] > summary::before{transform:rotate(90deg);}
details.fold > summary:hover{color:var(--ink);}
@media (prefers-reduced-motion:reduce){
  details.fold > summary::before{transition:none;}
}

.invoice-panel{
  margin-top:16px;border-top:1px solid var(--edge);padding-top:12px;
}
.invoice-panel h3{margin:0;font-size:14px;}
.invoice-panel .form-row{margin-top:14px;align-items:center;}
.btn{
  padding:10px 18px;border:none;border-radius:var(--radius-sm);
  font-size:13px;font-weight:600;
  cursor:pointer;background:var(--accent);color:#fff;font-family:inherit;
  text-decoration:none;display:inline-block;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.17), 0 1px 2px rgba(242,100,69,.34);
  transition:filter .13s ease, box-shadow .13s ease, transform .07s ease;
}
.btn:hover{
  background:var(--orange-light);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.17), 0 3px 10px rgba(242,100,69,.3);
}

.btn:active{transform:translateY(1px);filter:brightness(.97);}

.btn-quiet{
  background:var(--paper);color:var(--brand);
  box-shadow:inset 0 0 0 1px var(--tint-edge), var(--shadow-1);
}
.btn-quiet:hover{
  background:var(--tint);filter:none;
  box-shadow:inset 0 0 0 1px var(--tint-edge), var(--shadow-1);
}

.sr-only{
  position:absolute;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;
}

.search-form{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:14px;}
.search-form input[type=search]{
  flex:1 1 260px;min-width:0;padding:9px 10px;border:1px solid var(--edge-strong);border-radius:var(--radius-sm);
  font-size:13px;font-family:inherit;
}
.search-form .btn{flex:none;padding:9px 18px;}
table{width:100%;border-collapse:collapse;font-size:13px;}
th,td{text-align:left;padding:11px 10px;border-bottom:1px solid var(--edge-soft);}
th{
  font-size:10.5px;text-transform:uppercase;letter-spacing:.6px;
  font-weight:600;color:var(--ink-3);
  padding-top:0;padding-bottom:9px;
  border-bottom-color:var(--edge);
}

.panel tbody tr{transition:background-color .1s ease;}
.panel tbody tr:hover{background:var(--ground);}
.panel tbody tr:last-child td{border-bottom:none;}
td:first-child,th:first-child{padding-left:0;}
td:last-child,th:last-child{padding-right:0;}

th .sort-link{
  display:inline-flex;align-items:center;gap:5px;
  color:inherit;text-decoration:none;font:inherit;letter-spacing:inherit;
  text-transform:inherit;white-space:nowrap;
}
th .sort-link{transition:color .13s ease;}
th .sort-link:hover{color:var(--ink);}
th .sort-link.is-sorted{color:var(--ink);font-weight:700;}
th .sort-arrow{font-size:9px;opacity:.35;transition:opacity .13s ease;}
th .sort-link:hover .sort-arrow{opacity:.65;}
th .sort-link.is-sorted .sort-arrow{opacity:1;color:var(--brand);}

td.col-actions,th.col-actions{width:1%;white-space:nowrap;text-align:right;}
td.col-actions .link-btn + .link-btn{margin-left:12px;}
.link-btn.is-danger{color:var(--booked);}
.link-btn.is-quiet{color:var(--ink-3);}

.link-btn.is-billing,
.link-btn.is-receipt{
  display:inline-block;margin-top:3px;
  font-size:11.5px;font-weight:600;color:var(--ink-3);
}
.link-btn.is-billing:hover,
.link-btn.is-receipt:hover{color:var(--ink);}

tr.is-editing{background:var(--tint);}
tr.is-editing .cell-field{display:block;min-width:0;text-align:left;}
tr.is-editing input[type=text]{
  width:100%;min-width:0;padding:7px 9px;border:1px solid var(--edge-strong);border-radius:var(--radius-sm);
  font-size:13px;font-family:inherit;
}
tr.is-editing .err{display:block;color:var(--danger-ink);font-size:12px;margin-top:3px;}

tr.just-saved td{animation:row-saved 1.2s ease;}
@keyframes row-saved{
  0%{background:var(--ok-tint);}
  100%{background:transparent;}
}
@media (prefers-reduced-motion:reduce){
  tr.just-saved td{animation:none;}
}

tr.is-trashed td{color:var(--ink-4);}
tr.is-trashed strong{font-weight:600;}
tr.is-trashed form{margin:0;}

.empty{
  color:var(--ink-2);font-size:13px;line-height:1.6;
  padding:26px 20px;text-align:center;
  background:var(--ground);border:1px dashed var(--edge-strong);border-radius:var(--radius-sm);
}
.empty a{color:var(--brand);font-weight:600;text-decoration:none;}
.empty a:hover{text-decoration:underline;text-underline-offset:2px;}

.tag{
  display:inline-block;padding:2.5px 10px;border-radius:20px;font-size:10.5px;
  font-weight:650;letter-spacing:.3px;color:#fff;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.2);
}

button.stall-chip{
  border:none;font-family:inherit;cursor:pointer;
  padding:3px 10px;line-height:1.4;
}
button.stall-chip + button.stall-chip{margin-left:4px;}
button.stall-chip:hover{filter:brightness(1.1);}
button.stall-chip:focus-visible{outline:2px solid var(--ink);outline-offset:1px;}

a.chip-link{text-decoration:none;padding:3px 10px;line-height:1.4;}
a.chip-link:hover{filter:brightness(1.1);}
a.chip-link:focus-visible{outline:2px solid var(--ink);outline-offset:1px;}
.chips > * + *{margin-left:4px;}

.tag.confirmed{background:var(--tile-taken);}
.tag.cancelled{background:var(--ink-4);}

.tag.available{background:var(--tile-free);color:var(--tile-free-ink);box-shadow:inset 0 0 0 1px var(--tile-free-edge);}
.tag.booked{background:var(--tile-taken);}
.tag.reserved{background:var(--ink-4);}
.tag.pending{background:var(--warn);}

.tag.created{background:var(--warn);}
.tag.paid{background:var(--available);}
.tag.failed{background:var(--booked);}
.tag.abandoned{background:var(--ink-4);}
.tag.expired{background:var(--ink-4);}
.tag.orphaned{background:#7b3fb5;box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 0 0 2px rgba(123,63,181,.22);}

.cell-value{display:block;min-width:0;}
.cell-note{display:block;font-size:11px;color:var(--ink-4);font-weight:400;margin-top:2px;}

.cell-pct{font-size:11px;color:var(--ink-4);white-space:nowrap;}
.panel-foot{margin:12px 0 0;}
tfoot td{border-bottom:none;border-top:2px solid var(--edge);}

input[type=text],input[type=email],input[type=search],input[type=password],
select,textarea{
  border:1px solid var(--edge-strong);
  border-radius:var(--radius-sm);
  background:var(--paper);
  color:var(--ink);
  transition:border-color .13s ease, box-shadow .13s ease;
}
input::placeholder,textarea::placeholder{color:var(--ink-5);}
input[type=text]:hover,input[type=email]:hover,input[type=search]:hover,
select:hover,textarea:hover{border-color:var(--edge-hover);}

input[type=text]:focus,input[type=email]:focus,input[type=search]:focus,
input[type=password]:focus,select:focus,textarea:focus{
  outline:none;
  border-color:var(--brand);
  box-shadow:var(--ring);
}

.search-form input[type=search]{padding:9px 12px;}

button.stall-chip,a.chip-link{
  border-radius:20px;transition:filter .13s ease, transform .07s ease;
}
button.stall-chip:active,a.chip-link:active{transform:translateY(1px);}
button.stall-chip:focus-visible,a.chip-link:focus-visible{
  outline:2px solid var(--ink);outline-offset:2px;
}

@media (pointer:coarse){
  .link-btn{display:inline-block;padding:11px 2px;}
  .auth-alt a,.empty a{display:inline-block;padding:6px 2px;}
  .auth-card .checkbox{min-height:44px;gap:10px;}
  .auth-card .checkbox input[type=checkbox]{width:20px;height:20px;}
  th .sort-link{display:inline-flex;padding:6px 0;}
}

@media screen and (min-width:861px) and (max-width:1040px){
  .topbar{gap:14px;}
  .topbar .brand{padding-left:14px;}
  .topbar .brand img{height:32px;}
  .topbar nav a{padding:15px 9px;gap:7px;}
}

@media screen and (max-width:860px){
  .page{
    padding:16px 14px;
    padding-left:max(14px, env(safe-area-inset-left));
    padding-right:max(14px, env(safe-area-inset-right));
  }

  /* The mark keeps the top row and takes sign-out along for company, so the tabs
     still get the full width below them and the thumb reaches the control without
     scrolling the tab strip. The two share the rule between them, and the row
     padding sits on the children so it still runs edge to edge. The gap goes so
     that rule has nothing to break it. */
  .topbar{
    flex-wrap:wrap;
    padding:0;
    gap:0;
  }
  .topbar .brand{
    order:1;
    flex:1 1 auto;min-width:0;
    align-self:stretch;
    padding:9px 14px 8px max(14px, env(safe-area-inset-left));
    border-bottom:1px solid var(--edge);
  }
  .topbar .brand img{height:30px;}

  .topbar-right{
    order:2;
    flex:none;
    align-self:stretch;
    border-bottom:1px solid var(--edge);
    gap:12px;font-size:12px;
    padding-right:max(8px, env(safe-area-inset-right));
  }

  .topbar nav{
    order:3;
    flex-basis:100%;
    flex-wrap:nowrap;
    margin-left:env(safe-area-inset-left);

    min-width:0;
    overflow-x:auto;
    scrollbar-width:none;-ms-overflow-style:none;
    -webkit-overflow-scrolling:touch;
  }
  .topbar nav::-webkit-scrollbar{display:none;}
  .topbar nav a{flex:none;padding:14px 11px;gap:7px;}
  .whoami{display:none;}

  .hall-fit{padding:12px 10px 14px;}

  .panel{padding:14px 15px;}

  .cart-grid{grid-template-columns:minmax(0, 1fr);gap:20px;}
  .cart-side{
    position:static;border-left:none;padding-left:0;
    border-top:1px solid var(--edge);padding-top:18px;
  }

  .toasts{top:104px;right:10px;}
}

.sort-chips{display:none;}

@media screen and (max-width:620px){
  .topbar .brand img{height:27px;}

  .topbar-right .btn-word{
    position:absolute;width:1px;height:1px;padding:0;margin:-1px;
    overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;
  }
  .topbar nav a{padding:14px 9px;gap:6px;font-size:12.5px;}
  .topbar-right{gap:8px;}
  .topbar-right .link-btn{padding:6px;}
}

@media screen and (max-width:640px){

  .page{padding-top:12px;}
  h1{font-size:18px;margin-bottom:3px;}
  .sub{font-size:12px;line-height:1.45;margin-bottom:10px;}

  .legend{gap:5px;font-size:11.5px;}
  .legend span{padding:3px 8px 3px 6px;gap:5px;}

  .pickbar-inner{
    flex-wrap:wrap;gap:8px 12px;padding:10px 14px;

    padding-left:max(14px, env(safe-area-inset-left));
    padding-right:max(14px, env(safe-area-inset-right));
    padding-bottom:max(10px, env(safe-area-inset-bottom));
  }
  .pickbar-count{order:1;}
  .pickbar-total{order:2;margin-left:auto;font-size:17px;}
  .pickbar .btn-primary{order:3;flex:1 1 60%;justify-content:center;}
  .pickbar .link-btn{order:4;flex:none;}

  body:has(.pickbar:not([hidden])){padding-bottom:120px;}

  .field input,.field textarea,
  .search-form input[type=search],
  .picker select,.picker input,
  .modal select,.modal input[type=text],.modal input[type=email],
  .modal input[type=number],.modal textarea{font-size:16px;}

  .form-grid{grid-template-columns:minmax(0, 1fr);}

  .search-form{gap:10px 12px;}
  .search-form input[type=search]{flex-basis:100%;padding:11px 10px;}
  .search-form .btn{flex:1 1 auto;padding:12px 18px;min-height:44px;}
  .field input{min-width:0;width:100%;}
  .field{width:100%;}

  .form-row{flex-direction:column;align-items:stretch;gap:14px;}
  .form-row .btn{width:100%;padding:12px 18px;min-height:44px;}

  .auth-brand{padding:18px 14px 0;}
  .auth-brand img{height:34px;}
  .auth-card{margin:20px auto;padding:22px 18px;}
  .auth-brand ~ .page .auth-card{margin-top:20px;}
  .btn-block{padding:13px;min-height:46px;}

  .panel table thead{display:none;}
  .panel table,
  .panel table tbody,
  .panel table tfoot,
  .panel table tr,
  .panel table td{display:block;width:100%;}
  .panel table tr{
    border:1px solid var(--edge);border-radius:var(--radius);background:var(--ground);
    padding:8px 12px;margin-bottom:10px;
  }
  .panel table tr:last-child{margin-bottom:0;}
  .panel table td{
    border-bottom:none;padding:5px 0;
    display:flex;gap:14px;align-items:baseline;justify-content:space-between;
  }

  .panel table tfoot td{border-top:none;}
  .panel table td::before{
    content:attr(data-label);
    flex:none;font-size:11px;font-weight:700;color:var(--ink-3);
    text-transform:uppercase;letter-spacing:.4px;
  }

  .panel table td{text-align:right;}

  .sort-chips{
    display:flex;gap:6px;align-items:center;margin-bottom:12px;
    overflow-x:auto;scrollbar-width:none;padding-bottom:2px;
  }
  .sort-chips::-webkit-scrollbar{display:none;}
  .sort-chips .sort-chips-label{
    flex:none;font-size:11px;font-weight:700;color:var(--ink-3);
    text-transform:uppercase;letter-spacing:.4px;
  }
  .sort-chips a{
    flex:none;display:inline-flex;align-items:center;gap:5px;
    padding:8px 12px;border:1px solid var(--edge);border-radius:20px;
    background:var(--paper);color:var(--ink-2);font-size:12px;font-weight:500;
    text-decoration:none;white-space:nowrap;
  }
  .sort-chips a.is-sorted{
    border-color:var(--tint-edge);color:var(--ink-brand);font-weight:650;
    background:var(--tint);
  }

  .modal{
    width:calc(100vw - 24px);
    max-height:calc(100vh - 32px);max-height:calc(100dvh - 32px);
  }
  .m-head{padding:14px 16px 12px;}
  .m-scroll{padding:14px 16px 14px;}
  .modal button{padding:13px;min-height:46px;font-size:15px;}
  .modal .m-x{width:34px;height:34px;min-height:34px;padding:0;}

  .modal .picker-results{max-height:40vh;}
  .modal .m-price-row{padding:9px 0;}
  .modal .picker-option{padding:11px 10px;}

  .panel table td.col-actions{justify-content:flex-end;gap:18px;padding-top:8px;}

  tr.is-editing .cell-field{flex:1 1 auto;}
  tr.is-editing input[type=text]{font-size:16px;padding:9px 10px;}

  .panel table td .chips{
    display:flex;flex-wrap:wrap;gap:4px;justify-content:flex-end;
  }
  .panel table td .chips button.stall-chip + button.stall-chip{margin-left:0;}
  button.stall-chip{padding:6px 11px;}

  .cart-table td.is-stall{
    display:block;text-align:left;
    padding-bottom:9px;margin-bottom:3px;border-bottom:1px solid var(--edge-soft);
  }
  .cart-table td.is-stall::before{display:none;}
  .cart-table td.is-line-total{font-size:14px;}

  .cart-table td.is-price{width:auto;}
  .cart-table input.cart-price{width:110px;flex:0 0 auto;font-size:16px;padding:8px 10px;}
  .panel.cart-blank{padding:28px 20px 26px;}
  .cart-blank .btn{display:block;padding:13px 18px;min-height:46px;}
  .cart-side .panel-foot{flex-wrap:wrap;gap:8px 18px;}
}

@page{size:A4 portrait;margin:10mm;}

@media print{
  body{background:#fff;}
  .page{padding:0;}
  .topbar,.pan-hint,.sub,.toasts,.overlay,.panel,.pickbar{display:none !important;}

  h1{font-size:16px;margin-bottom:10px;}

  .hall-page{padding:0;}
  .hall-fit{
    max-width:none;margin:0 auto 10px;padding:0;
    background:none;border:none;border-radius:0;box-shadow:none;
  }

  .hall-fit,.hall,.stall,.stage,.block,.col-side,.entry,.exit-label{
    -webkit-print-color-adjust:exact;print-color-adjust:exact;
  }
  .hall-fit{overflow:visible;}

  .hall,.block,.col-side,.stage{break-inside:avoid;page-break-inside:avoid;}
}
