*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--primary: #2563eb;--primary-hover: #1d4ed8;--success: #16a34a;--success-hover: #15803d;--bg: #f8fafc;--card: #ffffff;--text: #1e293b;--text-muted: #64748b;--border: #e2e8f0;--radius: 12px;--shadow: 0 4px 24px rgba(0,0,0,.08)}html,body,#root{height:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased}body{overflow-x:hidden}.portal-container{min-height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;position:relative}.card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:32px;width:100%;max-width:420px;text-align:center}.card h1{font-size:1.5rem;margin-bottom:8px}.card p{color:var(--text-muted);font-size:.95rem;margin-bottom:20px;line-height:1.5}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:14px 24px;border:none;border-radius:10px;font-size:1rem;font-weight:600;cursor:pointer;transition:all .2s}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--primary-hover);transform:translateY(-1px)}.btn-success{background:var(--success);color:#fff}.btn-success:hover:not(:disabled){background:var(--success-hover);transform:translateY(-1px)}.btn-outline{background:transparent;color:var(--text-muted);border:1px solid var(--border)}.btn-outline:hover{background:#f1f5f9}.btn:disabled{opacity:.5;cursor:not-allowed}.input{width:100%;padding:12px 16px;border:2px solid var(--border);border-radius:10px;font-size:1rem;transition:border-color .2s;outline:none;margin-bottom:12px}.input:focus{border-color:var(--primary)}.step-indicator{display:flex;gap:6px;justify-content:center;margin-bottom:24px}.step-dot{width:8px;height:8px;border-radius:50%;background:var(--border);transition:background .3s}.step-dot.active{background:var(--primary);width:24px;border-radius:4px}.wifi-icon{font-size:3rem;margin-bottom:16px}.countdown{display:inline-flex;align-items:center;justify-content:center;width:48px;height:48px;border-radius:50%;background:#2563eb1a;color:var(--primary);font-weight:700;font-size:1.2rem;margin:12px auto}.video-wrapper{position:relative;width:100%;border-radius:10px;overflow:hidden;margin-bottom:16px;background:#000;aspect-ratio:16/9}.video-wrapper video{width:100%;height:100%;object-fit:contain}.video-overlay{position:absolute;top:12px;right:12px;background:#000000b3;color:#fff;padding:4px 12px;border-radius:20px;font-size:.85rem;font-weight:600}.survey-option{display:block;width:100%;padding:12px 16px;margin-bottom:8px;border:2px solid var(--border);border-radius:10px;background:var(--card);font-size:.95rem;cursor:pointer;text-align:left;transition:all .2s}.survey-option:hover{border-color:var(--primary);background:#2563eb0a}.survey-option.selected{border-color:var(--primary);background:#2563eb14;font-weight:600}.sliding-banner{position:fixed;bottom:0;left:0;right:0;background:var(--card);box-shadow:0 -4px 24px #0000001a;z-index:100;overflow:hidden}.banner-track{display:flex;animation:slideBanner 20s linear infinite}.banner-track img{height:80px;object-fit:cover;flex-shrink:0}@keyframes slideBanner{0%{transform:translate(0)}to{transform:translate(-50%)}}.success-check{width:80px;height:80px;border-radius:50%;background:#16a34a1a;display:flex;align-items:center;justify-content:center;margin:0 auto 20px;font-size:2.5rem}.loading-spinner{width:40px;height:40px;border:3px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:spin .8s linear infinite;margin:20px auto}@keyframes spin{to{transform:rotate(360deg)}}.fade-in{animation:fadeIn .4s ease-out}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.otp-inputs{display:flex;gap:8px;justify-content:center;margin-bottom:16px}.otp-inputs input{width:44px;height:52px;text-align:center;font-size:1.3rem;font-weight:700;border:2px solid var(--border);border-radius:10px;outline:none;transition:border-color .2s}.otp-inputs input:focus{border-color:var(--primary)}
