/*
Theme Name:   Nuclear Cafe
Theme URI:    https://bar.producthomebd.com
Author:       Nuclear Cafe
Description:  The ordering front-end for Nuclear Cafe. One page, frosted glass, cash on delivery, and a live order tracker that docks to the top of the screen. Needs the Nuclear Cafe plugin and WooCommerce.
Version:      1.19.0
Requires PHP: 7.4
Text Domain:  nuclear-cafe
*/

:root{
  --void:#100D0C;
  --graphite:#1B1614;
  --ember:#F26A21;
  --ember-hot:#FFA14A;
  --coolant:#4FD8D0;
  --steam:#F4EFE9;
  --muted:rgba(244,239,233,.55);
  --faint:rgba(244,239,233,.30);

  --glass:rgba(255,255,255,.055);
  --edge:rgba(255,255,255,.11);
  --edge-hot:rgba(242,106,33,.42);

  --blur:blur(22px) saturate(150%);
  --r-s:12px; --r-m:18px; --r-l:26px; --r-xl:34px;

  --safe-b:env(safe-area-inset-bottom,0px);
  --safe-t:env(safe-area-inset-top,0px);
}

*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
/* .icon-btn and .fsbtn set display:grid, which outranks the browser's own
   [hidden] rule. Without this, hiding a button by attribute does nothing. */
[hidden]{display:none!important}
html,body{margin:0;padding:0}
body{
  background:var(--void);
  color:var(--steam);
  font-family:'Manrope',system-ui,-apple-system,sans-serif;
  font-size:15px;line-height:1.5;
  overflow-x:hidden;
  padding-bottom:calc(96px + var(--safe-b));
}
body.nc-locked{overflow:hidden}
img{max-width:100%;height:auto}
button{font-family:inherit}

/* ambient reactor glow */
.ambient{position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden}
.ambient i{position:absolute;display:block;border-radius:50%;filter:blur(80px);opacity:.55;
  will-change:transform;transform:translateZ(0)}
.ambient i.a{width:70vw;height:70vw;max-width:620px;max-height:620px;top:-18vh;left:-16vw;
  background:radial-gradient(circle,rgba(242,106,33,.55),transparent 68%);animation:drift 22s ease-in-out infinite}
.ambient i.b{width:60vw;height:60vw;max-width:520px;max-height:520px;top:38vh;right:-22vw;
  background:radial-gradient(circle,rgba(79,216,208,.20),transparent 70%);animation:drift 28s ease-in-out infinite reverse}
.ambient i.c{width:80vw;height:80vw;max-width:700px;max-height:700px;bottom:-25vh;left:10vw;
  background:radial-gradient(circle,rgba(242,106,33,.22),transparent 70%);animation:drift 34s ease-in-out infinite}
@keyframes drift{0%,100%{transform:translate3d(0,0,0)}50%{transform:translate3d(4vw,5vh,0) scale(1.08)}}
/* On a touch screen the drift is not worth the repaint it costs. */
@media (hover:none){ .ambient i{animation:none!important} }
.grain{position:fixed;inset:0;z-index:1;pointer-events:none;opacity:.16;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='.5'/%3E%3C/svg%3E")}

.wrap{position:relative;z-index:2;max-width:1080px;margin:0 auto;padding:0 16px}

.glass{
  background:var(--glass);
  -webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);
  border:1px solid var(--edge);
  box-shadow:0 1px 0 rgba(255,255,255,.07) inset, 0 18px 40px -24px rgba(0,0,0,.9);
}


/* ---------- top bar ---------- */
.topbar{position:sticky;top:0;z-index:60;padding-top:var(--safe-t)}
.topbar-in{display:flex;align-items:center;gap:12px;height:58px;padding:0 14px;
  border-radius:0 0 var(--r-m) var(--r-m);border-top:0;max-width:1048px}
.brand{display:flex;align-items:center;gap:9px;margin-right:auto;cursor:pointer;user-select:none;
  background:none;border:0;color:inherit;padding:0;text-align:left}
.brand svg{width:28px;height:28px;flex:none}
.brand b{font-family:'Oswald';font-weight:700;font-size:17px;letter-spacing:.14em;text-transform:uppercase;line-height:1}
.brand b span{color:var(--ember)}
.brand small{display:block;font-family:'JetBrains Mono';font-size:8.5px;letter-spacing:.34em;color:var(--faint);margin-top:2px}

.lang{display:flex;border-radius:999px;overflow:hidden;border:1px solid var(--edge);background:rgba(255,255,255,.04)}
.lang button{border:0;background:transparent;color:var(--muted);font-family:'JetBrains Mono';font-size:11px;
  padding:6px 10px;cursor:pointer;letter-spacing:.06em}
.lang button.on{background:var(--ember);color:#180d05;font-weight:700}

.icon-btn{position:relative;width:38px;height:38px;border-radius:50%;display:grid;place-items:center;
  border:1px solid var(--edge);background:rgba(255,255,255,.05);color:var(--steam);cursor:pointer}
.icon-btn svg{width:18px;height:18px}
.badge{position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 4px;border-radius:999px;
  background:var(--ember);color:#190d05;font-family:'JetBrains Mono';font-weight:700;font-size:10px;
  display:none;place-items:center;font-style:normal}
.badge.show{display:grid}

/* ---------- hero ---------- */
.hero{padding:44px 0 26px;text-align:center;position:relative}
.reactor{width:132px;height:132px;margin:0 auto 20px;position:relative}
.reactor .core{position:absolute;inset:26%;border-radius:50%;
  background:radial-gradient(circle at 50% 45%,var(--ember-hot),var(--ember) 55%,rgba(242,106,33,0) 78%);
  animation:pulse 3.6s ease-in-out infinite}
.reactor .rr{position:absolute;inset:0;border-radius:50%;border:1px solid rgba(242,106,33,.35)}
.reactor .rr.mid{inset:12%;border-color:rgba(255,255,255,.12);animation:spin 14s linear infinite;border-top-color:var(--ember)}
.reactor .rr.out{inset:0;animation:spin 22s linear infinite reverse;border-left-color:var(--coolant)}
@keyframes pulse{0%,100%{transform:scale(1);opacity:.9}50%{transform:scale(1.12);opacity:1}}
@keyframes spin{to{transform:rotate(360deg)}}

.eyebrow{font-family:'JetBrains Mono';font-size:10.5px;letter-spacing:.34em;text-transform:uppercase;
  color:var(--ember);margin-bottom:14px}
.h1{font-family:'Oswald';font-weight:700;text-transform:uppercase;letter-spacing:.02em;
  font-size:clamp(34px,10.5vw,64px);line-height:.94;margin:0 0 6px}
.h1 em{font-style:normal;display:block;color:var(--ember)}
.lede{max-width:420px;margin:14px auto 22px;color:var(--muted);font-size:14.5px}
.facts{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin-bottom:26px}
.fact{display:flex;align-items:center;gap:7px;padding:8px 13px;border-radius:999px;font-size:12px;
  color:var(--muted);background:var(--glass);border:1px solid var(--edge);
  -webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur)}
.fact b{color:var(--steam);font-weight:600}
.dot{width:6px;height:6px;border-radius:50%;background:var(--coolant);box-shadow:0 0 8px var(--coolant)}

.btn{border:0;cursor:pointer;font-family:'Oswald';font-weight:600;text-transform:uppercase;letter-spacing:.1em;
  font-size:14px;padding:15px 26px;border-radius:999px;color:#180d05;
  background:linear-gradient(180deg,var(--ember-hot),var(--ember));
  box-shadow:0 10px 30px -10px rgba(242,106,33,.75);transition:transform .15s}
.btn:active{transform:scale(.97)}
.btn.ghost{background:var(--glass);color:var(--steam);border:1px solid var(--edge);box-shadow:none;
  -webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur)}
.btn.wide{width:100%;display:block}
.btn[disabled]{opacity:.4;pointer-events:none}
.btn.busy{position:relative;color:transparent}
.btn.busy::after{content:'';position:absolute;left:50%;top:50%;width:17px;height:17px;margin:-9px 0 0 -9px;
  border:2px solid rgba(24,13,5,.35);border-top-color:#180d05;border-radius:50%;animation:spin .7s linear infinite}

/* closed banner */
.closed{margin:0 0 18px;border-radius:var(--r-m);padding:14px 16px;text-align:center;font-size:13.5px;
  border:1px solid rgba(255,107,94,.4);background:rgba(255,107,94,.1);color:#ffb9b2;display:none}
.closed.show{display:block}

/* ---------- category rail ---------- */
.rail{position:sticky;top:calc(58px + var(--safe-t));z-index:50;margin:0 -16px;padding:10px 16px 12px;
  background:var(--void);
  box-shadow:0 10px 18px -12px rgba(0,0,0,.9)}
.rail-in{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;padding:2px}
.rail-in::-webkit-scrollbar{display:none}
.chip{flex:none;display:flex;align-items:center;gap:8px;padding:9px 14px 9px 9px;border-radius:999px;
  border:1px solid var(--edge);background:var(--glass);color:var(--muted);cursor:pointer;white-space:nowrap;
  -webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);font-size:13px;font-weight:600}
.chip.on{border-color:var(--edge-hot);color:var(--steam);background:rgba(242,106,33,.14)}
.iso{width:24px;height:24px;border-radius:7px;display:grid;place-items:center;flex:none;
  font-family:'JetBrains Mono';font-size:10px;font-weight:700;
  background:rgba(255,255,255,.07);border:1px solid var(--edge);color:var(--ember)}
.chip.on .iso{background:var(--ember);color:#180d05;border-color:transparent}

/* ---------- menu: one collapsible group per category ---------- */
.cat{padding-top:12px;scroll-margin-top:118px;contain:layout paint style}

.cat-head{position:relative;display:flex;align-items:center;gap:13px;width:100%;padding:0;cursor:pointer;
  border:1px solid var(--edge);border-radius:var(--r-l);overflow:hidden;background:var(--glass);
  -webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);color:inherit;text-align:left;
  min-height:78px;transition:border-color .2s}
.cat-head:hover{border-color:var(--edge-hot)}
.cat.open .cat-head{border-color:var(--edge-hot);border-radius:var(--r-l) var(--r-l) 0 0}

/* the category photo sits behind the label, darkened so the type stays readable */
.cat-cover{position:absolute;inset:0;background-size:cover;background-position:center;z-index:0;
  transform:scale(1.02);transition:transform .5s ease}
.cat-head:hover .cat-cover{transform:scale(1.06)}
.cat-cover::after{content:'';position:absolute;inset:0;
  background:linear-gradient(90deg,rgba(16,13,12,.94) 0%,rgba(16,13,12,.78) 45%,rgba(16,13,12,.42) 100%)}
.cat-head > *:not(.cat-cover){position:relative;z-index:1}
.cat-head .iso{width:34px;height:34px;border-radius:10px;font-size:12px;margin-left:15px}
.cat-ttl{flex:1;min-width:0;padding:16px 0}
.cat-ttl b{display:block;font-family:'Oswald';font-weight:600;text-transform:uppercase;letter-spacing:.08em;
  font-size:17px;line-height:1.1}
.cat-ttl i{display:block;font-style:normal;font-size:11.5px;color:var(--muted);margin-top:4px}
.chev{width:30px;height:30px;margin-right:15px;flex:none;border-radius:50%;display:grid;place-items:center;
  border:1px solid var(--edge);background:rgba(255,255,255,.06);transition:transform .3s;font-size:11px}
.cat.open .chev{transform:rotate(180deg);background:var(--ember);color:#180d05;border-color:transparent}

.cat-body{display:none;border:1px solid var(--edge-hot);border-top:0;border-radius:0 0 var(--r-l) var(--r-l);
  padding:12px;background:rgba(255,255,255,.02)}
.cat.open .cat-body{display:block}

.grid{display:grid;gap:9px;grid-template-columns:1fr}
@media(min-width:680px){.grid{grid-template-columns:1fr 1fr}}
@media(min-width:1000px){.grid{grid-template-columns:1fr 1fr 1fr}}

.item{border-radius:var(--r-m);padding:9px;display:flex;gap:12px;align-items:flex-start;transition:border-color .2s}
.item.picked{border-color:var(--edge-hot)}
/* Sold out: still on the menu, plainly marked, and impossible to add. */
.item.out{opacity:.62;pointer-events:none}
.item.out .item-name b{text-decoration:line-through;text-decoration-thickness:1px}
.item.out .price{color:var(--faint)}
.closed.power{border-color:rgba(255,161,74,.45);background:rgba(255,161,74,.12);color:#ffd0a3}
.thumb .outtag.power{background:rgba(217,134,14,.92)}
.thumb .outtag{position:absolute;inset:auto 0 0 0;padding:3px 0;text-align:center;
  font-family:'JetBrains Mono';font-size:8.5px;letter-spacing:.1em;text-transform:uppercase;
  background:rgba(216,64,42,.9);color:#fff}
.outword{margin-left:auto;font-size:11.5px;color:#ff9a8c;font-weight:600}
/* The reason gets a line of its own — it is a sentence, not a tag. */
.offnote{font-size:11px;line-height:1.45;color:#ff9a8c;font-weight:600}
.offnote.power{color:#ffbe73}
.size.gone,.ochoice.gone{opacity:.4;cursor:not-allowed;text-decoration:line-through}
.size.gone b,.ochoice.gone .plus{text-decoration:none}

.thumb{width:84px;height:84px;flex:none;border-radius:var(--r-s);overflow:hidden;position:relative;
  background:rgba(255,255,255,.05);border:1px solid var(--edge)}
.thumb img{width:100%;height:100%;object-fit:cover;display:block;filter:brightness(1.04) saturate(1.05)}
.thumb .ph{position:absolute;inset:0;display:grid;place-items:center;font-size:26px;opacity:.32}

.item-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:8px;min-height:84px}
.item-name b{font-weight:700;font-size:14px;line-height:1.3;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.item-name i{font-style:normal;font-size:11px;line-height:1.4;color:var(--faint);margin-top:3px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.price{font-family:'JetBrains Mono';font-weight:700;font-size:15px;color:var(--ember);white-space:nowrap}

.sizes{display:flex;gap:5px}
.size{flex:1;min-width:0;padding:6px 3px;border-radius:9px;border:1px solid var(--edge);background:rgba(255,255,255,.04);
  color:var(--muted);cursor:pointer;font-family:'JetBrains Mono';font-size:9.5px;text-align:center;line-height:1.35;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.size b{display:block;color:var(--steam);font-size:10.5px}
.size.on{border-color:var(--edge-hot);background:rgba(242,106,33,.15);color:var(--steam)}

.item-foot{display:flex;align-items:center;gap:10px;margin-top:auto}
.add{margin-left:auto;width:34px;height:34px;border-radius:50%;border:0;cursor:pointer;font-size:20px;
  line-height:1;display:grid;place-items:center;
  background:linear-gradient(180deg,var(--ember-hot),var(--ember));color:#180d05;
  box-shadow:0 6px 16px -8px rgba(242,106,33,.9)}
.add:active{transform:scale(.92)}
.stepper{display:flex;align-items:center;gap:1px;margin-left:auto;border-radius:999px;padding:2px;
  border:1px solid var(--edge-hot);background:rgba(242,106,33,.12)}
.stepper button{width:29px;height:29px;border-radius:50%;border:0;background:transparent;color:var(--steam);
  font-size:17px;line-height:1;cursor:pointer;display:grid;place-items:center}
.stepper span{min-width:22px;text-align:center;font-family:'JetBrains Mono';font-weight:700;font-size:13.5px}

/* skeleton while the menu loads */
.skel{border-radius:var(--r-l);height:78px;background:linear-gradient(100deg,rgba(255,255,255,.04) 30%,rgba(255,255,255,.09) 50%,rgba(255,255,255,.04) 70%);
  background-size:220% 100%;animation:shim 1.4s linear infinite;border:1px solid var(--edge);margin-bottom:10px}
@keyframes shim{to{background-position:-120% 0}}

footer.nc{margin-top:52px;padding:30px 0 20px;border-top:1px solid var(--edge);text-align:center;color:var(--faint);font-size:12.5px}
footer.nc .tag{font-family:'Oswald';font-size:16px;letter-spacing:.08em;text-transform:uppercase;color:var(--steam);margin-bottom:8px}
footer.nc .tag em{font-style:normal;color:var(--ember)}

/* ---------- cart bar ---------- */
.cartbar{position:fixed;left:0;right:0;bottom:0;z-index:70;padding:12px 16px calc(12px + var(--safe-b));
  transform:translateY(140%);transition:transform .3s cubic-bezier(.3,1.2,.5,1)}
.cartbar.show{transform:none}
.cartbar-in{border-radius:var(--r-l);padding:10px 10px 10px 18px;display:flex;align-items:center;gap:14px;
  max-width:1048px;margin:0 auto}
.cartbar .sum{flex:1;min-width:0}
.cartbar .sum b{display:block;font-family:'JetBrains Mono';font-weight:700;font-size:17px}
.cartbar .sum i{font-style:normal;font-size:11.5px;color:var(--muted)}

/* ---------- sheets ---------- */
.scrim{position:fixed;inset:0;z-index:80;background:rgba(6,4,4,.6);
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);opacity:0;pointer-events:none;transition:opacity .25s}
.scrim.show{opacity:1;pointer-events:auto}
.sheet{position:fixed;left:0;right:0;bottom:0;z-index:90;max-height:92vh;display:flex;flex-direction:column;
  border-radius:var(--r-xl) var(--r-xl) 0 0;border-bottom:0;
  transform:translateY(101%);transition:transform .34s cubic-bezier(.32,1.1,.4,1)}
.sheet.show{transform:none}
@media(min-width:720px){
  .sheet{max-width:520px;left:50%;transform:translate(-50%,101%);border-radius:var(--r-xl)}
  .sheet.show{transform:translate(-50%,0)}
}
.grab{width:38px;height:4px;border-radius:99px;background:rgba(255,255,255,.22);margin:10px auto 2px;flex:none}
.sheet-head{display:flex;align-items:center;gap:10px;padding:12px 20px 10px;flex:none}
.sheet-head h3{font-family:'Oswald';text-transform:uppercase;letter-spacing:.1em;font-size:16px;margin:0;font-weight:600}
.sheet-head .x{margin-left:auto;width:32px;height:32px;border-radius:50%;border:1px solid var(--edge);
  background:rgba(255,255,255,.05);color:var(--steam);cursor:pointer;font-size:16px;line-height:1}
.sheet-body{overflow-y:auto;padding:4px 20px 20px;-webkit-overflow-scrolling:touch}
.sheet-foot{flex:none;padding:14px 20px calc(18px + var(--safe-b));border-top:1px solid var(--edge)}

.line{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid rgba(255,255,255,.06)}
.line .th{width:44px;height:44px;flex:none;border-radius:10px;overflow:hidden;border:1px solid var(--edge);
  background:rgba(255,255,255,.05);display:grid;place-items:center;font-size:18px}
.line .th img{width:100%;height:100%;object-fit:cover;display:block}
.line .n{flex:1;min-width:0}
.line .n b{display:block;font-size:14px;font-weight:600}
.line .n i{font-style:normal;font-size:11.5px;color:var(--faint)}
.line .p{font-family:'JetBrains Mono';font-size:13.5px;color:var(--ember);min-width:62px;text-align:right}
.mini{display:flex;align-items:center;gap:1px;border-radius:999px;border:1px solid var(--edge);padding:2px}
.mini button{width:27px;height:27px;border:0;background:transparent;color:var(--steam);cursor:pointer;font-size:16px;border-radius:50%}
.mini span{min-width:20px;text-align:center;font-family:'JetBrains Mono';font-size:13px}

.totals{margin-top:16px;border-radius:var(--r-m);padding:14px 16px;background:rgba(255,255,255,.04);border:1px solid var(--edge)}
.totals div{display:flex;justify-content:space-between;font-size:13px;color:var(--muted);padding:4px 0}
.totals div.big{color:var(--steam);font-size:17px;padding-top:10px;margin-top:6px;border-top:1px solid var(--edge)}
.totals div.big b{font-family:'JetBrains Mono';color:var(--ember)}

label.f{display:block;margin-bottom:12px}
label.f span{display:block;font-family:'JetBrains Mono';font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--faint);margin-bottom:6px}
label.f input,label.f textarea{width:100%;padding:13px 14px;border-radius:var(--r-s);font-family:'Manrope';font-size:16px;
  background:rgba(255,255,255,.05);border:1px solid var(--edge);color:var(--steam);outline:none}
label.f input:focus,label.f textarea:focus{border-color:var(--edge-hot);background:rgba(242,106,33,.07)}
label.f textarea{resize:vertical;min-height:74px}
label.f.bad input,label.f.bad textarea{border-color:#ff6b5e}
.pay{display:flex;align-items:center;gap:12px;padding:14px;border-radius:var(--r-m);
  border:1px solid var(--edge-hot);background:rgba(242,106,33,.10);margin-bottom:14px}
.pay .iso{width:34px;height:34px;border-radius:10px;font-size:13px}
.pay b{display:block;font-size:14px}
.pay i{font-style:normal;font-size:11.5px;color:var(--muted)}

/* ---------- the live order island ---------- */
.island{position:fixed;z-index:75;left:50%;transform:translateX(-50%) translateY(-160%);
  top:calc(8px + var(--safe-t));width:min(94vw,420px);
  border-radius:26px;background:rgba(10,8,8,.84);border:1px solid var(--edge);
  -webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);
  box-shadow:0 20px 50px -18px rgba(0,0,0,.95),0 0 0 1px rgba(242,106,33,.14);
  transition:transform .42s cubic-bezier(.3,1.3,.4,1);cursor:pointer;overflow:hidden}
.island.show{transform:translateX(-50%) translateY(0)}
.island-min{display:flex;align-items:center;gap:12px;padding:11px 16px}
.island-min .txt{flex:1;min-width:0}
.island-min .txt b{display:block;font-size:13.5px;font-weight:700;line-height:1.2}
.island-min .txt i{font-style:normal;font-size:11px;color:var(--muted);font-family:'JetBrains Mono'}
.island-min .eta{font-family:'JetBrains Mono';font-size:11px;color:var(--ember);text-align:right;line-height:1.3}
.island-min .eta b{display:block;font-size:15px}

.ring{width:34px;height:34px;flex:none;position:relative}
.ring svg{width:34px;height:34px;transform:rotate(-90deg)}
.ring circle{fill:none;stroke-width:3;stroke-linecap:round}
.ring .bg{stroke:rgba(255,255,255,.13)}
.ring .fg{stroke:var(--ember);transition:stroke-dashoffset .8s ease,stroke .4s}
.ring .glyph{position:absolute;inset:0;display:grid;place-items:center;font-size:13px}
.island.done .ring .fg{stroke:var(--coolant)}
.island.done{box-shadow:0 20px 50px -18px rgba(0,0,0,.95),0 0 0 1px rgba(79,216,208,.25)}

.island-full{display:none;padding:0 16px 16px}
.island.open .island-full{display:block}
.steps{margin:6px 0 14px;padding-top:12px;border-top:1px solid rgba(255,255,255,.08)}
.step{display:flex;gap:12px;align-items:flex-start;padding:7px 0;opacity:.35;transition:opacity .3s}
.step.on{opacity:1}
.step .bullet{width:22px;height:22px;border-radius:50%;flex:none;display:grid;place-items:center;margin-top:1px;
  border:1px solid var(--edge);font-size:10px;font-family:'JetBrains Mono'}
.step.on .bullet{background:var(--ember);border-color:transparent;color:#180d05;font-weight:700}
.step.live .bullet{animation:blip 1.5s ease-in-out infinite}
.step.fin .bullet{background:var(--coolant);color:#04201f}
@keyframes blip{0%,100%{box-shadow:0 0 0 0 rgba(242,106,33,.55)}70%{box-shadow:0 0 0 9px rgba(242,106,33,0)}}
.step .sx b{display:block;font-size:13.5px;font-weight:600;line-height:1.3}
.step .sx i{font-style:normal;font-size:11px;color:var(--faint)}
.step .t{margin-left:auto;font-family:'JetBrains Mono';font-size:10.5px;color:var(--faint);white-space:nowrap}
.island-full .row{display:flex;gap:8px}
.island-full .row .btn,.island-full .row a.btn{flex:1;font-size:12px;padding:12px 10px;text-align:center;
  text-decoration:none;line-height:1.5}

.toast{position:fixed;left:50%;bottom:calc(110px + var(--safe-b));transform:translate(-50%,20px);z-index:99;
  padding:12px 20px;border-radius:999px;font-size:13.5px;font-weight:600;opacity:0;pointer-events:none;
  transition:all .3s;background:rgba(10,8,8,.9);border:1px solid var(--edge-hot);max-width:88vw;text-align:center;
  -webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur)}
.toast.show{opacity:1;transform:translate(-50%,0)}
.toast.bad{border-color:#ff6b5e}

/* ---------- table mode ---------- */
.tablebar{display:none;align-items:center;gap:12px;margin:0 0 18px;padding:13px 16px;border-radius:var(--r-m);
  border:1px solid var(--edge-hot);background:rgba(242,106,33,.12)}
.tablebar.show{display:flex}
.tablebar .num{width:42px;height:42px;flex:none;border-radius:12px;display:grid;place-items:center;
  font-family:'Oswald';font-weight:700;font-size:20px;background:var(--ember);color:#180d05}
.tablebar b{display:block;font-family:'Oswald';text-transform:uppercase;letter-spacing:.08em;font-size:14px}
.tablebar i{display:block;font-style:normal;font-size:11.5px;color:var(--muted);margin-top:2px}

/* ---------- item options sheet ---------- */
.opt-hero{display:flex;gap:14px;margin-bottom:18px}
.opt-hero .thumb{width:88px;height:88px}
.opt-hero .oh{flex:1;min-width:0}
.opt-hero .oh b{display:block;font-size:16px;font-weight:700;line-height:1.25}
.opt-hero .oh i{display:block;font-style:normal;font-size:12px;color:var(--faint);margin-top:5px;line-height:1.45}

.ogroup{margin-bottom:18px}
.ogroup h4{margin:0 0 9px;font-family:'Oswald';text-transform:uppercase;letter-spacing:.09em;
  font-size:12.5px;font-weight:600;display:flex;align-items:center;gap:8px}
.ogroup h4 em{font-style:normal;font-family:'JetBrains Mono';font-size:9.5px;letter-spacing:.1em;
  color:var(--faint);border:1px solid var(--edge);border-radius:999px;padding:3px 8px}
.ogroup h4 em.must{color:var(--ember);border-color:var(--edge-hot)}
.ochoices{display:grid;gap:7px;grid-template-columns:1fr 1fr}
.ochoice{display:flex;align-items:center;gap:9px;padding:11px 12px;border-radius:var(--r-s);cursor:pointer;
  border:1px solid var(--edge);background:rgba(255,255,255,.04);color:var(--muted);font-size:13px;text-align:left}
.ochoice.on{border-color:var(--edge-hot);background:rgba(242,106,33,.15);color:var(--steam)}
.ochoice .tick{width:17px;height:17px;flex:none;border-radius:50%;border:1px solid var(--edge);
  display:grid;place-items:center;font-size:10px}
.ochoice.multi .tick{border-radius:5px}
.ochoice.on .tick{background:var(--ember);border-color:transparent;color:#180d05}
.ochoice .plus{margin-left:auto;font-family:'JetBrains Mono';font-size:11px;color:var(--ember)}

/* table numbers: many small squares rather than two wide buttons */
.ochoices.tablegrid{grid-template-columns:repeat(auto-fill,minmax(62px,1fr));gap:6px}
/* the collection times need room for words, not just a number */
.ochoices.tablegrid .ochoice.wait{grid-column:span 2;justify-content:center;font-family:'Manrope';
  font-weight:600;font-size:12.5px;white-space:nowrap}
.ochoices.tablegrid .ochoice.wait .tick{display:none}
.ochoices.tablegrid .ochoice.wait.on{border-color:var(--edge-hot);background:rgba(242,106,33,.15)}
.tablegrid .ochoice{justify-content:center;padding:11px 6px;font-size:14px;font-weight:700;
  font-family:'JetBrains Mono'}
.tablegrid .ochoice .tick{display:none}
.tablegrid .ochoice[data-tnum="0"]{grid-column:1 / -1;font-family:'Manrope';font-weight:600;font-size:13px}

/* ---------- staff discount at the counter ---------- */
.disc{border-radius:var(--r-m);border:1px dashed var(--edge);padding:13px 14px;margin-top:4px}
.disc.on{border-style:solid;border-color:rgba(79,216,208,.45);background:rgba(79,216,208,.08)}
.disc h5{margin:0 0 9px;font-family:'JetBrains Mono';font-size:10.5px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--faint)}
.disc .link{background:none;border:0;padding:0;cursor:pointer;color:var(--ember);font-size:13px;
  font-weight:600;font-family:inherit;text-decoration:underline}
.disc .applied{display:flex;align-items:center;gap:10px;font-size:13.5px;color:var(--coolant)}
.disc .applied b{font-family:'JetBrains Mono'}
.disc .applied button{margin-left:auto;background:none;border:0;color:var(--muted);cursor:pointer;
  font-size:12px;text-decoration:underline;font-family:inherit}
.pinbox{display:flex;gap:8px;margin-top:4px}
.pinbox input{flex:1;padding:11px 13px;border-radius:var(--r-s);font-family:'JetBrains Mono';font-size:17px;
  letter-spacing:.3em;text-align:center;background:rgba(255,255,255,.05);border:1px solid var(--edge);
  color:var(--steam);outline:none}
.pinbox input:focus{border-color:var(--edge-hot)}
.pinbox button{padding:0 18px;border-radius:var(--r-s);border:0;cursor:pointer;font-family:'Oswald';
  font-weight:600;letter-spacing:.08em;text-transform:uppercase;font-size:12px;
  background:linear-gradient(180deg,var(--ember-hot),var(--ember));color:#180d05}
.disclist{display:grid;gap:6px;grid-template-columns:1fr 1fr;margin-top:4px}
.disclist button{padding:11px 10px;border-radius:var(--r-s);border:1px solid var(--edge);cursor:pointer;
  background:rgba(255,255,255,.04);color:var(--steam);font-size:12.5px;font-family:inherit;text-align:left}
.disclist button:active{border-color:var(--edge-hot)}
.disclist button i{display:block;font-style:normal;font-size:11px;color:var(--ember);margin-top:3px;
  font-family:'JetBrains Mono'}
/* The way into the discount box. Deliberately says nothing and looks like a
   piece of trim, so a customer holding the tablet has no reason to press it. */
.dischid{display:flex;justify-content:flex-end;padding:2px 2px 0}
.discdot{width:20px;height:20px;border-radius:50%;cursor:pointer;
  border:1px solid rgba(255,255,255,.09);background:rgba(255,255,255,.03);opacity:.55}
.discdot:active{opacity:.9}

.dischint{font-size:11.5px;color:var(--faint);margin:9px 0 5px}
.discnew{font-family:'JetBrains Mono';font-size:12.5px;color:var(--muted);margin-top:8px}
.pinbox input[type=number]{letter-spacing:normal;text-align:left;font-size:16px}

.qtyrow{display:flex;align-items:center;gap:12px}
.qtyrow .btn{flex:1}
.stepper.big{padding:4px}
.stepper.big button{width:38px;height:38px;font-size:21px}
.stepper.big span{min-width:32px;font-size:16px}

.line .n small{display:block;font-size:10.5px;color:var(--ember);margin-top:3px;line-height:1.4}

/* ---------- guided 1-2-3 ---------- */
.wizrow{display:flex;align-items:center;gap:8px;padding:2px 20px 12px;flex:none}
.wstep{display:flex;align-items:center;gap:7px;font-size:11px;color:var(--faint);white-space:nowrap}
.wstep span{width:21px;height:21px;flex:none;border-radius:50%;display:grid;place-items:center;
  border:1px solid var(--edge);font-family:'JetBrains Mono';font-size:10px}
.wstep.on{color:var(--steam)}
.wstep.on span{background:var(--ember);border-color:transparent;color:#180d05;font-weight:700}
.wstep.done span{background:rgba(242,106,33,.2);border-color:var(--edge-hot);color:var(--ember)}
.wbar{flex:1;height:1px;background:var(--edge);min-width:8px}

.sugLede{margin:0 0 14px;font-size:13px;color:var(--muted);line-height:1.5}
#sugGrid{grid-template-columns:1fr 1fr;gap:9px}
#sugGrid .item{flex-direction:column;padding:0;overflow:hidden;gap:0}
/* Taller and brighter: these photos are the whole point of this step, and a
   96px strip on a dark card was cropping the food down to nothing. */
#sugGrid .thumb{width:100%;height:auto;aspect-ratio:4/3;border:0;border-radius:0;
  background:#fff}
#sugGrid .thumb img{filter:brightness(1.04) saturate(1.06)}
#sugGrid .thumb .ph{background:rgba(255,255,255,.06);font-size:34px;opacity:.4}
#sugGrid .item-main{padding:11px;min-height:0;gap:7px}
#sugGrid .item-name b{font-size:13.5px}
#sugGrid .item-name i{font-size:11px}
#sugGrid .item-foot{margin-top:4px}
@media(min-width:520px){#sugGrid{grid-template-columns:1fr 1fr 1fr}}

/* ---------- kiosk ---------- */
/* The counter tablet is shared, so it never shows a tracker or an order
   history — those belong to whoever ordered last, not the person standing
   here now. Hidden in CSS as well as in script, so no state can bring
   them back. */
body.counter .island,
body.counter #acctBtn{display:none!important}

body.kiosk{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;overscroll-behavior:none}
body.kiosk .lang button{padding:8px 13px}
.fsbtn{width:34px;height:34px;flex:none;border-radius:10px;display:grid;place-items:center;cursor:pointer;
  border:1px solid var(--edge);background:rgba(255,255,255,.06);color:var(--steam);font-size:15px}
.tablebar .x{width:32px;height:32px;border-radius:50%;border:1px solid var(--edge);
  background:rgba(255,255,255,.05);color:var(--steam);cursor:pointer;font-size:16px;line-height:1}

.hint{position:fixed;inset:0;z-index:120;display:none;place-items:center;padding:24px;
  background:rgba(6,4,4,.8);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
.hint.show{display:grid}
.hint .box{max-width:380px;border-radius:var(--r-l);padding:24px;text-align:center}
.donetick{width:66px;height:66px;margin:0 auto 16px;border-radius:50%;display:grid;place-items:center;
  font-size:32px;color:#04201f;background:var(--coolant);box-shadow:0 0 0 10px rgba(79,216,208,.12)}
.donecode{font-family:'JetBrains Mono';font-weight:700;font-size:22px;color:var(--ember);margin:0 0 10px}
.hint h4{margin:0 0 12px;font-family:'Oswald';text-transform:uppercase;letter-spacing:.09em;font-size:16px}
.hint p{margin:0 0 10px;font-size:13.5px;color:var(--muted);line-height:1.6}
.hint b{color:var(--steam)}

.empty{text-align:center;padding:40px 20px;color:var(--faint);font-size:13.5px}

/* ---------- free drink card ---------- */
.badge.free{background:var(--coolant);color:#04201f;font-size:11px}
.stamps{border-radius:var(--r-m);padding:15px;border:1px solid var(--edge);background:rgba(255,255,255,.04);margin-bottom:18px}
.stamps.ready{border-color:rgba(79,216,208,.45);background:rgba(79,216,208,.09)}
.stamps .st-top{display:flex;align-items:baseline;gap:10px;margin-bottom:12px}
.stamps .st-top b{font-family:'Oswald';text-transform:uppercase;letter-spacing:.09em;font-size:14px;font-weight:600}
.stamps .st-top i{margin-left:auto;font-style:normal;font-family:'JetBrains Mono';font-size:12px;color:var(--muted)}
.st-row{display:grid;grid-template-columns:repeat(10,1fr);gap:5px;margin-bottom:11px}
.st-dot{aspect-ratio:1;border-radius:50%;border:1px dashed var(--edge);display:grid;place-items:center;font-size:11px;color:var(--faint)}
.st-dot.on{border:0;background:linear-gradient(180deg,var(--ember-hot),var(--ember));color:#180d05}
.st-dot.prize{border:1px solid rgba(79,216,208,.5);color:var(--coolant)}
.st-dot.prize.on{background:var(--coolant);color:#04201f;border:0}
.stamps p{margin:0;font-size:12.5px;color:var(--muted);line-height:1.5}
.stamps.ready p{color:var(--coolant)}

.freebar{display:none;border-radius:var(--r-m);padding:12px 14px;margin-bottom:14px;font-size:13px;
  border:1px solid rgba(79,216,208,.45);background:rgba(79,216,208,.1);color:var(--coolant);line-height:1.45}
.freebar.show{display:block}

/* ---------- past orders ---------- */
.hrow{display:flex;align-items:center;gap:12px;width:100%;text-align:left;padding:13px 0;cursor:pointer;
  background:none;border:0;border-bottom:1px solid rgba(255,255,255,.06);color:inherit;font-family:inherit}
.hrow .hn{flex:1;min-width:0}
.hrow .hn b{display:block;font-family:'JetBrains Mono';font-size:13.5px;font-weight:700}
.hrow .hn i{display:block;font-style:normal;font-size:11.5px;color:var(--faint);margin-top:3px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hrow .hp{text-align:right;flex:none}
.hrow .hp b{display:block;font-family:'JetBrains Mono';font-size:13.5px;color:var(--ember)}
.hstat{display:inline-block;margin-top:4px;font-family:'JetBrains Mono';font-size:9.5px;letter-spacing:.08em;
  text-transform:uppercase;padding:3px 8px;border-radius:999px;background:rgba(242,106,33,.16);
  border:1px solid var(--edge-hot);color:var(--ember-hot)}
.hstat.cool{background:rgba(79,216,208,.14);border-color:rgba(79,216,208,.4);color:var(--coolant)}
.hstat.dead{background:rgba(255,255,255,.06);border-color:var(--edge);color:var(--faint)}

@media(prefers-reduced-motion:reduce){*{animation:none!important;transition-duration:.01ms!important}}
:focus-visible{outline:2px solid var(--ember);outline-offset:2px}

/* ---------- scrolling ----------
 * .glass carries a backdrop-filter, and every menu card used it. On a long
 * menu that is fifty layers each re-sampling what sits behind them on every
 * frame, over three animated 80px-blur blobs. Phones tear and stutter under
 * that, which is what "broken when scrolling" looked like.
 *
 * The live blur now belongs only to surfaces that hold still — the top bar,
 * the sheets, the cart bar, the tracker. Everything that moves past uses a
 * plain translucent panel, which reads the same and costs nothing.
 * These rules sit last on purpose, so they win.
 * ------------------------------- */
.item.glass,
.cat-head,
.chip,
.fact{
  -webkit-backdrop-filter:none !important;
  backdrop-filter:none !important;
  background:rgba(38,31,28,.62);
}
.item.glass{background:rgba(38,31,28,.55)}
.chip.on{background:rgba(242,106,33,.18)}
.cat.open .cat-head{background:rgba(45,35,30,.72)}

/* Taps on the quantity controls should register at once. Without this iOS
   waits to see whether a second tap is coming, which reads as lag, and a
   quick double tap zooms the page instead of adding two. */
.stepper button,.mini button,.add,.qty button,button[data-inc],button[data-dec],button[data-add]{
  touch-action:manipulation;-webkit-tap-highlight-color:transparent}
