:root{--paper: #f4ecdd;--paper-2: #f8f2e6;--paper-3: #fdf9f0;--ink: #2a2320;--ink-2: #4d443e;--ink-3: #6f635a;--ink-muted: #a1958a;--ember: #d64518;--ember-soft: #f0c9b8;--herb: #3f7d3f;--herb-soft: #cfe2c7;--amber: #d9a441;--amber-soft: #f0dcae;--rule: rgba(42, 35, 32, .14);--rule-soft: rgba(42, 35, 32, .08);--rule-strong: rgba(42, 35, 32, .28);--focus: #d64518;--field: #efe6d5;--field-border: rgba(42, 35, 32, .2);--stub-bg: #14181a;--stub-bg-2: #1b2124;--phosphor: #6fe3c4;--stub-ink: #b9c6c2;--stub-rule: rgba(111, 227, 196, .22);--sans: "Epilogue", ui-sans-serif, system-ui, -apple-system, sans-serif;--display: "Fraunces", Georgia, serif;--mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, monospace;--s1: 4px;--s2: 8px;--s3: 12px;--s4: 16px;--s6: 24px;--s8: 32px;--s12: 48px;--r-sm: 6px;--r-md: 10px;--r-lg: 14px;--ease: cubic-bezier(.2, .6, .2, 1);--fast: .12s;--med: .22s}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:var(--sans);color:var(--ink);background-color:var(--paper);background-image:radial-gradient(color-mix(in srgb,var(--ink) 3%,transparent) 1px,transparent 1px),radial-gradient(color-mix(in srgb,var(--ink) 2%,transparent) 1px,transparent 1px);background-size:22px 22px,14px 14px;background-position:0 0,7px 7px;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;font-size:15px;line-height:1.5}h1,h2,h3{font-family:var(--display);font-weight:600;color:var(--ink);margin:0;letter-spacing:-.01em}button{font-family:var(--sans);cursor:pointer}a{color:var(--ember);text-decoration:none}a:hover{text-decoration:underline}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}.app{min-height:100%;display:flex;flex-direction:column}.app-header{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:var(--s4);padding:var(--s3) var(--s6);background-color:var(--paper-2);border-bottom:1px solid var(--rule)}.brand{display:flex;align-items:baseline;gap:var(--s2);font-family:var(--display);font-weight:700;font-size:22px;letter-spacing:-.02em;color:var(--ink);cursor:pointer;-webkit-user-select:none;user-select:none}.brand .brand-mark{color:var(--ember)}.brand .brand-sub{font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3);padding-left:var(--s2);border-left:1px solid var(--rule);align-self:center}.nav{display:flex;gap:var(--s1);margin-left:var(--s4)}.nav button{background:none;border:1px solid transparent;border-radius:var(--r-sm);padding:var(--s2) var(--s3);font-size:13px;font-weight:600;color:var(--ink-2);transition:background var(--fast) var(--ease),color var(--fast) var(--ease)}.nav button:hover{background-color:var(--paper-3);color:var(--ink)}.nav button.active{color:var(--ember);border-color:var(--rule);background-color:var(--paper-3)}.header-spacer{flex:1}.who{display:flex;align-items:center;gap:var(--s3);font-size:13px;color:var(--ink-2)}.who .who-name{font-weight:600;color:var(--ink)}.app-main{flex:1;width:100%;max-width:1080px;margin:0 auto;padding:var(--s8) var(--s6) 96px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--s2);font-family:var(--sans);font-weight:600;font-size:14px;border-radius:var(--r-sm);border:1px solid var(--rule-strong);background-color:var(--paper-3);color:var(--ink);padding:var(--s2) var(--s4);transition:transform var(--fast) var(--ease),background var(--fast) var(--ease),border-color var(--fast) var(--ease),color var(--fast) var(--ease)}.btn:hover{background-color:var(--paper-2);border-color:var(--ink-3)}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}.btn-primary{background-color:var(--ember);border-color:var(--ember);color:var(--paper-3)}.btn-primary:hover{background-color:color-mix(in srgb,var(--ember) 88%,var(--ink));border-color:color-mix(in srgb,var(--ember) 88%,var(--ink));color:var(--paper-3)}.btn-ghost{background:none;border-color:var(--rule);color:var(--ink-2)}.btn-ghost:hover{background-color:var(--paper-3);color:var(--ink)}.btn-lg{padding:var(--s3) var(--s6);font-size:15px}.btn-block{width:100%}.field-label{display:block;font-size:12px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-3);margin-bottom:var(--s2)}.field{width:100%;font-family:var(--sans);font-size:15px;color:var(--ink);background-color:var(--field);border:1px solid var(--field-border);border-radius:var(--r-sm);padding:var(--s3) var(--s3);transition:border-color var(--fast) var(--ease),background var(--fast) var(--ease)}.field::placeholder{color:var(--ink-muted)}.field:focus{outline:none;border-color:var(--focus);background-color:var(--paper-3)}.pill{display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;padding:3px 8px;border-radius:999px;border:1px solid var(--rule);color:var(--ink-2);background-color:var(--paper-3)}.section-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:var(--s6);gap:var(--s4)}.section-head h1{font-size:30px}.eyebrow{font-family:var(--mono);font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-3);margin-bottom:var(--s2)}.state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:var(--s2);padding:var(--s12) var(--s6);color:var(--ink-3)}.state .state-title{font-family:var(--display);font-size:18px;color:var(--ink-2)}.state.error .state-title{color:var(--ember)}.state .state-sub{font-size:14px;max-width:380px}.skeleton{background:linear-gradient(90deg,var(--paper-2) 25%,var(--paper-3) 50%,var(--paper-2) 75%);background-size:200% 100%;animation:shimmer 1.3s var(--ease) infinite;border-radius:var(--r-sm)}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@media (max-width: 720px){.app-main{padding:var(--s6) var(--s4) 88px}.app-header{padding:var(--s3) var(--s4);flex-wrap:wrap}.nav{order:3;width:100%;margin-left:0}}@media (prefers-reduced-motion: reduce){*{animation-duration:.001ms!important;transition-duration:.001ms!important}}.menu-layout{display:grid;grid-template-columns:1fr 320px;gap:var(--s8);align-items:start}.board{display:flex;flex-direction:column;gap:var(--s6)}.board-shop{background-color:var(--paper-2);border:1px solid var(--rule);border-radius:var(--r-md);overflow:hidden}.board-shop-head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--s3);padding:var(--s4) var(--s6);background-color:var(--paper-3);border-bottom:1px dashed var(--rule)}.board-shop-head .shop-name{font-family:var(--display);font-weight:600;font-size:20px}.board-shop-head .shop-cuisine{font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3)}.menu-line{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:var(--s3);padding:var(--s3) var(--s6);border-top:1px solid var(--rule-soft);transition:background var(--fast) var(--ease)}.menu-line:first-of-type{border-top:none}.menu-line:hover{background-color:var(--paper-3)}.menu-line .item-name{font-weight:500;color:var(--ink);position:relative;overflow:hidden;white-space:nowrap}.menu-line .item-name:after{content:"";position:absolute;bottom:4px;margin-left:var(--s2);width:100%;border-bottom:1px dotted var(--rule)}.menu-line .item-price{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:14px;color:var(--ink-2);text-align:right;min-width:64px}.stepper{display:inline-flex;align-items:center;border:1px solid var(--rule-strong);border-radius:var(--r-sm);overflow:hidden;background-color:var(--paper-3)}.stepper button{width:30px;height:30px;border:none;background:none;color:var(--ink-2);font-size:16px;font-weight:600;line-height:1;display:grid;place-items:center;transition:background var(--fast) var(--ease),color var(--fast) var(--ease)}.stepper button:hover:not(:disabled){background-color:var(--ember);color:var(--paper-3)}.stepper button:disabled{color:var(--ink-muted);cursor:not-allowed}.stepper .qty{font-family:var(--mono);font-variant-numeric:tabular-nums;min-width:26px;text-align:center;font-size:14px;font-weight:600;color:var(--ink)}.order-pad{position:sticky;top:88px;background-color:var(--paper-2);border:1px solid var(--rule);border-radius:var(--r-md);overflow:hidden}.order-pad-head{padding:var(--s4) var(--s4) var(--s3);border-bottom:1px dashed var(--rule);background-color:var(--paper-3)}.order-pad-head .pad-title{font-family:var(--display);font-weight:600;font-size:17px}.order-pad-head .pad-sub{font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);margin-top:2px}.order-pad-body{padding:var(--s3) var(--s4);max-height:46vh;overflow-y:auto}.pad-row{display:grid;grid-template-columns:auto 1fr auto;gap:var(--s2);align-items:baseline;padding:var(--s2) 0;font-size:14px;border-bottom:1px solid var(--rule-soft)}.pad-row .pad-qty{font-family:var(--mono);color:var(--ember);font-weight:600}.pad-row .pad-name{color:var(--ink-2)}.pad-row .pad-cost{font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--ink);text-align:right}.pad-empty{padding:var(--s6) var(--s2);text-align:center;color:var(--ink-muted);font-size:13px}.order-pad-foot{padding:var(--s4);border-top:1px solid var(--rule);background-color:var(--paper-3)}.pad-total{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:var(--s3)}.pad-total .label{font-weight:600;font-size:14px}.pad-total .amt{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:20px;font-weight:600;color:var(--ink)}.pad-hint{font-size:12px;color:var(--ink-3);margin-top:var(--s2);text-align:center}.ticket{--perf: 10px;position:relative;max-width:440px;margin:0 auto;background-color:var(--paper-3);border:1px solid var(--rule);border-top:none;border-radius:0 0 var(--r-md) var(--r-md);padding:var(--s6) var(--s6) var(--s6);box-shadow:inset 0 0 0 1px var(--rule-soft)}.ticket:before{content:"";position:absolute;left:-1px;right:-1px;top:calc(var(--perf) * -1);height:var(--perf);background:linear-gradient(-45deg,transparent 50%,var(--paper-3) 50%) 0 0 / var(--perf) var(--perf) repeat-x,linear-gradient(45deg,transparent 50%,var(--paper-3) 50%) 0 0 / var(--perf) var(--perf) repeat-x;filter:drop-shadow(0 -1px 0 var(--rule))}.ticket-head{text-align:center;padding-bottom:var(--s4);border-bottom:2px dashed var(--rule)}.ticket-brand{font-family:var(--display);font-weight:700;font-size:18px;letter-spacing:.02em}.ticket-shop{font-family:var(--sans);font-weight:600;font-size:15px;color:var(--ink-2);margin-top:2px}.ticket-meta{display:flex;justify-content:space-between;font-family:var(--mono);font-size:11px;color:var(--ink-3);margin-top:var(--s3);letter-spacing:.04em}.ticket-id{font-family:var(--mono);font-size:12px;letter-spacing:.1em;color:var(--ink-2);margin-top:var(--s2)}.ticket-lines{padding:var(--s4) 0;border-bottom:2px dashed var(--rule)}.ticket-line{display:grid;grid-template-columns:28px 1fr auto;gap:var(--s2);align-items:baseline;font-family:var(--mono);font-size:13px;padding:var(--s1) 0;color:var(--ink)}.ticket-line .tl-qty{color:var(--ember);font-weight:600}.ticket-line .tl-name{font-family:var(--sans);color:var(--ink-2)}.ticket-line .tl-cost{font-variant-numeric:tabular-nums;text-align:right}.ticket-total{display:flex;justify-content:space-between;align-items:baseline;padding:var(--s4) 0 var(--s2)}.ticket-total .label{font-family:var(--display);font-weight:600;font-size:16px}.ticket-total .amt{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:22px;font-weight:600}.stamps{margin-top:var(--s4);padding-top:var(--s4);border-top:2px dashed var(--rule)}.stamps-title{font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-3);text-align:center;margin-bottom:var(--s4)}.stamp-grid{display:flex;flex-wrap:wrap;gap:var(--s3);justify-content:center}.stamp{--stamp-color: var(--ink-muted);position:relative;display:inline-flex;align-items:center;justify-content:center;text-align:center;min-width:92px;padding:var(--s2) var(--s3);font-family:var(--mono);font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--stamp-color);border:2px solid var(--stamp-color);border-radius:var(--r-sm);transform:rotate(-3deg);opacity:.4;transition:opacity var(--med) var(--ease),color var(--med) var(--ease),border-color var(--med) var(--ease),background var(--med) var(--ease)}.stamp:nth-child(2n){transform:rotate(2.5deg)}.stamp:nth-child(3n){transform:rotate(-1.5deg)}.stamp.inked{opacity:1;background-color:color-mix(in srgb,var(--stamp-color) 12%,transparent)}.stamp.inked.tone-ember{--stamp-color: var(--ember)}.stamp.inked.tone-amber{--stamp-color: var(--amber)}.stamp.inked.tone-herb{--stamp-color: var(--herb)}.stamp.current{animation:stampPulse 1.8s var(--ease) infinite}@keyframes stampPulse{0%,to{box-shadow:0 0 color-mix(in srgb,var(--stamp-color) 40%,transparent)}50%{box-shadow:0 0 0 4px color-mix(in srgb,var(--stamp-color) 0%,transparent)}}.ticket-actions{margin-top:var(--s6);display:flex;flex-direction:column;gap:var(--s3)}.ticket-done{text-align:center;font-family:var(--mono);font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--herb);padding:var(--s3);border:1px dashed var(--herb);border-radius:var(--r-sm);background-color:var(--herb-soft)}.notif-ledger{margin-top:var(--s6);padding-top:var(--s4);border-top:2px dashed var(--rule)}.notif-ledger h3{font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-3);margin-bottom:var(--s3)}.notif-row{display:flex;gap:var(--s3);align-items:baseline;font-family:var(--mono);font-size:12px;padding:var(--s1) 0;color:var(--ink-2)}.notif-row .notif-time{color:var(--ink-3);white-space:nowrap}.notif-row .notif-type{color:var(--ink)}.stub-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:var(--s4)}.stub{text-align:left;background-color:var(--paper-2);border:1px solid var(--rule);border-left:3px solid var(--rule-strong);border-radius:var(--r-sm);padding:var(--s4);transition:border-color var(--fast) var(--ease),background var(--fast) var(--ease),transform var(--fast) var(--ease);cursor:pointer;display:block;width:100%;font:inherit}.stub:hover{background-color:var(--paper-3);border-left-color:var(--ember);transform:translate(2px)}.stub-top{display:flex;justify-content:space-between;align-items:baseline;gap:var(--s2)}.stub-shop{font-family:var(--display);font-weight:600;font-size:16px}.stub-total{font-family:var(--mono);font-variant-numeric:tabular-nums;font-weight:600;color:var(--ink)}.stub-id{font-family:var(--mono);font-size:11px;color:var(--ink-3);letter-spacing:.06em;margin-top:2px}.stub-foot{display:flex;justify-content:space-between;align-items:center;margin-top:var(--s3);padding-top:var(--s3);border-top:1px dashed var(--rule)}.stub-date{font-family:var(--mono);font-size:11px;color:var(--ink-3)}.status-tag{font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;padding:2px 7px;border-radius:999px;border:1px solid currentColor}.status-tag.tone-ember{color:var(--ember);background-color:var(--ember-soft)}.status-tag.tone-amber{color:color-mix(in srgb,var(--amber) 62%,var(--ink));background-color:var(--amber-soft)}.status-tag.tone-herb{color:var(--herb);background-color:var(--herb-soft)}.login-wrap{min-height:100%;display:grid;place-items:center;padding:var(--s8) var(--s4)}.login-card{width:100%;max-width:400px;background-color:var(--paper-3);border:1px solid var(--rule);border-radius:var(--r-md);padding:var(--s8);box-shadow:inset 0 0 0 1px var(--rule-soft)}.login-brand{text-align:center;margin-bottom:var(--s6)}.login-brand .lb-name{font-family:var(--display);font-weight:700;font-size:34px;letter-spacing:-.02em}.login-brand .lb-name .brand-mark{color:var(--ember)}.login-brand .lb-sub{font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-3);margin-top:var(--s2)}.login-form{display:flex;flex-direction:column;gap:var(--s4)}.login-sign{margin-top:var(--s2);padding-top:var(--s4);border-top:1px dashed var(--rule);text-align:center;font-family:var(--mono);font-size:11px;color:var(--ink-3);letter-spacing:.05em}.form-error{font-size:13px;color:var(--ember);background-color:var(--ember-soft);border:1px solid var(--ember);border-radius:var(--r-sm);padding:var(--s2) var(--s3)}.stub-tab{position:fixed;right:var(--s6);bottom:var(--s6);z-index:40;display:inline-flex;align-items:center;gap:var(--s2);font-family:var(--mono);font-size:12px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--phosphor);background-color:var(--stub-bg);border:1px solid var(--stub-rule);border-radius:var(--r-sm);padding:var(--s3) var(--s4);cursor:pointer;transition:transform var(--fast) var(--ease),background var(--fast) var(--ease)}.stub-tab:hover{transform:translateY(-2px);background-color:var(--stub-bg-2)}.stub-tab .flip-icon{font-size:14px;transform:rotateY(0);transition:transform var(--med) var(--ease)}.stub-tab:hover .flip-icon{transform:rotateY(180deg)}.stub-scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:45;background-color:color-mix(in srgb,var(--stub-bg) 42%,transparent);opacity:0;animation:fadeIn var(--med) var(--ease) forwards}@keyframes fadeIn{to{opacity:1}}.stub-panel{position:fixed;z-index:50;right:0;top:0;bottom:0;width:min(440px,92vw);background-color:var(--stub-bg);color:var(--stub-ink);border-left:1px solid var(--stub-rule);display:flex;flex-direction:column;font-family:var(--mono);transform:translate(100%);animation:slideIn var(--med) var(--ease) forwards;background-image:repeating-linear-gradient(0deg,color-mix(in srgb,var(--phosphor) 4%,transparent) 0px,color-mix(in srgb,var(--phosphor) 4%,transparent) 1px,transparent 1px,transparent 3px)}@keyframes slideIn{to{transform:translate(0)}}.stub-panel-head{padding:var(--s4) var(--s6);border-bottom:1px solid var(--stub-rule);display:flex;align-items:flex-start;justify-content:space-between;gap:var(--s3)}.stub-panel-head .sh-title{font-size:13px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--phosphor)}.stub-panel-head .sh-sub{font-size:10px;letter-spacing:.1em;color:var(--stub-ink);opacity:.7;margin-top:4px}.stub-close{background:none;border:1px solid var(--stub-rule);color:var(--stub-ink);border-radius:var(--r-sm);width:30px;height:30px;display:grid;place-items:center;font-size:15px;transition:color var(--fast) var(--ease),border-color var(--fast) var(--ease)}.stub-close:hover{color:var(--phosphor);border-color:var(--phosphor)}.stub-badges{display:flex;flex-wrap:wrap;gap:var(--s2);padding:var(--s4) var(--s6);border-bottom:1px dashed var(--stub-rule)}.stub-badge{display:inline-flex;align-items:center;gap:6px;font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;padding:4px 9px;border-radius:999px;border:1px solid var(--stub-rule);color:var(--stub-ink)}.stub-badge .dot{width:7px;height:7px;border-radius:999px;background-color:var(--stub-ink)}.stub-badge.on{color:var(--phosphor);border-color:var(--phosphor);background-color:color-mix(in srgb,var(--phosphor) 8%,transparent)}.stub-badge.on .dot{background-color:var(--phosphor);box-shadow:0 0 6px var(--phosphor)}.stub-badge.warn{color:var(--amber);border-color:var(--amber)}.stub-badge.warn .dot{background-color:var(--amber)}.stub-body{flex:1;overflow-y:auto;padding:var(--s4) var(--s6) var(--s8)}.stub-group-label{font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--phosphor);opacity:.8;margin:var(--s4) 0 var(--s2)}.stub-group-label:first-child{margin-top:0}.kv{display:grid;grid-template-columns:132px 1fr;gap:var(--s3);padding:7px 0;border-bottom:1px solid var(--stub-rule);font-size:12px}.kv .k{color:var(--stub-ink);opacity:.68;letter-spacing:.04em}.kv .v{color:var(--phosphor);word-break:break-all;font-variant-numeric:tabular-nums}.stub-foot{padding:var(--s4) var(--s6);border-top:1px solid var(--stub-rule);font-size:10px;letter-spacing:.06em;color:var(--stub-ink);opacity:.6;display:flex;justify-content:space-between;align-items:center}.live-dot{display:inline-flex;align-items:center;gap:6px;color:var(--phosphor);text-transform:uppercase}.live-dot .dot{width:6px;height:6px;border-radius:999px;background-color:var(--phosphor);box-shadow:0 0 6px var(--phosphor);animation:blink 2s var(--ease) infinite}@keyframes blink{0%,to{opacity:1}50%{opacity:.25}}.stub-state{padding:var(--s8) var(--s6);text-align:center;color:var(--stub-ink);opacity:.75;font-size:12px;letter-spacing:.06em}.stub-state.err{color:var(--amber);opacity:1}@media (max-width: 720px){.menu-layout{grid-template-columns:1fr}.order-pad{position:static}}
