*{box-sizing:border-box;margin:0;padding:0}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}:root{--bg-color:#0f172a;--surface-color:#1e293bb3;--surface-border:#94a3b81a;--primary-color:#3b82f6;--primary-glow:#3b82f680;--success-color:#10b981;--success-glow:#10b98180;--danger-color:#ef4444;--danger-glow:#ef444480;--warning-color:#f59e0b;--text-primary:#f8fafc;--text-secondary:#94a3b8;--font-family:"Inter",sans-serif}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;margin:0;padding:0}body{font-family:var(--font-family);background-color:var(--bg-color);color:var(--text-primary);background-image:radial-gradient(at 0 0,#3b82f626 0,#0000 50%),radial-gradient(at 100% 100%,#10b9811a 0,#0000 50%);background-attachment:fixed;min-height:100vh}.app-container{justify-content:center;align-items:center;min-height:100vh;padding:1.5rem;display:flex}.main-card-wrapper,.pin-wrapper{width:100%;max-width:400px;animation:.6s cubic-bezier(.16,1,.3,1) fadeIn}.main-card,.pin-card{background:var(--surface-color);-webkit-backdrop-filter:blur(20px);border:1px solid var(--surface-border);border-radius:32px;flex-direction:column;align-items:center;padding:2.5rem 2rem;display:flex;box-shadow:0 25px 50px -12px #00000080,inset 0 0 0 1px #ffffff0d}.status-bar{justify-content:center;width:100%;margin-bottom:3rem;display:flex}.status-indicator{background:#0003;border:1px solid #ffffff0d;border-radius:9999px;align-items:center;gap:.75rem;padding:.5rem 1rem;display:inline-flex}.status-dot{border-radius:50%;width:8px;height:8px;position:relative}.status-dot.connected{background:var(--success-color);box-shadow:0 0 10px var(--success-glow)}.status-dot.connected:after{content:"";border:1px solid var(--success-color);opacity:.5;border-radius:50%;animation:2s infinite pulse;position:absolute;inset:-4px}.status-dot.disconnected{background:var(--text-secondary)}.status-label{color:var(--text-secondary);letter-spacing:.02em;font-size:.875rem;font-weight:500}.gate-button{cursor:pointer;width:220px;height:220px;color:var(--text-primary);background:linear-gradient(145deg,#ffffff0d,#ffffff03);border:none;border-radius:50%;flex-direction:column;justify-content:center;align-items:center;gap:1rem;transition:all .4s cubic-bezier(.34,1.56,.64,1);display:flex;position:relative;box-shadow:-10px -10px 20px #ffffff05,10px 10px 20px #0000004d,inset 0 0 0 2px #ffffff0d}.gate-button:hover:not(:disabled){transform:scale(1.02);box-shadow:-5px -5px 15px #ffffff08,5px 5px 15px #0006,inset 0 0 0 2px #ffffff1a}.gate-button:active:not(:disabled){transform:scale(.96)}.gate-button:disabled{opacity:.7;cursor:not-allowed}.gate-button.closed .gate-icon{color:var(--success-color)}.gate-button.open .gate-icon{color:var(--danger-color)}.gate-button.opening .gate-icon,.gate-button.closing .gate-icon{color:var(--warning-color)}.gate-icon{filter:drop-shadow(0 0 15px);transition:all .3s}.gate-text{text-transform:uppercase;letter-spacing:.1em;color:var(--text-secondary);font-size:.9rem;font-weight:600;transition:color .3s}.gate-button:hover .gate-text{color:var(--text-primary)}.progress-ring{pointer-events:none;position:absolute;inset:-10px}.progress-svg{width:100%;height:100%;transform:rotate(-90deg)}.progress-circle-bg{fill:none;stroke:#ffffff0d;stroke-width:4px}.progress-circle{fill:none;stroke:var(--warning-color);stroke-width:4px;stroke-linecap:round;stroke-dasharray:565;stroke-dashoffset:565px;filter:drop-shadow(0 0 8px var(--warning-color));animation:3s linear forwards progress}.pin-header{text-align:center;margin-bottom:2.5rem}.pin-header svg{color:var(--primary-color);filter:drop-shadow(0 0 20px var(--primary-glow));margin-bottom:1.5rem}.pin-title{color:var(--text-primary);font-size:1.5rem;font-weight:600}.pin-input-wrapper{justify-content:center;width:100%;margin-bottom:2.5rem;display:flex;position:relative}.pin-dots{background:#0003;border:1px solid #ffffff0d;border-radius:20px;gap:1.5rem;padding:1.5rem 2.5rem;display:flex}.pin-dot{background:#ffffff1a;border-radius:50%;width:16px;height:16px;transition:all .3s cubic-bezier(.4,0,.2,1)}.pin-dot.filled{background:var(--primary-color);box-shadow:0 0 15px var(--primary-glow);transform:scale(1.2)}.pin-input{opacity:0;cursor:pointer;width:100%;height:100%;position:absolute}.pin-error{color:var(--danger-color);background:#ef44441a;border-radius:8px;justify-content:center;align-items:center;gap:.5rem;margin-bottom:1.5rem;padding:.5rem 1rem;font-size:.875rem;animation:.3s slideUp;display:flex}.pin-submit{background:var(--primary-color);color:#fff;cursor:pointer;width:100%;box-shadow:0 4px 20px var(--primary-glow);border:none;border-radius:16px;padding:1rem;font-size:1rem;font-weight:600;transition:all .2s}.pin-submit:disabled{color:var(--text-secondary);box-shadow:none;cursor:not-allowed;background:#ffffff0d}.pin-submit:not(:disabled):hover{box-shadow:0 8px 25px var(--primary-glow);transform:translateY(-2px)}.pin-submit:not(:disabled):active{transform:translateY(0)}@keyframes pulse{0%{opacity:.5;transform:scale(1)}to{opacity:0;transform:scale(2)}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes progress{to{stroke-dashoffset:0}}@keyframes fadeIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.shake{animation:.4s cubic-bezier(.36,.07,.19,.97) both shake}@keyframes shake{10%,90%{transform:translate(-1px)}20%,80%{transform:translate(2px)}30%,50%,70%{transform:translate(-4px)}40%,60%{transform:translate(4px)}}.spinner-ring{border:3px solid #ffffff1a;border-top-color:var(--warning-color);border-radius:50%;width:48px;height:48px;animation:1s linear infinite spin}
