:root{--red:#c8102e;--red2:#a00d25;--navy:#14213d;--navy2:#1f3160;--gold:#d4a72c;--gold2:#f0c75e;--cream:#fff6e5;--cream2:#fbe9c6;--ink:#1a1a1a;--muted:#6b6b6b;--ok:#1f9d55;--warn:#e08a00;--err:#c8102e;--line:#e8dcc3;--r:14px;--tap:52px;
--f:"Sarabun","Noto Sans Thai","Leelawadee UI",Tahoma,system-ui,sans-serif}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;height:100%;font-family:var(--f);color:var(--ink);background:var(--cream);font-size:16px}
button{font-family:inherit;font-size:inherit;cursor:pointer}
input,select,textarea{font-family:inherit;font-size:16px}
.app{display:flex;flex-direction:column;height:100%}
.top{display:flex;align-items:center;gap:10px;background:var(--navy);color:#fff;padding:6px 12px;min-height:58px;box-shadow:0 2px 6px #0003;z-index:5}
.top .logo{height:42px;width:42px;border-radius:50%;object-fit:cover;border:2px solid var(--gold)}
.top .brand{font-weight:800;letter-spacing:.3px;line-height:1.05}.top .brand small{display:block;font-weight:400;color:var(--gold2);font-size:12px}
.top .sp{flex:1}.top .who{font-size:13px;text-align:right;line-height:1.15}.top .who b{color:var(--gold2)}
.pill{display:inline-flex;align-items:center;gap:6px;border-radius:999px;padding:4px 10px;font-size:13px;background:#ffffff1a}
.pill.off{background:var(--red)}.pill.q{background:var(--warn)}
.nav{display:flex;gap:6px;overflow-x:auto;background:var(--navy2);padding:6px 8px;scrollbar-width:none}
.nav::-webkit-scrollbar{display:none}
.nav button{flex:0 0 auto;border:0;border-radius:12px;background:transparent;color:#dfe6f7;padding:8px 14px;min-height:46px;font-weight:600;display:flex;align-items:center;gap:6px}
.nav button.on{background:var(--gold);color:var(--navy)}
main{flex:1;overflow:auto;position:relative}
.btn{border:0;border-radius:12px;min-height:var(--tap);padding:0 18px;font-weight:700;background:#fff;color:var(--navy);box-shadow:0 1px 0 #0001,inset 0 0 0 1.5px var(--line);display:inline-flex;align-items:center;justify-content:center;gap:8px;white-space:nowrap}
.btn:active{transform:scale(.97)}.btn.primary{background:var(--red);color:#fff;box-shadow:0 3px 0 var(--red2)}.btn.navy{background:var(--navy);color:#fff}.btn.gold{background:var(--gold);color:var(--navy);box-shadow:0 3px 0 #a9831d}
.btn.ok{background:var(--ok);color:#fff}.btn.ghost{background:transparent;box-shadow:inset 0 0 0 1.5px currentColor}.btn.sm{min-height:40px;padding:0 12px;font-size:14px}.btn.lg{min-height:64px;font-size:20px}.btn.block{width:100%}
.btn[disabled]{opacity:.45;pointer-events:none}
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.row.end{justify-content:flex-end}.row.between{justify-content:space-between}.col{display:flex;flex-direction:column;gap:10px}
.grow{flex:1}.muted{color:var(--muted)}.right{text-align:right}.center{text-align:center}.mono{font-variant-numeric:tabular-nums}
.card{background:#fff;border-radius:var(--r);box-shadow:0 1px 3px #0000001a;padding:14px}
.inp{width:100%;min-height:48px;border-radius:12px;border:1.5px solid var(--line);padding:0 12px;background:#fff}.inp.big{min-height:58px;font-size:20px}
textarea.inp{padding:10px;min-height:80px}
label.f{display:flex;flex-direction:column;gap:4px;font-size:14px;color:var(--muted)}
.chips{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0}.chip{border:0;border-radius:999px;padding:8px 14px;min-height:40px;background:var(--cream2);color:var(--navy);font-weight:600}.chip.on{background:var(--navy);color:#fff}
.badge{display:inline-block;border-radius:8px;padding:2px 8px;font-size:12px;font-weight:700;background:var(--cream2);color:var(--navy)}
.badge.red{background:var(--red);color:#fff}.badge.gold{background:var(--gold);color:var(--navy)}.badge.ok{background:var(--ok);color:#fff}.badge.navy{background:var(--navy);color:#fff}.badge.warn{background:var(--warn);color:#fff}
/* login */
.login{min-height:100%;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle at 20% 10%,#22356a 0,#14213d 55%,#0c1427 100%);padding:64px 20px 20px;overflow:auto}
.login{align-items:safe center}
[hidden]{display:none!important}
.login .box{background:var(--cream);border-radius:22px;padding:22px;width:min(420px,100%);box-shadow:0 20px 50px #0007;text-align:center}
.login img.l{width:96px;height:96px;border-radius:50%;border:3px solid var(--gold);object-fit:cover;margin-top:-64px;background:#fff}
.login .mascot{position:absolute;right:max(10px,calc(50% - 360px));bottom:20px;width:180px;pointer-events:none}
.pin-dots{font-size:30px;letter-spacing:10px;min-height:44px;color:var(--navy)}
.pinpad{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:12px 0}
.key{min-height:68px;border:0;border-radius:16px;background:#fff;font-size:28px;font-weight:700;color:var(--navy);box-shadow:0 3px 0 var(--line)}
.key:active{background:var(--gold2)}
.tabs{display:flex;gap:6px;margin-bottom:10px}.tabs button{flex:1;border:0;border-radius:12px;min-height:46px;background:var(--cream2);font-weight:700;color:var(--navy)}.tabs button.on{background:var(--navy);color:#fff}
/* floor */
.floor{display:flex;flex-direction:column;height:100%}
.floorbar{display:flex;gap:8px;padding:10px;align-items:center;flex-wrap:wrap}
.floorwrap{flex:1;position:relative;overflow:auto;margin:0 10px 10px;border-radius:18px;background:repeating-linear-gradient(0deg,#0000 0 39px,#e9dcc2 39px 40px),repeating-linear-gradient(90deg,#0000 0 39px,#e9dcc2 39px 40px),#fff8ea;box-shadow:inset 0 0 0 2px var(--line)}
.canvas{position:relative;transform-origin:0 0}
.tbl{position:absolute;border:0;border-radius:14px;background:#fff;box-shadow:0 2px 0 #0002,inset 0 0 0 2px #d9c9a6;display:flex;flex-direction:column;align-items:center;justify-content:center;font-weight:800;color:var(--navy);padding:4px;text-align:center;line-height:1.1;user-select:none;touch-action:none}
.tbl.round{border-radius:50%}.tbl.stool{border-radius:50%}.tbl.booth{border-radius:24px 24px 8px 8px}
.tbl .n{font-size:22px}.tbl .s{font-size:12px;font-weight:600;opacity:.85}.tbl .t{font-size:13px;font-weight:700;margin-top:2px}
.tbl.busy{background:var(--gold2);box-shadow:0 3px 0 #b48d22}.tbl.cooking{background:#ffb37a;box-shadow:0 3px 0 #c76a1e}.tbl.ready{background:#7ddc9f;box-shadow:0 3px 0 #2f9a57;animation:pulse 1.2s infinite}
.tbl.billreq{background:var(--red);color:#fff;box-shadow:0 3px 0 var(--red2)}.tbl.billed{background:var(--navy);color:#fff}.tbl.booked{box-shadow:inset 0 0 0 4px #7b4bd6}
.tbl.sel{outline:4px solid var(--red);outline-offset:2px}.tbl .flag{position:absolute;top:-8px;right:-8px;font-size:18px}
.deco{position:absolute;background:#8b6b3d;border-radius:4px;color:#fff;font-size:12px;display:flex;align-items:center;justify-content:center}
.deco.wall{background:#5b5b5b}.deco.door{background:#c9a56a}.deco.bar{background:#7a4b22}.deco.stage{background:#3d2a5c}
@keyframes pulse{50%{transform:scale(1.04)}}
.legend{display:flex;gap:10px;flex-wrap:wrap;font-size:13px}.legend i{display:inline-block;width:14px;height:14px;border-radius:4px;vertical-align:-2px;margin-right:4px}
.bookings{display:flex;gap:8px;overflow-x:auto;padding:0 10px 8px}.bk{flex:0 0 auto;background:#fff;border-radius:12px;padding:8px 12px;box-shadow:inset 0 0 0 2px #7b4bd6;font-size:14px}
/* order */
.order{display:grid;grid-template-columns:1fr 400px;height:100%}
.menu{display:flex;flex-direction:column;min-width:0;border-right:2px solid var(--line)}
.cats{display:flex;gap:6px;overflow-x:auto;padding:8px;background:#fff;border-bottom:1px solid var(--line)}
.cats .chip{flex:0 0 auto}
.items{flex:1;overflow:auto;padding:10px;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;align-content:start}
.it{border:0;border-radius:14px;background:#fff;box-shadow:0 2px 0 var(--line);padding:0;text-align:left;display:flex;flex-direction:column;overflow:hidden;min-height:118px;position:relative}
.it .ph{height:70px;background:linear-gradient(135deg,var(--cream2),#fff);display:flex;align-items:center;justify-content:center;font-size:30px}
.it .ph img{width:100%;height:100%;object-fit:cover}
.it .nm{padding:6px 8px 0;font-weight:700;font-size:14px;line-height:1.2;color:var(--navy);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.it .pr{padding:2px 8px 8px;font-size:14px;color:var(--red);font-weight:800}
.it .setp{color:#fff;background:var(--warn);border-radius:6px;padding:1px 6px;font-size:11px}
.it.oos{opacity:.45}.it.oos::after{content:"หมด";position:absolute;top:8px;left:8px;background:var(--red);color:#fff;border-radius:6px;padding:2px 8px;font-weight:800}
.it .cnt{position:absolute;top:6px;right:6px;background:var(--red);color:#fff;border-radius:999px;min-width:28px;height:28px;display:flex;align-items:center;justify-content:center;font-weight:800}
.ticket{display:flex;flex-direction:column;background:#fff;min-height:0}
.ticket .hd{padding:10px 12px;background:var(--cream2);display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.ticket .hd h2{margin:0;font-size:22px;color:var(--navy)}
.lines{flex:1;overflow:auto;padding:6px 0}
.sec{padding:6px 12px;font-size:13px;font-weight:800;color:var(--muted);text-transform:uppercase;display:flex;justify-content:space-between}
.ln{position:relative;display:flex;gap:8px;align-items:flex-start;padding:10px 12px;border-bottom:1px solid #f1e7d2;background:#fff;touch-action:pan-y;transition:transform .16s}
.ln.draft{background:#fffdf6}.ln.swiping{background:#ffe5e8}.ln .q{font-weight:800;min-width:30px;color:var(--navy);font-size:18px}
.ln .d{flex:1;min-width:0}.ln .d b{display:block}.ln .m{font-size:13px;color:var(--muted)}.ln .note{font-size:13px;color:var(--red);font-weight:700}
.ln .amt{font-weight:800;white-space:nowrap}.ln.void{opacity:.5;text-decoration:line-through}
.qbtn{width:40px;height:40px;border-radius:10px;border:0;background:var(--cream2);font-size:22px;font-weight:800;color:var(--navy)}
.st{font-size:11px;border-radius:6px;padding:1px 6px;font-weight:800}.st.sent{background:#ffe3c2;color:#8a4b00}.st.preparing{background:#ffd1a1;color:#8a4b00}.st.ready{background:#c9f2d7;color:#126b36}.st.served{background:#e6e6e6;color:#555}.st.held{background:#e3e7ff;color:#2b3b9a}.st.queued{background:#ffe1e1;color:#a00}
.swipehint{font-size:12px;color:var(--muted);padding:2px 12px}
.tot{padding:10px 12px;border-top:2px solid var(--line)}.tot .r{display:flex;justify-content:space-between;padding:2px 0}.tot .g{font-size:26px;font-weight:900;color:var(--navy)}
.acts{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;padding:10px 12px;background:var(--cream2)}
/* pay */
.pay{display:grid;grid-template-columns:1.1fr 1fr;gap:12px;padding:12px;height:100%}
.pay .bill{display:flex;flex-direction:column;min-height:0}.pay .bill .lines{background:#fff;border-radius:var(--r)}
.toggles{display:flex;gap:8px;flex-wrap:wrap}.tg{border:0;border-radius:12px;min-height:48px;padding:0 14px;font-weight:800;background:#eee;color:#666}.tg.on{background:var(--ok);color:#fff}
.ln.sel{background:#fff3c4}.ln .ck{width:26px;height:26px;border-radius:7px;border:2px solid var(--navy);display:flex;align-items:center;justify-content:center;font-weight:900;flex:0 0 auto}.ln.sel .ck{background:var(--navy);color:#fff}.ln.paid{opacity:.5}
.tender{display:flex;flex-direction:column;gap:10px}
.due{background:var(--navy);color:#fff;border-radius:var(--r);padding:14px}.due .v{font-size:40px;font-weight:900;color:var(--gold2)}
.methods{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.mth{border:0;border-radius:14px;min-height:72px;background:#fff;font-weight:800;color:var(--navy);box-shadow:inset 0 0 0 2px var(--line);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px}.mth span{font-size:24px}.mth.on{background:var(--gold);box-shadow:none}
.keypad{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.keypad .key{min-height:56px;font-size:22px}
.qrbox{background:#fff;border-radius:var(--r);padding:12px;text-align:center}.qrbox canvas,.qrbox img{width:240px;height:240px;image-rendering:pixelated}
/* kds */
.kds{padding:10px;display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px;align-content:start}
.tk{background:#fff;border-radius:14px;overflow:hidden;box-shadow:0 2px 6px #0002;display:flex;flex-direction:column}
.tk .h{padding:8px 12px;background:var(--navy);color:#fff;display:flex;justify-content:space-between;align-items:center}.tk .h b{font-size:22px}
.tk.warn .h{background:var(--warn)}.tk.late .h{background:var(--red);animation:pulse 1.5s infinite}
.tk .li{padding:8px 12px;border-bottom:1px solid #eee;font-size:18px;font-weight:700;cursor:pointer}.tk .li.preparing{background:#fff1dc}.tk .li.ready{background:#d9f7e4;text-decoration:line-through;color:#2f7a4a}
.tk .li small{display:block;font-weight:600;color:var(--muted);font-size:14px}.tk .li .note{color:var(--red);font-size:16px}
.tk .f{padding:8px;display:flex;gap:8px}
/* generic */
.page{padding:12px;display:flex;flex-direction:column;gap:12px}
.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:12px}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px}
.kpi{background:#fff;border-radius:var(--r);padding:12px;box-shadow:0 1px 3px #0001}.kpi .l{font-size:13px;color:var(--muted)}.kpi .v{font-size:26px;font-weight:900;color:var(--navy)}.kpi .d{font-size:13px;font-weight:700}.kpi .d.up{color:var(--ok)}.kpi .d.dn{color:var(--red)}
table.t{width:100%;border-collapse:collapse;font-size:14px}table.t th{text-align:left;background:var(--cream2);padding:8px;position:sticky;top:0}table.t td{padding:8px;border-bottom:1px solid #f0e6d0}table.t td.n,table.t th.n{text-align:right;font-variant-numeric:tabular-nums}
table.t tr.click{cursor:pointer}table.t tr.click:hover{background:#fff6dc}
.scroll{max-height:380px;overflow:auto}
.heat{display:grid;grid-template-columns:40px repeat(24,1fr);gap:2px;font-size:11px}.heat div{height:22px;border-radius:3px;display:flex;align-items:center;justify-content:center}
.banner{background:linear-gradient(90deg,var(--navy),#28407a);color:#fff;border-radius:var(--r);padding:10px 14px;display:flex;gap:10px;align-items:center}
.banner.match{background:linear-gradient(90deg,#0b6b3a,#14213d)}
.modal-wrap{position:fixed;inset:0;background:#0008;display:flex;align-items:center;justify-content:center;z-index:50;padding:12px}
.modal{background:var(--cream);border-radius:20px;padding:18px;width:min(560px,100%);max-height:92vh;overflow:auto;box-shadow:0 20px 60px #0008}.modal.wide{width:min(980px,100%)}.modal h3{margin:0 0 10px;color:var(--navy)}
.pinmodal{width:min(380px,100%);text-align:center}
#toasts{position:fixed;left:50%;bottom:18px;transform:translateX(-50%);display:flex;flex-direction:column;gap:8px;z-index:60;align-items:center}
.toast,.snackbar{background:var(--navy);color:#fff;border-radius:12px;padding:12px 16px;font-weight:700;box-shadow:0 6px 20px #0005;transition:opacity .3s}.toast.err{background:var(--red)}.toast.warn{background:var(--warn)}.toast.out{opacity:0}
.snackbar{display:flex;gap:14px;align-items:center}.snackbar .btn{color:var(--gold2)}
.shake{animation:shake .3s}@keyframes shake{25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}
.empty{padding:40px;text-align:center;color:var(--muted)}.empty img{width:140px}
.sheet{position:fixed;left:0;right:0;bottom:0;background:var(--cream);border-radius:20px 20px 0 0;box-shadow:0 -10px 30px #0004;z-index:40;max-height:88vh;overflow:auto;padding:14px}
.fab{position:fixed;right:16px;bottom:16px;z-index:30}
.matrix{overflow:auto;max-height:70vh}.matrix table td,.matrix table th{text-align:center;padding:6px}.matrix table td:first-child{text-align:left}
.compliance{background:#fff3cd;border:2px solid #e0a800;border-radius:12px;padding:10px;font-size:14px}
/* phone / waiter */
@media (max-width:820px){
 .order{grid-template-columns:1fr}.order .ticket{position:fixed;left:0;right:0;bottom:0;max-height:72vh;border-radius:18px 18px 0 0;box-shadow:0 -8px 30px #0005;z-index:20;transform:translateY(calc(100% - 64px));transition:transform .25s}
 .order .ticket.open{transform:none}.order .menu{padding-bottom:70px;border:0}
 .items{grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:8px;padding:8px}.it{min-height:104px}.it .ph{height:54px}
 .pay{grid-template-columns:1fr}.methods{grid-template-columns:repeat(3,1fr)}.top .brand small{display:none}.nav button{padding:6px 10px}
 .acts{grid-template-columns:repeat(3,1fr)}
}
body[data-mode=waiter] .top{min-height:52px}
@media print{.top,.nav,.noprint{display:none!important}main{overflow:visible}.card{box-shadow:none;border:1px solid #ccc}}
@media (max-width:820px){.banner.match .fx{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}}
.bk{cursor:pointer;border:0;font:inherit;color:inherit}.bk.done{opacity:.55;box-shadow:inset 0 0 0 2px #2e9d5a}
.aibub{position:fixed;z-index:60;width:54px;height:54px;border-radius:50%;border:0;background:linear-gradient(145deg,#1b2a4a,#7b4bd6);color:#fff;box-shadow:0 6px 18px rgba(0,0,0,.28);font-size:26px;display:grid;place-items:center;touch-action:none;cursor:grab;opacity:.92;padding:0}
.aibub:active{cursor:grabbing}.aibub .bd{position:absolute;top:-4px;right:-4px;min-width:22px;height:22px;border-radius:11px;background:#e23b3b;font-size:12px;display:grid;place-items:center;box-shadow:0 0 0 2px #fff}
.aipanel{position:fixed;z-index:61;left:12px;bottom:12px;width:min(380px,calc(100vw - 24px));max-height:min(560px,calc(100vh - 90px));overflow:auto;background:#fffaf0;border-radius:18px;box-shadow:0 12px 40px rgba(0,0,0,.3);padding:14px;display:flex;flex-direction:column;gap:8px}
.aimatch{background:#10391f;color:#fff;border-radius:12px;padding:10px}.aimatch.muted{background:#eef3ec;color:#333}
.aichat{display:flex;flex-direction:column;gap:6px;max-height:300px;overflow:auto}.aichat .me{align-self:flex-end;background:#1b2a4a;color:#fff;border-radius:12px 12px 2px 12px;padding:7px 10px;max-width:85%}.aichat .ai{align-self:flex-start;background:#fff;border-radius:12px 12px 12px 2px;padding:7px 10px;max-width:90%;white-space:pre-wrap;box-shadow:inset 0 0 0 1px #eadfca}
@media (max-width:600px){.aipanel{left:6px;right:6px;bottom:6px;width:auto}}
.tk .li.cut{font-weight:800;font-size:17px;text-align:center;border-radius:8px;padding:6px}.tk .li.cut.yes{background:#ffe08a;color:#3a2a00}.tk .li.cut.no{background:#e8e8e8;color:#222}
.tk .li .rp1{float:right;border:0;background:transparent;font-size:16px;cursor:pointer;opacity:.6;padding:0 2px}.tk .li .rp1:hover{opacity:1}
