*{box-sizing:border-box}
[hidden]{display:none!important}
body{margin:0;background:#fff;color:#222;font:15px system-ui,sans-serif}
main{max-width:680px;margin:auto;padding:16px}
h1{font-size:21px;margin:0 0 8px}h2{font-size:17px;margin:0 0 12px}
p{margin:8px 0}.hint,small,.empty,#excelStatus,#liveStatus,#scanStats{color:#666;font-size:13px;line-height:1.6}
small{display:block}label{display:block;margin-bottom:8px}
.panel{padding:14px 0;border-bottom:1px solid #ddd;margin-bottom:12px}
button,input,select{font:inherit;max-width:100%}
button{padding:10px 12px;border:1px solid #bbb;border-radius:5px;background:#fff;color:#222;min-height:44px;cursor:pointer;margin:4px 4px 4px 0;touch-action:manipulation}
button:disabled{opacity:.45;cursor:default}button:focus-visible,input:focus-visible{outline:3px solid #1673d0;outline-offset:2px}
.tabs{display:flex;gap:6px;margin:16px 0 10px}.tabs button{flex:1;margin:0;padding:10px 4px}
.tabs button[aria-pressed=true],#readImage{background:#222;color:#fff;border-color:#222}
#readImage{width:100%;margin:4px 0 10px}
#strength{width:100%;margin:4px 0}select{padding:8px}#sheetLabel{margin-top:10px}
#camera{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
#liveView,#frozen{position:relative;width:100%;overflow:hidden;border:1px solid #ddd;border-radius:5px}
#liveCanvas,#snapshot{display:block;width:100%;height:auto}#liveCanvas{background:#eee;cursor:pointer;touch-action:manipulation}
#boxes,#dots{position:absolute;inset:0;pointer-events:none}
.code-box{position:absolute;pointer-events:auto;border:2px solid #16833d;background:rgba(20,180,80,.18);padding:0;margin:0;border-radius:2px;min-height:22px}
.code-box.missing-box{border-color:#b16b00;background:rgba(255,180,50,.2)}
.code-box:disabled{border-style:dashed;opacity:.65}
.box-label{position:absolute;top:100%;left:0;width:max-content;max-width:140px;background:#222;color:#fff;padding:2px 4px;font-size:11px;line-height:1.4;overflow-wrap:anywhere;pointer-events:none}
.label-left .box-label{left:auto;right:0}
.red-dot{position:absolute;width:7px;height:7px;background:#e11;border-radius:50%;transform:translate(-50%,-50%)}
#status{font-size:14px;line-height:1.6;margin:12px 0;min-height:24px}
.record{padding:10px 0;border-bottom:1px solid #eee;overflow-wrap:anywhere}.missing{color:#875500}
pre{white-space:pre-wrap;overflow-wrap:anywhere;font-size:12px}summary{cursor:pointer}#count{font-weight:normal;color:#666}
