/* ============================================================
   Atelier — Bar & Lounge POS theme + components
   Ported 1:1 from the approved mockup, then extended with the
   states the live build needs (selected payment, custom tip,
   toast, add pulse, empty check). Nothing above the divider
   changed from the mockup.
   ============================================================ */
:root{
  --ivory:#F5F0E6; --ivory-2:#FBF7EF; --paper:#FFFDF8; --paper-2:#FFFFFF;
  --ink:#2B2521; --ink-2:#6F6457; --ink-3:#A99B86;
  --brass:#B08D57; --brass-deep:#8A5A2B; --brass-tint:#F1E7D6;
  --line:#E9E0CE; --line-2:#F2EBDC; --ok:#6E7F5C;
  --sh-1:0 1px 2px rgba(43,37,33,.05); --sh-2:0 2px 8px rgba(43,37,33,.05),0 18px 36px -20px rgba(43,37,33,.22);
  --sb:rgba(176,141,87,.3);
  --focus:var(--brass);
  /* "in the order" selection system — blush-rosé/terracotta (board sample #15, owner-tuned) */
  --sel:#d5631b; --sel-2:#E39063; --sel-tint:#FBE9DC; --sel-glow:rgba(213,99,27,.38);
  --serif:Georgia,'Gelasio',serif; --ui:'DM Sans',system-ui,sans-serif;
  --r:14px; --r-l:18px; --pill:999px;
  --mbar-h:61px;   /* mobile bottom bar: 60px buttons + 1px top border (safe-area inset is added separately) */
}
/* 100dvh = the VISIBLE viewport, so the bottom bar never sits under mobile browser
   chrome; 100vh stays as the fallback for browsers without dvh */
body{font-family:var(--ui);color:var(--ink);height:100vh;height:100dvh;overflow:hidden;font-size:15px;
  background:radial-gradient(120% 80% at 90% -10%,#FBF6EC,transparent 55%),var(--ivory)}
.app{display:flex;flex-direction:column;height:100vh;height:100dvh}

.hd{display:flex;align-items:center;gap:22px;padding:14px 26px;background:var(--paper);border-bottom:1px solid var(--line);box-shadow:var(--sh-1);z-index:3}
.brand{display:flex;align-items:center;gap:12px;flex:none}
.brand__seal{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;font-family:var(--serif);font-weight:700;font-size:18px;
  color:var(--brass-deep);background:radial-gradient(120% 120% at 30% 25%,#fff,var(--brass-tint));border:1px solid var(--line);box-shadow:var(--sh-1)}
.brand__n{font-family:var(--serif);font-size:21px;font-weight:600;letter-spacing:.04em;line-height:1}
.brand__s{font-size:9.5px;letter-spacing:.28em;text-transform:uppercase;color:var(--ink-3);margin-top:4px}
.search{flex:1;max-width:420px;display:flex;align-items:center;gap:10px;background:var(--ivory-2);border:1px solid var(--line);border-radius:var(--pill);padding:11px 16px;color:var(--ink-3);transition:.18s}
.search:focus-within{border-color:var(--brass);box-shadow:0 0 0 3px var(--brass-tint)}
.search svg{width:17px;height:17px;flex:none}
.search input{background:none;border:0;outline:none;color:var(--ink);width:100%;font-size:13.5px}
.otype{display:flex;gap:3px;background:var(--ivory-2);border:1px solid var(--line);border-radius:var(--pill);padding:3px}
.otype button{padding:8px 15px;border-radius:var(--pill);font-size:12.5px;font-weight:600;color:var(--ink-2);transition:.15s}
.otype button[aria-pressed="true"]{background:var(--paper);color:var(--ink);box-shadow:var(--sh-1)}
.otype button.is-pending{opacity:.55}                 /* waiting for the server — pressed state follows its answer */
.otype button:disabled{opacity:.5;cursor:default}
/* the copy inside the check header (render.js) — only shown where the header one is hidden (≤1100px) */
.check .otype--check{display:none;flex:none;gap:2px}
.check .otype--check button{padding:0 10px;min-height:34px;font-size:12px}
.staff{display:flex;align-items:center;gap:10px;flex:none}
.staff__t{text-align:right}.staff__n{font-size:12.5px;font-weight:600}.staff__r{font-size:10px;color:var(--brass-deep);letter-spacing:.05em}
.staff__a{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;font-weight:700;font-size:12px;color:var(--brass-deep);background:var(--brass-tint);border:1px solid var(--line)}
.clock{font-size:12.5px;color:var(--ink-2);flex:none;font-variant-numeric:tabular-nums}

.body{flex:1;display:grid;grid-template-columns:102px 1fr 386px;min-height:0}

.rail{background:var(--paper);border-right:1px solid var(--line);padding:16px 0;display:flex;flex-direction:column;gap:5px;align-items:center;overflow-y:auto}
.cat{width:80px;padding:13px 0;border-radius:var(--r);display:flex;flex-direction:column;align-items:center;gap:7px;color:var(--ink-2);transition:.16s;border:1px solid transparent}
.cat svg{width:22px;height:22px}.cat span{font-size:10px;font-weight:600;letter-spacing:.02em}
.cat:hover{background:var(--ivory-2);color:var(--ink)}
.cat[aria-current]{background:var(--brass-tint);border-color:#e6d6bb;color:var(--brass-deep)}

.stage{padding:24px 28px 8px;overflow-y:auto;min-height:0;min-width:0}
.stage__h{display:flex;align-items:flex-end;justify-content:space-between;margin-bottom:20px}
.eyebrow{font-size:10.5px;font-weight:600;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-3)}
.stage__h h1{font-family:var(--serif);font-size:36px;font-weight:600;line-height:.95;margin-top:8px}
.stage__h .meta{font-size:11.5px;color:var(--ink-3)}
/* keep the mockup card width (~250px) and flow more/fewer columns by screen width */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(248px,1fr));gap:15px;padding-bottom:28px}
/* card frame: same quiet line as always, just darker + thicker */
.drink{position:relative;text-align:left;background:var(--paper);border:2px solid #D9C5A0;border-radius:var(--r-l);padding:17px;
  display:flex;flex-direction:column;gap:14px;min-height:124px;justify-content:space-between;box-shadow:var(--sh-1);
  transition:transform .16s,box-shadow .2s,border-color .2s,background .2s;overflow:hidden}
.drink:hover{transform:translateY(-3px);box-shadow:var(--sh-2);border-color:#C6A97C}
.drink__name{font-family:var(--serif);font-size:21px;font-weight:600;line-height:1.05}
.drink__tag{font-size:11px;color:var(--ink-2);margin-top:5px;line-height:1.4}
.drink__foot{display:flex;align-items:center;justify-content:space-between}
.drink__price{font-family:var(--serif);font-size:21px;font-weight:600;color:var(--brass-deep)}
.drink__add{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;color:var(--brass-deep);background:var(--brass-tint);border:1px solid transparent;transition:.16s;flex:none}
.drink:hover .drink__add{background:linear-gradient(180deg,var(--brass),var(--brass-deep));color:#fff}
.drink__add svg{width:17px;height:17px}
/* selected = "it's on the order": gilded frame (deep-brass border inside a soft brass ring),
   warm amber wash + lift, add button flips to the brass gradient */
.drink.sel{
  border-color:var(--sel);
  background:linear-gradient(168deg,#FFFDF8 34%,var(--sel-tint));
  box-shadow:0 0 0 2px var(--sel-2),0 18px 34px -16px var(--sel-glow),var(--sh-2);
  transform:translateY(-2px);
}
.drink.sel:hover{border-color:var(--sel);transform:translateY(-3px)}
.drink.sel .drink__add,.drink.sel:hover .drink__add{
  background:linear-gradient(180deg,var(--sel-2),var(--sel));color:#fff;border-color:transparent;
  box-shadow:0 2px 10px -3px var(--sel-glow),0 0 0 2px rgba(255,255,255,.65);
}

/* photo cards — full photo stays vivid; type sits high (under qty badge) with a
   thick white letter outline for contrast (no heavy bottom cream wash). */
.drink--img{padding:0;min-height:188px;justify-content:flex-start;isolation:isolate}
.drink__media{
  position:absolute;inset:0;z-index:0;
  background-image:var(--drink-img);background-size:cover;background-position:center 42%;
  transform:scale(1.03);transition:transform .45s ease;
}
.drink--img:hover .drink__media{transform:scale(1.07)}
.drink__media::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  transition:background .3s ease;
  /* angled cream — denser / less transparent, still clears bottom-right */
  background:linear-gradient(
    148deg,
    rgba(228,218,200,.98) 0%,
    rgba(236,226,210,.94) 14%,
    rgba(242,234,218,.88) 28%,
    rgba(247,240,226,.72) 44%,
    rgba(251,245,232,.48) 60%,
    rgba(253,250,244,.22) 78%,
    rgba(253,250,244,0) 100%
  );
}
/* selected: the photo blushes rosé/terracotta (board sample #15, owner-tuned gradient) */
.drink--img.sel .drink__media::after{
  background:linear-gradient(
    148deg,
    rgb(253 195 173 / 95%) 0%,
    rgb(236 230 198 / 85%) 30%,
    rgb(217 150 132 / 55%) 55%,
    rgb(243 203 189 / 25%) 80%,
    rgba(240,214,205,0) 100%
  );
}
.drink__body{position:relative;z-index:1;display:flex;flex-direction:column;gap:14px;padding:0;flex:1;justify-content:space-between}
.drink--img .drink__body{
  padding:42px 14px 14px; /* clear stock chip + qty badge row */
  gap:10px;
  justify-content:flex-start; /* text high under the qty tag */
  background:none;
}
/* letter “border” matches page canvas (--ivory #F5F0E6) via stacked text-shadow */
.drink--img .drink__copy{min-width:0}
.drink--img .drink__name{
  font-family:var(--serif);
  font-size:23px;font-weight:400;line-height:1.08;letter-spacing:.005em;
  color:var(--ink);
  /* Match font-samples “2 · Editorial magazine” letter outline */
  text-shadow:
    0 0 1px var(--ivory), 0 0 2px var(--ivory),
    1px 0 0 var(--ivory), -1px 0 0 var(--ivory), 0 1px 0 var(--ivory), 0 -1px 0 var(--ivory),
    1px 1px 0 var(--ivory), -1px 1px 0 var(--ivory), 1px -1px 0 var(--ivory), -1px -1px 0 var(--ivory),
    2px 0 0 var(--ivory), -2px 0 0 var(--ivory), 0 2px 0 var(--ivory), 0 -2px 0 var(--ivory),
    2px 1px 0 var(--ivory), -2px 1px 0 var(--ivory), 2px -1px 0 var(--ivory), -2px -1px 0 var(--ivory),
    1px 2px 0 var(--ivory), -1px 2px 0 var(--ivory), 1px -2px 0 var(--ivory), -1px -2px 0 var(--ivory),
    0 2px 6px rgba(245,240,230,.9);
}
.drink--img .drink__tag{
  font-family:var(--ui);
  font-size:11.5px;font-weight:700;letter-spacing:.03em;
  color:var(--ink-2);margin-top:5px;line-height:1.3;
  text-shadow:
    0 0 1px var(--ivory), 1px 0 0 var(--ivory), -1px 0 0 var(--ivory), 0 1px 0 var(--ivory), 0 -1px 0 var(--ivory),
    1px 1px 0 var(--ivory), -1px 1px 0 var(--ivory), 1px -1px 0 var(--ivory), -1px -1px 0 var(--ivory);
}
.drink--img .drink__foot{
  align-items:flex-end;margin-top:auto; /* price + add stay on the bottom */
  padding-top:8px;
}
.drink--img .drink__price{
  font-family:var(--serif);
  font-size:34px;font-weight:400;line-height:.92;letter-spacing:-.015em;
  color:var(--brass-deep);
  font-variant-numeric:tabular-nums;
  text-shadow:
    0 0 1px var(--ivory), 0 0 2px var(--ivory),
    1px 0 0 var(--ivory), -1px 0 0 var(--ivory), 0 1px 0 var(--ivory), 0 -1px 0 var(--ivory),
    1px 1px 0 var(--ivory), -1px 1px 0 var(--ivory), 1px -1px 0 var(--ivory), -1px -1px 0 var(--ivory),
    2px 0 0 var(--ivory), -2px 0 0 var(--ivory), 0 2px 0 var(--ivory), 0 -2px 0 var(--ivory),
    2px 1px 0 var(--ivory), -2px 1px 0 var(--ivory), 2px -1px 0 var(--ivory), -2px -1px 0 var(--ivory),
    1px 2px 0 var(--ivory), -1px 2px 0 var(--ivory), 1px -2px 0 var(--ivory), -1px -2px 0 var(--ivory),
    0 2px 8px rgba(245,240,230,.92);
}
.drink--img .drink__add{
  width:36px;height:36px;
  color:var(--brass-deep);background:rgba(253,250,244,.94);
  border:1px solid #e6d3b4;
  box-shadow:0 2px 10px -3px rgba(43,37,33,.28),0 0 0 2px rgba(255,255,255,.65);
  backdrop-filter:blur(4px);
}
.drink--img:hover .drink__add{
  background:linear-gradient(180deg,var(--brass),var(--brass-deep));color:#fff;border-color:transparent;
  box-shadow:0 6px 14px -6px rgba(138,90,43,.5);
}
.drink--img.drink--out .drink__media{filter:grayscale(.22) brightness(.97);opacity:.94}
.drink--img.drink--out .drink__price{color:var(--ink-3)}
.drink--img.sel .drink__media{transform:scale(1.055)} /* photo leans in when it's on the order */
/* qty + stock chips sit fully inside the card */
.drink--img .qbadge{top:10px;right:10px}
.drink--img .stockflag{
  top:10px;left:10px;
  background:rgba(253,250,244,.94);backdrop-filter:blur(6px);
  border:1px solid rgba(226,214,190,.95);
  box-shadow:0 2px 8px -3px rgba(43,37,33,.22);
}
@media(max-width:720px){
  .drink--img{min-height:158px}
  .drink--img .drink__body{padding:40px 12px 12px;gap:8px}
  .drink--img .drink__name{font-size:18px;font-weight:400}
  .drink--img .drink__tag{font-size:10.5px}
  .drink--img .drink__price{font-size:28px}
  .drink--img .drink__add{width:34px;height:34px}
}
/* qty badge only exists on selected cards — it carries the emerald "added" color */
.qbadge{position:absolute;top:8px;right:8px;z-index:3;min-width:28px;height:28px;padding:0 9px;border-radius:99px;display:grid;place-items:center;
  font-size:12.5px;font-weight:800;color:#fff;background:linear-gradient(180deg,var(--sel-2),var(--sel));
  box-shadow:0 4px 14px -3px var(--sel-glow),0 0 0 2px rgba(255,255,255,.6)}
/* live: add-to-order moment — springy lift + emerald ripple, settles into the .sel resting pose */
@keyframes drinkPop{0%{transform:translateY(0) scale(.985)}45%{transform:translateY(-7px) scale(1.03)}100%{transform:translateY(-2px) scale(1)}}
@keyframes selRipple{
  0%{box-shadow:0 0 0 2px var(--sel-2),0 0 0 3px var(--sel-glow),var(--sh-2)}
  100%{box-shadow:0 0 0 2px var(--sel-2),0 0 0 20px rgba(213,99,27,0),var(--sh-2)}
}
@keyframes badgePop{0%{transform:scale(.35)}55%{transform:scale(1.22)}100%{transform:scale(1)}}
.drink.bump{animation:drinkPop .38s cubic-bezier(.3,1.45,.55,1),selRipple .55s ease-out}
.bump .qbadge{animation:badgePop .4s cubic-bezier(.3,1.5,.55,1)}
@media (prefers-reduced-motion:reduce){.drink.bump,.bump .qbadge{animation:none}}
.grid__empty{grid-column:1/-1;text-align:center;color:var(--ink-3);font-size:13px;padding:40px 0}

.check{background:var(--paper);border-left:1px solid var(--line);display:flex;flex-direction:column;min-height:0;box-shadow:-20px 0 40px -38px rgba(43,37,33,.4)}
.check__top{padding:18px 20px 14px;border-bottom:1px solid var(--line-2);position:relative}
.check__row{display:flex;align-items:center;justify-content:space-between;gap:12px}
.check__row>div:first-child{flex:1;min-width:0}
.tabname{font-family:var(--serif);font-size:22px;font-weight:600;display:inline-flex;align-items:center;gap:8px;max-width:100%;text-align:left;color:var(--ink);border-radius:9px;margin:-3px -7px;padding:3px 7px;background:var(--ivory-2);box-shadow:inset 0 0 0 1px var(--line);cursor:pointer;transition:background .15s ease,color .15s ease,box-shadow .15s ease}
.tabname>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tabname svg{width:14px;height:14px;flex:none;color:var(--brass);opacity:1;transform:none;transition:color .15s ease}
.tabname:hover,.tabname:focus-visible{background:var(--brass-tint);color:var(--brass-deep);box-shadow:inset 0 0 0 1px #e6d6bb;outline:none}
.tabname:hover svg,.tabname:focus-visible svg{color:var(--brass-deep)}
.tabsub{font-size:11px;color:var(--ink-2);margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tabpill{font-size:10px;font-weight:700;letter-spacing:.06em;color:var(--brass-deep);background:var(--brass-tint);border:1px solid #e6d6bb;padding:5px 10px;border-radius:99px;white-space:nowrap}
/* tab switcher */
.tabnav{margin-top:12px;display:flex;gap:9px}
.tabnav__btn{flex:1;display:flex;align-items:center;justify-content:center;gap:7px;height:38px;border-radius:11px;font-size:12.5px;font-weight:600;color:var(--ink-2);background:var(--ivory-2);border:1px solid var(--line);cursor:pointer;transition:.15s}
.tabnav__btn:hover{border-color:var(--brass);color:var(--brass-deep)}
.tabnav__btn.is-open{border-color:var(--brass);color:var(--brass-deep);background:var(--brass-tint)}
.tabnav__btn svg{width:15px;height:15px;flex:none}
.tabnav__chev{display:inline-flex;transition:transform .18s}
.tabnav__btn.is-open .tabnav__chev{transform:rotate(180deg)}
.tabnav__new{color:var(--brass-deep)}
/* floats over the check body instead of pushing it down */
.switcher{position:absolute;left:20px;right:20px;top:calc(100% - 4px);z-index:30;
  border:1px solid var(--line);border-radius:12px;background:var(--paper);overflow-y:auto;
  max-height:min(58vh,440px);box-shadow:0 20px 44px -18px rgba(43,37,33,.55)}
.swrow{display:flex;align-items:stretch;border-bottom:1px solid var(--line-2)}
.swrow:last-child{border-bottom:0}
.swrow__main{flex:1;min-width:0;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 14px;border:0;background:none;cursor:pointer;text-align:left;transition:background .15s}
.swrow__main:hover{background:var(--ivory-2)}
.swrow__main:focus-visible,.swrow__x:focus-visible{outline-offset:-2px}
.swrow.is-active{background:var(--brass-tint)}
.swrow.is-active .swrow__main:hover{background:none}
.swrow.is-active .swrow__nm{color:var(--brass-deep)}
.swrow__nm{font-size:13px;font-weight:600;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.swrow__meta{font-size:11.5px;color:var(--ink-3);flex:none;font-variant-numeric:tabular-nums}
/* × — only on EMPTY tabs: discard after a confirm */
.swrow__x{flex:none;width:44px;display:grid;place-items:center;color:var(--ink-3);border-left:1px solid var(--line-2);transition:background .15s,color .15s}
.swrow__hold{font-weight:700;color:#B7791F}
.swrow__x svg{width:15px;height:15px}
.swrow__x:hover{background:#F4DAD2;color:#a8412f}
.swrow__x:active{background:#F2CFC5;color:#a8412f}
.swrow__empty{padding:14px;text-align:center;color:var(--ink-3);font-size:12.5px}
.lines{flex:1;overflow-y:auto;padding:6px 20px;min-height:0}
.ln{display:flex;align-items:center;gap:9px;padding:12px 0;border-bottom:1px solid var(--line-2)}
.ln__name{font-size:13px;font-weight:500;flex:1;min-width:0}.ln__name small{display:block;color:var(--ink-3);font-size:10.5px;margin-top:2px}
/* qty box: − [typeable qty] + on the left; ⊗ remove after the price (all sizes) */
.lnq{display:inline-flex;align-items:center;gap:5px;flex:none}
.lnq__b{width:32px;height:32px;border-radius:10px;border:1px solid var(--line);background:var(--ivory-2);
  font-size:17px;font-weight:600;color:var(--ink);display:grid;place-items:center;-webkit-tap-highlight-color:transparent;transition:.14s}
.lnq__b:hover{border-color:var(--brass);color:var(--brass-deep)}
.lnq__b:active{background:var(--brass-tint);border-color:var(--brass);color:var(--brass-deep)}
.lnq__in{width:38px;height:32px;text-align:center;border:1px solid var(--line);border-radius:10px;background:var(--paper);
  font-size:13.5px;font-weight:700;color:var(--ink);outline:none;font-variant-numeric:tabular-nums}
.lnq__in:focus{border-color:var(--brass);box-shadow:0 0 0 3px var(--brass-tint)}
.ln__x{display:grid;place-items:center;width:30px;height:30px;flex:none;border-radius:50%;color:#a8412f;-webkit-tap-highlight-color:transparent;transition:.14s}
.ln__x svg{width:20px;height:20px}
.ln__x:hover{background:#F4DAD2}
.ln__x:active{background:#F2CFC5}
.ln__amt{font-family:var(--serif);font-size:16px;font-weight:600;min-width:46px;text-align:right;font-variant-numeric:tabular-nums}
/* live: empty check */
.lines__empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;height:100%;color:var(--ink-3);text-align:center;padding:24px}
.lines__empty svg{width:34px;height:34px;opacity:.6}
.lines__empty p{font-size:13px;max-width:180px}

.foot{padding:14px 20px 18px;border-top:1px solid var(--line)}
.split{display:flex;gap:9px;margin-bottom:13px}
.split button{flex:1;height:38px;border-radius:11px;font-size:12.5px;font-weight:600;color:var(--ink-2);background:var(--ivory-2);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;gap:7px}
.split button:hover{border-color:var(--brass);color:var(--brass-deep)}
.split svg{width:15px;height:15px;flex:none}
.trow{display:flex;justify-content:space-between;font-size:13px;color:var(--ink-2);padding:3px 0}
.trow .v{font-variant-numeric:tabular-nums;color:var(--ink)}
.tip{display:flex;align-items:center;justify-content:space-between;margin:9px 0}
.seg{display:inline-flex;gap:2px;background:var(--ivory-2);border:1px solid var(--line);border-radius:99px;padding:3px}
.seg button{padding:6px 11px;border-radius:99px;font-size:11.5px;font-weight:600;color:var(--ink-2)}
.seg button[aria-pressed="true"]{background:var(--paper);color:var(--brass-deep);box-shadow:var(--sh-1)}
/* gratuity apply / skip */
.tipapply{display:inline-flex;align-items:center;gap:8px;cursor:pointer;user-select:none}
.tipapply input{appearance:none;-webkit-appearance:none;width:17px;height:17px;flex:none;border:1.5px solid var(--line);border-radius:5px;background:var(--ivory-2);position:relative;transition:background .15s ease,border-color .15s ease}
.tipapply input:hover{border-color:var(--brass)}
.tipapply input:checked{background:var(--brass);border-color:var(--brass)}
.tipapply input:checked::after{content:"";position:absolute;left:5px;top:2px;width:4px;height:8px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(43deg)}
.tipapply .eyebrow{transition:color .15s ease}
/* tax box locked: this user may not remove tax (needs tax.exempt) */
.tipapply.is-locked{cursor:not-allowed}
.tipapply input:disabled{opacity:.55;cursor:not-allowed}
.tipapply input:disabled:hover{border-color:var(--line)}
.tipapply input:checked:disabled:hover{border-color:var(--brass)}
.tipapply input:not(:checked)~.eyebrow{color:var(--ink-3)}
.seg.is-off{opacity:.4;filter:grayscale(.4)}
.seg.is-off button{cursor:not-allowed}
.trow--muted{color:var(--ink-3)}
.trow--muted .v{color:var(--ink-3)}
/* note button — active state when a note exists */
.notebtn.is-noted{color:var(--brass-deep);border-color:var(--brass);background:var(--brass-tint)}
.notebtn.is-noted svg{color:var(--brass-deep)}
/* live: inline custom-tip entry, reuses the trow value slot */
.tipedit{display:inline-flex;align-items:center;gap:2px;border:1px solid var(--brass);border-radius:8px;padding:1px 7px;background:var(--paper)}
.tipedit span{color:var(--ink-3);font-size:12px}
.tipedit input{width:52px;text-align:right;border:0;outline:none;background:none;font-size:13px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}
.grand{display:flex;align-items:flex-end;justify-content:space-between;margin:10px 0 14px;padding-top:12px;border-top:1px solid var(--line)}
.grand .l{font-size:12.5px;font-weight:600;color:var(--ink-2)}
.grand .g{font-family:var(--serif);font-size:32px;font-weight:700;color:var(--ink);line-height:.9;font-variant-numeric:tabular-nums}
.pay{display:flex;gap:9px;margin-bottom:9px}
.pay button{flex:1;height:46px;border-radius:12px;font-size:13.5px;font-weight:600;color:var(--ink);background:var(--ivory-2);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;gap:8px;transition:.15s}
.pay button:hover{border-color:var(--brass);color:var(--brass-deep)}
.pay button[aria-pressed="true"]{background:var(--brass-tint);border-color:var(--brass);color:var(--brass-deep);box-shadow:inset 0 0 0 1px var(--brass)}
.pay svg{width:17px;height:17px;flex:none}
/* Charge — user-specified: Inter (self-hosted), #594119 text, gold gradient */
.charge{position:relative;width:100%;height:54px;border-radius:13px;font-family:'Inter',var(--ui);font-size:18px;font-weight:700;letter-spacing:.01em;overflow:hidden;
  color:#594119 !important;border:1px solid rgba(255,255,255,.55);text-shadow:0 1px 0 rgba(255,255,255,.5);
  background:linear-gradient(135deg,#c1a066,#d7b785 50%,#dbb782);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.7),0 1px 2px rgba(43,37,33,.05),0 6px 14px -6px rgba(43,37,33,.15),0 16px 30px -14px rgba(43,37,33,.17);
  display:flex;align-items:center;justify-content:center;gap:10px;
  transition:transform .16s cubic-bezier(.2,.7,.2,1),box-shadow .16s,background .16s,border-color .16s}
.charge::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:linear-gradient(115deg,transparent 30%,rgba(255,255,255,.6) 48%,transparent 62%);transform:translateX(-130%);transition:transform .6s ease}
.charge:hover{transform:translateY(-2px);border-color:rgba(255,255,255,.72);
  background:linear-gradient(135deg,#cdae74,#e0c294 50%,#e4c291);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.85),0 2px 3px rgba(43,37,33,.06),0 10px 20px -6px rgba(43,37,33,.16),0 26px 42px -16px rgba(43,37,33,.19)}
.charge:hover::after{transform:translateX(130%)}
.charge:active{transform:translateY(0);box-shadow:inset 0 1px 0 rgba(255,255,255,.7),0 1px 2px rgba(43,37,33,.06),0 4px 10px -6px rgba(43,37,33,.15)}
.charge:disabled{opacity:.5;cursor:not-allowed;filter:none;transform:none;box-shadow:none}
.charge .amt{font-variant-numeric:tabular-nums}

/* live: toast */
.toast-wrap{position:fixed;left:0;right:0;bottom:26px;padding:0 12px;display:flex;flex-direction:column;align-items:center;gap:10px;z-index:400;pointer-events:none}
.toast{display:flex;align-items:center;gap:11px;max-width:min(560px,100%);background:var(--ink);color:#FBF7EF;padding:13px 18px;border-radius:13px;font-size:13.5px;font-weight:500;line-height:1.35;
  box-shadow:0 18px 40px -18px rgba(43,37,33,.7);opacity:0;transform:translateY(12px);transition:opacity .22s,transform .22s}
.toast span{min-width:0;overflow-wrap:anywhere}
.toast.in{opacity:1;transform:translateY(0)}
.toast svg{width:19px;height:19px;flex:none;color:#D8BE8C}
.toast.ok svg{color:#9FC08B}

/* header right cluster: Live · clock · user */
.hd__right{margin-left:auto;display:flex;align-items:center;gap:16px;flex:none}
.live{display:inline-flex;align-items:center;gap:7px;font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}
.conn{width:8px;height:8px;border-radius:50%;background:#D9A400;box-shadow:0 0 0 3px rgba(217,164,0,.15);
  display:inline-block;vertical-align:middle;transition:background .2s,box-shadow .2s}
.conn--on{background:#6E9F5C;box-shadow:0 0 0 3px rgba(110,159,92,.18)}
.staff{cursor:pointer;border-radius:12px;padding:5px 8px 5px 12px;transition:.15s}
.staff:hover{background:var(--ivory-2)}

/* profile modal */
.pm-back{position:fixed;inset:0;background:rgba(43,37,33,.5);backdrop-filter:blur(3px);display:grid;place-items:center;z-index:60;opacity:0;transition:opacity .2s;padding:20px}
.pm-back.in{opacity:1}
.pm{background:var(--paper);border:1px solid var(--line);border-radius:20px;box-shadow:var(--sh-2);width:400px;max-width:100%;padding:24px;transform:translateY(10px);transition:transform .2s}
.pm-back.in .pm{transform:none}
.pm__hd{display:flex;align-items:center;gap:13px;margin-bottom:16px}
.pm__ava{width:46px;height:46px;border-radius:50%;display:grid;place-items:center;font-weight:700;font-size:15px;color:var(--brass-deep);background:var(--brass-tint);border:1px solid var(--line)}
.pm__hd h2{font-family:var(--serif);font-size:23px;font-weight:600;line-height:1}
.pm__hd .role{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--brass-deep);margin-top:3px}
.pm__x{margin-left:auto;width:32px;height:32px;border-radius:50%;font-size:22px;color:var(--ink-3);display:grid;place-items:center}
.pm__x:hover{background:var(--ivory-2);color:var(--ink)}
.pm .field{display:flex;flex-direction:column;gap:6px;margin-bottom:13px}
.pm .field label{font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}
.pm .field input{height:42px;border:1px solid var(--line);border-radius:11px;background:var(--ivory-2);padding:0 13px;font-size:14px;color:var(--ink);outline:none}
.pm .field input:focus{border-color:var(--brass);background:var(--paper);box-shadow:0 0 0 3px var(--brass-tint)}
.pm .field[hidden]{display:none}
.pm__opt{text-transform:none;letter-spacing:0;font-weight:400;color:var(--ink-3)}
.pm__hint{font-size:11.5px;line-height:1.45;color:var(--ink-2)}
.pm__err{color:#a8412f;font-size:13px;min-height:16px;margin-top:2px}
.pm__foot{display:flex;gap:10px;margin-top:16px}
.pm__save{flex:1;height:46px;border-radius:12px;font-weight:600;font-size:14px;color:#fff;border:0;cursor:pointer;background:linear-gradient(180deg,var(--brass),var(--brass-deep));box-shadow:0 10px 22px -12px rgba(138,90,43,.6)}
.pm__save:hover{filter:brightness(1.05)}
.pm__out{height:46px;padding:0 16px;border-radius:12px;font-weight:600;font-size:13.5px;color:#a8412f;background:var(--paper);border:1px solid var(--line);cursor:pointer;display:inline-flex;align-items:center;gap:8px}
.pm__out:hover{border-color:#c2685a;background:#F4DAD2}
.pm__out svg{width:16px;height:16px}

/* live: stock flags on the menu cards */
.stockflag{position:absolute;top:8px;left:10px;z-index:3;font-size:9.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  padding:4px 9px;border-radius:99px;box-shadow:var(--sh-1)}
.stockflag--low{color:#8A5A2B;background:#F7E9CE;border:1px solid #ecd6ab}
.stockflag--out{color:#8f3a2f;background:#F4DAD2;border:1px solid #e9c3b7}
.stockflag--ok{color:var(--ink-2);background:var(--ivory-2);border:1px solid var(--line);box-shadow:none;opacity:.9}
.drink--out{opacity:.6}
.drink--out:hover{transform:none;box-shadow:none;border-color:var(--line)}
.drink--out .drink__price{color:var(--ink-3)}
.drink--out .drink__add{background:#F4DAD2;color:#8f3a2f;font-size:10px;font-weight:800;letter-spacing:.04em}
.drink--out:hover .drink__add{background:#F4DAD2;color:#8f3a2f}

/* Pay with QR — secondary CTA under Cash/Card */
.paybtn-qr{flex:1;height:44px;border-radius:12px;font-size:13px;font-weight:600;color:var(--brass-deep);
  background:var(--paper);border:1px dashed var(--brass);display:flex;align-items:center;justify-content:center;gap:8px;transition:.15s}
.paybtn-qr:hover{background:var(--brass-tint);border-style:solid}
.paybtn-qr svg{width:17px;height:17px;flex:none}

/* QR scan-to-pay modal */
.qrm-back{position:fixed;inset:0;background:rgba(43,37,33,.5);backdrop-filter:blur(3px);display:grid;place-items:center;z-index:60;opacity:0;transition:opacity .2s;padding:20px}
.qrm-back.in{opacity:1}
.qrm{background:var(--paper);border:1px solid var(--line);border-radius:22px;box-shadow:var(--sh-2);width:340px;max-width:100%;padding:26px;text-align:center;position:relative;transform:translateY(8px);transition:transform .2s}
.qrm-back.in .qrm{transform:none}
.qrm__x{position:absolute;top:12px;right:14px;width:30px;height:30px;border-radius:50%;font-size:20px;line-height:1;color:var(--ink-3);display:grid;place-items:center}
.qrm__x:hover{background:var(--ivory-2);color:var(--ink)}
.qrm__eyebrow{font-size:10.5px;letter-spacing:.24em;text-transform:uppercase;color:var(--ink-3)}
.qrm__tab{font-family:var(--serif);font-size:22px;font-weight:600;margin-top:6px}
.qrm__qr{width:240px;height:240px;margin:18px auto 0;display:grid;place-items:center;border:1px solid var(--line);border-radius:16px;background:#fff;overflow:hidden}
.qrm__qr svg{width:100%;height:100%;display:block}
.qrm__prep{color:var(--ink-3);font-size:13px}
.qrm__amt{font-family:var(--serif);font-size:30px;font-weight:700;margin-top:14px;font-variant-numeric:tabular-nums}
.qrm__status{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:8px;font-size:12.5px;color:var(--ink-2)}
.qrm__dot{width:8px;height:8px;border-radius:50%;background:#D9A400;box-shadow:0 0 0 3px rgba(217,164,0,.15);animation:qpulse 1.3s infinite}
.qrm__dot.on{background:var(--ok);animation:none}
@keyframes qpulse{0%,100%{opacity:1}50%{opacity:.35}}
.qrm__link{display:inline-block;margin-top:12px;font-size:12.5px;color:var(--brass-deep);text-decoration:underline}
.qrm__link[hidden]{display:none}
/* a payment is in flight: closing is disabled so the result can't be hidden */
.qrm__x:disabled,.qrm__cancel:disabled,.cardm__x:disabled,.cardm__cancel:disabled{opacity:.45;cursor:not-allowed}
.qrm__cancel:disabled:hover,.cardm__cancel:disabled:hover{border-color:var(--line);color:var(--ink-2)}
.qrm__x:disabled:hover,.cardm__x:disabled:hover{background:none;color:var(--ink-3)}
.qrm__cancel{margin-top:14px;width:100%;height:44px;border-radius:12px;font-weight:600;color:var(--ink-2);background:var(--ivory-2);border:1px solid var(--line)}
.qrm__cancel:hover{border-color:var(--brass);color:var(--brass-deep)}
.qrm__paid{color:var(--ok);display:grid;place-items:center}
.qrm__paid svg{width:92px;height:92px}

/* Bill to Site / Park Pay reservation picker (sitebill.js) */
.sb__q{width:100%;margin:14px 0 8px;padding:11px 13px;border:1px solid var(--line);border-radius:11px;font:inherit;font-size:15px;background:transparent;color:var(--ink)}
.sb__q:focus{outline:none;border-color:var(--brass);box-shadow:0 0 0 3px rgba(176,138,88,.12)}
.sb__q::placeholder{color:var(--ink-3)}
.sb__list{max-height:320px;overflow-y:auto;text-align:left;margin:0 -3px;padding:0 3px}
.sb__none{padding:18px 4px;color:var(--ink-3);text-align:center;font-size:13.5px}
.sb__row{display:block;width:100%;padding:12px 14px;margin:7px 0;border:1px solid var(--line);border-radius:13px;background:transparent;color:inherit;font:inherit;cursor:pointer;text-align:left;transition:border-color .15s,background .15s,box-shadow .15s}
.sb__row:hover{border-color:var(--brass);background:var(--ivory-2);box-shadow:var(--sh-1)}
.sb__top{display:flex;justify-content:space-between;align-items:baseline;gap:10px}
.sb__name{font-family:var(--serif);font-size:17px;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sb__oid{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);white-space:nowrap;font-variant-numeric:tabular-nums}
.sb__stay{display:block;margin-top:3px;font-size:12.5px;color:var(--ink-2)}
.sb__site{font-weight:600;color:var(--ink)}
.sb__contact{display:flex;flex-wrap:wrap;gap:2px 14px;margin-top:3px;font-size:11.5px;color:var(--ink-3)}
.sb__contact span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
.sb__tags{display:flex;flex-wrap:wrap;gap:5px;margin-top:7px}
.sb__tag{font-size:10.5px;letter-spacing:.03em;padding:2.5px 9px;border-radius:999px;border:1px solid var(--line);color:var(--ink-2);background:var(--ivory-2);white-space:nowrap}
.sb__tag--in{color:var(--ok);border-color:rgba(110,127,92,.4);background:rgba(110,127,92,.08)}
.sb__tag--due{color:var(--brass-deep);border-color:rgba(176,138,88,.4);background:rgba(176,138,88,.08)}

/* keyed card-entry modal (POS terminal) — mirrors the QR modal */
.cardm-back{position:fixed;inset:0;background:rgba(43,37,33,.5);backdrop-filter:blur(3px);display:grid;place-items:center;z-index:60;opacity:0;transition:opacity .2s;padding:20px}
.cardm-back.in{opacity:1}
.cardm{background:var(--paper);border:1px solid var(--line);border-radius:22px;box-shadow:var(--sh-2);width:400px;max-width:100%;padding:26px;text-align:center;position:relative;transform:translateY(8px);transition:transform .2s}
.cardm-back.in .cardm{transform:none}
.cardm__x{position:absolute;top:12px;right:14px;width:30px;height:30px;border-radius:50%;font-size:20px;line-height:1;color:var(--ink-3);display:grid;place-items:center}
.cardm__x:hover{background:var(--ivory-2);color:var(--ink)}
.cardm__eyebrow{font-size:10.5px;letter-spacing:.24em;text-transform:uppercase;color:var(--ink-3)}
.cardm__tab{font-family:var(--serif);font-size:22px;font-weight:600;margin-top:6px}
.cardm__amt{font-family:var(--serif);font-size:30px;font-weight:700;margin-top:8px;font-variant-numeric:tabular-nums}
.cardm__el{margin-top:18px;text-align:left;background:var(--paper);border:1px solid var(--line);border-radius:12px;padding:15px 14px}
.cardm__el:focus-within{border-color:var(--brass)}
.cardm__prep{color:var(--ink-3);font-size:13px;text-align:center;padding:2px 0}
.cardm__err{margin-top:14px;background:#F9E4DD;border:1px solid #EBC2B6;color:#8f3a2f;border-radius:12px;padding:10px 13px;font-size:12.5px;line-height:1.45;text-align:left}
.cardm__err[hidden]{display:none}
.cardm__pay{margin-top:18px;width:100%;height:52px;border-radius:13px;font-family:var(--serif);font-size:18px;font-weight:700;color:#fff;background:linear-gradient(180deg,var(--brass),var(--brass-deep));box-shadow:0 12px 24px -12px rgba(138,90,43,.6);transition:transform .14s,filter .2s}
.cardm__pay:hover:not(:disabled){transform:translateY(-1px);filter:brightness(1.04)}
.cardm__pay:disabled{opacity:.55;cursor:progress}
.cardm__cancel{margin-top:10px;width:100%;height:44px;border-radius:12px;font-weight:600;color:var(--ink-2);background:var(--ivory-2);border:1px solid var(--line)}
.cardm__cancel:hover{border-color:var(--brass);color:var(--brass-deep)}
.cardm__secure{display:flex;align-items:center;justify-content:center;gap:6px;margin-top:14px;font-size:11px;color:var(--ink-3)}
.cardm__secure svg{width:13px;height:13px}
.cardm__done{color:var(--ok);display:grid;place-items:center;padding:10px 0}
.cardm__done svg{width:84px;height:84px}

/* rail: Dashboard nav link (pinned to the bottom; permission-gated in render.js) */
.cat--nav{margin-top:auto;position:relative;color:var(--ink-2);text-decoration:none}
.cat--nav:hover{background:var(--ivory-2);color:var(--brass-deep)}

@media(max-width:1100px){
  .body{grid-template-columns:84px 1fr 340px}
  .cat span{display:none}
  .hd .otype{display:none}
  /* …so Bar / Table / Tab moves into the check header and replaces the read-only pill */
  .check .otype--check{display:flex}
  .check .tabpill{display:none}
  .grid{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}   /* keep 2+ card columns in the narrower stage */
}

/* ---------- mobile bottom bar (Menu ⇄ Order) ---------- */
.mbar{display:none;flex:none;border-top:1px solid var(--line);background:var(--paper);box-shadow:0 -8px 24px -20px rgba(43,37,33,.5);z-index:4}
.mbar__btn{flex:1;display:flex;align-items:center;justify-content:center;gap:9px;height:60px;color:var(--ink-2);font-weight:600;font-size:14px;position:relative;background:none;border:0}
.mbar__btn svg{width:20px;height:20px}
.mbar__btn.is-active{color:var(--brass-deep)}
.mbar__btn.is-active::before{content:"";position:absolute;top:0;left:18px;right:18px;height:3px;border-radius:0 0 3px 3px;background:var(--brass)}
/* order count rides the icon's corner */
.mbar__ico{position:relative;display:inline-flex}
.mbar__count{position:absolute;top:-7px;right:-9px;min-width:16px;height:16px;padding:0 4px;border-radius:99px;display:grid;place-items:center;font-size:9.5px;font-weight:700;color:#fff;background:var(--brass-deep);box-shadow:0 0 0 2px var(--paper)}
.mbar__count[hidden]{display:none}
/* Dashboard: always-visible compact nav (it would otherwise hide at the
   end of the scrolling category strip on handhelds) */
.mbar__sep{width:1px;align-self:stretch;margin:11px 0;background:var(--line)}
.mbar__btn--nav{flex:0 0 auto;flex-direction:column;gap:4px;padding:0 14px;font-size:10px;font-weight:600;letter-spacing:.02em;color:var(--ink-2);position:relative;text-decoration:none}
.mbar__btn--nav svg{width:19px;height:19px}
.mbar__btn--nav:active{color:var(--brass-deep)}
/* permission-gated link (app.js un-hides it) — display:flex above would defeat [hidden] */
.mbar__btn--nav[hidden],.mbar__sep[hidden]{display:none}

/* ---------- handheld layout (≤ 900px: phones AND portrait tablets): two-view.
   A portrait iPad in the 3-pane got a single giant card column — as a handheld
   ordering pad it works far better as full-width Menu ⇄ Order. Landscape
   tablets (>900) keep the persistent 3-pane. ---------- */
@media(max-width:900px){
  /* body → single column */
  .body{display:flex;flex-direction:column;min-height:0}

  /* category rail → horizontal scrolling chip strip */
  .rail{flex-direction:row;height:auto;flex:none;overflow-x:auto;overflow-y:hidden;
        border-right:0;border-bottom:1px solid var(--line);padding:9px 12px;gap:8px;-webkit-overflow-scrolling:touch}
  .cat{flex:none;flex-direction:row;width:auto;gap:7px;padding:9px 13px;border-radius:99px;white-space:nowrap}
  .cat span{display:inline}
  .cat--nav{display:none}   /* lives in the bottom bar instead — always visible */

  /* menu fills + scrolls; tablets flow 2-3 columns, phones override below */
  .stage{flex:1}
  .grid{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}

  /* check becomes the full-screen order view, shown only in order mode */
  .check{display:none}
  .app.mview-order .rail,.app.mview-order .stage{display:none}
  .app.mview-order .check{display:flex;flex:1;border-left:0;box-shadow:none}

  .mbar{display:flex}

  /* ---- touch order list: same layout as desktop, sized up for fingers ---- */
  .ln{padding:11px 0;gap:10px}
  .ln__name{font-size:14px}
  .lnq{gap:6px}
  .lnq__b{width:38px;height:38px;border-radius:11px;font-size:19px}
  .lnq__in{width:44px;height:38px;border-radius:11px;font-size:16px}
  .ln__x{width:36px;height:36px}
  .ln__x svg{width:22px;height:22px}

  /* 16px inputs — anything smaller makes iOS zoom the page on focus */
  .search input,.tipedit input,.pm .field input{font-size:16px}
}

/* ---------- phone (≤ 720px): compact header + 2-up cards ---------- */
@media(max-width:720px){
  .hd{gap:10px;padding:9px 13px}
  .brand__s{display:none}
  .brand__seal{width:34px;height:34px;font-size:15px}
  .brand__n{font-size:18px}
  .search{padding:9px 13px}
  .hd__right{gap:12px}
  .live{font-size:0;gap:0}                 /* keep the connection dot, drop the word */
  .clock{display:none}
  .staff__t{display:none}

  .stage{padding:16px 14px 12px}
  .stage__h h1{font-size:27px}
  .stage__h .meta{display:none}
  .grid{grid-template-columns:1fr 1fr;gap:11px}
  .drink{padding:14px 13px}
  .drink--img{padding:0}
  .drink__name{font-size:15px}
}
@media(max-width:360px){
  .grid{grid-template-columns:1fr}
}

/* modals: scroll on short screens instead of clipping the top/bottom */
.pm-back,.qrm-back,.cardm-back{overflow-y:auto;place-items:center;place-items:safe center}

/* bottom bar clears the iPhone home indicator (0 elsewhere) */
.mbar{padding-bottom:env(safe-area-inset-bottom,0)}

/* logo-as-brand: when the company logo replaces the name it carries the header alone */
.brand__seal.seal--img{width:48px;height:48px}
@media (max-width:720px){ .brand__seal.seal--img{width:38px;height:38px} }

/* modal width: % max-width resolves against the (grown) grid track, not the
   screen — cap against the viewport so modals never spill off small phones */
.pm,.qrm,.cardm{max-width:calc(100vw - 40px)}

/* ---- multi-gateway card entry in the POS card modal (cardflow.js) ---- */
.cardform{display:flex;flex-direction:column;gap:10px}
.cardform input{width:100%;height:46px;border:1px solid var(--line);border-radius:11px;background:var(--paper);padding:0 13px;font:inherit;font-size:16px;color:var(--ink);outline:none;font-variant-numeric:tabular-nums}
.cardform input:focus{border-color:var(--brass);box-shadow:0 0 0 3px var(--brass-tint)}
.cardform input::placeholder{color:var(--ink-3)}
.cardform__row{display:flex;gap:10px}
.cardform__row input{min-width:0;flex:1}
.cloverf{display:flex;flex-direction:column;gap:10px}
.cloverf__row{display:flex;gap:10px}
.cloverf__row>div{flex:1;min-width:0}
.cloverf [data-cv]{height:46px;border:1px solid var(--line);border-radius:11px;background:var(--paper);padding:1px 8px;overflow:hidden}
.cloverf [data-cv]:focus-within{border-color:var(--brass);box-shadow:0 0 0 3px var(--brass-tint)}
.cloverf iframe{width:100% !important;height:42px !important;display:block}
/* Clover injects its own branding footer into <body> — keep it, discreetly */
.clover-footer{position:fixed !important;bottom:8px !important;left:50% !important;transform:translateX(-50%) !important;
  background:transparent !important;padding:2px !important;opacity:.8;z-index:5;width:auto !important}
.clover-footer img{height:13px !important}
.clover-footer div{font-size:10px !important;line-height:1.3 !important}
.cardm__el:has(.cardform),.cardm__el:has(.cloverf){border:0;padding:0;background:none}

/* ============================================================
   Touch polish (audit 2026-10-03, item 55/56)
   ============================================================ */

/* ---- inputs never below 16px on touch / handheld widths: anything smaller
   makes iOS zoom the whole page on focus ---- */
@media (any-pointer:coarse),(max-width:900px){
  .search input,.tipedit input,.pm .field input,.sb__q,.lnq__in{font-size:16px}
  .tipedit input{width:62px}
  .check .otype--check button{min-height:40px;padding:0 12px}
}

/* ---- tap targets: grow the HIT AREA to ≥40–44px with a pseudo-element, so the
   drawn size (and every desktop layout) stays exactly as designed ---- */
@media (any-pointer:coarse),(max-width:900px){
  .pm__x,.lnq__b,.ln__x{position:relative}                       /* .qrm__x / .cardm__x are already positioned */
  .pm__x::after,.qrm__x::after,.cardm__x::after,.lnq__b::after,.ln__x::after{content:"";position:absolute}
  .pm__x::after{inset:-6px}                                      /* 32 → 44 */
  .qrm__x::after,.cardm__x::after{inset:-7px}                    /* 30 → 44 */
  .lnq__b::after{inset:-6px -4px}                                /* 32 → 40×44, inside the 5px gaps */
  .ln__x::after{inset:-7px}                                      /* 30 → 44 */
}
@media (max-width:900px){
  .lnq__b::after{inset:-3px}                                     /* 38 → 44, inside the 6px gaps */
  .ln__x::after{inset:-4px}                                      /* 36 → 44 */
}

/* ---- handheld: toasts and Clover's injected footer sit ABOVE the bottom bar
   (it is 60px + border + the home-indicator inset) instead of on top of it ---- */
@media (max-width:900px){
  .toast-wrap{bottom:calc(var(--mbar-h) + env(safe-area-inset-bottom,0px) + 12px)}
  .clover-footer{bottom:calc(var(--mbar-h) + env(safe-area-inset-bottom,0px) + 12px) !important}
}


/* ---- Rail: only the category list scrolls; the Dashboard link stays pinned (2026-10-03) ---- */
@media(min-width:901px){
  .rail{padding:0;gap:0;overflow:hidden}
  .rail__cats{flex:1 1 auto;min-height:0;width:100%;overflow-y:auto;overscroll-behavior:contain;
    display:flex;flex-direction:column;align-items:center;gap:5px;padding:16px 0 12px;
    scrollbar-width:thin;scrollbar-color:var(--line) transparent}
  .rail__cats::-webkit-scrollbar{width:6px}
  .rail__cats::-webkit-scrollbar-thumb{background:var(--line);border-radius:99px}
  .rail__foot{flex:none;width:100%;display:flex;flex-direction:column;align-items:center;gap:5px;padding:10px 0 14px;
    background:var(--paper);border-top:1px solid var(--line);box-shadow:0 -8px 14px -12px rgba(43,37,33,.28);position:relative;z-index:1}
  .rail__foot[hidden]{display:none}
  .rail__foot .cat--nav{margin-top:0}
}
@media(max-width:900px){
  /* the strip is one horizontal row of chips; the pinned links live in the bottom bar */
  .rail__cats{display:contents}
  .rail__foot{display:none}
}

/* ---- "All" list pager: a bar PINNED to the bottom of the product area ----
   The stage becomes a column whose last child (the pager) is sticky at bottom:0,
   so it is always on screen: while scrolling a long page, and on a short last
   page too (margin-top:auto pushes it down). */
.stage.stage--paged{display:flex;flex-direction:column;padding-bottom:0}
.stage.stage--paged>.grid{flex:0 0 auto;padding-bottom:18px}
.pager{position:sticky;bottom:0;z-index:3;margin:auto -28px 0;padding:10px 28px;
  display:flex;align-items:center;justify-content:space-between;gap:14px;
  background:rgba(253,251,246,.94);-webkit-backdrop-filter:saturate(1.2) blur(8px);backdrop-filter:saturate(1.2) blur(8px);
  border-top:1px solid var(--line);box-shadow:0 -10px 22px -18px rgba(43,37,33,.45)}
.pager__left{display:flex;align-items:center;gap:14px;min-width:0}
.pager__size{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;color:var(--ink-3);white-space:nowrap}
.pager__size select{height:40px;min-width:74px;padding:0 30px 0 12px;border:1px solid var(--line);border-radius:12px;
  background:var(--paper) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238A5A2B' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") no-repeat right 9px center/15px;
  -webkit-appearance:none;appearance:none;font:inherit;font-size:14px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;cursor:pointer;outline:none}
.pager__size select:hover{border-color:var(--brass)}
.pager__size select:focus-visible{border-color:var(--brass);box-shadow:0 0 0 3px var(--brass-tint)}
.pager--one .pager__ctl{display:none}             /* everything fits on one page → only the size picker + count */
.pager__info{font-size:12.5px;color:var(--ink-3);white-space:nowrap}
.pager__info b{color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums}
.pager__ctl{display:flex;align-items:center;gap:8px;margin-left:auto}
.pager__pages{display:flex;align-items:center;gap:4px;padding:3px;border:1px solid var(--line);border-radius:14px;background:var(--ivory-2)}
.pager__pg{min-width:38px;height:38px;padding:0 6px;border-radius:11px;border:0;background:none;color:var(--ink-2);
  font-size:13.5px;font-weight:600;font-variant-numeric:tabular-nums;display:inline-grid;place-items:center;transition:background .15s,color .15s}
.pager__pg:hover{background:var(--paper);color:var(--ink)}
.pager__pg.is-on{background:linear-gradient(180deg,var(--brass),var(--brass-deep));color:#fff;box-shadow:0 4px 10px -6px rgba(43,37,33,.5)}
.pager__gap{min-width:18px;text-align:center;color:var(--ink-3);font-weight:600}
.pager__btn{height:44px;padding:0 15px;border-radius:13px;border:1px solid var(--line);background:var(--paper);color:var(--ink);
  font-size:13.5px;font-weight:600;display:inline-flex;align-items:center;gap:6px;transition:background .15s,border-color .15s,color .15s}
.pager__btn svg{width:17px;height:17px;flex:none}
.pager__btn:hover:not(:disabled){border-color:var(--brass);color:var(--brass-deep);background:var(--brass-tint)}
.pager__btn:disabled{opacity:.4;cursor:default}
.pager__compact{display:none;font-size:13.5px;color:var(--ink-2);padding:0 6px;white-space:nowrap}
.pager__compact b{color:var(--ink);font-weight:700;font-variant-numeric:tabular-nums}
@media(max-width:1280px){
  .pager__info{display:none}                 /* the stage header already says "N on the list · page X of Y" */
}
@media(max-width:1100px){
  .pager__per{display:none}
  .pager__pg{min-width:34px}
}
@media(max-width:720px){
  .pager{margin-left:-14px;margin-right:-14px;padding:8px 14px;gap:10px}
  .pager__size>span:first-child{display:none}      /* just the picker: "40 ▾" */
  .pager__size select{height:46px;min-width:70px;font-size:16px}
  .pager__ctl{flex:1;justify-content:flex-end;gap:8px;margin-left:0}
  .pager__pages{display:none}
  .pager__compact{display:inline;flex:1;text-align:center;padding:0 2px}
  .pager__btn{height:46px;padding:0 14px;flex:0 0 auto}
}
@media(max-width:400px){
  .pager__btn span{display:none}                   /* arrows only on very narrow phones */
  .pager__btn{padding:0 13px}
}

/* ==========================================================================
   Responsive + touch pass (2026-10-03)
   ========================================================================== */

/* ---- Order view on phones / portrait tablets: ONE scrolling column -------
   The lines used to be the only flexible part, so on a short phone they were
   squeezed to nothing while the totals + buttons overflowed underneath the
   bottom bar. Now the whole check scrolls; lines keep their natural height
   and still stretch to fill a tall screen. */
@media(max-width:900px){
  .body{flex:1 1 auto;min-height:0;overflow:hidden}
  .app.mview-order .check{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;
    -webkit-overflow-scrolling:touch;overscroll-behavior:contain}
  .app.mview-order .check .check__top{flex:none}
  .app.mview-order .check .lines{flex:1 0 auto;overflow:visible;min-height:0}
  .app.mview-order .check .lines__empty{height:auto;min-height:150px}
  .app.mview-order .check .foot{flex:none}
  .stage{min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}
  /* comfortable targets in the order view */
  .tabnav__btn{height:44px;font-size:13.5px}
  .split button{height:44px;font-size:13.5px}
  .pay button{height:50px;font-size:14.5px}
  .paybtn-qr{height:48px;font-size:13.5px}
  .charge{height:58px}
  .check .otype--check button{min-height:40px}
}
@media(max-width:560px){
  .check__top{padding:14px 14px 12px}
  .check__row{flex-wrap:wrap;gap:10px}
  .check__row>div:first-child{flex:1 1 100%;min-width:0}     /* tab name gets the full row */
  .check .otype--check{flex:1 1 100%}
  .check .otype--check button{flex:1}
  .lines{padding:6px 14px}
  .foot{padding:12px 14px 16px}
  .tabname{font-size:20px}
}
@media(max-width:380px){
  .hd{gap:8px;padding:8px 10px}
  .search{padding:8px 11px;min-width:0}
  .tip{flex-wrap:wrap;row-gap:8px}
  .tip .seg{flex:1 1 100%}
  .pay{gap:7px}
  .paybtn-qr{font-size:12.5px;gap:6px}
  .mbar__btn{font-size:12.5px;gap:6px}
  .mbar__btn--nav span{font-size:10.5px}
}

/* ---- short landscape phones: keep the catalog and the order usable ---- */
@media(max-width:900px) and (max-height:480px){
  .hd{padding:6px 12px}
  .rail{padding:6px 10px}
  .cat{padding:7px 12px}
  .mbar__btn{height:48px}
  .stage{padding:12px 14px 10px}
  .stage__h{margin-bottom:10px}
  .stage__h h1{font-size:22px}
  .stage__h .eyebrow{display:none}
}

/* ---- dialogs never wider than the screen (inline widths included) ---- */
.pm,.qrm,.cardm{max-width:calc(100vw - 32px) !important}
.pm-back,.qrm-back,.cardm-back{padding:16px}
@media(max-width:480px){
  .pm,.qrm,.cardm{padding:22px 18px}
  .qrm .cardform__row,.cardm .cardform__row{gap:8px}
}

/* ---- touch: every control reachable with a finger -------------------------
   any-pointer (not pointer): a touchscreen PC with a mouse attached reports a
   FINE primary pointer, but it is still used by touch. */
@media (any-pointer:coarse),(max-width:900px){
  .search input{min-height:40px}
  .pm__x,.qrm__x,.cardm__x{min-width:44px;min-height:44px;display:grid;place-items:center}
  .qrm__link{display:inline-flex;align-items:center;min-height:44px;padding:0 10px}
  .tipapply{min-height:40px;display:inline-flex;align-items:center}
  .tipapply input[type=checkbox]{width:22px;height:22px}
  .seg button{min-height:40px}
  .pager__btn{min-height:44px}
  .pager__pg{min-width:42px;height:42px}
  .tabname{min-height:40px}
  .switcher button,.switcher a{min-height:46px}
  .drink__add{min-width:44px;min-height:44px}
}
/* no hover-only affordances and no accidental text selection / long-press menus on the working surface */
@media (any-pointer:coarse){
  .drink,.cat,.mbar__btn,.charge,.pay button,.paybtn-qr,.lnq__b,.ln__x,.tabnav__btn,.pager__btn,.pager__pg{
    -webkit-tap-highlight-color:transparent;touch-action:manipulation;-webkit-user-select:none;user-select:none}
  .drink{-webkit-touch-callout:none}
  .charge:hover{transform:none}
}

/* ---- order lines on phones: name on its own row, quantity stepper underneath ----
   (side by side, the stepper left ~70px for the name and it wrapped a word per line) */
@media(max-width:480px){
  .ln{display:grid;grid-template-columns:minmax(0,1fr) auto auto;grid-template-areas:"name amt x" "qty qty qty";
      column-gap:10px;row-gap:9px;align-items:center;padding:12px 0}
  .ln__name{grid-area:name;font-size:14.5px;line-height:1.3;overflow-wrap:anywhere}
  .ln__amt{grid-area:amt;white-space:nowrap}
  .ln__x{grid-area:x}
  .lnq{grid-area:qty;justify-self:start}
  .tip .seg{display:flex}
  .tip .seg>*{flex:1}
}
/* the header search pill: the input fills the pill so the whole pill is the target */
@media (any-pointer:coarse),(max-width:900px){
  .hd .search{padding-top:2px;padding-bottom:2px}
}
/* pager bar follows the stage's side padding on short landscape phones */
@media(max-width:900px) and (max-height:480px){
  .pager{margin-left:-14px;margin-right:-14px;padding:6px 14px}
  .pager__btn{height:40px;min-height:40px}
}

/* ---- responsive pass 2 (2026-10-03): touch tablets in LANDSCAPE (>900px wide) ----
   They get the desktop three-pane layout, so the ≤900 sizes never applied:
   the order-type pills and the quantity stepper stayed mouse-sized. */
@media (any-pointer:coarse) and (min-width:901px){
  .hd .otype button{min-height:42px;padding:0 17px}
  .lnq{gap:6px}
  .lnq__b{width:38px;height:38px;border-radius:11px;font-size:19px}
  .lnq__in{width:44px;height:38px;border-radius:11px;font-size:16px}
  .lnq__b::after{inset:-3px}
  .ln__x{width:36px;height:36px}
  .ln__x::after{inset:-4px}
  .ln__x svg{width:22px;height:22px}
}

/* the items-per-page picker: 16px text on any touch device (smaller text makes iOS zoom the page on focus) */
@media (any-pointer:coarse){
  .pager__size select{font-size:16px}
}


/* ==========================================================================
   Audit 2 (2026-10-03) — charge flow, hold banner, cash + PIN dialogs
   ========================================================================== */

@keyframes spin{to{transform:rotate(360deg)}}

/* ---- "Connecting to the bar server…" (boot / first calls failing) ---- */
.bootnote{position:fixed;left:50%;top:16px;transform:translateX(-50%);z-index:350;display:flex;align-items:center;gap:10px;
  max-width:calc(100vw - 32px);padding:11px 18px;border-radius:99px;background:var(--paper);border:1px solid var(--line);
  box-shadow:var(--sh-2);font-size:13.5px;font-weight:600;color:var(--ink-2);line-height:1.3}
.bootnote__spin{flex:none;width:16px;height:16px;border-radius:50%;border:2px solid var(--brass-tint);border-top-color:var(--brass-deep);animation:spin .8s linear infinite}

/* ---- Charge: busy while a settle is in flight ---- */
.charge.is-busy:disabled{opacity:.9;cursor:progress}
.charge__spin{flex:none;width:18px;height:18px;border-radius:50%;border:2.5px solid rgba(89,65,25,.25);border-top-color:#594119;animation:spin .7s linear infinite}

/* ---- "Choose Cash or Card first": the tender pair pulses ---- */
@keyframes tenderPulse{
  0%,100%{box-shadow:0 0 0 0 rgba(213,99,27,0)}
  35%{box-shadow:0 0 0 4px rgba(213,99,27,.34)}
  70%{box-shadow:0 0 0 2px rgba(213,99,27,.16)}
}
.pay--pulse button{animation:tenderPulse .5s ease-in-out 2;border-color:var(--sel);color:var(--sel)}

/* ---- disabled money controls (a tab on hold, an empty tab) ---- */
.pay button:disabled,.paybtn-qr:disabled{opacity:.45;cursor:not-allowed}
.pay button:disabled:hover{border-color:var(--line);color:var(--ink)}
.paybtn-qr:disabled:hover{background:var(--paper);border-style:dashed}
.pay button:active:not(:disabled){background:var(--brass-tint)}
.lnq__b:disabled,.ln__x:disabled{opacity:.4;cursor:not-allowed}
.lnq__b:disabled:hover{border-color:var(--line);color:var(--ink)}
.ln__x:disabled:hover{background:none}
.lnq__in:disabled{opacity:.6;background:var(--ivory-2);cursor:not-allowed}
.seg button:disabled{cursor:not-allowed}
.tipedit input:disabled{opacity:.6;cursor:not-allowed}
.stage--held .drink{opacity:.55;cursor:not-allowed}
.stage--held .drink:hover,.stage--held .drink.sel:hover{transform:none;box-shadow:var(--sh-1)}
.stage--held .drink.sel{transform:none}

/* ---- hold banner: a charge may have gone through / went through for another amount ---- */
.holdcard{flex:none;margin:12px 20px 4px;padding:13px 14px 14px;border-radius:14px;border:1px solid #E6C98A;
  background:linear-gradient(180deg,#FFF7E3,#FBEFD3);box-shadow:var(--sh-1)}
.holdcard--captured{border-color:#E7BDAE;background:linear-gradient(180deg,#FCEDE6,#F9E2D9)}
.holdcard__hd{display:flex;gap:10px;align-items:flex-start}
.holdcard__ico{flex:none;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:rgba(255,255,255,.75);color:#B7791F;border:1px solid rgba(183,121,31,.25)}
.holdcard--captured .holdcard__ico{color:#a8412f;border-color:rgba(168,65,47,.25)}
.holdcard__ico svg{width:17px;height:17px}
.holdcard__t{min-width:0;font-family:var(--serif);font-size:16.5px;font-weight:600;line-height:1.25;color:var(--ink);overflow-wrap:anywhere;padding-top:3px}
.holdcard__meta{display:flex;flex-wrap:wrap;gap:3px 12px;margin:8px 0 0 40px;font-size:11.5px;color:var(--ink-2);font-variant-numeric:tabular-nums}
.holdcard__meta span{min-width:0;overflow-wrap:anywhere}
.holdcard__meta b{font-weight:600;color:var(--ink)}
.holdcard__p{margin:7px 0 0 40px;font-size:12.5px;line-height:1.45;color:var(--ink-2)}
.holdcard__acts{display:flex;flex-direction:column;gap:8px;margin-top:12px}
.holdcard__btn{width:100%;min-height:42px;padding:9px 12px;border-radius:11px;font-size:12.5px;font-weight:600;line-height:1.25;text-align:center;
  color:var(--ink);background:var(--paper);border:1px solid rgba(43,37,33,.16);transition:border-color .15s,background .15s,color .15s,filter .15s,transform .1s}
.holdcard__btn:hover{border-color:var(--brass);color:var(--brass-deep);background:var(--ivory-2)}
.holdcard__btn:active{transform:translateY(1px)}
.holdcard__btn--go{color:#fff;border-color:transparent;background:linear-gradient(180deg,var(--brass),var(--brass-deep));box-shadow:0 8px 18px -12px rgba(138,90,43,.7)}
.holdcard__btn--go:hover{color:#fff;border-color:transparent;background:linear-gradient(180deg,var(--brass),var(--brass-deep));filter:brightness(1.06)}
.holdcard__btn:disabled{opacity:.55;cursor:progress;filter:none;transform:none}
.holdcard__ask{margin-top:11px;padding:10px 12px;border-radius:10px;background:rgba(255,255,255,.65);border:1px solid rgba(43,37,33,.08);font-size:12.5px;font-weight:600;color:var(--ink)}
/* with the banner the check is ONE scrolling column (like the phone order view): on a short
   screen the banner, the lines and the totals all stay reachable instead of being clipped */
.check--held{overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain}
.check--held .check__top,.check--held .foot{flex:none}
.check--held .lines{flex:1 0 auto;overflow:visible}
.check--held .lines__empty{height:auto;min-height:120px}
@media(max-width:900px){ .app.mview-order .check .holdcard{flex:none} }
@media(max-width:560px){ .holdcard{margin:12px 14px 4px} }

/* ---- status line of the qrm dialogs: long messages wrap, warning / error tints ---- */
.qrm__dot{flex:none}
.qrm__stxt{min-width:0;overflow-wrap:anywhere}
.qrm__status.is-warn{color:var(--brass-deep)}
.qrm__status.is-bad{color:#8f3a2f}
.qrm__status.is-bad .qrm__dot,.qrm__dot.off{background:#B4472F;box-shadow:0 0 0 3px rgba(180,71,47,.15);animation:none}
.qrm__ended{color:#B7791F;display:grid;place-items:center}
.qrm__ended svg{width:84px;height:84px}
.qrm__tab,.cardm__tab{overflow-wrap:anywhere}
.qrm__cancel:active:not(:disabled),.cardm__cancel:active:not(:disabled){background:var(--brass-tint)}

/* ---- Bill to Site: tender strip for a picked reservation ---- */
.sb__tender{min-height:42px;padding:8px 13px;margin:3px 8px 3px 0;border:1px solid var(--line);border-radius:10px;background:var(--paper);color:var(--ink);
  font:inherit;font-size:13px;font-weight:600;cursor:pointer;transition:border-color .15s,background .15s,color .15s}
.sb__tender:hover{border-color:var(--brass);color:var(--brass-deep);background:var(--ivory-2)}
.sb__tender:active{background:var(--brass-tint)}
.sb__tendernote{margin-bottom:6px}

/* ---- Card tender dialog (cardchoice.js) ---- */
.ccm{width:390px}
.ccm__dev{display:flex;align-items:center;gap:14px;width:100%;padding:14px 16px;margin:12px 0 10px;border:1px solid var(--line);border-radius:12px;text-align:left;background:var(--ivory-2)}
.ccm__dev svg{flex:none;color:var(--brass-deep)}
.ccm__dev span{min-width:0;font-size:14px}
.ccm__dev small{display:block;margin-top:2px;font-size:12.5px;line-height:1.4;color:var(--ink-2)}
.cc__err{color:#a8412f;font-size:13px;line-height:1.45;margin:0 0 8px;text-align:left}
.cc__err[hidden]{display:none}
.cc__record{width:100%;min-height:50px;padding:12px 16px;border-radius:12px;color:#fff;font-weight:600;font-size:14.5px;line-height:1.25;
  background:linear-gradient(180deg,var(--brass),var(--brass-deep));box-shadow:0 12px 24px -12px rgba(138,90,43,.6);transition:transform .14s,filter .2s,background .2s}
.cc__record:hover:not(:disabled){transform:translateY(-1px);filter:brightness(1.04)}
.cc__record:active:not(:disabled){transform:none}
.cc__record:disabled{opacity:.6;cursor:progress}
.cc__record.is-done{background:#5d7a53;box-shadow:none}
.cc__amt{font-variant-numeric:tabular-nums}

/* ---- Cash: confirm before settling ---- */
.cashm{width:380px}
.cashm__total{display:flex;flex-direction:column;align-items:center;gap:4px;margin-top:14px}
.cashm__total span{font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-3)}
.cashm__amt{font-family:var(--serif);font-size:46px;font-weight:700;line-height:1;color:var(--ink);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.cashm__lbl{display:block;text-align:left;margin-top:18px;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}
.cashm__lbl span{text-transform:none;letter-spacing:0;font-weight:400}
.cashm__field{display:flex;align-items:center;gap:6px;margin-top:6px;height:52px;padding:0 14px;border:1px solid var(--line);border-radius:12px;background:var(--ivory-2);transition:border-color .15s,background .15s,box-shadow .15s}
.cashm__field:focus-within{border-color:var(--brass);background:var(--paper);box-shadow:0 0 0 3px var(--brass-tint)}
.cashm__field span{font-family:var(--serif);font-size:20px;color:var(--ink-3)}
.cashm__field input{flex:1;min-width:0;height:100%;border:0;outline:none;background:none;font-family:var(--serif);font-size:22px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}
.cashm__field input::placeholder{color:var(--ink-3);font-weight:400}
.cashm__quick{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.cashm__q{flex:1 1 60px;min-height:44px;padding:0 10px;border-radius:11px;font-size:14px;font-weight:600;color:var(--ink);background:var(--paper);border:1px solid var(--line);
  font-variant-numeric:tabular-nums;white-space:nowrap;transition:border-color .15s,background .15s,color .15s}
.cashm__q:hover{border-color:var(--brass);color:var(--brass-deep);background:var(--ivory-2)}
.cashm__q:active{background:var(--brass-tint)}
.cashm__q[aria-pressed="true"]{background:var(--brass-tint);border-color:var(--brass);color:var(--brass-deep);box-shadow:inset 0 0 0 1px var(--brass)}
.cashm__change{display:flex;align-items:baseline;justify-content:space-between;gap:12px;min-height:54px;margin-top:14px;padding:12px 14px;border-radius:12px;
  background:var(--ivory-2);border:1px solid var(--line);font-size:13px;color:var(--ink-2);text-align:left;transition:background .15s,border-color .15s}
.cashm__change b{flex:none;font-family:var(--serif);font-size:24px;font-weight:700;line-height:1;color:var(--ink);font-variant-numeric:tabular-nums}
.cashm__change.is-idle b{color:var(--ink-3)}
.cashm__change.is-ok{background:#EEF3E8;border-color:#CFDDC2;color:#4F6B3F}
.cashm__change.is-ok b{color:#3F5A31}
.cashm__change.is-bad{background:#F9E4DD;border-color:#EBC2B6;color:#8f3a2f}
.cashm__change.is-bad b{color:#8f3a2f}
.cashm__ok{margin-top:16px;width:100%;min-height:52px;padding:10px 16px;border-radius:13px;font-family:var(--serif);font-size:18px;font-weight:700;line-height:1.2;color:#fff;
  background:linear-gradient(180deg,var(--brass),var(--brass-deep));box-shadow:0 12px 24px -12px rgba(138,90,43,.6);transition:transform .14s,filter .2s}
.cashm__ok:hover:not(:disabled){transform:translateY(-1px);filter:brightness(1.04)}
.cashm__ok:active:not(:disabled){transform:none}
.cashm__ok:disabled{opacity:.5;cursor:not-allowed;box-shadow:none}
.cashm .qrm__cancel{margin-top:10px}

/* ---- profile: PIN row + Switch user ---- */
.pm__who{min-width:0}
.pm__hd h2,.pm__hd .role{overflow-wrap:anywhere}
.pm__ava{flex:none}
.pm__x{flex:none}
.pm__pinrow{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.pm .field .pm__pinrow input{flex:1 1 110px;min-width:0;letter-spacing:.28em}
.pm .field .pm__pinrow input::placeholder{letter-spacing:.05em}
.pm__pinstate{flex:none;font-size:11px;font-weight:700;letter-spacing:.03em;padding:6px 10px;border-radius:99px;color:var(--ink-2);background:var(--ivory-2);border:1px solid var(--line);white-space:nowrap}
.pm__pinstate.is-set{color:#3F5A31;background:#EEF3E8;border-color:#CFDDC2}
.pm__pinstate.is-off{color:#8f3a2f;background:#F9E4DD;border-color:#EBC2B6}
.pm__pinrm{flex:none;min-height:42px;padding:0 13px;border-radius:11px;font-size:12.5px;font-weight:600;color:#a8412f;background:var(--paper);border:1px solid var(--line);transition:border-color .15s,background .15s}
.pm__pinrm:hover{border-color:#c2685a;background:#F4DAD2}
.pm__pinrm:active{background:#F2CFC5}
.pm__save:active:not(:disabled){filter:brightness(.97)}
.pm__save:disabled{opacity:.6;cursor:progress;filter:none}
.pm__foot--alt{margin-top:10px}
.pm__alt{flex:1;height:46px;padding:0 14px;border-radius:12px;font-weight:600;font-size:13.5px;color:var(--ink-2);background:var(--paper);border:1px solid var(--line);
  display:inline-flex;align-items:center;justify-content:center;gap:8px;white-space:nowrap;transition:border-color .15s,background .15s,color .15s}
.pm__alt:hover{border-color:var(--brass);color:var(--brass-deep);background:var(--ivory-2)}
.pm__alt:active{background:var(--brass-tint)}
.pm__alt svg{width:16px;height:16px;flex:none}
.pm__foot--alt .pm__out{flex:1;justify-content:center;white-space:nowrap;transition:border-color .15s,background .15s}
.pm__out:active{background:#F2CFC5}
@media(max-width:400px){ .pm__foot--alt{flex-direction:column} .pm__foot--alt .pm__alt,.pm__foot--alt .pm__out{flex:none;width:100%} }

/* ---- quick user switch: PIN pad ---- */
.pm.pinm{width:340px;text-align:center}
.pinm__hd{display:flex;align-items:center;justify-content:space-between;gap:12px;text-align:left}
.pinm__hd h2{font-family:var(--serif);font-size:24px;font-weight:600;line-height:1.05}
.pinm__sub{margin-top:6px;font-size:13px;line-height:1.45;color:var(--ink-2);text-align:left}
.pinm__dots{display:flex;justify-content:center;gap:12px;margin:18px 0 4px}
.pinm__dot{width:14px;height:14px;border-radius:50%;border:1.5px solid var(--brass);background:transparent;transition:background .12s,border-color .12s,transform .12s}
.pinm__dot.is-opt{border-color:#D8CBB2;border-style:dashed}          /* digits 5 and 6 are optional */
.pinm__dot.is-on{background:var(--brass-deep);border-color:var(--brass-deep);border-style:solid;transform:scale(1.12)}
.pinm__sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.pinm__err{min-height:20px;margin-top:8px;font-size:13px;line-height:1.4;color:#a8412f;overflow-wrap:anywhere}
.pinm__keys{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:8px}
.pinm__key{height:64px;border-radius:16px;font-family:var(--serif);font-size:26px;font-weight:600;color:var(--ink);background:var(--ivory-2);border:1px solid var(--line);
  display:grid;place-items:center;transition:background .12s,border-color .12s,transform .08s,filter .15s;touch-action:manipulation;-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums}
.pinm__key:hover{border-color:var(--brass);background:var(--paper)}
.pinm__key:active{background:var(--brass-tint);border-color:var(--brass);transform:scale(.97)}
.pinm__key:disabled{opacity:.45;cursor:not-allowed;transform:none}
.pinm__key:disabled:hover{border-color:var(--line);background:var(--ivory-2)}
.pinm__key svg{width:24px;height:24px}
.pinm__key--fn{color:var(--ink-2);background:var(--paper)}
.pinm__key--ok,.pinm__key--ok:hover,.pinm__key--ok:active{color:#fff;border-color:transparent;background:linear-gradient(180deg,var(--brass),var(--brass-deep));box-shadow:0 10px 22px -12px rgba(138,90,43,.6)}
.pinm__key--ok:hover:not(:disabled){filter:brightness(1.06)}
.pinm__key--ok:disabled,.pinm__key--ok:disabled:hover{box-shadow:none;filter:none;border-color:transparent;background:linear-gradient(180deg,var(--brass),var(--brass-deep))}
@keyframes pinShake{0%,100%{transform:none}20%{transform:translateX(-8px)}40%{transform:translateX(7px)}60%{transform:translateX(-5px)}80%{transform:translateX(3px)}}
.pm.pinm.is-shake{animation:pinShake .4s ease}
@media(max-height:600px){ .pinm__key{height:52px;font-size:23px} .pinm__dots{margin-top:12px} }

/* ---- small screens / touch for the new pieces ---- */
@media(max-width:480px){
  .swrow__main{flex-direction:column;align-items:flex-start;justify-content:center;gap:2px}
  .swrow__nm{max-width:100%}
  .cashm__amt{font-size:40px}
}
@media (any-pointer:coarse),(max-width:900px){
  .swrow__x{width:48px}
  .holdcard__btn{min-height:44px;font-size:13px}
  .cashm__q{min-height:46px}
  .sb__tender{min-height:44px}
  .pm__pinrm{min-height:44px}
  .pm__alt,.pm__out{min-height:46px}
}
@media (any-pointer:coarse){
  .pinm__key,.cashm__q,.holdcard__btn,.swrow__main,.swrow__x{-webkit-tap-highlight-color:transparent;touch-action:manipulation}
}
@media (prefers-reduced-motion:reduce){ .pm.pinm.is-shake,.pay--pulse button{animation:none} }

/* ---- polish (2026-10-03) ----
   A product WITHOUT a photo: the "N left" flag sat on top of the product name. Give the copy room. */
.drink:not(.drink--img):has(.stockflag) .drink__body{padding-top:22px}
/* dialog buttons are controls, not text: a double tap must not select their label */
.qrm button,.cardm button,.pm button,.pinm__key,.holdcard__btn,.swrow__x{-webkit-user-select:none;user-select:none}

/* ---------- profile dialog: picture controls ---------- */
.pm__ava{overflow:hidden}
.pm__pic{display:flex;align-items:center;gap:12px;margin-top:7px;flex-wrap:wrap}
.pm__piclink{padding:0;border:0;background:none;font:inherit;font-size:12.5px;font-weight:600;color:var(--brass-deep);cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.pm__piclink:hover{color:var(--ink)}
.pm__piclink:focus-visible{outline:2px solid var(--brass);outline-offset:3px;border-radius:4px}
.pm__piclink--rm{color:var(--ink-2);font-weight:500}
.pm__piclink[hidden]{display:none}
.staff__a{overflow:hidden}
.pm .pwrules ul{grid-template-columns:minmax(0,1fr)}

/* ============================================================
   Register product pager — same look + place as the dashboard
   Products pager (.tpg). It flows at the END of the product list
   and scrolls with it; it is NOT pinned to the bottom of the screen.
   ============================================================ */
.stage .tpg{display:flex;align-items:center;justify-content:space-between;gap:10px 18px;flex-wrap:wrap;
  margin:14px 0 6px;padding:14px 2px 0;border-top:1px solid var(--line-2);font-size:12.5px;color:var(--ink-2)}
.stage .tpg__info strong{color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums}
.stage .tpg__ctl{display:flex;align-items:center;gap:10px 16px;flex-wrap:wrap}
.stage .tpg__size{display:inline-flex;align-items:center;gap:8px;white-space:nowrap}
.stage .tpg__size select{height:36px;padding:0 28px 0 12px;border:1px solid var(--line);border-radius:11px;background:var(--paper);
  color:var(--ink);font:inherit;font-size:13px;font-weight:600;cursor:pointer}
.stage .tpg__size select:hover{border-color:var(--brass)}
.stage .tpg__size select:focus-visible{outline:2px solid var(--brass);outline-offset:1px}
.stage .tpg__nav{display:inline-flex;align-items:center;gap:4px}
.stage .tpg__pages{display:inline-flex;align-items:center;gap:4px}
.stage .tpg__btn,.stage .tpg__pg{min-width:36px;height:36px;padding:0 9px;display:inline-grid;place-items:center;
  border:1px solid var(--line);border-radius:11px;background:var(--paper);color:var(--ink-2);
  font:inherit;font-size:13px;font-weight:600;font-variant-numeric:tabular-nums;cursor:pointer;
  -webkit-tap-highlight-color:transparent;touch-action:manipulation;
  transition:background .12s ease,color .12s ease,border-color .12s ease,box-shadow .12s ease}
.stage .tpg__btn svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.stage .tpg__btn:hover:not(:disabled),.stage .tpg__pg:hover{background:var(--ivory-2);color:var(--brass-deep);border-color:var(--brass-tint)}
.stage .tpg__btn:focus-visible,.stage .tpg__pg:focus-visible{outline:2px solid var(--brass);outline-offset:1px}
.stage .tpg__btn:disabled{opacity:.4;cursor:default}
.stage .tpg__pg.on{background:var(--brass-tint);border-color:#E4D2B0;color:var(--brass-deep);box-shadow:var(--sh-1);cursor:default}
.stage .tpg__gap{min-width:18px;text-align:center;color:var(--ink-3)}
.stage .tpg__compact{display:none;padding:0 6px;white-space:nowrap;font-weight:600;color:var(--ink)}

@media (any-pointer:coarse){
  .stage .tpg__btn,.stage .tpg__pg{min-width:44px;height:44px}
  .stage .tpg__size select{height:46px;font-size:16px}
}
@media (max-width:640px){
  .stage .tpg{justify-content:center;text-align:center}
  .stage .tpg__info{flex:1 1 100%}
  .stage .tpg__ctl{justify-content:center;width:100%}
  .stage .tpg__pages{display:none}
  .stage .tpg__compact{display:inline}
  .stage .tpg__size>span{display:none}
}

/* ---- Settings → Register → Payment methods: a single remaining button takes the whole row ---- */
.pay.pay--one>button{flex:1 1 100%}
.pay__none{font-size:12.5px;color:var(--ink-3);text-align:center;padding:12px 10px;border:1px dashed var(--line);border-radius:12px;margin-top:8px}
