{"id":7,"date":"2026-09-12T10:02:35","date_gmt":"2026-09-12T10:02:35","guid":{"rendered":"https:\/\/prelude.deartechno.com\/index.php\/order\/"},"modified":"2026-09-12T10:02:35","modified_gmt":"2026-09-12T10:02:35","slug":"order","status":"publish","type":"page","link":"https:\/\/prelude.deartechno.com\/index.php\/order\/","title":{"rendered":"Order"},"content":{"rendered":"\t<div class=\"bco\" id=\"bcoRoot\" style=\"--ground:#0a0a0a; --gold:#c9a063; --gold-rgb:201,160,99; --bronze:#6b4e2e; --on-gold:#1d2a21; --sticky-top:0px;\">\n\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n\t\t<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Poppins:wght@300;400;500;600;700;800&display=swap\">\n\t\t<style>\n\t\t\t\t.bco {\n\t\t\t\t\t--ground:#0A0A0A; --gold:#C9A063; --gold-rgb:201,160,99; --bronze:#6B4E2E; --on-gold:#0A0A0A;\n\t\t\t\t\t--panel:#141210; --panel-2:#1C1917; --line:rgba(var(--gold-rgb),.22);\n\t\t\t\t\t--ink:#F3EDE4; --muted:rgba(243,237,228,.62); --faint:rgba(243,237,228,.38);\n\t\t\t\t\t--ease:cubic-bezier(.22,1,.36,1);\n\t\t\t\t\tfont-family:\"Poppins\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Helvetica,Arial,sans-serif;\n\t\t\t\t\t-webkit-text-size-adjust:100%; text-size-adjust:100%;\n\t\t\t\t\tbackground:var(--ground); color:var(--ink);\n\t\t\t\t\tmax-width:720px; margin:0 auto; padding:0 0 104px;\n\t\t\t\t}\n\t\t\t.bco *, .bco *::before, .bco *::after { box-sizing:border-box; }\n\t\t\t.bco button { font-family:inherit; }\n\t\t\t.bco :focus-visible { outline:2px solid var(--gold); outline-offset:2px; }\n\n\t\t\t\/* the striation motif from the printed wordmark *\/\n\t\t\t.bco-rule { height:9px; flex:1;\n\t\t\t\tbackground:repeating-linear-gradient(to bottom,\n\t\t\t\t\tvar(--gold) 0 1px, transparent 1px 3px); opacity:.55; }\n\n\t\t\t\/* ---------- header ---------- *\/\n\t\t\t.bco-hd { padding:26px 20px 22px; background:\n\t\t\t\tradial-gradient(120% 90% at 50% 0%, rgba(var(--gold-rgb),.13), transparent 62%), var(--ground); }\n\t\t\t.bco-brandline { display:flex; align-items:center; gap:12px; }\n\t\t\t.bco-brand { font-size:20px; font-weight:800; letter-spacing:.22em; color:var(--gold);\n\t\t\t\ttext-transform:uppercase; white-space:nowrap; }\n\t\t\t.bco-logo { height:34px; width:auto; display:block; }\n\t\t\t.bco-sub { text-align:center; font-size:11px; letter-spacing:.2em; text-transform:uppercase;\n\t\t\t\tcolor:var(--muted); margin-top:10px; }\n\t\t\t.bco-chip { display:block; width:fit-content; margin:16px auto 0; border:1px solid var(--gold);\n\t\t\t\tcolor:var(--gold); border-radius:2px; padding:6px 16px; font-size:12px; font-weight:600;\n\t\t\t\tletter-spacing:.14em; text-transform:uppercase; }\n\n\t\t\t\/* ---------- closed notice ---------- *\/\n\t\t\t.bco-closed { margin:0 16px 14px; background:var(--panel); border:1px solid var(--gold);\n\t\t\t\tpadding:13px 15px; }\n\t\t\t.bco-closed strong { display:block; font-size:13.5px; font-weight:600; color:var(--gold); }\n\t\t\t.bco-closed span { font-size:12.5px; color:var(--muted); }\n\n\t\t\t\/* ---------- sticky search + tabs ---------- *\/\n\t\t\t.bco-stick { position:sticky; top:var(--sticky-top,0px); z-index:60; background:var(--ground);\n\t\t\t\tborder-bottom:1px solid var(--line); padding:12px 16px 0; }\n\t\t\t.bco-search { position:relative; padding-bottom:11px; }\n\t\t\t.bco-search input { width:100%; border:1px solid var(--line); border-radius:2px; background:var(--panel);\n\t\t\t\tpadding:11px 38px 11px 14px; font-size:14px; font-family:inherit; color:var(--ink); -webkit-appearance:none; }\n\t\t\t.bco-search input::placeholder { color:var(--faint); }\n\t\t\t.bco-search input::-webkit-search-cancel-button { -webkit-appearance:none; }\n\t\t\t.bco-search-x { position:absolute; right:8px; top:36%; transform:translateY(-50%); border:none;\n\t\t\t\tbackground:transparent; color:var(--muted); width:28px; height:28px; font-size:15px; cursor:pointer; }\n\t\t\t.bco-search-x[hidden] { display:none !important; }\n\t\t\t.bco-tabs { display:flex; gap:8px; overflow-x:auto; scrollbar-width:none; padding-bottom:11px;\n\t\t\t\t-webkit-overflow-scrolling:touch; }\n\t\t\t.bco-tabs::-webkit-scrollbar { display:none; }\n\t\t\t.bco-tabs[hidden] { display:none !important; }\n\t\t\t.bco-tab { flex-shrink:0; border:1px solid var(--line); background:transparent; color:var(--muted);\n\t\t\t\tborder-radius:2px; padding:8px 15px; font-size:11.5px; font-weight:600; letter-spacing:.1em;\n\t\t\t\ttext-transform:uppercase; cursor:pointer; white-space:nowrap;\n\t\t\t\ttransition:background .2s var(--ease), color .2s var(--ease), border-color .2s var(--ease); }\n\t\t\t.bco-tab.active { background:linear-gradient(135deg, var(--gold), var(--bronze));\n\t\t\t\tborder-color:var(--gold); color:var(--on-gold); }\n\n\t\t\t\/* ---------- menu ---------- *\/\n\t\t\t.bco-menu { padding:22px 16px 0; }\n\t\t\t.bco-cat { margin-bottom:30px; }\n\t\t\t.bco-cat-hd { display:flex; align-items:center; gap:14px; margin-bottom:14px; }\n\t\t\t.bco-cat-hd h3 { color:var(--gold); font-size:23px; font-weight:800; margin:0;\n\t\t\t\tletter-spacing:.04em; text-transform:uppercase; white-space:nowrap; }\n\n\t\t\t.bco-row { display:flex; align-items:center; gap:14px; width:100%; text-align:left;\n\t\t\t\tbackground:var(--panel); border:1px solid var(--line); border-radius:2px;\n\t\t\t\tpadding:13px; margin-bottom:9px; cursor:pointer;\n\t\t\t\ttransition:border-color .18s var(--ease), background .18s var(--ease), transform .16s var(--ease); }\n\t\t\t.bco-row:hover { border-color:var(--gold); background:var(--panel-2); }\n\t\t\t.bco-row:active { transform:scale(.99); }\n\t\t\t.bco-thumb { width:64px; height:64px; object-fit:cover; flex-shrink:0; display:block; border-radius:2px; }\n\t\t\t.bco-thumb-ph { width:64px; height:64px; flex-shrink:0; border-radius:2px;\n\t\t\t\tbackground:linear-gradient(135deg, rgba(var(--gold-rgb),.22), rgba(var(--gold-rgb),.05));\n\t\t\t\tcolor:var(--gold); display:flex; align-items:center; justify-content:center;\n\t\t\t\tfont-weight:700; font-size:22px; }\n\t\t\t.bco-row-info { flex:1; min-width:0; }\n\t\t\t.bco-row-name { font-weight:600; font-size:15px; color:var(--ink); letter-spacing:.01em; }\n\t\t\t.bco-row-desc { font-size:12px; color:var(--muted); margin-top:3px; line-height:1.45; }\n\t\t\t.bco-row-tag { font-size:10px; color:var(--gold); margin-top:5px; letter-spacing:.12em;\n\t\t\t\ttext-transform:uppercase; }\n\t\t\t.bco-row-right { flex-shrink:0; text-align:right; display:flex; flex-direction:column;\n\t\t\t\talign-items:flex-end; gap:7px; }\n\t\t\t.bco-row-price { font-size:15px; font-weight:700; color:var(--gold); white-space:nowrap; }\n\t\t\t.bco-row-qty { min-width:24px; height:24px; border-radius:2px;\n\t\t\t\tbackground:linear-gradient(135deg, var(--gold), var(--bronze)); color:var(--on-gold);\n\t\t\t\tfont-size:12px; font-weight:700; display:flex; align-items:center; justify-content:center;\n\t\t\t\tpadding:0 7px; animation:bcoPop .28s var(--ease); }\n\t\t\t@keyframes bcoPop { from { transform:scale(.6); opacity:0; } to { transform:scale(1); opacity:1; } }\n\t\t\t.bco-empty { text-align:center; color:var(--muted); padding:34px 16px; font-size:14px; }\n\n\t\t\t\/* ---------- cart bar ---------- *\/\n\t\t\t.bco-bar { position:fixed; left:0; right:0; bottom:0; z-index:9998;\n\t\t\t\tbackground:linear-gradient(135deg, var(--gold), var(--bronze)); color:var(--on-gold);\n\t\t\t\tpadding:13px 18px calc(13px + env(safe-area-inset-bottom));\n\t\t\t\ttransform:translateY(115%); pointer-events:none; transition:transform .32s var(--ease); }\n\t\t\t.bco-bar.show { transform:translateY(0); pointer-events:auto; }\n\t\t\t.bco-bar-in { max-width:720px; margin:0 auto; display:flex; align-items:center;\n\t\t\t\tjustify-content:space-between; gap:14px; }\n\t\t\t.bco-bar-count { font-size:10.5px; letter-spacing:.16em; text-transform:uppercase; opacity:.75; }\n\t\t\t.bco-bar-total { font-weight:800; font-size:19px; margin-top:1px; }\n\t\t\t.bco-bar-btn { background:var(--on-gold); color:var(--gold); border:none; border-radius:2px;\n\t\t\t\tpadding:13px 22px; font-weight:700; font-size:12px; letter-spacing:.14em; text-transform:uppercase;\n\t\t\t\tcursor:pointer; white-space:nowrap; transition:transform .16s var(--ease); }\n\t\t\t.bco-bar-btn:active { transform:scale(.97); }\n\n\t\t\t\/* ---------- buttons ---------- *\/\n\t\t\t.bco-btn { background:linear-gradient(135deg, var(--gold), var(--bronze)); color:var(--on-gold);\n\t\t\t\tborder:none; border-radius:2px; padding:15px 22px; font-weight:700; font-size:12.5px;\n\t\t\t\tletter-spacing:.13em; text-transform:uppercase; cursor:pointer;\n\t\t\t\ttransition:transform .16s var(--ease), opacity .16s ease; }\n\t\t\t.bco-btn:active { transform:scale(.98); }\n\t\t\t.bco-btn:disabled { opacity:.4; cursor:not-allowed; }\n\t\t\t.bco-btn-wide { width:100%; display:block; text-align:center; }\n\n\t\t\t\/* ---------- overlays ---------- *\/\n\t\t\t.bco-ovl { position:fixed; inset:0; z-index:9999; background:rgba(0,0,0,.72);\n\t\t\t\tdisplay:flex; align-items:flex-end; justify-content:center; opacity:0;\n\t\t\t\ttransition:opacity .24s ease; }\n\t\t\t.bco-ovl[hidden] { display:none !important; }\n\t\t\t.bco-ovl.open { opacity:1; }\n\t\t\t.bco-sheet { background:var(--ground); width:100%; max-width:720px; max-height:92vh;\n\t\t\t\tborder-top:1px solid var(--gold); display:flex; flex-direction:column;\n\t\t\t\ttransform:translateY(100%); transition:transform .32s var(--ease); }\n\t\t\t.bco-ovl.open .bco-sheet { transform:translateY(0); }\n\t\t\t.bco-sheet-top { display:flex; align-items:center; gap:12px; padding:16px 18px;\n\t\t\t\tborder-bottom:1px solid var(--line); }\n\t\t\t.bco-sheet-top strong { flex:1; font-size:12px; font-weight:600; letter-spacing:.15em;\n\t\t\t\ttext-transform:uppercase; color:var(--gold); }\n\t\t\t.bco-x { border:1px solid var(--line); background:transparent; color:var(--ink); width:32px; height:32px;\n\t\t\t\tborder-radius:2px; font-size:14px; cursor:pointer; flex-shrink:0;\n\t\t\t\ttransition:border-color .16s var(--ease); }\n\t\t\t.bco-x:hover { border-color:var(--gold); }\n\t\t\t.bco-sheet-body { overflow-y:auto; -webkit-overflow-scrolling:touch; padding:18px; flex:1; }\n\t\t\t.bco-sheet-foot { border-top:1px solid var(--line); background:var(--ground);\n\t\t\t\tpadding:14px 18px calc(14px + env(safe-area-inset-bottom));\n\t\t\t\tdisplay:flex; align-items:center; gap:12px; }\n\t\t\t.bco-sheet-foot .bco-btn { flex:1; min-width:0; white-space:normal; line-height:1.3; padding:14px 16px; }\n\n\t\t\t.bco-hero { width:100%; height:200px; object-fit:cover; display:block; margin-bottom:16px; }\n\t\t\t.bco-sheet-name { font-size:22px; font-weight:700; color:var(--ink); letter-spacing:.01em; }\n\t\t\t.bco-sheet-desc { font-size:13px; color:var(--muted); margin-top:6px; line-height:1.55; }\n\t\t\t.bco-sheet-price { font-size:17px; font-weight:700; color:var(--gold); margin-top:10px; }\n\n\t\t\t.bco-grp { border-top:1px solid var(--line); margin-top:20px; padding-top:16px; }\n\t\t\t.bco-grp-hd { display:flex; align-items:center; gap:10px; margin-bottom:10px; }\n\t\t\t.bco-grp-hd span:first-child { font-weight:600; font-size:12px; letter-spacing:.14em;\n\t\t\t\ttext-transform:uppercase; color:var(--gold); }\n\t\t\t.bco-req { font-size:9.5px; font-weight:700; text-transform:uppercase; letter-spacing:.1em;\n\t\t\t\tcolor:var(--on-gold); background:var(--gold); padding:3px 8px; }\n\t\t\t.bco-opt { font-size:10px; color:var(--faint); letter-spacing:.08em; text-transform:uppercase; }\n\t\t\t.bco-ch { display:flex; align-items:center; justify-content:space-between; gap:14px; padding:11px 0;\n\t\t\t\tborder-bottom:1px solid rgba(var(--gold-rgb),.1); cursor:pointer; font-size:14px; color:var(--ink); }\n\t\t\t.bco-ch em { font-style:normal; color:var(--gold); font-size:12.5px; font-weight:600; }\n\t\t\t.bco-ch input { width:19px; height:19px; accent-color:var(--gold); flex-shrink:0; margin:0; }\n\t\t\t.bco-grp-err { color:var(--gold); font-size:11.5px; font-weight:600; margin-top:8px;\n\t\t\t\tletter-spacing:.05em; }\n\t\t\t.bco-grp-err[hidden] { display:none !important; }\n\n\t\t\t.bco-note { width:100%; border:1px solid var(--line); border-radius:2px; padding:11px 13px;\n\t\t\t\tfont-size:14px; font-family:inherit; color:var(--ink); resize:vertical; min-height:64px;\n\t\t\t\tbackground:var(--panel); }\n\t\t\t.bco-note::placeholder { color:var(--faint); }\n\t\t\t.bco-field { display:flex; flex-direction:column; gap:7px; margin-bottom:14px; }\n\t\t\t.bco-field label { font-size:10.5px; font-weight:600; letter-spacing:.15em; text-transform:uppercase;\n\t\t\t\tcolor:var(--gold); }\n\t\t\t.bco-field input { border:1px solid var(--line); border-radius:2px; padding:12px 14px; font-size:15px;\n\t\t\t\tfont-family:inherit; color:var(--ink); background:var(--panel); width:100%; }\n\t\t\t.bco-field input::placeholder { color:var(--faint); }\n\t\t\t.bco-field[hidden] { display:none !important; }\n\n\t\t\t.bco-seg { display:flex; gap:8px; margin-bottom:16px; }\n\t\t\t.bco-seg button { flex:1; border:1px solid var(--line); background:transparent; color:var(--muted);\n\t\t\t\tborder-radius:2px; padding:12px 10px; font-size:11.5px; font-weight:600; letter-spacing:.12em;\n\t\t\t\ttext-transform:uppercase; cursor:pointer;\n\t\t\t\ttransition:background .2s var(--ease), color .2s var(--ease), border-color .2s var(--ease); }\n\t\t\t.bco-seg button.active { background:linear-gradient(135deg, var(--gold), var(--bronze));\n\t\t\t\tborder-color:var(--gold); color:var(--on-gold); }\n\n\t\t\t.bco-step { display:flex; align-items:center; border:1px solid var(--line); flex-shrink:0; }\n\t\t\t.bco-step button { width:38px; height:38px; border:none; background:transparent; font-size:17px;\n\t\t\t\tfont-weight:600; cursor:pointer; color:var(--gold); }\n\t\t\t.bco-step span { min-width:28px; text-align:center; font-weight:700; font-size:14px; color:var(--ink); }\n\n\t\t\t.bco-line { display:flex; gap:13px; padding:14px 0; border-bottom:1px solid var(--line); }\n\t\t\t.bco-line-qty { font-weight:700; font-size:14px; color:var(--gold); flex-shrink:0; min-width:28px; }\n\t\t\t.bco-line-main { flex:1; min-width:0; }\n\t\t\t.bco-line-name { font-weight:600; font-size:14.5px; color:var(--ink); }\n\t\t\t.bco-line-opt { font-size:11.5px; color:var(--muted); margin-top:3px; line-height:1.45; }\n\t\t\t.bco-line-note { font-size:11.5px; color:var(--faint); font-style:italic; margin-top:3px; }\n\t\t\t.bco-line-acts { display:flex; align-items:center; gap:14px; margin-top:9px; }\n\t\t\t.bco-mini { display:flex; align-items:center; border:1px solid var(--line); }\n\t\t\t.bco-mini button { width:28px; height:28px; border:none; background:transparent; font-size:14px;\n\t\t\t\tfont-weight:600; cursor:pointer; color:var(--gold); line-height:1; }\n\t\t\t.bco-mini span { min-width:22px; text-align:center; font-weight:700; font-size:12.5px; color:var(--ink); }\n\t\t\t.bco-link { background:none; border:none; padding:0; font-size:10.5px; font-weight:600;\n\t\t\t\tletter-spacing:.12em; text-transform:uppercase; color:var(--gold); cursor:pointer; }\n\t\t\t.bco-line-total { font-weight:700; font-size:14px; color:var(--gold); flex-shrink:0; }\n\n\t\t\t.bco-sum { display:flex; align-items:center; justify-content:space-between; margin-top:18px;\n\t\t\t\tpadding-top:16px; border-top:1px solid var(--gold); }\n\t\t\t.bco-sum span:first-child { font-size:11px; letter-spacing:.16em; text-transform:uppercase;\n\t\t\t\tcolor:var(--muted); }\n\t\t\t.bco-sum span:last-child { font-size:22px; font-weight:800; color:var(--gold); }\n\n\t\t\t.bco-err { background:rgba(var(--gold-rgb),.08); border:1px solid var(--gold); color:var(--gold);\n\t\t\t\tpadding:11px 13px; font-size:12.5px; font-weight:500; margin-bottom:14px; }\n\t\t\t.bco-err[hidden] { display:none !important; }\n\n\t\t\t.bco-ok { text-align:center; padding:32px 20px; }\n\t\t\t.bco-ok-tick { width:56px; height:56px; border:1px solid var(--gold); color:var(--gold);\n\t\t\t\tdisplay:flex; align-items:center; justify-content:center; font-size:26px; margin:0 auto 18px;\n\t\t\t\tanimation:bcoPop .4s var(--ease); }\n\t\t\t.bco-ok-lbl { font-size:10.5px; letter-spacing:.2em; text-transform:uppercase; color:var(--muted); }\n\t\t\t.bco-ok-num { font-size:34px; font-weight:800; color:var(--gold); margin:6px 0 10px;\n\t\t\t\tletter-spacing:.04em; }\n\t\t\t.bco-ok-total { font-size:15px; font-weight:600; color:var(--gold); margin:0 0 12px; }\n\t\t\t.bco-ok-sub { font-size:13px; color:var(--muted); margin-bottom:22px; line-height:1.6; }\n\t\t\t.bco-wa { display:block; background:#25D366; color:#04220F; text-decoration:none; border-radius:2px;\n\t\t\t\tpadding:15px; font-weight:700; font-size:12.5px; letter-spacing:.13em; text-transform:uppercase;\n\t\t\t\tmargin-bottom:14px; }\n\n\t\t\t.bco-foot { text-align:center; padding:26px 16px 0; }\n\t\t\t.bco-foot-line { display:flex; align-items:center; gap:12px; max-width:240px; margin:0 auto; }\n\t\t\t.bco-foot span { font-size:10px; letter-spacing:.2em; text-transform:uppercase; color:var(--faint);\n\t\t\t\twhite-space:nowrap; }\n\n\t\t\t@media (min-width:720px) {\n\t\t\t\t.bco-ovl { align-items:center; padding:28px; }\n\t\t\t\t.bco-sheet { max-width:560px; max-height:86vh; border:1px solid var(--gold);\n\t\t\t\t\ttransform:translateY(26px) scale(.98); }\n\t\t\t\t.bco-ovl.open .bco-sheet { transform:translateY(0) scale(1); }\n\t\t\t}\n\t\t\t@media (max-width:719px) {\n\t\t\t\t.bco-search input, .bco-field input, .bco-note { font-size:16px; }\n\t\t\t\t.bco-sheet { max-height:calc(100dvh - 10px); }\n\t\t\t\t@supports not (height:100dvh) {\n\t\t\t\t\t.bco-sheet { max-height:calc(100vh - 10px); }\n\t\t\t\t}\n\t\t\t}\n\t\t\t@media (prefers-reduced-motion:reduce) {\n\t\t\t\t.bco *, .bco-ovl, .bco-sheet, .bco-bar { transition:none !important; animation:none !important; }\n\t\t\t}\n\t\t<\/style>\n\n\t\t<div class=\"bco-hd\">\n\t\t\t<div class=\"bco-brandline\">\n\t\t\t\t<div class=\"bco-rule\"><\/div>\n\t\t\t\t\t\t\t\t\t<img decoding=\"async\" class=\"bco-logo\" src=\"https:\/\/prelude.deartechno.com\/wp-content\/uploads\/2026\/09\/Screenshot-2026-09-12-at-19.26.26-300x102.png\" alt=\"PRELUDE CAFE\">\n\t\t\t\t\t\t\t\t<div class=\"bco-rule\"><\/div>\n\t\t\t<\/div>\n\t\t\t<div class=\"bco-sub\">BWork Bali \u00b7 Order from your table<\/div>\n\t\t\t\t\t<\/div>\n\n\t\t\n\t\t<div class=\"bco-stick\">\n\t\t\t<div class=\"bco-search\">\n\t\t\t\t<input type=\"search\" id=\"bcoSearch\" placeholder=\"Search the menu\" aria-label=\"Search the menu\" autocomplete=\"off\">\n\t\t\t\t<button type=\"button\" class=\"bco-search-x\" id=\"bcoSearchX\" aria-label=\"Clear search\" hidden>\u2715<\/button>\n\t\t\t<\/div>\n\t\t\t<div class=\"bco-tabs\" id=\"bcoTabs\" hidden><\/div>\n\t\t<\/div>\n\n\t\t<div class=\"bco-menu\" id=\"bcoMenu\"><p class=\"bco-empty\">No menu items yet \u2014 add some under Cafe Order \u2192 Add Menu Item.<\/p><\/div>\n\n\t\t<div class=\"bco-foot\">\n\t\t\t<div class=\"bco-foot-line\">\n\t\t\t\t<div class=\"bco-rule\"><\/div><span>Prelude<\/span><div class=\"bco-rule\"><\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n\t\t<div class=\"bco-bar\" id=\"bcoBar\">\n\t\t\t<div class=\"bco-bar-in\">\n\t\t\t\t<div>\n\t\t\t\t\t<div class=\"bco-bar-count\" id=\"bcoBarCount\">0 items<\/div>\n\t\t\t\t\t<div class=\"bco-bar-total\" id=\"bcoBarTotal\">0K<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<button type=\"button\" class=\"bco-bar-btn\" id=\"bcoBarBtn\">Review Order<\/button>\n\t\t\t<\/div>\n\t\t<\/div>\n\n\t\t<div class=\"bco-ovl\" id=\"bcoSheetOvl\" hidden>\n\t\t\t<div class=\"bco-sheet\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Customise item\">\n\t\t\t\t<div class=\"bco-sheet-top\">\n\t\t\t\t\t<strong id=\"bcoSheetTitle\">Item<\/strong>\n\t\t\t\t\t<button type=\"button\" class=\"bco-x\" id=\"bcoSheetClose\" aria-label=\"Close\">\u2715<\/button>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"bco-sheet-body\" id=\"bcoSheetBody\"><\/div>\n\t\t\t\t<div class=\"bco-sheet-foot\">\n\t\t\t\t\t<div class=\"bco-step\">\n\t\t\t\t\t\t<button type=\"button\" id=\"bcoQtyDown\" aria-label=\"Decrease quantity\">\u2212<\/button>\n\t\t\t\t\t\t<span id=\"bcoQty\">1<\/span>\n\t\t\t\t\t\t<button type=\"button\" id=\"bcoQtyUp\" aria-label=\"Increase quantity\">+<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<button type=\"button\" class=\"bco-btn\" id=\"bcoAdd\">Add<\/button>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n\t\t<div class=\"bco-ovl\" id=\"bcoCoOvl\" hidden>\n\t\t\t<div class=\"bco-sheet\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Your order\">\n\t\t\t\t<div class=\"bco-sheet-top\">\n\t\t\t\t\t<strong>Your Order<\/strong>\n\t\t\t\t\t<button type=\"button\" class=\"bco-x\" id=\"bcoCoClose\" aria-label=\"Close\">\u2715<\/button>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"bco-sheet-body\">\n\t\t\t\t\t<div class=\"bco-err\" id=\"bcoCoErr\" hidden><\/div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"bco-field\">\n\t\t\t\t\t\t<label for=\"bcoName\">Your Name<\/label>\n\t\t\t\t\t\t<input type=\"text\" id=\"bcoName\" placeholder=\"e.g. Made\" autocomplete=\"name\">\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div style=\"position:absolute;left:-9999px;\" aria-hidden=\"true\">\n\t\t\t\t\t\t<label for=\"bcoWebsite\">Website<\/label>\n\t\t\t\t\t\t<input type=\"text\" id=\"bcoWebsite\" name=\"website\" tabindex=\"-1\" autocomplete=\"off\">\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div class=\"bco-field\" id=\"bcoTableField\">\n\t\t\t\t\t\t<label for=\"bcoTable\">Table No.<\/label>\n\t\t\t\t\t\t<input type=\"text\" id=\"bcoTable\"\n\t\t\t\t\t\t\tinputmode=\"numeric\"\n\t\t\t\t\t\t\tplaceholder=\"e.g. 5\"\n\t\t\t\t\t\t\tvalue=\"\">\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"bcoCoLines\"><\/div>\n\t\t\t\t\t<div class=\"bco-sum\"><span>Total<\/span><span id=\"bcoCoTotal\">0K<\/span><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"bco-sheet-foot\">\n\t\t\t\t\t<button type=\"button\" class=\"bco-btn bco-btn-wide\" id=\"bcoPlace\">Place Order via WhatsApp<\/button>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n\t\t<div class=\"bco-ovl\" id=\"bcoOkOvl\" hidden>\n\t\t\t<div class=\"bco-sheet\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Order placed\">\n\t\t\t\t<div class=\"bco-sheet-body\">\n\t\t\t\t\t<div class=\"bco-ok\">\n\t\t\t\t\t\t<div class=\"bco-ok-tick\">\u2713<\/div>\n\t\t\t\t\t\t<div class=\"bco-ok-lbl\">Order Number<\/div>\n\t\t\t\t\t\t<div class=\"bco-ok-num\" id=\"bcoOkNum\">\u2014<\/div>\n\t\t\t\t\t\t<div class=\"bco-ok-total\" id=\"bcoOkTotal\"><\/div>\n\t\t\t\t\t\t<div class=\"bco-ok-sub\">Your order is saved. Tap below to send it on WhatsApp so the kitchen sees it, and keep this number handy.<\/div>\n\t\t\t\t\t\t<a class=\"bco-wa\" id=\"bcoOkWa\" href=\"#\" target=\"_blank\" rel=\"noopener\">Send on WhatsApp<\/a>\n\t\t\t\t\t\t<button type=\"button\" class=\"bco-link\" id=\"bcoOkDone\">Start a new order<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\t<\/div>\n\n\t<script>\n\t(function () {\n\t\tvar MENU = [{\"id\":44,\"name\":\"Coldbrew\",\"desc\":\"\",\"price\":85550,\"category\":\"Ice Coffee\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/coldbrew-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/coldbrew-219x300.jpg\",\"options\":[]},{\"id\":113,\"name\":\"Double Espresso\",\"desc\":\"Two shots of espresso. One size only.\",\"price\":28000,\"category\":\"Coffee\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[{\"name\":\"Add-ons\",\"required\":false,\"multiple\":true,\"choices\":[{\"label\":\"Oat Milk\",\"price\":15000},{\"label\":\"Almond Milk\",\"price\":15000},{\"label\":\"Splash Milk\",\"price\":7000},{\"label\":\"Syrup\",\"price\":10000},{\"label\":\"Lemon\",\"price\":7000},{\"label\":\"Ginger\",\"price\":7000}]}]},{\"id\":39,\"name\":\"Hot Mochacinno\",\"desc\":\"\",\"price\":69600,\"category\":\"Hot Coffee\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hot-mochacinno-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hot-mochacinno-300x274.jpg\",\"options\":[]},{\"id\":45,\"name\":\"Ice Longblack\",\"desc\":\"\",\"price\":40000,\"category\":\"Ice Coffee\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/ice-longblack-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/ice-longblack.jpg\",\"options\":[]},{\"id\":114,\"name\":\"Longblack\",\"desc\":\"Espresso over hot water.\",\"price\":35000,\"category\":\"Coffee\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[{\"name\":\"Serve\",\"required\":true,\"multiple\":false,\"choices\":[{\"label\":\"Hot\",\"price\":0},{\"label\":\"Hot Large\",\"price\":5000},{\"label\":\"Ice\",\"price\":5000},{\"label\":\"Ice Large\",\"price\":10000}]},{\"name\":\"Add-ons\",\"required\":false,\"multiple\":true,\"choices\":[{\"label\":\"Oat Milk\",\"price\":15000},{\"label\":\"Almond Milk\",\"price\":15000},{\"label\":\"Splash Milk\",\"price\":7000},{\"label\":\"Syrup\",\"price\":10000},{\"label\":\"Lemon\",\"price\":7000},{\"label\":\"Ginger\",\"price\":7000}]}]},{\"id\":41,\"name\":\"Hot Cappucino\",\"desc\":\"\",\"price\":38000,\"category\":\"Hot Coffee\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hot-cappucino-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hot-cappucino-285x300.jpg\",\"options\":[{\"name\":\"Upgrade to Large\",\"required\":false,\"multiple\":false,\"choices\":[{\"label\":\"Large\",\"price\":5000}]}]},{\"id\":46,\"name\":\"Ice Mochaccino\",\"desc\":\"\",\"price\":50000,\"category\":\"Ice Coffee\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/ice-mochaccino-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/ice-mochaccino.jpg\",\"options\":[]},{\"id\":115,\"name\":\"Piccolo\\\/Cortado\",\"desc\":\"Espresso with a small amount of steamed milk. Hot only.\",\"price\":35000,\"category\":\"Coffee\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[{\"name\":\"Size\",\"required\":true,\"multiple\":false,\"choices\":[{\"label\":\"Regular\",\"price\":0},{\"label\":\"Large\",\"price\":5000}]},{\"name\":\"Add-ons\",\"required\":false,\"multiple\":true,\"choices\":[{\"label\":\"Oat Milk\",\"price\":15000},{\"label\":\"Almond Milk\",\"price\":15000},{\"label\":\"Splash Milk\",\"price\":7000},{\"label\":\"Syrup\",\"price\":10000},{\"label\":\"Lemon\",\"price\":7000},{\"label\":\"Ginger\",\"price\":7000}]}]},{\"id\":40,\"name\":\"Flat White\",\"desc\":\"Espresso with velvety steamed milk. One size only, hot only.\",\"price\":40000,\"category\":\"Coffee\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[{\"name\":\"Add-ons\",\"required\":false,\"multiple\":true,\"choices\":[{\"label\":\"Oat Milk\",\"price\":15000},{\"label\":\"Almond Milk\",\"price\":15000},{\"label\":\"Splash Milk\",\"price\":7000},{\"label\":\"Syrup\",\"price\":10000},{\"label\":\"Lemon\",\"price\":7000},{\"label\":\"Ginger\",\"price\":7000}]}]},{\"id\":42,\"name\":\"Hot Latte\",\"desc\":\"\",\"price\":38000,\"category\":\"Hot Coffee\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hot-latte-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hot-latte-285x300.jpg\",\"options\":[{\"name\":\"Upgrade to Larger\",\"required\":false,\"multiple\":false,\"choices\":[{\"label\":\"Large\",\"price\":5000}]}]},{\"id\":47,\"name\":\"Ice Capuccino\",\"desc\":\"\",\"price\":45000,\"category\":\"Ice Coffee\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/ice-capuccino-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/ice-capuccino.jpg\",\"options\":[{\"name\":\"Ice Level\",\"required\":true,\"multiple\":false,\"choices\":[{\"label\":\"Less Ice\",\"price\":0},{\"label\":\"Normal\",\"price\":0}]},{\"name\":\"Size\",\"required\":true,\"multiple\":false,\"choices\":[{\"label\":\"Small\",\"price\":0},{\"label\":\"Large\",\"price\":6000}]}]},{\"id\":43,\"name\":\"Hot Piccolo\\\/Cortado\",\"desc\":\"\",\"price\":35000,\"category\":\"Hot Coffee\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[{\"name\":\"Upgrade to Large\",\"required\":false,\"multiple\":false,\"choices\":[{\"label\":\"Large\",\"price\":5000}]}]},{\"id\":116,\"name\":\"Latte\",\"desc\":\"Espresso with steamed milk.\",\"price\":38000,\"category\":\"Coffee\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[{\"name\":\"Serve\",\"required\":true,\"multiple\":false,\"choices\":[{\"label\":\"Hot\",\"price\":0},{\"label\":\"Hot Large\",\"price\":5000},{\"label\":\"Ice\",\"price\":7000},{\"label\":\"Ice Large\",\"price\":12000}]},{\"name\":\"Add-ons\",\"required\":false,\"multiple\":true,\"choices\":[{\"label\":\"Oat Milk\",\"price\":15000},{\"label\":\"Almond Milk\",\"price\":15000},{\"label\":\"Splash Milk\",\"price\":7000},{\"label\":\"Syrup\",\"price\":10000},{\"label\":\"Lemon\",\"price\":7000},{\"label\":\"Ginger\",\"price\":7000}]}]},{\"id\":117,\"name\":\"Cappuccino\",\"desc\":\"Espresso, steamed milk and a thick cap of foam.\",\"price\":38000,\"category\":\"Coffee\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[{\"name\":\"Serve\",\"required\":true,\"multiple\":false,\"choices\":[{\"label\":\"Hot\",\"price\":0},{\"label\":\"Hot Large\",\"price\":5000},{\"label\":\"Ice\",\"price\":7000},{\"label\":\"Ice Large\",\"price\":12000}]},{\"name\":\"Add-ons\",\"required\":false,\"multiple\":true,\"choices\":[{\"label\":\"Oat Milk\",\"price\":15000},{\"label\":\"Almond Milk\",\"price\":15000},{\"label\":\"Splash Milk\",\"price\":7000},{\"label\":\"Syrup\",\"price\":10000},{\"label\":\"Lemon\",\"price\":7000},{\"label\":\"Ginger\",\"price\":7000}]}]},{\"id\":118,\"name\":\"Mochaccinno\",\"desc\":\"Espresso with chocolate and steamed milk.\",\"price\":48000,\"category\":\"Coffee\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[{\"name\":\"Serve\",\"required\":true,\"multiple\":false,\"choices\":[{\"label\":\"Hot\",\"price\":0},{\"label\":\"Hot Large\",\"price\":5000},{\"label\":\"Ice\",\"price\":2000},{\"label\":\"Ice Large\",\"price\":7000}]},{\"name\":\"Add-ons\",\"required\":false,\"multiple\":true,\"choices\":[{\"label\":\"Oat Milk\",\"price\":15000},{\"label\":\"Almond Milk\",\"price\":15000},{\"label\":\"Splash Milk\",\"price\":7000},{\"label\":\"Syrup\",\"price\":10000},{\"label\":\"Lemon\",\"price\":7000},{\"label\":\"Ginger\",\"price\":7000}]}]},{\"id\":119,\"name\":\"Decaf Milk\",\"desc\":\"Decaf espresso with steamed milk. Ice comes in one size only.\",\"price\":60000,\"category\":\"Coffee\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[{\"name\":\"Serve\",\"required\":true,\"multiple\":false,\"choices\":[{\"label\":\"Hot\",\"price\":0},{\"label\":\"Hot Large\",\"price\":5000},{\"label\":\"Ice\",\"price\":0}]},{\"name\":\"Add-ons\",\"required\":false,\"multiple\":true,\"choices\":[{\"label\":\"Oat Milk\",\"price\":15000},{\"label\":\"Almond Milk\",\"price\":15000},{\"label\":\"Splash Milk\",\"price\":7000},{\"label\":\"Syrup\",\"price\":10000},{\"label\":\"Lemon\",\"price\":7000},{\"label\":\"Ginger\",\"price\":7000}]}]},{\"id\":120,\"name\":\"Decaf Moca\",\"desc\":\"Decaf espresso with chocolate and steamed milk.\",\"price\":65000,\"category\":\"Coffee\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[{\"name\":\"Serve\",\"required\":true,\"multiple\":false,\"choices\":[{\"label\":\"Hot\",\"price\":0},{\"label\":\"Hot Large\",\"price\":5000},{\"label\":\"Ice\",\"price\":0},{\"label\":\"Ice Large\",\"price\":5000}]},{\"name\":\"Add-ons\",\"required\":false,\"multiple\":true,\"choices\":[{\"label\":\"Oat Milk\",\"price\":15000},{\"label\":\"Almond Milk\",\"price\":15000},{\"label\":\"Splash Milk\",\"price\":7000},{\"label\":\"Syrup\",\"price\":10000},{\"label\":\"Lemon\",\"price\":7000},{\"label\":\"Ginger\",\"price\":7000}]}]},{\"id\":121,\"name\":\"BWork Cold Brew\",\"desc\":\"Slow-steeped cold brew. One size only.\",\"price\":59000,\"category\":\"Coffee\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[{\"name\":\"Add-ons\",\"required\":false,\"multiple\":true,\"choices\":[{\"label\":\"Oat Milk\",\"price\":15000},{\"label\":\"Almond Milk\",\"price\":15000},{\"label\":\"Splash Milk\",\"price\":7000},{\"label\":\"Syrup\",\"price\":10000},{\"label\":\"Lemon\",\"price\":7000},{\"label\":\"Ginger\",\"price\":7000}]}]},{\"id\":122,\"name\":\"Matcha\",\"desc\":\"Japanese green tea latte. Hot comes in one size only.\",\"price\":45000,\"category\":\"Non Coffee\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[{\"name\":\"Serve\",\"required\":true,\"multiple\":false,\"choices\":[{\"label\":\"Hot\",\"price\":0},{\"label\":\"Ice\",\"price\":3000},{\"label\":\"Ice Large\",\"price\":10000}]},{\"name\":\"Add-ons\",\"required\":false,\"multiple\":true,\"choices\":[{\"label\":\"Oat Milk\",\"price\":15000},{\"label\":\"Almond Milk\",\"price\":15000},{\"label\":\"Splash Milk\",\"price\":7000},{\"label\":\"Syrup\",\"price\":10000},{\"label\":\"Lemon\",\"price\":7000},{\"label\":\"Ginger\",\"price\":7000}]}]},{\"id\":123,\"name\":\"Chocolate\",\"desc\":\"Rich chocolate with steamed milk. Hot comes in one size only.\",\"price\":45000,\"category\":\"Non Coffee\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[{\"name\":\"Serve\",\"required\":true,\"multiple\":false,\"choices\":[{\"label\":\"Hot\",\"price\":0},{\"label\":\"Ice\",\"price\":1000},{\"label\":\"Ice Large\",\"price\":7000}]},{\"name\":\"Add-ons\",\"required\":false,\"multiple\":true,\"choices\":[{\"label\":\"Oat Milk\",\"price\":15000},{\"label\":\"Almond Milk\",\"price\":15000},{\"label\":\"Splash Milk\",\"price\":7000},{\"label\":\"Syrup\",\"price\":10000},{\"label\":\"Lemon\",\"price\":7000},{\"label\":\"Ginger\",\"price\":7000}]}]},{\"id\":124,\"name\":\"Chai Masala\",\"desc\":\"Spiced Indian tea with milk. Hot only, one size.\",\"price\":35000,\"category\":\"Non Coffee\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[{\"name\":\"Add-ons\",\"required\":false,\"multiple\":true,\"choices\":[{\"label\":\"Oat Milk\",\"price\":15000},{\"label\":\"Almond Milk\",\"price\":15000},{\"label\":\"Splash Milk\",\"price\":7000},{\"label\":\"Syrup\",\"price\":10000},{\"label\":\"Lemon\",\"price\":7000},{\"label\":\"Ginger\",\"price\":7000}]}]},{\"id\":125,\"name\":\"English Breakfast\",\"desc\":\"Classic full-bodied black tea.\",\"price\":35000,\"category\":\"Tea\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[]},{\"id\":126,\"name\":\"Jasmine Tea\",\"desc\":\"Green tea scented with jasmine blossom.\",\"price\":35000,\"category\":\"Tea\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[]},{\"id\":127,\"name\":\"Green Tea\",\"desc\":\"Light, grassy green tea.\",\"price\":35000,\"category\":\"Tea\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[]},{\"id\":128,\"name\":\"Earl Grey\",\"desc\":\"Black tea with bergamot.\",\"price\":35000,\"category\":\"Tea\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[]},{\"id\":129,\"name\":\"Chamomile\",\"desc\":\"Caffeine-free floral herbal tea.\",\"price\":35000,\"category\":\"Tea\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[]},{\"id\":130,\"name\":\"Minty Breeze\",\"desc\":\"Refreshing peppermint infusion.\",\"price\":35000,\"category\":\"Tea\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[]},{\"id\":131,\"name\":\"Be Butter\",\"desc\":\"Prelude signature butter coffee.\",\"price\":45000,\"category\":\"Prelude Signature\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[{\"name\":\"Size\",\"required\":true,\"multiple\":false,\"choices\":[{\"label\":\"Regular\",\"price\":0},{\"label\":\"Large\",\"price\":10000}]}]},{\"id\":132,\"name\":\"Sin &#038; Coco\",\"desc\":\"Chocolate and coconut signature blend.\",\"price\":45000,\"category\":\"Prelude Signature\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[{\"name\":\"Serve\",\"required\":true,\"multiple\":false,\"choices\":[{\"label\":\"Hot\",\"price\":0},{\"label\":\"Ice\",\"price\":0}]},{\"name\":\"Size\",\"required\":true,\"multiple\":false,\"choices\":[{\"label\":\"Regular\",\"price\":0},{\"label\":\"Large\",\"price\":10000}]}]},{\"id\":133,\"name\":\"Cinnamon Cream Delight\",\"desc\":\"Cinnamon and cream signature blend. Large size only.\",\"price\":55000,\"category\":\"Prelude Signature\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[]},{\"id\":134,\"name\":\"Freeze Day Frappe\",\"desc\":\"Blended iced frappe.\",\"price\":45000,\"category\":\"Prelude Signature\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[{\"name\":\"Size\",\"required\":true,\"multiple\":false,\"choices\":[{\"label\":\"Regular\",\"price\":0},{\"label\":\"Large\",\"price\":10000}]}]},{\"id\":17,\"name\":\"Sunny Sparkling\",\"desc\":\"Tangerine, Sprite, mint leaf, lemon\",\"price\":45000,\"category\":\"Special Beverage\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[]},{\"id\":16,\"name\":\"Summer Breeze\",\"desc\":\"Watermelon, lime juice, honey\",\"price\":45000,\"category\":\"Special Beverage\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/summer-breeze-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/summer-breeze-300x239.jpg\",\"options\":[]},{\"id\":15,\"name\":\"Tropical Punch\",\"desc\":\"Pineapple, orange, carrot\",\"price\":59000,\"category\":\"Pressed Juice\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/tropical-punch-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/tropical-punch-300x283.jpg\",\"options\":[]},{\"id\":14,\"name\":\"Amber Booster\",\"desc\":\"Carrot, orange, turmeric, ginger, lemon\",\"price\":59000,\"category\":\"Pressed Juice\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/amber-booster-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/amber-booster-300x282.jpg\",\"options\":[]},{\"id\":13,\"name\":\"Island Refresher\",\"desc\":\"Pineapple, cucumber\",\"price\":59000,\"category\":\"Pressed Juice\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/island-refresher-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/island-refresher-300x258.jpg\",\"options\":[]},{\"id\":12,\"name\":\"Golden Glow\",\"desc\":\"Orange, green apple, lemon, ginger\",\"price\":59000,\"category\":\"Pressed Juice\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[]},{\"id\":11,\"name\":\"Pink Blossom\",\"desc\":\"Frozen strawberry, fresh milk and honey\",\"price\":59000,\"category\":\"Smoothie\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/pink-blossom-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/pink-blossom-300x227.jpg\",\"options\":[]},{\"id\":10,\"name\":\"Mango Peanut Butter\",\"desc\":\"Mango, peanut butter, plain yoghurt and fresh milk\",\"price\":59000,\"category\":\"Smoothie\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/mango-peanut-butter-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/mango-peanut-butter-300x221.jpg\",\"options\":[]},{\"id\":9,\"name\":\"Banana Peanut Butter\",\"desc\":\"Banana, peanut butter, plain yoghurt and fresh milk\",\"price\":59000,\"category\":\"Smoothie\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/banana-peanut-butter-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/banana-peanut-butter-300x221.jpg\",\"options\":[]},{\"id\":135,\"name\":\"MYOB (Make Your Own Breakfast)\",\"desc\":\"Build your own breakfast plate. Price shown is the cheapest carb; each choice adds its own price.\",\"price\":10000,\"category\":\"MYOB\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[{\"name\":\"Carbs\",\"required\":true,\"multiple\":false,\"choices\":[{\"label\":\"Baguette\",\"price\":0},{\"label\":\"White Toast\",\"price\":0},{\"label\":\"Steam Rice\",\"price\":0},{\"label\":\"Sourdough\",\"price\":5000},{\"label\":\"Potato Herbs\",\"price\":10000},{\"label\":\"Gluten Free Bread\",\"price\":15000},{\"label\":\"Mashed Potato\",\"price\":15000}]},{\"name\":\"Eggs\",\"required\":false,\"multiple\":false,\"choices\":[{\"label\":\"Scramble Egg Single\",\"price\":15000},{\"label\":\"Scramble Egg Triple\",\"price\":30000},{\"label\":\"Poached Egg Single\",\"price\":10000},{\"label\":\"Poached Egg Triple\",\"price\":25000},{\"label\":\"Sunny Side Up Single\",\"price\":10000},{\"label\":\"Sunny Side Up Triple\",\"price\":25000},{\"label\":\"Boiled Egg Single\",\"price\":10000},{\"label\":\"Boiled Egg Triple\",\"price\":25000}]},{\"name\":\"Proteins\",\"required\":false,\"multiple\":true,\"choices\":[{\"label\":\"Pan-Seared Chicken Breast\",\"price\":32000},{\"label\":\"Chicken Sausage\",\"price\":25000},{\"label\":\"Chicken Katsu\",\"price\":35000},{\"label\":\"Beef Cube (Tenderloin)\",\"price\":88000},{\"label\":\"Bacon\",\"price\":20000}]},{\"name\":\"Greens\",\"required\":false,\"multiple\":true,\"choices\":[{\"label\":\"Mix Vegetables\",\"price\":35000},{\"label\":\"Mushroom\",\"price\":20000},{\"label\":\"Fresh Avocado\",\"price\":20000},{\"label\":\"Mix Salad\",\"price\":15000}]},{\"name\":\"Add-ons\",\"required\":false,\"multiple\":true,\"choices\":[{\"label\":\"Cheese Slice\",\"price\":12000},{\"label\":\"Parmesan Cheese\",\"price\":15000},{\"label\":\"Feta Cheese\",\"price\":15000},{\"label\":\"Butter\",\"price\":10000},{\"label\":\"Hashbrown\",\"price\":22000},{\"label\":\"Cherry Tomato\",\"price\":15000}]}]},{\"id\":136,\"name\":\"B Brekkie\",\"desc\":\"Eggs, sourdough, hash browns, cherry tomatoes, sauteed mushrooms & greens. Vegetarian. Chef's recommendation.\",\"price\":85000,\"category\":\"All Day Breakfast\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[]},{\"id\":137,\"name\":\"B Egg Benedict\",\"desc\":\"Poached eggs, bacon, sauteed kale & hollandaise sauce on toasted sourdough, served with mixed salad on the side\",\"price\":95000,\"category\":\"All Day Breakfast\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[]},{\"id\":38,\"name\":\"B Avo On Toast\",\"desc\":\"Sourdough topped with mashed avocado, eggs, cherry tomatoes, feta cheese, served with mixed salad. Vegetarian.\",\"price\":85000,\"category\":\"All Day Breakfast\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[]},{\"id\":37,\"name\":\"Dragon Bowl\",\"desc\":\"Dragon fruit, banana & pineapple smoothie topped with seasonal fruit, dried coconut, chia & homemade granola. Vegan. Chef's recommendation.\",\"price\":75000,\"category\":\"Smoothie Bowl\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/dragon-bowl-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/dragon-bowl-300x288.jpg\",\"options\":[]},{\"id\":36,\"name\":\"Mango Bowl\",\"desc\":\"Banana & mango smoothie topped with seasonal fruit, dried coconut, chia & homemade granola. Vegan.\",\"price\":75000,\"category\":\"Smoothie Bowl\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/mango-bowl-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/mango-bowl-300x294.jpg\",\"options\":[]},{\"id\":35,\"name\":\"Choco Bowl\",\"desc\":\"Banana, strawberry & cocoa smoothie topped with seasonal fruit, dried coconut, chia & homemade granola. Vegan.\",\"price\":80000,\"category\":\"Smoothie Bowl\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/choco-bowl-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/choco-bowl-300x291.jpg\",\"options\":[]},{\"id\":34,\"name\":\"Caesar Salad\",\"desc\":\"Grilled chicken, boiled egg, romaine lettuce, cherry tomatoes & parmesan. Chef's recommendation.\",\"price\":87000,\"category\":\"Salad\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/caesar-salad-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/caesar-salad-300x220.jpg\",\"options\":[]},{\"id\":33,\"name\":\"Greek Salad\",\"desc\":\"Iceberg lettuce with bell pepper, cherry tomatoes, onion, black olives, radish, feta & oregano vinaigrette. Vegetarian.\",\"price\":75000,\"category\":\"Salad\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/greek-salad-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/greek-salad-300x221.jpg\",\"options\":[]},{\"id\":32,\"name\":\"Creamy Chicken Salad\",\"desc\":\"Fried chicken with creamy dressing, mixed salad, edamame, radish, potato herb & greens\",\"price\":89000,\"category\":\"Salad\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/creamy-chicken-salad-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/creamy-chicken-salad-300x221.jpg\",\"options\":[]},{\"id\":138,\"name\":\"Rosemary Chicken Sandwich\",\"desc\":\"Rosemary creamy chicken, croissant, caramelized onion, tomato & greens\",\"price\":89000,\"category\":\"Sandwich\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[]},{\"id\":31,\"name\":\"Smoked Bacon Sandwich\",\"desc\":\"Bacon, omelette, sourdough, avocado & mustard sauce\",\"price\":89000,\"category\":\"Sandwich\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/smoked-bacon-sandwich-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/smoked-bacon-sandwich-300x270.jpg\",\"options\":[]},{\"id\":30,\"name\":\"Chicken Sandwich\",\"desc\":\"Chicken, avocado, sourdough, greens & mustard sauce\",\"price\":80000,\"category\":\"Sandwich\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/chicken-sandwich-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/chicken-sandwich-300x277.jpg\",\"options\":[]},{\"id\":29,\"name\":\"Korean Chicken Curry Rice\",\"desc\":\"Chicken katsu, steamed rice & Korean curry sauce with veggie. Chef's recommendation.\",\"price\":89000,\"category\":\"All Day Casual\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/korean-chicken-curry-rice-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/korean-chicken-curry-rice-300x244.jpg\",\"options\":[]},{\"id\":28,\"name\":\"Chicken Nasi Goreng\",\"desc\":\"Chicken fried rice, mix veggie, sunny side egg, emping crackers, satay, sambal & acar (pickle)\",\"price\":75000,\"category\":\"All Day Casual\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/chicken-nasi-goreng-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/chicken-nasi-goreng-300x292.jpg\",\"options\":[]},{\"id\":27,\"name\":\"Alfredo Pasta\",\"desc\":\"Creamy linguine pasta with chicken, mushrooms, green peas, crouton & parmesan\",\"price\":85000,\"category\":\"Pasta &amp; Noodle\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/alfredo-pasta-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/alfredo-pasta-300x245.jpg\",\"options\":[]},{\"id\":26,\"name\":\"Pollo Con Pasta\",\"desc\":\"Spaghetti with marinara sauce, basil pesto, cherry tomatoes & pan-seared chicken. Chef's recommendation.\",\"price\":79000,\"category\":\"Pasta &amp; Noodle\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/pollo-con-pasta-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/pollo-con-pasta-300x259.jpg\",\"options\":[]},{\"id\":25,\"name\":\"Ramyeon\",\"desc\":\"Hot and spicy ramen, topped with egg, mushroom & spring onions\",\"price\":62000,\"category\":\"Pasta &amp; Noodle\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/ramyeon-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/ramyeon-300x246.jpg\",\"options\":[]},{\"id\":24,\"name\":\"Fruit Platter\",\"desc\":\"Watermelon, honeydew, papaya, dragon fruit, pineapple. Vegan. Gluten free.\",\"price\":58000,\"category\":\"Bites\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/fruit-platter-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/fruit-platter-300x233.jpg\",\"options\":[]},{\"id\":23,\"name\":\"Chicken Pop\",\"desc\":\"Golden crispy fried chicken dice, coleslaw, spicy mayo\",\"price\":69000,\"category\":\"Bites\",\"photo\":\"\",\"photo_lg\":\"\",\"options\":[]},{\"id\":22,\"name\":\"French Fries\",\"desc\":\"Golden fries, seasoned, served hot. Vegetarian. Gluten free.\",\"price\":50000,\"category\":\"Bites\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/french-fries-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/french-fries-300x239.jpg\",\"options\":[]},{\"id\":21,\"name\":\"Sweet Potato Fries\",\"desc\":\"Golden sweet potato fries, seasoned, served hot. Vegetarian. Gluten free.\",\"price\":35000,\"category\":\"Bites\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/sweet-potato-fries-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/sweet-potato-fries-300x221.jpg\",\"options\":[]},{\"id\":20,\"name\":\"Banana Cake\",\"desc\":\"\",\"price\":38000,\"category\":\"Dessert\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/banana-cake-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/banana-cake-300x225.jpg\",\"options\":[]},{\"id\":19,\"name\":\"Brownie\",\"desc\":\"\",\"price\":38000,\"category\":\"Dessert\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/brownie-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/brownie-300x228.jpg\",\"options\":[]},{\"id\":18,\"name\":\"Basque Burnt Cheese Cake\",\"desc\":\"\",\"price\":60000,\"category\":\"Dessert\",\"photo\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/basque-burnt-cheese-cake-150x150.jpg\",\"photo_lg\":\"https:\\\/\\\/prelude.deartechno.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/basque-burnt-cheese-cake-300x237.jpg\",\"options\":[]}];\n\t\tvar CATEGORY_ORDER = [\"Coffee\",\"Tea & Non-Coffee\",\"Snacks\",\"Light Meals\",\"Ice Coffee\",\"Hot Coffee\",\"Non Coffee\",\"Tea\",\"Prelude Signature\",\"Special Beverage\",\"Pressed Juice\",\"Smoothie\",\"MYOB\",\"All Day Breakfast\",\"Smoothie Bowl\",\"Salad\",\"Sandwich\",\"All Day Casual\",\"Pasta &amp; Noodle\",\"Bites\",\"Dessert\"];\n\t\tvar REST = \"https:\\\/\\\/prelude.deartechno.com\\\/index.php\\\/wp-json\\\/bwork-cafe\\\/v1\\\/order\";\n\t\tvar SESSION_URL = \"https:\\\/\\\/prelude.deartechno.com\\\/index.php\\\/wp-json\\\/bwork-cafe\\\/v1\\\/session\";\n\t\tvar MIN_DWELL = 0;\n\t\tvar IS_OPEN = true;\n\t\tvar HOURS = \"08:00\\u201321:00\";\n\t\tvar ORDER_TYPE_ON = false;\n\t\tvar orderType = 'dinein';\n\n\t\tvar cart = [];\n\t\tvar uidSeq = 1;\n\t\tvar sheetItem = null, sheetQty = 1, sheetEditUid = null;\n\t\tvar backToCheckout = false;\n\t\tvar tabEls = [], sectionEls = [];\n\t\tvar query = '';\n\n\t\tvar $ = function (id) { return document.getElementById(id); };\n\t\tvar reduceMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\t\tvar ANIM = reduceMotion ? 0 : 300;\n\n\t\tfunction esc(s) { var d = document.createElement('div'); d.textContent = (s == null ? '' : s); return d.innerHTML; }\n\t\tfunction itemById(id) { for (var i = 0; i < MENU.length; i++) { if (String(MENU[i].id) === String(id)) return MENU[i]; } return null; }\n\n\t\t\/* Prices follow the printed menu's \"45K\" notation. Non-round amounts keep one\n\t\t   decimal so nothing is silently rounded away. *\/\n\t\tfunction money(n) {\n\t\t\tn = Math.round(n || 0);\n\t\t\tif (n === 0) return '0K';\n\t\t\tvar k = n \/ 1000;\n\t\t\treturn (n % 1000 === 0 ? k : k.toFixed(1).replace(\/\\.0$\/, '')) + 'K';\n\t\t}\n\n\t\t\/* ---------- overlay animation ---------- *\/\n\t\tfunction syncLock() {\n\t\t\tvar open = ['bcoSheetOvl', 'bcoCoOvl', 'bcoOkOvl'].some(function (id) { return !$(id).hidden; });\n\t\t\tdocument.body.style.overflow = open ? 'hidden' : '';\n\t\t}\n\t\tfunction openOvl(id) {\n\t\t\tvar el = $(id);\n\t\t\tel.hidden = false;\n\t\t\tvoid el.offsetWidth;\n\t\t\tel.classList.add('open');\n\t\t\tsyncLock();\n\t\t}\n\t\tfunction closeOvl(id, done) {\n\t\t\tvar el = $(id);\n\t\t\tif (el.hidden) { if (done) done(); return; }\n\t\t\tel.classList.remove('open');\n\t\t\tsetTimeout(function () { el.hidden = true; syncLock(); if (done) done(); }, ANIM);\n\t\t}\n\n\t\t\/* ---------- pricing ---------- *\/\n\t\tfunction selExtra(item, sel) {\n\t\t\tvar extra = 0;\n\t\t\t(sel || []).forEach(function (s) {\n\t\t\t\tvar group = null;\n\t\t\t\t(item.options || []).forEach(function (g) { if (g.name === s.group) group = g; });\n\t\t\t\tif (!group) return;\n\t\t\t\t(s.choices || []).forEach(function (label) {\n\t\t\t\t\tgroup.choices.forEach(function (c) { if (c.label === label) extra += Number(c.price) || 0; });\n\t\t\t\t});\n\t\t\t});\n\t\t\treturn extra;\n\t\t}\n\t\tfunction selLabels(item, sel) {\n\t\t\tvar out = [];\n\t\t\t(sel || []).forEach(function (s) {\n\t\t\t\tif (!s.choices || !s.choices.length) return;\n\t\t\t\tout.push(s.group + ': ' + s.choices.join(', '));\n\t\t\t});\n\t\t\treturn out;\n\t\t}\n\t\tfunction sameSel(a, b) {\n\t\t\ta = a || []; b = b || [];\n\t\t\tif (a.length !== b.length) return false;\n\t\t\tfor (var i = 0; i < a.length; i++) {\n\t\t\t\tif (a[i].group !== b[i].group) return false;\n\t\t\t\tif ((a[i].choices || []).slice().sort().join('') !== (b[i].choices || []).slice().sort().join('')) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tfunction findTwin(id, sel, note, skipUid) {\n\t\t\tfor (var i = 0; i < cart.length; i++) {\n\t\t\t\tvar l = cart[i];\n\t\t\t\tif (skipUid && l.uid === skipUid) continue;\n\t\t\t\tif (String(l.id) === String(id) && (l.note || '') === (note || '') && sameSel(l.sel, sel)) return l;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t\tfunction lineUnit(line) { var it = itemById(line.id); return it ? (Number(it.price) || 0) + selExtra(it, line.sel) : 0; }\n\t\tfunction lineTotal(line) { return lineUnit(line) * line.qty; }\n\t\tfunction cartTotal() { return cart.reduce(function (t, l) { return t + lineTotal(l); }, 0); }\n\t\tfunction cartCount() { return cart.reduce(function (t, l) { return t + l.qty; }, 0); }\n\t\tfunction qtyForItem(id) { return cart.reduce(function (t, l) { return String(l.id) === String(id) ? t + l.qty : t; }, 0); }\n\n\t\tfunction saveCart() { try { sessionStorage.setItem('bcoCart', JSON.stringify(cart)); } catch (e) {} }\n\t\tfunction loadCart() {\n\t\t\ttry {\n\t\t\t\tvar raw = sessionStorage.getItem('bcoCart');\n\t\t\t\tif (!raw) return;\n\t\t\t\tvar parsed = JSON.parse(raw);\n\t\t\t\tif (Object.prototype.toString.call(parsed) === '[object Array]') {\n\t\t\t\t\tcart = parsed.filter(function (l) { return itemById(l.id); });\n\t\t\t\t\tcart.forEach(function (l) { if (l.uid >= uidSeq) uidSeq = l.uid + 1; });\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t}\n\n\t\t\/* ---------- menu ---------- *\/\n\t\tfunction visibleItems() {\n\t\t\tif (!query) return MENU;\n\t\t\tvar q = query.toLowerCase();\n\t\t\treturn MENU.filter(function (it) {\n\t\t\t\treturn (it.name || '').toLowerCase().indexOf(q) > -1 ||\n\t\t\t\t\t(it.desc || '').toLowerCase().indexOf(q) > -1 ||\n\t\t\t\t\t(it.category || '').toLowerCase().indexOf(q) > -1;\n\t\t\t});\n\t\t}\n\t\tfunction grouped() {\n\t\t\tvar byCat = {};\n\t\t\tvisibleItems().forEach(function (it) {\n\t\t\t\tvar c = it.category || 'Other';\n\t\t\t\t(byCat[c] = byCat[c] || []).push(it);\n\t\t\t});\n\t\t\tvar ordered = CATEGORY_ORDER.filter(function (c) { return byCat[c]; });\n\t\t\t\/\/ Deliberately unsorted: insertion order follows menu_order, i.e. the menu.\n\t\t\tvar rest = Object.keys(byCat).filter(function (c) { return ordered.indexOf(c) === -1; });\n\t\t\treturn ordered.concat(rest).map(function (c) { return { category: c, items: byCat[c] }; });\n\t\t}\n\n\t\tfunction renderMenu() {\n\t\t\tif (!MENU.length) return;\n\t\t\tvar groups = grouped();\n\t\t\tif (!groups.length) {\n\t\t\t\t$('bcoMenu').innerHTML = '<p class=\"bco-empty\">Nothing matches \u201c' + esc(query) + '\u201d.<\/p>';\n\t\t\t\tsectionEls = [];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar html = '';\n\t\t\tgroups.forEach(function (g, gi) {\n\t\t\t\thtml += '<div class=\"bco-cat\" data-cat=\"' + gi + '\">' +\n\t\t\t\t\t'<div class=\"bco-cat-hd\"><h3>' + esc(g.category) + '<\/h3><div class=\"bco-rule\"><\/div><\/div>';\n\t\t\t\tg.items.forEach(function (it) {\n\t\t\t\t\tvar thumb = it.photo\n\t\t\t\t\t\t? '<img decoding=\"async\" class=\"bco-thumb\" src=\"' + esc(it.photo) + '\" alt=\"\" loading=\"lazy\">'\n\t\t\t\t\t\t: '<div class=\"bco-thumb-ph\">' + esc((it.name || '?').charAt(0).toUpperCase()) + '<\/div>';\n\t\t\t\t\tvar inCart = qtyForItem(it.id);\n\t\t\t\t\thtml += '<button type=\"button\" class=\"bco-row\" data-id=\"' + esc(it.id) + '\">' + thumb +\n\t\t\t\t\t\t'<div class=\"bco-row-info\">' +\n\t\t\t\t\t\t\t'<div class=\"bco-row-name\">' + esc(it.name) + '<\/div>' +\n\t\t\t\t\t\t\t(it.desc ? '<div class=\"bco-row-desc\">' + esc(it.desc) + '<\/div>' : '') +\n\t\t\t\t\t\t\t((it.options && it.options.length) ? '<div class=\"bco-row-tag\">Customisable<\/div>' : '') +\n\t\t\t\t\t\t'<\/div>' +\n\t\t\t\t\t\t'<div class=\"bco-row-right\">' +\n\t\t\t\t\t\t\t'<div class=\"bco-row-price\">' + money(it.price) + '<\/div>' +\n\t\t\t\t\t\t\t(inCart ? '<div class=\"bco-row-qty\">' + inCart + '<\/div>' : '') +\n\t\t\t\t\t\t'<\/div>' +\n\t\t\t\t\t\t'<\/button>';\n\t\t\t\t});\n\t\t\t\thtml += '<\/div>';\n\t\t\t});\n\t\t\t$('bcoMenu').innerHTML = html;\n\t\t\tsectionEls = Array.prototype.slice.call($('bcoMenu').querySelectorAll('.bco-cat'));\n\t\t}\n\n\t\tfunction buildTabs() {\n\t\t\tvar groups = grouped();\n\t\t\tif (query || groups.length < 2) { $('bcoTabs').hidden = true; tabEls = []; return; }\n\t\t\t$('bcoTabs').innerHTML = groups.map(function (g, i) {\n\t\t\t\treturn '<button type=\"button\" class=\"bco-tab' + (i === 0 ? ' active' : '') + '\" data-cat=\"' + i + '\">' + esc(g.category) + '<\/button>';\n\t\t\t}).join('');\n\t\t\t$('bcoTabs').hidden = false;\n\t\t\ttabEls = Array.prototype.slice.call($('bcoTabs').querySelectorAll('.bco-tab'));\n\t\t}\n\n\t\tfunction stickyH() {\n\t\t\tvar bar = document.querySelector('.bco-stick');\n\t\t\tvar offset = parseInt(getComputedStyle($('bcoRoot')).getPropertyValue('--sticky-top'), 10) || 0;\n\t\t\treturn (bar ? bar.offsetHeight : 0) + offset;\n\t\t}\n\n\t\tfunction updateSpy() {\n\t\t\tif (!sectionEls.length || !tabEls.length) return;\n\t\t\tvar line = stickyH() + 28;\n\t\t\tvar active = 0;\n\t\t\tsectionEls.forEach(function (sec, i) { if (sec.getBoundingClientRect().top <= line) active = i; });\n\t\t\tvar docH = Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n\t\t\tif (window.innerHeight + window.pageYOffset >= docH - 4) active = sectionEls.length - 1;\n\n\t\t\ttabEls.forEach(function (t, i) { t.classList.toggle('active', i === active); });\n\t\t\tvar bar = $('bcoTabs'), chip = tabEls[active];\n\t\t\tif (!chip) return;\n\t\t\tvar barBox = bar.getBoundingClientRect(), chipBox = chip.getBoundingClientRect();\n\t\t\tif (chipBox.left < barBox.left + 8) bar.scrollLeft += chipBox.left - barBox.left - 12;\n\t\t\telse if (chipBox.right > barBox.right - 8) bar.scrollLeft += chipBox.right - barBox.right + 12;\n\t\t}\n\n\t\tvar spyQueued = false;\n\t\twindow.addEventListener('scroll', function () {\n\t\t\tif (spyQueued) return;\n\t\t\tspyQueued = true;\n\t\t\trequestAnimationFrame(function () { spyQueued = false; updateSpy(); });\n\t\t}, { passive: true });\n\n\t\t\/* ---------- item sheet ---------- *\/\n\t\t\tfunction openSheet(id, editUid) {\n\t\t\t\tif (document.activeElement && document.activeElement.blur) document.activeElement.blur();\n\t\t\t\tvar item = itemById(id);\n\t\t\t\tif (!item) return;\n\t\t\tsheetItem = item;\n\t\t\tsheetEditUid = editUid || null;\n\n\t\t\tvar line = null;\n\t\t\tif (sheetEditUid) cart.forEach(function (l) { if (l.uid === sheetEditUid) line = l; });\n\t\t\tsheetQty = line ? line.qty : 1;\n\n\t\t\tvar hero = item.photo_lg ? '<img decoding=\"async\" class=\"bco-hero\" src=\"' + esc(item.photo_lg) + '\" alt=\"\">' : '';\n\t\t\tvar html = hero +\n\t\t\t\t'<div class=\"bco-sheet-name\">' + esc(item.name) + '<\/div>' +\n\t\t\t\t(item.desc ? '<div class=\"bco-sheet-desc\">' + esc(item.desc) + '<\/div>' : '') +\n\t\t\t\t'<div class=\"bco-sheet-price\">' + money(item.price) + '<\/div>';\n\n\t\t\t(item.options || []).forEach(function (g, gi) {\n\t\t\t\tvar badge = g.required\n\t\t\t\t\t? '<span class=\"bco-req\">Required<\/span>'\n\t\t\t\t\t: '<span class=\"bco-opt\">Optional' + (g.multiple ? ' \u00b7 any' : '') + '<\/span>';\n\t\t\t\thtml += '<div class=\"bco-grp\" data-gi=\"' + gi + '\">' +\n\t\t\t\t\t'<div class=\"bco-grp-hd\"><span>' + esc(g.name) + '<\/span>' + badge + '<\/div>';\n\t\t\t\tg.choices.forEach(function (c) {\n\t\t\t\t\tvar checked = false;\n\t\t\t\t\tif (line) {\n\t\t\t\t\t\tline.sel.forEach(function (s) {\n\t\t\t\t\t\t\tif (s.group === g.name && s.choices.indexOf(c.label) > -1) checked = true;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\thtml += '<label class=\"bco-ch\"><span>' + esc(c.label) +\n\t\t\t\t\t\t(c.price ? ' <em>+' + money(c.price) + '<\/em>' : '') + '<\/span>' +\n\t\t\t\t\t\t'<input type=\"' + (g.multiple ? 'checkbox' : 'radio') + '\" name=\"bco-g' + gi + '\" value=\"' + esc(c.label) + '\"' +\n\t\t\t\t\t\t(checked ? ' checked' : '') + '><\/label>';\n\t\t\t\t});\n\t\t\t\thtml += '<div class=\"bco-grp-err\" hidden>Please choose an option<\/div><\/div>';\n\t\t\t});\n\n\t\t\thtml += '<div class=\"bco-grp\"><div class=\"bco-grp-hd\"><span>Note for the kitchen<\/span><span class=\"bco-opt\">Optional<\/span><\/div>' +\n\t\t\t\t'<textarea class=\"bco-note\" id=\"bcoNote\" placeholder=\"e.g. not too hot, no straw\">' + esc(line ? line.note : '') + '<\/textarea><\/div>';\n\n\t\t\t$('bcoSheetTitle').textContent = sheetEditUid ? 'Edit item' : 'Customise';\n\t\t\t$('bcoSheetBody').innerHTML = html;\n\t\t\t$('bcoQty').textContent = String(sheetQty);\n\t\t\t$('bcoSheetBody').scrollTop = 0;\n\n\t\t\topenOvl('bcoSheetOvl');\n\t\t\trefreshSheetPrice();\n\t\t}\n\n\t\tfunction closeSheet(done) {\n\t\t\tcloseOvl('bcoSheetOvl', function () {\n\t\t\t\tsheetItem = null; sheetEditUid = null;\n\t\t\t\tif (done) done();\n\t\t\t});\n\t\t}\n\n\t\tfunction readSheetSelections() {\n\t\t\tif (!sheetItem) return [];\n\t\t\tvar sel = [];\n\t\t\t(sheetItem.options || []).forEach(function (g, gi) {\n\t\t\t\tvar nodes = $('bcoSheetBody').querySelectorAll('[name=\"bco-g' + gi + '\"]:checked');\n\t\t\t\tsel.push({ group: g.name, choices: Array.prototype.slice.call(nodes).map(function (n) { return n.value; }) });\n\t\t\t});\n\t\t\treturn sel;\n\t\t}\n\n\t\tfunction refreshSheetPrice() {\n\t\t\tif (!sheetItem) return;\n\t\t\tif (!IS_OPEN) {\n\t\t\t\t$('bcoAdd').disabled = true;\n\t\t\t\t$('bcoAdd').textContent = 'Closed \u00b7 ' + HOURS;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar unit = (Number(sheetItem.price) || 0) + selExtra(sheetItem, readSheetSelections());\n\t\t\t$('bcoAdd').textContent = (sheetEditUid ? 'Update \u00b7 ' : 'Add \u00b7 ') + money(unit * sheetQty);\n\t\t}\n\n\t\tfunction validateSheet() {\n\t\t\tif (!sheetItem) return false;\n\t\t\tvar ok = true;\n\t\t\tvar sel = readSheetSelections();\n\t\t\t(sheetItem.options || []).forEach(function (g, gi) {\n\t\t\t\tvar box = $('bcoSheetBody').querySelector('.bco-grp[data-gi=\"' + gi + '\"] .bco-grp-err');\n\t\t\t\tvar chosen = [];\n\t\t\t\tsel.forEach(function (s) { if (s.group === g.name) chosen = s.choices; });\n\t\t\t\tvar bad = g.required && chosen.length === 0;\n\t\t\t\tif (box) box.hidden = !bad;\n\t\t\t\tif (bad && ok) {\n\t\t\t\t\tok = false;\n\t\t\t\t\tvar grp = $('bcoSheetBody').querySelector('.bco-grp[data-gi=\"' + gi + '\"]');\n\t\t\t\t\tif (grp && grp.scrollIntoView) grp.scrollIntoView({ block: 'center', behavior: reduceMotion ? 'auto' : 'smooth' });\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ok;\n\t\t}\n\n\t\tfunction commitSheet() {\n\t\t\tif (!sheetItem || !validateSheet()) return;\n\t\t\tvar noteEl = $('bcoNote');\n\t\t\tvar editing = !!sheetEditUid;\n\t\t\tvar payload = {\n\t\t\t\tid: sheetItem.id, qty: sheetQty,\n\t\t\t\tsel: readSheetSelections(),\n\t\t\t\tnote: noteEl ? noteEl.value.trim() : ''\n\t\t\t};\n\n\t\t\tvar twin = findTwin(payload.id, payload.sel, payload.note, editing ? sheetEditUid : null);\n\n\t\t\tif (editing) {\n\t\t\t\tvar edited = null;\n\t\t\t\tcart.forEach(function (l) { if (l.uid === sheetEditUid) edited = l; });\n\t\t\t\tif (edited) {\n\t\t\t\t\tif (twin) {\n\t\t\t\t\t\ttwin.qty = Math.min(99, twin.qty + payload.qty);\n\t\t\t\t\t\tcart = cart.filter(function (l) { return l.uid !== sheetEditUid; });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tedited.qty = payload.qty; edited.sel = payload.sel; edited.note = payload.note;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (twin) {\n\t\t\t\ttwin.qty = Math.min(99, twin.qty + payload.qty);\n\t\t\t} else {\n\t\t\t\tpayload.uid = uidSeq++;\n\t\t\t\tcart.push(payload);\n\t\t\t}\n\n\t\t\tsaveCart();\n\t\t\tvar wasReturning = backToCheckout;\n\t\t\tbackToCheckout = false;\n\n\t\t\tcloseSheet(function () {\n\t\t\t\trenderMenu();\n\t\t\t\trenderBar();\n\t\t\t\tif (wasReturning) openCheckout();\n\t\t\t});\n\t\t}\n\n\t\t\/* ---------- cart bar ---------- *\/\n\t\tfunction renderBar() {\n\t\t\tvar count = cartCount();\n\t\t\t$('bcoBar').classList.toggle('show', count > 0);\n\t\t\t$('bcoBarCount').textContent = count + ' item' + (count === 1 ? '' : 's');\n\t\t\t$('bcoBarTotal').textContent = money(cartTotal());\n\t\t}\n\n\t\t\/* ---------- checkout ---------- *\/\n\t\tfunction renderCheckout() {\n\t\t\tvar html = '';\n\t\t\tif (!cart.length) {\n\t\t\t\thtml = '<p class=\"bco-empty\">Your order is empty.<\/p>';\n\t\t\t} else {\n\t\t\t\tcart.forEach(function (l) {\n\t\t\t\t\tvar it = itemById(l.id);\n\t\t\t\t\tif (!it) return;\n\t\t\t\t\tvar labels = selLabels(it, l.sel);\n\t\t\t\t\thtml += '<div class=\"bco-line\">' +\n\t\t\t\t\t\t'<div class=\"bco-line-qty\">' + l.qty + '\u00d7<\/div>' +\n\t\t\t\t\t\t'<div class=\"bco-line-main\">' +\n\t\t\t\t\t\t\t'<div class=\"bco-line-name\">' + esc(it.name) + '<\/div>' +\n\t\t\t\t\t\t\t(labels.length ? '<div class=\"bco-line-opt\">' + esc(labels.join(' \u00b7 ')) + '<\/div>' : '') +\n\t\t\t\t\t\t\t(l.note ? '<div class=\"bco-line-note\">Note: ' + esc(l.note) + '<\/div>' : '') +\n\t\t\t\t\t\t\t'<div class=\"bco-line-acts\">' +\n\t\t\t\t\t\t\t\t'<div class=\"bco-mini\">' +\n\t\t\t\t\t\t\t\t\t'<button type=\"button\" data-dec=\"' + l.uid + '\" aria-label=\"Decrease quantity\">\u2212<\/button>' +\n\t\t\t\t\t\t\t\t\t'<span>' + l.qty + '<\/span>' +\n\t\t\t\t\t\t\t\t\t'<button type=\"button\" data-inc=\"' + l.uid + '\" aria-label=\"Increase quantity\">+<\/button>' +\n\t\t\t\t\t\t\t\t'<\/div>' +\n\t\t\t\t\t\t\t\t'<button type=\"button\" class=\"bco-link\" data-edit=\"' + l.uid + '\">Edit<\/button>' +\n\t\t\t\t\t\t\t'<\/div>' +\n\t\t\t\t\t\t'<\/div>' +\n\t\t\t\t\t\t'<div class=\"bco-line-total\">' + money(lineTotal(l)) + '<\/div>' +\n\t\t\t\t\t\t'<\/div>';\n\t\t\t\t});\n\t\t\t}\n\t\t\t$('bcoCoLines').innerHTML = html;\n\t\t\t$('bcoCoTotal').textContent = money(cartTotal());\n\t\t\t$('bcoPlace').disabled = cart.length === 0 || !IS_OPEN;\n\t\t\tif (!IS_OPEN) $('bcoPlace').textContent = 'Ordering closed \u00b7 ' + HOURS;\n\t\t}\n\n\t\tfunction setOrderType(type) {\n\t\t\t\/\/ With the switch turned off there is no control to update and every order\n\t\t\t\/\/ is dine-in, so leave the table field visible and stop here.\n\t\t\tif (!ORDER_TYPE_ON) { orderType = 'dinein'; return; }\n\t\t\torderType = (type === 'takeaway') ? 'takeaway' : 'dinein';\n\t\t\tArray.prototype.slice.call($('bcoType').querySelectorAll('button')).forEach(function (b) {\n\t\t\t\tb.classList.toggle('active', b.getAttribute('data-type') === orderType);\n\t\t\t});\n\t\t\t$('bcoTableField').hidden = orderType === 'takeaway';\n\t\t}\n\n\t\tfunction openCheckout() {\n\t\t\tretried = false;\n\t\t\trenderCheckout();\n\t\t\t$('bcoCoErr').hidden = true;\n\t\t\topenOvl('bcoCoOvl');\n\t\t}\n\n\t\tfunction showError(msg) {\n\t\t\tvar box = $('bcoCoErr');\n\t\t\tbox.textContent = msg;\n\t\t\tbox.hidden = false;\n\t\t\tif (box.scrollIntoView) box.scrollIntoView({ block: 'center', behavior: reduceMotion ? 'auto' : 'smooth' });\n\t\t}\n\n\t\tfunction cartLine(uid) {\n\t\t\tvar found = null;\n\t\t\tcart.forEach(function (l) { if (String(l.uid) === String(uid)) found = l; });\n\t\t\treturn found || {};\n\t\t}\n\n\t\tfunction changeLineQty(uid, delta) {\n\t\t\tvar line = cartLine(uid);\n\t\t\tif (!line.uid) return;\n\t\t\tvar next = line.qty + delta;\n\t\t\tif (next < 1) cart = cart.filter(function (l) { return l.uid !== line.uid; });\n\t\t\telse line.qty = Math.min(99, next);\n\t\t\tsaveCart(); renderMenu(); renderBar(); renderCheckout();\n\t\t}\n\n\t\tfunction placeOrder() {\n\t\t\tif (!IS_OPEN) { showError('Ordering is closed right now. We take orders from ' + HOURS + '.'); return; }\n\t\t\tvar name = $('bcoName').value.trim();\n\t\t\tvar table = orderType === 'takeaway' ? '' : $('bcoTable').value.trim();\n\t\t\tif (!name) { showError('Please enter your name.'); $('bcoName').focus(); return; }\n\t\t\tif (orderType === 'dinein' && !table) { showError('Please enter your table number.'); $('bcoTable').focus(); return; }\n\t\t\tif (!cart.length) return;\n\n\t\t\t\/\/ Deliberately no window.open() here. Opening WhatsApp automatically took the\n\t\t\t\/\/ guest straight off the page, so the order number they needed was never seen.\n\t\t\t\/\/ The confirmation comes first; sending is their own tap on the link below.\n\t\t\tvar btn = $('bcoPlace');\n\t\t\tbtn.disabled = true;\n\t\t\tbtn.textContent = 'Placing order\u2026';\n\n\t\t\tfetch(REST, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { 'Content-Type': 'application\/json' },\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tname: name, table: table, order_type: orderType,\n\t\t\t\t\tsession: sessionToken, website: $('bcoWebsite').value,\n\t\t\t\t\tlines: cart.map(function (l) { return { id: l.id, qty: l.qty, sel: l.sel, note: l.note }; })\n\t\t\t\t})\n\t\t\t}).then(function (res) {\n\t\t\t\treturn res.json().then(function (body) { return { ok: res.ok, body: body }; });\n\t\t\t}).then(function (out) {\n\t\t\t\tbtn.disabled = false;\n\t\t\t\tbtn.textContent = 'Place Order via WhatsApp';\n\n\t\t\t\tif (!out.ok) {\n\t\t\t\t\t\/\/ A pass can expire while the page sits open on a table all afternoon.\n\t\t\t\t\t\/\/ Fetch a fresh one and let the guest simply press the button again.\n\t\t\t\t\tif (out.body && out.body.code === 'bwork_stale_session' && !retried) {\n\t\t\t\t\t\t\/\/ A fresh pass is brand new, so retrying at once would trip the\n\t\t\t\t\t\t\/\/ minimum wait. Hold the button and let that window pass instead\n\t\t\t\t\t\t\/\/ of showing a guest who has been sitting here for an hour that\n\t\t\t\t\t\t\/\/ they were \"too quick\".\n\t\t\t\t\t\tretried = true;\n\t\t\t\t\t\tbtn.disabled = true;\n\t\t\t\t\t\tbtn.textContent = 'Placing order\u2026';\n\t\t\t\t\t\tfetchSession().then(function () {\n\t\t\t\t\t\t\tsetTimeout(placeOrder, (MIN_DWELL * 1000) + 400);\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tshowError((out.body && out.body.message) ? out.body.message : 'Could not place the order. Please try again or ask staff.');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcart = [];\n\t\t\t\tsaveCart();\n\t\t\t\trenderMenu();\n\t\t\t\trenderBar();\n\n\t\t\t\tcloseOvl('bcoCoOvl', function () {\n\t\t\t\t\t$('bcoOkNum').textContent = out.body.order_number;\n\t\t\t\t\t$('bcoOkTotal').textContent = out.body.total_label || '';\n\t\t\t\t\t$('bcoOkWa').setAttribute('href', out.body.wa_url);\n\t\t\t\t\topenOvl('bcoOkOvl');\n\t\t\t\t});\n\t\t\t}).catch(function () {\n\t\t\t\tbtn.disabled = false;\n\t\t\t\tbtn.textContent = 'Place Order via WhatsApp';\n\t\t\t\tshowError('Network problem \u2014 please check your connection and try again.');\n\t\t\t});\n\t\t}\n\n\t\t\/* ---------- events ---------- *\/\n\t\t$('bcoMenu').addEventListener('click', function (e) {\n\t\t\tvar row = e.target.closest('.bco-row');\n\t\t\tif (row) openSheet(row.getAttribute('data-id'));\n\t\t});\n\n\t\tfunction applySearch(value) {\n\t\t\tquery = value.trim();\n\t\t\t$('bcoSearchX').hidden = query === '';\n\t\t\trenderMenu(); buildTabs(); updateSpy();\n\t\t}\n\t\t$('bcoSearch').addEventListener('input', function () { applySearch(this.value); });\n\t\t$('bcoSearchX').addEventListener('click', function () {\n\t\t\t$('bcoSearch').value = '';\n\t\t\tapplySearch('');\n\t\t\t$('bcoSearch').focus();\n\t\t});\n\n\t\t$('bcoTabs').addEventListener('click', function (e) {\n\t\t\tvar tab = e.target.closest('.bco-tab');\n\t\t\tif (!tab) return;\n\t\t\tvar target = sectionEls[Number(tab.getAttribute('data-cat'))];\n\t\t\tif (!target) return;\n\t\t\tvar top = target.getBoundingClientRect().top + window.pageYOffset - stickyH() - 10;\n\t\t\twindow.scrollTo({ top: top, behavior: reduceMotion ? 'auto' : 'smooth' });\n\t\t});\n\n\t\t$('bcoSheetBody').addEventListener('change', function () { refreshSheetPrice(); validateSheet(); });\n\t\t$('bcoSheetClose').addEventListener('click', function () { backToCheckout = false; closeSheet(); });\n\t\t$('bcoSheetOvl').addEventListener('click', function (e) { if (e.target === $('bcoSheetOvl')) { backToCheckout = false; closeSheet(); } });\n\t\t$('bcoQtyUp').addEventListener('click', function () { if (sheetQty < 99) { sheetQty++; $('bcoQty').textContent = sheetQty; refreshSheetPrice(); } });\n\t\t$('bcoQtyDown').addEventListener('click', function () { if (sheetQty > 1) { sheetQty--; $('bcoQty').textContent = sheetQty; refreshSheetPrice(); } });\n\t\t$('bcoAdd').addEventListener('click', commitSheet);\n\n\t\t$('bcoBarBtn').addEventListener('click', openCheckout);\n\t\t$('bcoCoClose').addEventListener('click', function () { closeOvl('bcoCoOvl'); });\n\t\t$('bcoCoOvl').addEventListener('click', function (e) { if (e.target === $('bcoCoOvl')) closeOvl('bcoCoOvl'); });\n\t\tif (ORDER_TYPE_ON) $('bcoType').addEventListener('click', function (e) {\n\t\t\tvar btn = e.target.closest ? e.target.closest('button[data-type]') : null;\n\t\t\tif (btn) setOrderType(btn.getAttribute('data-type'));\n\t\t});\n\n\t\t$('bcoCoLines').addEventListener('click', function (e) {\n\t\t\tvar btn = e.target.closest ? e.target.closest('button') : null;\n\t\t\tif (!btn) return;\n\t\t\tvar inc = btn.getAttribute('data-inc'), dec = btn.getAttribute('data-dec'), edit = btn.getAttribute('data-edit');\n\t\t\tif (inc) { changeLineQty(inc, 1); return; }\n\t\t\tif (dec) { changeLineQty(dec, -1); return; }\n\t\t\tif (edit) {\n\t\t\t\tvar line = cartLine(edit);\n\t\t\t\tbackToCheckout = true;\n\t\t\t\tcloseOvl('bcoCoOvl', function () { openSheet(line.id, Number(edit)); });\n\t\t\t}\n\t\t});\n\n\t\t$('bcoPlace').addEventListener('click', placeOrder);\n\t\t$('bcoOkDone').addEventListener('click', function () { closeOvl('bcoOkOvl'); });\n\n\t\tdocument.addEventListener('keydown', function (e) {\n\t\t\tif (e.key !== 'Escape') return;\n\t\t\tif (!$('bcoSheetOvl').hidden) { backToCheckout = false; closeSheet(); }\n\t\t\telse if (!$('bcoCoOvl').hidden) closeOvl('bcoCoOvl');\n\t\t\telse if (!$('bcoOkOvl').hidden) closeOvl('bcoOkOvl');\n\t\t});\n\n\t\t\/* ---- pass from the server, proving this order came from this page ---- *\/\n\t\tvar sessionToken = '';\n\t\t\/\/ Guards the one automatic retry below. Declared out here on purpose: inside\n\t\t\/\/ placeOrder it would reset on every call and the retry could loop.\n\t\tvar retried = false;\n\t\tfunction fetchSession() {\n\t\t\t\/\/ Asked for after load rather than printed into the HTML: this page may be\n\t\t\t\/\/ served from a cache, and a baked-in pass would be shared and stale.\n\t\t\treturn fetch(SESSION_URL, { cache: 'no-store' })\n\t\t\t\t.then(function (r) { return r.ok ? r.json() : null; })\n\t\t\t\t.then(function (d) { if (d && d.token) sessionToken = d.token; })\n\t\t\t\t.catch(function () { \/* order still tries; the server decides *\/ });\n\t\t}\n\t\tfetchSession();\n\t\t\/\/ A tablet left open on a table all day would otherwise outlive its pass.\n\t\t\/\/ Renewing well inside the server's window keeps the stale path rare.\n\t\tsetInterval(fetchSession, 45 * 60 * 1000);\n\n\t\tloadCart();\n\t\tsetOrderType('dinein');\n\t\trenderMenu();\n\t\tbuildTabs();\n\t\trenderBar();\n\t\tupdateSpy();\n\t})();\n\t<\/script>\n\t\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"bwork-cafe-order-template.php","meta":{"footnotes":""},"class_list":["post-7","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/prelude.deartechno.com\/index.php\/wp-json\/wp\/v2\/pages\/7","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prelude.deartechno.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/prelude.deartechno.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/prelude.deartechno.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prelude.deartechno.com\/index.php\/wp-json\/wp\/v2\/comments?post=7"}],"version-history":[{"count":0,"href":"https:\/\/prelude.deartechno.com\/index.php\/wp-json\/wp\/v2\/pages\/7\/revisions"}],"wp:attachment":[{"href":"https:\/\/prelude.deartechno.com\/index.php\/wp-json\/wp\/v2\/media?parent=7"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}