*{box-sizing:border-box}body{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;padding:20px 20px 100px;max-width:900px;margin:0 auto;background:linear-gradient(135deg,#f5f7fa,#e8eef5);min-height:100vh}h1{text-align:center;color:#4a5568;font-weight:600;font-size:1.8rem;margin-bottom:2rem}#canvas{display:none}.camera-modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#ffffff4d;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);z-index:9999;display:flex;align-items:center;justify-content:center;padding:20px}.camera-modal-content{position:relative;background-color:#fff;border-radius:24px;box-shadow:0 20px 60px #00000026;max-width:95vw;max-height:95vh;display:flex;flex-direction:column;align-items:center;padding:30px;gap:20px}.camera-modal-video{width:100%;max-width:640px;height:auto;border-radius:16px;box-shadow:0 8px 32px #0000004d;display:block}.camera-modal-close{position:absolute;top:15px;right:15px;width:44px;height:44px;border-radius:50%;background-color:#ffffffe6;color:#000;border:none;padding:0;margin:0;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .3s ease;box-shadow:0 4px 12px #0003;z-index:10}.camera-modal-close:hover{background-color:#fff;transform:scale(1.1) rotate(90deg);box-shadow:0 6px 16px #0000004d}.camera-modal-status{text-align:center;padding:15px 25px;border-radius:16px;background-color:#fffffff2;box-shadow:0 4px 16px #00000026;width:100%;max-width:640px}.camera-modal-status .success{color:#065f46;font-weight:600;font-size:1.1em}.camera-modal-status .cooldown-indicator{margin-top:10px;padding:10px 16px;background-color:#fef3c7;color:#78350f;border-radius:12px;font-size:.9em;animation:cooldown-pulse 1s ease-in-out infinite}.image-popup-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#000000d9;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);z-index:10000;display:flex;align-items:center;justify-content:center;padding:20px}.image-popup-content{position:relative;background-color:#fff;border-radius:24px;box-shadow:0 20px 60px #0000004d;max-width:90vw;max-height:90vh;display:flex;flex-direction:column;align-items:center;padding:20px}.image-popup-close{position:absolute;top:15px;right:15px;width:44px;height:44px;border-radius:50%;background-color:#fffffff2;color:#000;border:none;padding:0;margin:0;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .3s ease;box-shadow:0 4px 12px #0000004d;z-index:10}.image-popup-close:hover{background-color:#fff;transform:scale(1.1) rotate(90deg);box-shadow:0 6px 16px #0006}.image-popup-image-wrapper{width:100%;height:100%;display:flex;align-items:center;justify-content:center;overflow:hidden;border-radius:16px}.image-popup-image-wrapper img{max-width:100%;max-height:80vh;width:auto;height:auto;object-fit:contain;border-radius:12px}.modal-enter{transition:all .3s ease-out}.modal-enter-start{opacity:0}.modal-enter-end{opacity:1}.modal-leave{transition:all .2s ease-in}.modal-leave-start{opacity:1}.modal-leave-end{opacity:0}.bottom-action-bar{position:fixed;bottom:0;left:0;right:0;z-index:9998;background-color:#ffffff80;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-top:1px solid rgba(148,163,184,.2);box-shadow:0 -4px 20px #00000014;display:block!important;visibility:visible!important;opacity:1!important}.bottom-bar-content{display:flex;justify-content:center;align-items:center;gap:15px;padding:12px 20px;max-width:800px;margin:0 auto;min-height:80px}.bottom-bar-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:12px 20px;border:2px solid rgba(148,163,184,.5);border-radius:16px;background-color:#ffffffe6;color:#1f2937;font-size:13px;font-weight:600;cursor:pointer;transition:all .3s ease;box-shadow:0 2px 8px #00000014;min-width:80px;flex:1;max-width:150px}.bottom-bar-btn svg{flex-shrink:0}.bottom-bar-btn span{white-space:nowrap}.bottom-bar-btn:hover:not(:disabled){background-color:#fff;border-color:#94a3b8;transform:translateY(-2px);box-shadow:0 4px 12px #0000001f}.bottom-bar-btn:active:not(:disabled){transform:translateY(0)}.bottom-bar-btn:disabled{opacity:.5;cursor:not-allowed}.bottom-bar-btn.camera-btn{background-color:#10b98126;border-color:#10b98180;color:#065f46}.bottom-bar-btn.camera-btn:hover:not(:disabled){background-color:#10b98140;border-color:#10b981}.bottom-bar-btn.stop-camera-btn{background-color:#ef444426;border-color:#ef444480;color:#991b1b}.bottom-bar-btn.stop-camera-btn:hover:not(:disabled){background-color:#ef444440;border-color:#ef4444}.bottom-bar-btn.login-btn{background-color:#000000e6;border-color:#000;color:#fff}.bottom-bar-btn.login-btn:hover:not(:disabled){background-color:#000;box-shadow:0 6px 16px #0003}.bottom-bar-btn.logout-btn{background-color:#ef444426;border-color:#ef444480;color:#991b1b}.bottom-bar-btn.logout-btn:hover:not(:disabled){background-color:#ef444440;border-color:#ef4444}video{width:100%;max-width:500px;height:auto;border-radius:20px;box-shadow:0 4px 20px #00000014;display:block;margin:20px auto}.result-box{margin-top:20px;padding:20px;border:none;background-color:#ffffffe6;min-height:50px;word-break:break-all;border-radius:20px;box-shadow:0 2px 12px #0000000d}.controls{margin:15px 0;padding:25px;border:none;background-color:#ffffffe6;border-radius:20px;box-shadow:0 2px 12px #0000000d;text-align:center}.controls label{display:flex;align-items:center;justify-content:center;gap:10px;margin-bottom:15px;color:#4a5568;font-size:.95rem}.controls input[type=checkbox]{transform:scale(1.3);accent-color:#000}.controls input[type=text]{padding:12px 16px;border:2px solid #e2e8f0;border-radius:25px;flex:1;background-color:#f8fafc;transition:all .3s ease;text-align:center}.controls input[type=text]:focus{outline:none;border-color:#000;background-color:#fff;box-shadow:0 0 0 3px #0000001a}.auth-section{margin:15px 0;padding:25px;border:none;background-color:transparent;border-radius:0;box-shadow:none}.auth-section h3{margin-top:0;margin-bottom:20px;color:#4a5568;text-align:center;font-weight:600;font-size:1.3rem}.auth-status{padding:15px 20px;margin:15px 0;border-radius:15px;font-weight:500;text-align:center}.auth-status.authenticated{background-color:#d1fae5;color:#065f46;border:none}.auth-status.unauthenticated{background-color:#fee2e2;color:#991b1b;border:none}.auth-status.loading{background-color:#dbeafe;color:#1e40af;border:none}.auth-buttons{margin:15px 0;display:none;flex-direction:column;align-items:center;gap:12px}.authenticated-actions{display:flex;gap:12px;align-items:center;justify-content:center;margin-top:10px;flex-wrap:wrap}.re-login-btn{font-size:14px;padding:10px 20px;background-color:#fff;color:#000;border:1px solid #94a3b8}.re-login-btn:hover{background-color:#e2e8f0;color:#000;border-color:#cbd5e1;transform:translateY(-1px)}.auth-status.error{background-color:#fee2e2;color:#991b1b;border:none;margin-top:10px}.history-list{max-height:600px;overflow-y:auto}.history-item{padding:20px;margin:15px 0;border:none;background-color:#f8fafc;border-radius:16px;box-shadow:0 1px 8px #0000000a;transition:all .3s ease}.history-item:hover{box-shadow:0 4px 16px #00000014;transform:translateY(-2px)}.history-item .timestamp{font-size:.85em;color:#94a3b8;margin-bottom:8px;word-break:break-all;font-family:Courier New,monospace;text-align:left}.qr-content-wrapper{display:flex;gap:12px;align-items:flex-start;margin-bottom:10px}.qr-image-thumbnail{width:60px;height:60px;border-radius:50%;overflow:hidden;flex-shrink:0;cursor:pointer;border:3px solid #e2e8f0;transition:all .3s ease;box-shadow:0 2px 8px #0000001a}.qr-image-thumbnail:hover{transform:scale(1.1);border-color:#cbd5e1;box-shadow:0 4px 12px #0003}.qr-image-thumbnail img{width:100%;height:100%;object-fit:cover;display:block}.history-item .qr-content-section{flex:1}.action-buttons-column{display:flex;flex-direction:column;gap:8px;align-items:center;position:relative}.history-item .qr-raw-content{font-size:.85em;color:#94a3b8;margin-bottom:8px;word-break:break-all;font-family:Courier New,monospace;text-align:left}.history-item .qr-content{word-break:break-all;font-weight:600;text-align:left}.qr-content.clickable{cursor:pointer;color:#000;text-decoration:none;transition:all .3s ease;padding:2px;border-radius:12px;display:inline-block}.qr-content.clickable:hover{color:#fff;background-color:#000}.qr-content.clickable:active{color:#fff;background-color:#333}.external-link-icon{margin-left:5px;font-size:.8em;opacity:.7;transition:opacity .2s ease-in-out}.qr-content.clickable:hover .external-link-icon{opacity:1}.history-item .api-url{font-size:.9em;margin-bottom:10px;color:#06c;word-break:break-all}.json-container{border:none;border-radius:12px;background-color:#fff;overflow:hidden;box-shadow:0 1px 4px #0000000d}.json-header{padding:12px 16px;background-color:#f1f5f9;border-bottom:none;cursor:pointer;display:flex;justify-content:space-between;align-items:center;transition:all .2s ease;color:#64748b;font-weight:500}.json-header:hover{background-color:#e2e8f0;color:#475569}.json-toggle{font-family:monospace;font-weight:700}.json-content{max-height:300px;overflow-y:auto;padding:15px;font-family:monospace;font-size:12px;white-space:pre-wrap;background-color:#fff;color:#475569}.json-status.success{background-color:#d1fae5;color:#065f46;border:none}.json-status.error{background-color:#fee2e2;color:#991b1b;border:none}.json-status.loading{background-color:#dbeafe;color:#1e40af;border:none}.error{color:red}.success{color:green}.loading{color:#0c5460}button{padding:12px 28px;margin:8px 5px;font-size:15px;font-weight:500;cursor:pointer;border:1px solid #94a3b8;border-radius:25px;background-color:#fff;color:#000;transition:all .3s ease;box-shadow:0 2px 8px #00000014;display:inline-flex;align-items:center;justify-content:center;gap:8px}button svg{flex-shrink:0;vertical-align:middle}button:hover{background-color:#e2e8f0;color:#000;border-color:#cbd5e1;transform:translateY(-2px);box-shadow:0 4px 12px #0000001a}button.primary{background-color:#fff;color:#000;border-color:#94a3b8}button.primary:hover{background-color:#e2e8f0;color:#000;border-color:#cbd5e1}button.btn-login{background-color:#000;color:#fff;border-color:#94a3b8}button.btn-login:hover{background-color:#333;color:#fff;border-color:#94a3b8}button.success{background-color:#fff;color:#000;border-color:#94a3b8}button.success:hover{background-color:#e2e8f0;color:#000;border-color:#cbd5e1}button.danger{background-color:#fecaca;color:#991b1b;border-color:#fca5a5}button.danger:hover{background-color:#fca5a5;color:#7f1d1d;border-color:#f87171}button.secondary{background-color:#fff;color:#000;border-color:#94a3b8}button.secondary:hover{background-color:#e2e8f0;color:#000;border-color:#cbd5e1}button:disabled{opacity:.5;cursor:not-allowed;transform:none;background-color:#e5e5e5;color:#999;border-color:#999}.current-response{margin-top:20px;padding:25px;border:none;background-color:#ffffffe6;border-radius:20px;box-shadow:0 2px 12px #0000000d}.current-response h3{margin-top:0;color:#4a5568;text-align:center}.history{margin-top:30px;padding:25px;border:none;background-color:#ffffffe6;border-radius:20px;box-shadow:0 2px 12px #0000000d}.history h3{margin-top:0;color:#4a5568;text-align:center}.history-header{display:flex;flex-direction:column;justify-content:center;align-items:center;margin-bottom:20px;gap:15px}.history-header h3{margin:0}.history-header-buttons{display:flex;gap:12px;align-items:center;justify-content:center;flex-wrap:wrap}.history-header button{margin:0}.retry-all-btn{background-color:#fff;color:#000;border:1px solid #94a3b8}.retry-all-btn:hover:not(:disabled){background-color:#e2e8f0;color:#000;border-color:#cbd5e1}.retry-all-btn:disabled{background-color:#e5e5e5;color:#999;border-color:#cbd5e1;opacity:.6;cursor:not-allowed}.delete-btn{background-color:#fecaca;color:#991b1b;border:1px solid #fca5a5;font-size:14px;padding:10px 20px;gap:6px}.delete-btn:hover{background-color:#fca5a5;color:#7f1d1d;border-color:#f87171}.request-response-content{padding:10px 0}.request-info,.response-info{margin-bottom:15px}.request-info h4,.response-info h4{margin:0 0 8px;font-size:14px;color:#666;font-weight:700}.request-details{background-color:#f8fafc;padding:12px 16px;border-radius:10px;font-family:monospace;font-size:13px;word-break:break-all;overflow-wrap:break-word;max-width:100%;overflow-x:auto;border:1px solid #e2e8f0}.error-content{background-color:#fee2e2;color:#991b1b;padding:12px 16px;border-radius:10px;font-family:monospace;font-size:13px}.oidc-config{display:grid;gap:15px;margin:15px 0}.oidc-config label{display:flex;flex-direction:column;gap:8px;color:#4a5568;font-weight:500}.oidc-config input[type=text],.oidc-config textarea{padding:12px 16px;border:2px solid #e2e8f0;border-radius:12px;background-color:#fff;transition:all .3s ease;font-family:inherit}.oidc-config input[type=text]:focus,.oidc-config textarea:focus{outline:none;border-color:#000;box-shadow:0 0 0 3px #0000001a}.config-examples{margin-top:15px;padding:15px;background-color:#fef3c7;border:none;border-radius:12px;font-size:.9em}.config-examples h4{margin-top:0;margin-bottom:10px;color:#78350f}.config-examples .example{margin:8px 0;font-family:monospace;color:#92400e}.debug-info{margin-top:15px;padding:15px;background-color:#fef3c7;border:none;border-radius:12px;font-size:.85em}.debug-info h4{margin-top:0;color:#78350f;font-weight:600}.debug-info pre{background-color:#fff;padding:12px;border:none;border-radius:8px;overflow-x:auto;font-size:.8em}@media (max-width: 768px){body{margin:0;padding:5px;max-width:100%}.controls label{flex-direction:column;align-items:flex-start;gap:5px}.controls input[type=text]{width:100%}button{font-size:14px;padding:8px 16px}.history-item{padding:10px}.json-content{font-size:11px}.auth-section,.manual-input-section{padding:10px}.controls{padding:12px}.history,.admin-config,.config-section{padding:10px}}.admin-config{margin-top:20px;padding:30px;border:none;border-radius:20px;background-color:#ffffffe6;box-shadow:0 2px 12px #0000000d}.admin-config h3{margin-top:0;margin-bottom:20px;color:#4a5568;border-bottom:none;padding-bottom:10px;text-align:center;font-weight:600}.config-section{margin-bottom:25px;padding:20px;border:none;border-radius:16px;background-color:#f8fafc;box-shadow:0 1px 6px #0000000a}.config-section h4{margin-top:0;margin-bottom:15px;color:#64748b;font-size:1.1em;font-weight:600}.config-section:last-child{margin-bottom:0}.json-status{padding:12px 16px;margin-bottom:12px;border-radius:12px;font-size:.9em;font-weight:500;display:flex;flex-wrap:wrap;align-items:center;gap:8px}.json-status span{display:inline-flex;align-items:center;gap:4px}.json-status strong{color:inherit}.json-status .lora-value{font-family:monospace;font-weight:700}.action-menu-toggle{width:40px;height:40px;border-radius:50%;background-color:#fff;color:#000;border:2px solid #94a3b8;padding:0;margin:0;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .3s ease;box-shadow:0 2px 8px #0000001a;flex-shrink:0}.action-menu-toggle:hover{background-color:#e2e8f0;border-color:#cbd5e1;transform:scale(1.1);box-shadow:0 4px 12px #00000026}.action-menu-toggle.menu-open{background-color:#000;color:#fff;border-color:#000;transform:rotate(45deg) scale(1.1)}.action-menu-toggle svg{transition:transform .3s ease}.action-menu-popup{position:absolute;top:0;right:50px;background-color:#fff;border-radius:16px;box-shadow:0 8px 24px #00000026;padding:12px;z-index:100;display:flex;flex-direction:column;gap:8px;min-width:180px}.menu-action-btn{width:100%;background-color:#fff;color:#000;border:1px solid #e2e8f0;padding:12px 16px;font-size:14px;border-radius:12px;display:flex;align-items:center;gap:10px;cursor:pointer;transition:all .2s ease;margin:0;box-shadow:none}.menu-action-btn:hover{background-color:#f8fafc;border-color:#cbd5e1;transform:translate(4px);box-shadow:0 2px 8px #00000014}.menu-action-btn svg{flex-shrink:0}.menu-action-delete{background-color:#fecaca;color:#991b1b;border-color:#fca5a5}.menu-action-delete:hover{background-color:#fca5a5;color:#7f1d1d;border-color:#f87171}.menu-enter{transition:all .3s ease-out}.menu-enter-start{opacity:0;transform:translate(10px) scale(.95)}.menu-enter-end{opacity:1;transform:translate(0) scale(1)}.menu-leave{transition:all .2s ease-in}.menu-leave-start{opacity:1;transform:translate(0) scale(1)}.menu-leave-end{opacity:0;transform:translate(10px) scale(.95)}.clipboard-btn{background-color:#fff;color:#000;border:1px solid #94a3b8;font-size:14px;padding:10px 20px;gap:6px}.clipboard-btn:hover{background-color:#e2e8f0;color:#000;border-color:#cbd5e1}.retry-btn{background-color:#fff;color:#000;border:1px solid #94a3b8;font-size:14px;padding:10px 20px;gap:6px}.retry-btn:hover{background-color:#e2e8f0;color:#000;border-color:#cbd5e1}.retry-btn-compact{width:40px;height:40px;border-radius:50%;background-color:#fff;color:#000;border:2px solid #94a3b8;padding:0;margin:0;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .3s ease;box-shadow:0 2px 8px #0000001a;flex-shrink:0}.retry-btn-compact:hover{background-color:#e2e8f0;border-color:#cbd5e1;transform:scale(1.1);box-shadow:0 4px 12px #00000026}.retry-btn-compact svg{flex-shrink:0}.scan-feedback{position:fixed;top:20px;right:20px;z-index:1000;max-width:350px;border-radius:20px;box-shadow:0 8px 24px #00000026;font-weight:500}.feedback-content{padding:18px 24px;display:flex;align-items:center;gap:12px;font-size:.95em}.feedback-success{background-color:#d1fae5;color:#065f46;border:none}.feedback-error{background-color:#fee2e2;color:#991b1b;border:none}.feedback-cooldown{background-color:#fef3c7;color:#78350f;border:none}.feedback-same-qr{background-color:#e0e7ff;color:#3730a3;border:none;animation:same-qr-pulse .5s ease-in-out 3}@keyframes same-qr-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}.feedback-enter{transition:all .3s ease-out}.feedback-enter-start{opacity:0;transform:translate(100%) scale(.95)}.feedback-enter-end{opacity:1;transform:translate(0) scale(1)}.feedback-leave{transition:all .2s ease-in}.feedback-leave-start{opacity:1;transform:translate(0) scale(1)}.feedback-leave-end{opacity:0;transform:translate(100%) scale(.95)}.camera-status{margin:15px 0;padding:15px;border:none;background-color:#d1fae5;border-radius:15px;text-align:center;color:#065f46;font-weight:500}.cooldown-indicator{margin-top:10px;padding:12px 16px;background-color:#fef3c7;color:#78350f;border:none;border-radius:12px;font-size:.9em;text-align:center;animation:cooldown-pulse 1s ease-in-out infinite}@keyframes cooldown-pulse{0%,to{background-color:#fef3c7}50%{background-color:#fde68a}}.manual-input-section{margin:15px 0;padding:25px;border:none;border-radius:20px;background-color:#ffffffe6;box-shadow:0 2px 12px #0000000d}.manual-input-controls{display:flex;gap:12px;align-items:center;flex-wrap:wrap;justify-content:center}.inline-label{font-weight:500;color:#4a5568;font-size:.95em;white-space:nowrap;margin:0}.manual-qr-input{flex:1;min-width:250px;padding:12px 16px;border:2px solid #e2e8f0;border-radius:25px;font-family:Courier New,monospace;font-size:14px;background-color:#f8fafc;transition:all .3s ease;text-align:center}.manual-qr-input:focus{outline:none;border-color:#000;background-color:#fff;box-shadow:0 0 0 3px #0000001a}.manual-qr-input::placeholder{color:#94a3b8;opacity:.8}@media (max-width: 768px){.manual-input-section{margin:8px 0;padding:10px}.manual-input-controls{flex-direction:column;align-items:stretch;gap:8px}.manual-input-controls button{width:100%;margin:0}.manual-qr-input{font-size:16px}}@media (max-width: 768px){.scan-feedback{top:8px;right:8px;left:8px;max-width:none}.feedback-content{padding:10px 12px;font-size:.95em}.feedback-enter-start{transform:translateY(-100%) scale(.95)}.feedback-enter-end{transform:translateY(0) scale(1)}.feedback-leave-end{transform:translateY(-100%) scale(.95)}.camera-status{padding:8px}.cooldown-indicator{padding:6px 10px;font-size:.85em}.json-status{padding:8px 10px;font-size:.85em;flex-direction:column;align-items:flex-start;gap:4px}.json-status span{font-size:.9em}.history-header{flex-direction:column;align-items:stretch;gap:8px}.history-header h3{text-align:center}.history-header-buttons{flex-direction:column;align-items:stretch;gap:8px}.history-header button{margin:0;align-self:center;width:auto}.qr-content-wrapper{gap:6px}.qr-image-thumbnail{width:50px;height:50px;border-width:2px}.action-buttons-column{gap:5px}.action-menu-toggle,.retry-btn-compact{width:38px;height:38px}.action-menu-popup{right:48px;min-width:160px;max-width:calc(100vw - 80px)}.menu-action-btn{padding:10px 14px;font-size:13px}.authenticated-actions{flex-direction:column;align-items:stretch;gap:8px}.authenticated-actions button{width:100%}.request-details{font-size:12px;padding:8px 10px;overflow-x:scroll}.qr-content.clickable{padding:6px 8px;border-radius:8px;background-color:#0066cc1a}.qr-content.clickable:hover{background-color:#06c3}.external-link-icon{font-size:.7em;margin-left:3px}.camera-modal-overlay{padding:5px}.camera-modal-content{padding:15px 10px;gap:12px;border-radius:16px}.camera-modal-video{max-width:100%;border-radius:12px}.camera-modal-close{width:40px;height:40px;top:8px;right:8px}.camera-modal-status{padding:10px 12px;font-size:.9em}.camera-modal-status .success{font-size:1em}.camera-modal-status .cooldown-indicator{padding:8px 12px;font-size:.85em}body{padding-bottom:85px}.bottom-bar-content{gap:8px;padding:8px 10px}.bottom-bar-btn{padding:8px 10px;gap:4px;font-size:11px;min-width:65px;max-width:110px;border-radius:12px}.bottom-bar-btn svg{width:20px;height:20px}.bottom-bar-btn span{font-size:11px}}
