:root{color-scheme:light;font-family:Segoe UI,system-ui,sans-serif;line-height:1.5;--touch-min: 44px;--page-pad: 1.5rem;--panel-radius: 12px;--border: #dde3ea;--bg: #f4f5f7;--card: #ffffff;--text: #1a1a1a;--muted: #64748b;--accent: #2563eb;--accent-soft: #eef6ff;--danger: #b91c1c;--ok: #15803d;--safe-bottom: env(safe-area-inset-bottom, 0px)}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--text)}.login-screen{min-height:100vh;display:flex;align-items:center;justify-content:center}.login-card{width:320px;display:flex;flex-direction:column;gap:.75rem;background:var(--card);border:1px solid var(--border);border-radius:var(--panel-radius);padding:1.25rem}.login-hint{margin:0;font-size:.9rem;color:var(--muted);line-height:1.4}.app-header{display:flex;align-items:center;gap:1.5rem;padding:.75rem 1.5rem;background:#0f172a;color:#fff}.app-header h1{font-size:1.1rem;margin:0}.app-header nav{display:flex;gap:.5rem}.app-header nav button{background:transparent;border:1px solid rgba(255,255,255,.3);color:#fff}.app-header nav button.active{background:#ffffff26;outline:none}.user-info{margin-left:auto;display:flex;align-items:center;gap:.75rem}.user-info .muted{color:#ffffffa6}main{padding:var(--page-pad);max-width:1400px;margin:0 auto;padding-bottom:calc(var(--page-pad) + var(--safe-bottom))}label{display:flex;flex-direction:column;gap:.25rem;font-size:.85rem;color:var(--muted)}input,select,button{font:inherit}input[type=text],input[type=search],input[type=number],input[type=date],input[type=password],input[type=email],select{width:100%;min-height:var(--touch-min);padding:.6rem .75rem;border:1px solid #cbd5e1;border-radius:8px;font-size:1rem;background:#fff;color:var(--text)}button{border:none;border-radius:8px;padding:.7rem 1.1rem;min-height:var(--touch-min);font-size:1rem;cursor:pointer;background:var(--accent);color:#fff;-webkit-tap-highlight-color:transparent}button.secondary{background:#e2e8f0;color:#1e293b}button:disabled{opacity:.6;cursor:not-allowed}.error{color:var(--danger)}.notice{color:var(--ok)}.muted{color:var(--muted)}.card{background:var(--card);border:1px solid var(--border);border-radius:var(--panel-radius);padding:1rem}.card>*+*{margin-top:.6rem}.card h2{margin:0;font-size:1rem}.admin-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1rem;align-items:start}.admin-view ul,.admin-list{list-style:none;padding:0;margin:0 0 .5rem;font-size:.85rem}.admin-list-item{display:flex;flex-direction:column;gap:.5rem;padding:.65rem 0;border-bottom:1px solid var(--border)}.admin-list-item:last-child{border-bottom:none}.admin-row-actions{display:flex;flex-wrap:wrap;gap:.35rem}.admin-row-actions button{padding:.4rem .75rem;min-height:2.25rem;font-size:.85rem}.admin-form-title{margin:.75rem 0 .25rem;font-size:.95rem}.admin-form-actions{display:flex;flex-wrap:wrap;gap:.5rem}.admin-site-select{margin:1rem 0;max-width:20rem}.badge-disabled{display:inline-block;margin-left:.35rem;padding:.1rem .45rem;border-radius:999px;background:#e5e7eb;color:var(--muted);font-size:.75rem;font-weight:600;text-transform:uppercase}.pairing-panel{margin-top:.75rem;padding-top:.75rem;border-top:1px solid var(--border)}.pairing-code{font-family:ui-monospace,Cascadia Code,Segoe UI Mono,Consolas,monospace;font-size:1.75rem;font-weight:700;letter-spacing:.12em;padding:.75rem 1rem;background:#0f172a;color:#fff;border-radius:10px;text-align:center;-webkit-user-select:all;user-select:all}.pairing-steps{margin:.75rem 0 0;padding-left:1.25rem;font-size:.85rem;color:#334155;line-height:1.45}.pairing-steps code{font-size:.8rem;word-break:break-all}.grant-printers{border:1px solid var(--border);border-radius:8px;padding:.65rem .75rem;margin:0}.grant-printers legend{padding:0 .35rem;font-size:.85rem;color:var(--muted)}.checkbox-row{display:flex;flex-direction:row;align-items:center;gap:.5rem;font-size:.9rem;color:var(--text);margin:.25rem 0}.checkbox-row input[type=checkbox]{width:auto;min-height:auto}.grant-printer-list{margin-top:.35rem;max-height:10rem;overflow:auto}.toolbar{display:flex;align-items:end;gap:1rem;margin-bottom:1rem;flex-wrap:wrap}form{display:flex;flex-direction:column;gap:.5rem}.print-view{max-width:1400px}.print-header{margin-bottom:1rem}.print-header-row{display:flex;align-items:center;justify-content:space-between;gap:.75rem;flex-wrap:wrap;margin-bottom:.75rem}.print-title{margin:0;font-size:1.35rem;line-height:1.2;color:var(--text)}.badge{background:#e8edf5;color:#334155;padding:.25rem .75rem;border-radius:999px;font-size:.875rem;white-space:nowrap}.cloud-toolbar{display:flex;align-items:center;gap:1rem;flex-wrap:wrap}.field-inline{display:flex;flex-direction:row;align-items:center;gap:.5rem;font-weight:600;font-size:.9rem;color:#334155}.field-inline select{width:auto;min-width:10rem}.station-indicator{padding:.35rem .75rem;border-radius:999px;font-size:.8rem;font-weight:600}.station-indicator.online{background:#dcfce7;color:var(--ok)}.station-indicator.online.soft{background:transparent;color:var(--muted);font-weight:500;padding-left:0;padding-right:0}.station-indicator.offline{background:#fee2e2;color:var(--danger)}.empty-banner{margin-bottom:1rem;padding:.75rem 1rem;background:#fff7ed;border:1px solid #fed7aa;border-radius:var(--panel-radius);color:#9a3412;font-size:.95rem}.printer-warning{margin:.75rem 0 0;padding:.65rem .85rem;background:#fef2f2;border:1px solid #fecaca;border-radius:8px;color:var(--danger);font-size:.9rem;font-weight:600}.print-blockers{margin:.5rem 0 0;font-size:.85rem;color:var(--muted)}.status.info{color:#1e40af}.status-detail{margin-top:.25rem;font-size:.8rem;font-weight:400;opacity:.85;font-family:ui-monospace,Cascadia Code,Segoe UI Mono,Consolas,monospace}.site-name-only{font-size:.9rem}.jobs-error{display:block;max-width:16rem;white-space:normal;color:var(--danger);font-size:.8rem;font-weight:600;line-height:1.3}.jobs-cards{display:none}.job-card{padding:.85rem 1rem;border:1px solid var(--border);border-radius:10px;background:#fff;margin-bottom:.5rem}.job-card-top{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.35rem}.job-card-meta{margin-top:.35rem;font-size:.8rem}.job-card-actions{margin-top:.5rem}.cancel-btn{padding:.3rem .6rem;font-size:.85rem}.mode-tabs{display:flex;gap:.35rem;margin-bottom:1rem;padding:.25rem;background:#e8edf5;border-radius:10px;width:fit-content;max-width:100%}.mode-tab{min-height:var(--touch-min);padding:.5rem 1rem;border:none;border-radius:8px;background:transparent;color:#475569;font:inherit;font-size:.95rem;font-weight:600;cursor:pointer}.mode-tab.active{background:#fff;color:#0f172a;box-shadow:0 1px 2px #0f172a14}.layout{display:grid;grid-template-columns:1.2fr .8fr;gap:1rem;align-items:start}.panel{background:#fff;border:1px solid var(--border);border-radius:var(--panel-radius);padding:1rem}.panel h2{margin:0 0 1rem;font-size:1.1rem;color:var(--text)}.search-row{display:flex;gap:.5rem;margin-bottom:1rem}.search-row select,.search-row input{min-height:var(--touch-min)}.search-row select{min-width:12rem;flex:0 0 auto;width:auto}.product-list{max-height:min(520px,55vh);overflow:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;display:flex;flex-direction:column;gap:.5rem;border:1px solid #eef2f6;border-radius:8px;padding:.5rem;background:#fafbfc}.product-list-empty{padding:1.25rem .75rem;text-align:center}.product-item{display:block;width:100%;flex-shrink:0;text-align:left;background:#fff;border:1px solid #e8edf5;border-radius:8px;padding:.75rem .85rem;color:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background .12s ease,border-color .12s ease;min-height:auto}.product-item:hover{background:#f8fafc}.product-item:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.product-item.selected{background:var(--accent-soft);border-color:#bfdbfe}.product-item-top{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.2rem}.product-brand{font-size:.8rem;color:var(--muted);font-weight:600}.product-offset{flex-shrink:0;font-size:.75rem;font-weight:600;color:#334155;background:#e8edf5;padding:.15rem .45rem;border-radius:999px}.product-name{font-weight:700;font-size:.95rem;line-height:1.3}.product-allergens{margin-top:.25rem;font-size:.8rem;color:#475569;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.product-barcode{margin-top:.35rem;font-size:.8rem;font-variant-numeric:tabular-nums;color:var(--muted);letter-spacing:.02em}.preview-container{position:relative;min-height:280px}.preview-container.preview-loading .label-preview,.preview-container.preview-loading .empty{opacity:.45;pointer-events:none}.preview-loader{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.75rem;color:#475569;font-size:.9rem;font-weight:500}.spinner{width:2rem;height:2rem;border:3px solid #e2e8f0;border-top-color:var(--accent);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.label-preview{position:relative;border:1px dashed #94a3b8;border-radius:8px;padding:1rem;background:#fff;min-height:280px;overflow-x:auto;-webkit-overflow-scrolling:touch}.label-preview.has-job-code{padding-left:1.75rem}.label-preview .barcode-wrap{position:relative;text-align:center;margin:.75rem 0}.label-preview .job-code{position:absolute;left:-1.35rem;top:50%;transform:translateY(-50%) rotate(90deg);transform-origin:center center;font-size:.65rem;font-weight:700;letter-spacing:.1em;font-variant-numeric:tabular-nums;color:#334155;white-space:nowrap;pointer-events:none;-webkit-user-select:text;user-select:text}.label-preview .job-code-fallback{position:relative;left:auto;top:auto;display:block;width:fit-content;margin:.5rem 0;transform:rotate(90deg);transform-origin:left center}.label-preview .logo-row{display:flex;justify-content:flex-end;align-items:flex-start;margin-bottom:.75rem}.label-preview .logo-row.has-logo{display:grid;grid-template-columns:1fr auto 1fr;align-items:start}.label-preview .logo{text-align:center;border:2px solid #111;display:block;width:fit-content;max-width:100%;padding:.35rem 1.25rem;margin:0;font-weight:700;letter-spacing:.05em}.label-preview .logo-row.has-logo .logo{grid-column:2;justify-self:center}.label-preview .logo-row.has-logo .initials{grid-column:3;justify-self:start;margin-left:.35rem}.label-preview .title{text-align:center;font-size:1.2rem;font-weight:700;margin-bottom:.25rem;overflow-wrap:anywhere}.label-preview .subtitle{text-align:center;font-size:.95rem;margin-bottom:.75rem;overflow-wrap:anywhere}.label-preview .barcode-wrap svg{max-width:100%;height:auto}.label-preview .use-by{font-size:.95rem;font-weight:600;margin:.5rem 0}.label-preview .initials{font-size:.75rem;font-weight:700;letter-spacing:.06em;margin-top:.15rem;flex-shrink:0}.label-preview .use-by-placeholder{color:var(--muted);font-style:italic}.label-preview .allergens{font-size:.85rem;font-weight:700;margin:.5rem 0;overflow-wrap:anywhere}.label-preview .ingredients{font-size:.75rem;color:#334155;white-space:pre-wrap;overflow-wrap:anywhere}.label-preview.hoagies-zones{display:flex;flex-direction:column;gap:.65rem;aspect-ratio:57 / 102;max-width:280px;margin:0 auto;padding:.75rem;font-family:DejaVu Sans,Liberation Sans,Segoe UI,sans-serif}.hz-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.5rem;min-height:3.5rem}.hz-logo{flex:0 0 28%;font-size:.7rem;color:#64748b;border:1px dashed #cbd5e1;padding:.35rem;text-align:center}.hz-logo-empty{border:none}.hz-barcode{flex:1;text-align:right}.hz-barcode svg{max-width:100%;height:auto}.hz-barcode-human{margin-top:.2rem;font-size:.65rem;letter-spacing:.04em}.hz-title{text-align:center;font-size:1.05rem;font-weight:700;line-height:1.15}.hz-allergens{border:1px solid #0f172a;margin:0 1.25rem;padding:.4rem .5rem;font-size:.85rem;font-weight:700;line-height:1.2;overflow-wrap:anywhere}.hz-ingredients{flex:1;font-size:.72rem;line-height:1.25;text-align:left;overflow-wrap:anywhere;color:#0f172a}.hz-ingredients strong{font-weight:700}.hz-rule{height:2px;background:#0f172a;margin:.15rem 0}.hz-footer{display:flex;flex-direction:column;gap:.2rem}.hz-date{font-size:.9rem;font-weight:700}.hz-meta{font-size:.75rem;color:#334155}.date-picker-row,.initials-row{margin-bottom:1rem}.initials-row label{display:flex;flex-direction:row;align-items:center;gap:.5rem;font-size:.9rem;font-weight:600;color:#334155}.initials-row input{width:4.5rem;text-transform:uppercase;letter-spacing:.06em;font-weight:700}.initials-hint{margin:.35rem 0 0;font-size:.8rem;color:var(--muted)}.date-picker-row label{display:flex;flex-direction:column;gap:.35rem;font-size:.9rem;font-weight:600;color:#334155}.date-picker-row input[type=date]{max-width:100%;width:100%}.date-picker-hint{margin:.5rem 0 0;color:var(--muted);font-size:.85rem}.actions{display:flex;gap:.5rem;align-items:center;margin-top:1rem;flex-wrap:wrap}.qty-control{display:flex;align-items:center;gap:.35rem}.qty-caption{font-weight:600;font-size:.95rem;margin-right:.15rem;color:var(--text)}.qty-btn{display:inline-flex;align-items:center;justify-content:center;width:2.75rem;height:2.75rem;min-width:var(--touch-min);min-height:var(--touch-min);padding:0;border:1px solid var(--border);border-radius:10px;background:#f1f5f9;color:#0f172a;font-size:1.75rem;font-weight:600;line-height:1;cursor:pointer;-webkit-user-select:none;user-select:none}.qty-btn:hover:not(:disabled){background:#e2e8f0}.qty-btn:disabled{opacity:.45;cursor:not-allowed}.qty-input{width:3.75rem;min-height:var(--touch-min);text-align:center;font-size:1.15rem;font-weight:700;font-variant-numeric:tabular-nums}.printer-label{display:flex;flex-direction:row;align-items:center;gap:.4rem;font-weight:600;font-size:.95rem;color:#334155}.printer-label select{width:auto;min-width:8rem;min-height:var(--touch-min)}.printer-setup{margin:0 0 1rem;padding:.75rem 1rem;background:#fff;border:1px solid var(--border);border-radius:var(--panel-radius)}.printer-setup summary{cursor:pointer;font-weight:600;min-height:var(--touch-min);display:flex;align-items:center;color:var(--text)}.printer-setup-note,.printer-setup .muted{margin:.5rem 0;color:var(--muted);font-size:.9rem}.printer-setup-actions{display:flex;flex-wrap:wrap;gap:.5rem}.print-btn{flex:1;min-width:8rem;min-height:var(--touch-min)}.status{margin-top:.75rem;font-size:.9rem}.status.error{color:var(--danger)}.status.success{color:var(--ok)}.barcode-error{margin-top:.35rem;font-size:.8rem;font-weight:600;color:var(--danger)}.empty{color:var(--muted);font-style:italic}.jobs-panel{overflow:hidden}.jobs-header{display:flex;align-items:baseline;justify-content:space-between;gap:.75rem;flex-wrap:wrap;margin-bottom:.75rem}.jobs-header h2{margin:0}.jobs-count{color:var(--muted);font-size:.9rem}.jobs-toolbar{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center;margin-bottom:.75rem}.jobs-filter{display:flex;flex-direction:row;align-items:center;gap:.5rem;flex:1 1 16rem;font-weight:600;color:#334155}.jobs-filter input{flex:1;min-width:0}.jobs-table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:10px;background:#fff}.jobs-table{width:100%;border-collapse:collapse;font-size:.9rem}.jobs-table th,.jobs-table td{padding:.65rem .75rem;text-align:left;border-bottom:1px solid var(--border);vertical-align:top;white-space:nowrap}.jobs-table th{background:#f8fafc;color:#475569;font-weight:600;font-size:.8rem;text-transform:uppercase;letter-spacing:.02em}.jobs-table tbody tr:last-child td{border-bottom:none}.jobs-id,.jobs-mono{font-family:ui-monospace,Cascadia Code,Segoe UI Mono,Consolas,monospace;font-variant-numeric:tabular-nums}.jobs-product{font-weight:600;white-space:normal;max-width:14rem}.jobs-brand{color:var(--muted);font-size:.8rem;white-space:normal}.jobs-empty{text-align:center;color:var(--muted);padding:1.5rem .75rem!important}.job-status{display:inline-block;padding:.15rem .5rem;border-radius:999px;font-size:.8rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em}.job-status-queued,.job-status-dispatched{background:#fef3c7;color:#92400e}.job-status-sent{background:#ecfdf5;color:#047857}.job-status-failed{background:#fef2f2;color:#b91c1c}.job-status-cancelled{background:#e5e7eb;color:var(--muted)}.online{color:var(--ok)}.offline{color:var(--danger)}@media(max-width:960px){:root{--page-pad: .85rem}main:has(.print-view-active){padding-bottom:calc(5.5rem + var(--safe-bottom))}.layout{grid-template-columns:1fr;gap:.85rem}.preview-panel{scroll-margin-top:.75rem}.search-row{flex-direction:column}.search-row select{min-width:0;width:100%}.product-list{max-height:min(420px,50dvh)}.preview-container,.label-preview{min-height:200px}.label-preview .title{font-size:1.05rem}.print-actions.print-actions-active{position:fixed;left:0;right:0;bottom:0;z-index:20;margin:0;padding:.75rem var(--page-pad) calc(.75rem + var(--safe-bottom));background:#fffffff5;border-top:1px solid var(--border);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);box-shadow:0 -4px 20px #0f172a0f}.print-btn{flex:1 1 auto}.app-header{flex-wrap:wrap;gap:.75rem}.user-info{margin-left:0;width:100%;justify-content:space-between}.jobs-table-wrap{display:none}.jobs-cards{display:block}}@media(max-width:480px){.print-header-row{align-items:flex-start;flex-direction:column}.mode-tabs{width:100%}.mode-tab{flex:1}}
