:root{--brand:#14b8a6;--brand-strong:#0d9488;--brand-soft:rgba(20,184,166,0.14);--bg:#0a1120;--panel:#111c30;--panel-2:#16233c;--raised:#1e2f4d;--line:#26385a;--text:#e9eef6;--muted:#93a3bd;--faint:#5f6f8c;--success:#22c55e;--warning:#f59e0b;--danger:#ef4444;--info:#3b82f6;--vacant:#22c55e;--occupied:#3b82f6;--billed:#a855f7;--cleaning:#f59e0b;--radius:12px;--radius-sm:9px;--shadow:0 6px 24px rgba(0,0,0,0.28);--font:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",system-ui,sans-serif;--mono:"JetBrains Mono",ui-monospace,"SF Mono",Menlo,monospace}*{box-sizing:border-box}body,html{margin:0;padding:0}body{background:radial-gradient(1200px 600px at 100% -10%,rgba(20,184,166,.08),transparent 60%),var(--bg);color:var(--text);font-family:var(--font);-webkit-font-smoothing:antialiased;min-height:100vh}h1,h2,h3{margin:0;font-weight:700;letter-spacing:-.01em}a{color:inherit;text-decoration:none}.mono{font-family:var(--mono);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.muted{color:var(--muted)}button{font-family:inherit;min-height:44px;border:1px solid transparent;border-radius:var(--radius-sm);background:var(--brand);color:#04201c;font-size:15px;font-weight:700;cursor:pointer;padding:0 18px;transition:filter .12s ease,transform .05s ease,background .12s ease}button:hover:not(:disabled){filter:brightness(1.06)}button:active:not(:disabled){transform:translateY(1px)}button:disabled{opacity:.42;cursor:not-allowed}button.secondary{background:var(--raised)}button.ghost,button.secondary{color:var(--text);border-color:var(--line)}button.ghost{background:transparent}button.ghost:hover:not(:disabled){background:var(--panel-2);filter:none}button.danger{background:var(--danger);color:#fff}button.success{background:var(--success);color:#04240f}button.block{width:100%}button.lg{min-height:56px;font-size:17px}button.sm{min-height:38px;font-size:14px;padding:0 12px}input,select,textarea{min-height:44px;width:100%;border-radius:var(--radius-sm);border:1px solid var(--line);background:var(--panel-2);color:var(--text);font-family:inherit;font-size:15px;padding:0 14px;outline:none;transition:border-color .12s ease,box-shadow .12s ease}input:focus,select:focus,textarea:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}input::placeholder{color:var(--faint)}label.field{display:grid;grid-gap:6px;gap:6px;font-size:13px;color:var(--muted)}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:16px}button.card{color:var(--text)}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius)}.grid{display:grid;grid-gap:12px;gap:12px}hr{border:none;border-top:1px solid var(--line);margin:8px 0}.badge{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:700;letter-spacing:.02em;text-transform:capitalize}.badge.open{background:rgba(59,130,246,.16);color:#93c5fd}.badge.kot_sent{background:rgba(245,158,11,.16);color:#fcd34d}.badge.ready{background:rgba(34,197,94,.18);color:#86efac;animation:badge-ready-pulse 1.8s ease-in-out infinite}@keyframes badge-ready-pulse{0%,to{background-color:rgba(34,197,94,.14)}50%{background-color:rgba(34,197,94,.28)}}.badge.served{background:rgba(20,184,166,.16);color:#5eead4}.badge.billed{background:rgba(168,85,247,.16);color:#d8b4fe}.badge.settled{background:rgba(34,197,94,.16);color:#86efac}.nav{position:-webkit-sticky;position:sticky;top:0;z-index:40;gap:8px;padding:10px 20px;background:rgba(10,17,32,.86);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}.brand,.nav{display:flex;align-items:center}.brand{gap:10px;font-weight:800;letter-spacing:4px;font-size:18px}.brand .mark{display:inline-grid;place-items:center;width:34px;height:34px;border-radius:8px;background:var(--brand);color:#04201c;font-weight:900;letter-spacing:0;font-size:15px}.nav .spacer{flex:1 1}.navlink{padding:8px 14px;border-radius:9px;color:var(--muted);font-weight:600;font-size:14px}.navlink:hover{color:var(--text);background:var(--panel-2)}.navlink.active{color:var(--text);background:var(--brand-soft)}.nav .who{color:var(--muted);font-size:13px;margin-right:4px}.container{max-width:1280px;margin:0 auto;padding:22px 20px 60px}.row{gap:10px}.between,.row{display:flex;align-items:center}.between{justify-content:space-between}.spinner{width:26px;height:26px;border:3px solid var(--line);border-top-color:var(--brand);border-radius:50%;animation:spin .8s linear infinite;margin:40px auto}@keyframes spin{to{transform:rotate(1turn)}}.training-banner{top:0;z-index:1000;background:repeating-linear-gradient(45deg,#f59e0b,#f59e0b 16px,#b45309 0,#b45309 32px);color:#1f1300;font-weight:800;text-align:center;padding:8px 12px;font-size:14px;letter-spacing:.02em}.print-fail-banner,.training-banner{position:-webkit-sticky;position:sticky}.print-fail-banner{top:56px;z-index:39;background:linear-gradient(180deg,rgba(239,68,68,.22),rgba(239,68,68,.12));border-bottom:2px solid var(--danger);padding:10px 20px;animation:pulse-fail 1.4s ease-in-out infinite}@keyframes pulse-fail{0%,to{background-color:rgba(239,68,68,.12)}50%{background-color:rgba(239,68,68,.24)}}.print-fail-title{font-weight:800;color:#fecaca;font-size:14px;margin-bottom:8px;letter-spacing:.02em}.print-fail-list{display:grid;grid-gap:6px;gap:6px}.print-fail-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;font-size:13px}.chip{min-height:36px;padding:0 14px;border-radius:999px;border:1px solid var(--line);background:transparent;color:var(--muted);font-size:13px;font-weight:700}.chip:hover:not(:disabled){background:var(--panel-2);color:var(--text);filter:none}.chip.active{background:var(--brand-soft);border-color:var(--brand);color:var(--text)}.badge.ok{background:rgba(34,197,94,.16);color:#86efac}.badge.warn{background:rgba(245,158,11,.16);color:#fcd34d}.badge.danger{background:rgba(239,68,68,.16);color:#fca5a5}.badge.needs_cleaning{background:rgba(245,158,11,.16);color:#fcd34d}.inline-ok{color:var(--success);background:rgba(34,197,94,.1);border:1px solid rgba(34,197,94,.35);border-radius:var(--radius-sm)}.inline-err,.inline-ok{padding:8px 12px;font-size:13px;font-weight:600}.inline-err{color:#fca5a5;background:rgba(239,68,68,.1);border:1px solid rgba(239,68,68,.35);border-radius:var(--radius-sm)}.table-wrap{overflow-x:auto}.data-table{width:100%;border-collapse:collapse;font-size:13px;min-width:560px}.data-table th{text-align:left;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.06em}.data-table td,.data-table th{padding:8px 12px;border-bottom:1px solid var(--line);white-space:nowrap}.data-table tr:last-child td{border-bottom:none}.menu-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));grid-gap:14px;gap:14px}.menu-card{padding:0;overflow:hidden;display:flex;flex-direction:column;transition:border-color .12s ease,transform .12s ease}.menu-card:hover{border-color:var(--raised)}.menu-card-media{aspect-ratio:16/10;position:relative;display:grid;place-items:center;overflow:hidden;background:var(--panel-2)}.menu-card-media img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.menu-card-initials{font-size:34px;font-weight:900;letter-spacing:2px;color:rgba(255,255,255,.88);text-shadow:0 2px 10px rgba(0,0,0,.35);-webkit-user-select:none;-moz-user-select:none;user-select:none}.menu-card-emoji{position:absolute;bottom:8px;right:10px;font-size:22px;filter:drop-shadow(0 2px 4px rgba(0,0,0,.4))}.menu-card-body{padding:10px 12px 12px;display:grid;grid-gap:8px;gap:8px;flex:1 1;align-content:start}.stock-row-head{display:flex;align-items:center;gap:12px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.stock-row-head:hover{color:var(--brand)}.conn-dot{width:10px;height:10px;border-radius:50%;display:inline-block;flex:none}.conn-dot.online{background:#22c55e;box-shadow:0 0 6px rgba(34,197,94,.7)}.conn-dot.offline{background:var(--warning);box-shadow:0 0 6px rgba(245,158,11,.7);animation:conn-blink 1.2s ease-in-out infinite}.conn-dot.syncing{background:transparent;border:2px solid #93c5fd;border-top-color:transparent;animation:conn-spin .8s linear infinite}@keyframes conn-blink{0%,to{opacity:1}50%{opacity:.35}}@keyframes conn-spin{to{transform:rotate(1turn)}}.conn-pending{background:var(--warning);color:#1c1203;font-weight:800;font-size:11px;border-radius:999px;min-width:18px;height:18px;display:inline-grid;place-items:center;padding:0 5px}.offline-banner{position:-webkit-sticky;position:sticky;top:56px;z-index:40;display:flex;align-items:center;gap:8px;background:linear-gradient(180deg,rgba(245,158,11,.22),rgba(245,158,11,.12));border-bottom:2px solid var(--warning);color:#fcd34d;font-weight:700;font-size:13px;padding:8px 20px;letter-spacing:.02em}.offline-banner.syncing{background:linear-gradient(180deg,rgba(59,130,246,.18),rgba(59,130,246,.08));border-bottom-color:#3b82f6;color:#93c5fd}.sync-issues-banner{position:-webkit-sticky;position:sticky;top:56px;z-index:40;background:linear-gradient(180deg,rgba(239,68,68,.22),rgba(239,68,68,.12));border-bottom:2px solid var(--danger);color:#fecaca;font-size:13px;padding:10px 20px}.offline-toast{position:fixed;bottom:18px;left:50%;transform:translateX(-50%);z-index:210;background:rgba(245,158,11,.18);border:1px solid var(--warning);color:#fcd34d;font-weight:700;font-size:14px;border-radius:10px;padding:10px 16px;cursor:pointer;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);width:max-content;max-width:calc(100vw - 32px)}.pinpad{display:grid;grid-gap:8px;gap:8px}.pinpad-display{text-align:center;font-size:22px;letter-spacing:8px}.pinpad-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:8px;gap:8px}.pinpad-key{min-height:52px;font-size:20px;font-weight:700;background:var(--raised);color:var(--text);border:1px solid var(--line)}.pinpad-key:hover:not(:disabled){background:var(--panel-2);filter:none}.pinpad-key.aux{background:transparent;color:var(--muted);font-size:16px}.online-chip{min-height:34px;padding:0 12px;margin-right:10px;border-radius:999px;border:1px solid var(--warning);background:rgba(245,158,11,.14);color:#fcd34d;font-size:13px;font-weight:800;white-space:nowrap}.online-chip:hover:not(:disabled){background:rgba(245,158,11,.24);filter:none}.online-chip.alerting{animation:online-chip-pulse 1.2s ease-in-out infinite}@keyframes online-chip-pulse{0%,to{box-shadow:0 0 0 0 rgba(245,158,11,.55)}50%{box-shadow:0 0 0 7px rgba(245,158,11,0)}}html[data-theme=light]{--brand:#0d9488;--brand-strong:#0f766e;--brand-soft:rgba(13,148,136,0.12);--bg:#f2f5f9;--panel:#ffffff;--panel-2:#eef2f7;--raised:#e3e9f2;--line:#d3dce8;--text:#14202f;--muted:#55677f;--faint:#8a99ad;--shadow:0 6px 24px rgba(15,32,56,0.12)}html[data-theme=light] body{background:radial-gradient(1200px 600px at 100% -10%,rgba(13,148,136,.07),transparent 60%),var(--bg)}html[data-theme=light] .nav{background:rgba(255,255,255,.88)}html[data-theme=light] button{color:#ffffff}html[data-theme=light] .chip,html[data-theme=light] .pinpad-key,html[data-theme=light] button.card,html[data-theme=light] button.ghost,html[data-theme=light] button.secondary{color:var(--text)}html[data-theme=light] .brand .mark,html[data-theme=light] button.success{color:#ffffff}html[data-theme=light] .pinpad-key.aux{color:var(--muted)}html[data-theme=light] .online-chip{color:#92400e;background:rgba(245,158,11,.16)}html[data-theme=light] .offline-banner,html[data-theme=light] .offline-toast{color:#92400e}html[data-theme=light] .print-fail-banner{border-bottom-color:var(--danger)}html[data-theme=light] .print-fail-title,html[data-theme=light] .sync-issues-banner{color:#b91c1c}html[data-theme=light] .badge.open{background:rgba(59,130,246,.14);color:#1d4ed8}html[data-theme=light] .badge.kot_sent{background:rgba(245,158,11,.16);color:#b45309}html[data-theme=light] .badge.ready{background:rgba(34,197,94,.18);color:#15803d}html[data-theme=light] .badge.served{background:rgba(20,184,166,.14);color:#0f766e}html[data-theme=light] .badge.billed{background:rgba(168,85,247,.14);color:#7e22ce}html[data-theme=light] .badge.ok,html[data-theme=light] .badge.settled{background:rgba(34,197,94,.14);color:#15803d}html[data-theme=light] .badge.warn{background:rgba(245,158,11,.16);color:#b45309}html[data-theme=light] .badge.danger{background:rgba(239,68,68,.14);color:#b91c1c}html[data-theme=light] .badge.needs_cleaning{background:rgba(245,158,11,.16);color:#b45309}html[data-theme=light] .inline-err{color:#b91c1c}html[data-theme=light] .inline-ok{color:#15803d}