*{box-sizing:border-box}html,body{height:100%}body{margin:0;background:#111;color:#f5f5f5;font:18px/1.4 system-ui}#app{min-height:100%}.screen{display:flex;flex-direction:column;gap:16px;min-height:100vh;min-height:100dvh;padding:16px;padding-top:max(16px,env(safe-area-inset-top));padding-bottom:max(16px,env(safe-area-inset-bottom))}h1{margin:0}input{font:inherit;padding:14px;border-radius:8px;border:1px solid #666;background:#222;color:inherit;width:100%}button{font:inherit;cursor:pointer;border-radius:12px;border:0}button[disabled]{opacity:.5}.btn{padding:14px 18px;background:#333;color:#f5f5f5}.btn-scan{min-height:40vh;font-size:3rem;font-weight:700;background:#f5f5f5;color:#111}.btn-next{width:100%;min-height:80px;font-size:1.6rem;font-weight:700;background:#f5f5f5;color:#111}.done{background:#00000059}.setup{justify-content:center}.msg{min-height:1.4em;margin:0}.status{margin:0;color:#bbb}.status.stale{color:#e08a00}.toast{margin:0;padding:12px;background:#333;border-radius:8px}.hint{margin:0;color:#bbb}.menu summary{padding:12px 0;cursor:pointer}.menu[open]{display:flex;flex-direction:column;gap:8px}.banner{display:flex;flex-direction:column;gap:8px;padding:14px;background:#fff3cd;color:#111;border-radius:8px}.banner p{margin:0}.banner input{background:#fff;color:#111}.banner .btn{background:#111;color:#fff}.result{justify-content:center;text-align:center}.result .title{font-size:3rem;line-height:1.1}.result .detail,.result .type{margin:0;font-size:1.5rem;font-weight:600}.valid{background:#1f8f3a}.used{background:#e08a00}.invalid{background:#c62828}.checking{background:#444}.band{min-height:30vh;display:flex;align-items:center;justify-content:center;border:6px solid #fff;border-radius:16px;font-size:2.4rem;font-weight:700;padding:16px}.camera{position:fixed;inset:0;padding:0;background:#000}.camera video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.camera .frame{position:absolute;top:50%;left:50%;width:70vmin;height:70vmin;transform:translate(-50%,-50%);border:4px solid #fff;border-radius:12px;box-shadow:0 0 0 100vmax #00000059;pointer-events:none}.camera-bar{position:absolute;left:16px;right:16px;bottom:max(16px,env(safe-area-inset-bottom));display:flex;gap:12px}.camera-bar .btn{flex:1;min-height:64px}
