@font-face{font-family:Sarabun;src:url(./Sarabun-Regular-Dax1MQhh.ttf)format("truetype");font-weight:400;font-display:block}@font-face{font-family:Sarabun;src:url(./Sarabun-Bold-BgATxLmo.ttf)format("truetype");font-weight:700;font-display:block}:root{--ground:#edf0ee;--surface:#fff;--ink:#15191c;--muted:#555c62;--line:#cfd6d2;--line-soft:#e6eae7;--accent:#0b6e4f;--accent-soft:#e3efe9;--danger:#c62828;--warn:#a15c00;color:var(--ink);background:var(--ground);font-family:-apple-system,Thonburi,Noto Sans Thai,system-ui,sans-serif}body{margin:0}.app{max-width:1160px;margin:0 auto;padding:16px 20px 24px}header{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:16px;display:flex}header h1{margin:0 auto 0 0;font-size:18px}header select{min-width:0;max-width:100%}.tabs{display:none}main{grid-template:"fill preview""dock preview"1fr/minmax(420px,1fr) 432px;align-items:start;gap:16px 24px;display:grid}.fill{background:var(--surface);border-radius:12px;flex-direction:column;grid-area:fill;gap:14px;padding:16px 18px;display:flex}.preview{flex-direction:column;grid-area:preview;align-items:center;gap:8px;display:flex;position:sticky;top:16px}.dock{z-index:4;background:var(--surface);border:1px solid var(--line);border-radius:12px;flex-direction:column;grid-area:dock;gap:8px;padding:12px 16px;display:flex;position:sticky;bottom:12px;box-shadow:0 4px 18px #00000012}.dock-row{align-items:center;gap:14px;display:flex}.fill-head{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.fill-head h2{margin:0 auto 0 0;font-size:16px}.receipt-form{flex-direction:column;gap:16px;display:flex}.fields{grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:12px;display:grid}.fields input{box-sizing:border-box;width:100%;min-width:0}.req{color:var(--danger)}.kept{color:#6b7277;font-weight:400}.err{color:var(--danger);font-size:12px}input.invalid{border-color:var(--danger);background:#fff5f5}details.shop{border:1px solid var(--line-soft);border-radius:10px;padding:10px 12px}details.shop[open]{padding-bottom:12px}details.shop summary{cursor:pointer;align-items:center;gap:8px;font-size:14px;font-weight:600;display:flex}details.shop summary:before{content:"›";color:var(--muted);transition:transform .15s}details.shop[open] summary:before{transform:rotate(90deg)}details.shop summary::-webkit-details-marker{display:none}.summary-logo{object-fit:contain;max-width:70px;height:22px}details.shop .hint{margin:6px 0 10px}.logo-row{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:12px;display:flex}.logo-row img{border:1px solid var(--line-soft);background:#fff;border-radius:4px;max-width:180px;max-height:56px}.logo-row .logo-empty{color:#6b7277;border:1px dashed var(--line);border-radius:4px;padding:14px 18px;font-size:12px}.logo-row .hint{flex-basis:100%;margin:0}.file-button{border:1px solid var(--line);cursor:pointer;color:var(--ink);border-radius:8px;align-items:center;padding:8px 14px;font-size:14px;display:inline-flex}.file-button input{display:none}ul.saved{border:1px solid var(--line-soft);border-radius:10px;max-height:260px;margin:0;padding:0;list-style:none;overflow:auto}ul.saved li{border-top:1px solid var(--line-soft);align-items:center;gap:8px;padding:8px 10px;display:flex}ul.saved li:first-child{border-top:none}ul.saved li.current{background:var(--accent-soft)}.saved-text{flex-direction:column;min-width:0;margin-right:auto;display:flex}.saved-text small{color:#6b7277}.items{flex-direction:column;gap:6px;display:flex}.items-head,.item-row{grid-template-columns:minmax(0,1fr) 128px 104px 88px 36px;align-items:center;gap:8px;display:grid}.items-head{color:var(--muted);font-size:12px;font-weight:600}.item-row input.name,.item-row input.price{box-sizing:border-box;width:100%;min-width:0}.item-row input.price{text-align:right}.item-row.add-on input.name{background:#f7f9f8;width:calc(100% - 22px);margin-left:22px}.stepper{border:1px solid var(--line);background:#fff;border-radius:8px;display:flex;overflow:hidden}.stepper button{width:36px;color:var(--ink);background:#f3f5f4;border:none;border-radius:0;padding:0;font-size:18px}.stepper button:active{background:var(--accent-soft)}.stepper input{border:none;border-left:1px solid var(--line-soft);border-right:1px solid var(--line-soft);text-align:center;border-radius:0;width:100%;min-width:0}.stepper input.invalid{background:#fff5f5}.num{text-align:right;font-variant-numeric:tabular-nums}.amount{white-space:nowrap;font-weight:600}.row-err{grid-column:1/-1}.items-foot{align-items:center;gap:10px;margin-top:4px;display:flex}button.add{color:var(--accent);border-color:var(--accent);font-weight:600}button.icon{color:#8a9196;background:0 0;border:none;padding:2px 8px;font-size:20px}button.icon:hover{color:var(--danger)}.totals{color:var(--muted);flex-direction:column;gap:2px;margin-right:auto;font-size:14px;display:flex}.totals b{color:var(--ink);font-variant-numeric:tabular-nums;font-size:22px}.totals .short,.totals .short b{color:var(--danger)}.copies{flex-direction:row;align-items:center;gap:6px}.copies input{width:56px}.dock button.primary{padding:10px 28px;font-size:17px;font-weight:600}.kbd{opacity:.75;font-size:13px;font-weight:400}button,select,input{font:inherit}button{border:1px solid var(--line);color:var(--ink);cursor:pointer;background:#fff;border-radius:8px;padding:8px 14px}button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}button:disabled{opacity:.5;cursor:default}button.ghost{background:0 0}button.on{background:var(--accent-soft);border-color:var(--accent)}button:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible,.file-button:focus-within{outline:2px solid var(--accent);outline-offset:1px}input,select{border:1px solid var(--line);color:var(--ink);background:#fff;border-radius:8px;padding:7px 9px}label{color:var(--muted);flex-direction:column;gap:4px;font-size:13px;display:flex}label.check{flex-direction:row;align-items:center}.settings{background:var(--surface);border-radius:12px;flex-wrap:wrap;align-items:flex-end;gap:12px;margin-bottom:16px;padding:14px;display:flex}.settings input{width:130px}.settings label.check input{width:auto}.status{margin:0;font-size:14px}.status.ok{color:#1a7f37}.status.error{color:var(--danger)}.status.busy{color:var(--muted)}.status .resend{min-height:0;margin-left:8px;padding:4px 10px;font-size:13px}.rawbt-hint{flex-basis:100%;font-size:13px}.warnings{color:var(--warn);margin:0;padding-left:18px;font-size:13px}.hint{color:#6b7277;margin:0;font-size:12px}.hint.center{text-align:center}.paper{background:#fff;width:432px;padding:18px 0;box-shadow:0 1px 3px #00000026,0 8px 24px #0000000f}.paper img{width:100%;display:block}.placeholder{text-align:center;border:2px dashed var(--line);box-sizing:border-box;color:#6b7277;background:#fff;border-radius:8px;justify-content:center;align-items:center;width:432px;min-height:200px;padding:20px;display:flex}.placeholder.error{color:var(--danger);border-color:#e6a5a5}.crash{max-width:900px;color:var(--danger);background:#fff;border-radius:10px;margin:40px auto;padding:20px}.crash pre{white-space:pre-wrap;color:#333;font-size:12px}.modal{z-index:10;background:#0000008c;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.modal-body{background:#fff;border-radius:12px;flex-direction:column;width:min(480px,100%);max-height:100%;display:flex;overflow:hidden}.modal-head{border-bottom:1px solid var(--line-soft);align-items:center;gap:8px;padding:8px 8px 8px 14px;display:flex}.modal-head b{margin-right:auto;font-size:14px}.modal-scroll{overflow:auto}.modal-scroll img{width:100%;display:block}@media (width<=760px){.app{padding:0 0 calc(120px + env(safe-area-inset-bottom))}header{background:var(--surface);border-bottom:1px solid var(--line-soft);gap:8px;margin:0;padding:10px 14px}header h1{flex-basis:100%;font-size:16px}header select{flex:1 1 0}.printer-host{display:none}.settings{margin:12px}.tabs{z-index:5;background:var(--ground);gap:4px;margin:0;padding:8px 12px;display:flex;position:sticky;top:0}.tabs button{color:var(--muted);background:#dfe4e1;border:none;flex:1;font-weight:600}.tabs button.on{background:var(--surface);color:var(--ink);box-shadow:0 1px 2px #0000001f}main{padding:0 10px;display:block}main.show-fill .preview,main.show-preview .fill{display:none}.fill{padding:14px 12px}.preview{position:static}.paper,.placeholder{width:100%;max-width:432px}.dock{padding:10px 14px calc(12px + env(safe-area-inset-bottom));border-bottom:none;border-radius:16px 16px 0 0;position:fixed;bottom:0;left:0;right:0}.kbd,.desktop-only{display:none}input,select,button{min-height:44px;font-size:16px}.fields{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.fill-head h2{flex-basis:100%}.items-head{display:none}.item-row{border-top:1px solid var(--line-soft);grid-template-columns:132px minmax(0,1fr) auto;grid-template-areas:"name name remove""qty price amount";padding:10px 0}.item-row .name{grid-area:name}.item-row .stepper{grid-area:qty}.item-row .price{grid-area:price}.item-row .amount{grid-area:amount;min-width:72px}.item-row .remove{grid-area:remove}.stepper button{width:40px}}.entry{box-sizing:border-box;min-height:100dvh;padding:32px 24px calc(24px + env(safe-area-inset-bottom));text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:10px;display:flex}.entry-icon{border-radius:16px;width:64px;height:64px}.entry h1{margin:4px 0 0;font-size:20px}.entry p{color:var(--muted);margin:0}.entry-dots{gap:14px;margin:18px 0 4px;display:flex}.entry-dots span{border:2px solid var(--accent);box-sizing:border-box;border-radius:50%;width:14px;height:14px}.entry-dots span.on{background:var(--accent)}.entry-dots.wrong{animation:.35s entry-shake}.entry-dots.wrong span{border-color:var(--danger)}.entry-msg{min-height:1.4em;font-size:14px}.entry-msg.err{color:var(--danger)}.keypad{grid-template-columns:repeat(3,76px);gap:14px 22px;margin-top:10px;display:grid}.keypad .key{background:var(--surface);width:76px;height:76px;font:inherit;color:var(--ink);touch-action:manipulation;-webkit-tap-highlight-color:transparent;border:none;border-radius:50%;font-size:28px;box-shadow:0 1px 2px #0000001f}.keypad .key:active{background:var(--accent-soft)}.keypad .key.back{box-shadow:none;color:var(--muted);background:0 0;font-size:24px}.keypad .key:disabled{opacity:.5}@keyframes entry-shake{0%,to{transform:none}25%{transform:translate(-8px)}75%{transform:translate(8px)}}
