[data-scan] [data-text]{position:absolute;opacity:0;pointer-events:none;transition:opacity var(--scan-fade,.45s) ease}[data-scan] [data-text].is-active{opacity:1;pointer-events:auto}#scanning-heading{transition:opacity .45s ease;opacity:1}@media (prefers-reduced-motion:reduce){[data-scan] [data-text]{transition:none}}[data-scan-progress]{will-change:height;pointer-events:none}@media (prefers-reduced-motion:reduce){[data-scan-progress]{height:100%!important;transition:none!important}}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:60vh;padding:2rem;text-align:center}.loading-spinner{width:60px;height:60px;border:4px solid #f3f3f3;border-top-color:#3b82f6;border-radius:50%;animation:spin 1s linear infinite;margin-bottom:2rem}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.loading-container h2{color:#1f2937;margin-bottom:1rem;font-size:1.5rem}.loading-container p{color:#6b7280;margin-bottom:2rem;font-size:1rem}.loading-steps{display:flex;flex-direction:column;gap:.5rem;max-width:300px}.loading-steps .step{padding:.5rem 1rem;background:#f9fafb;border-radius:8px;color:#374151;font-size:.9rem;border-left:3px solid #3b82f6;animation:fadeInUp .5s ease-out}.loading-steps .step:first-child{animation-delay:.1s}.loading-steps .step:nth-child(2){animation-delay:.3s}.loading-steps .step:nth-child(3){animation-delay:.5s}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.error-notice{background:#fef2f2;border:1px solid #fecaca;color:#dc2626;padding:1rem;border-radius:8px;margin:1rem 0;text-align:center}.error-notice p{margin:0;font-weight:500}.progress-bar{animation:progress-pulse easie-in-out 1.6s infinite}@keyframes progress-pulse{0%,to{filter:brightness(1)}50%{filter:brightness(1.15)}}.progress-shine{position:absolute;inset:0;background:linear-gradient(110deg,transparent,rgba(255,255,255,.1) 40%,rgba(255,255,255,.25) 50%,transparent 60%);background-size:200% 100%;mix-blend-mode:screen;pointer-events:none;animation:progress-shine 2.2s linear infinite}@keyframes progress-shine{0%{background-position:200% 0}to{background-position:-200% 0}}.progress.is-complete .progress-bar{animation:none}.progress.is-complete .progress-shine{opacity:0;transition:opacity .4s ease}