*{margin:0;padding:0;box-sizing:border-box}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:root{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;font-size:16px;color:#ffffffde;background-color:#000;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{margin:0;min-width:320px;min-height:100vh;background-color:#000;overflow:hidden}#root{width:100%;height:100vh;overflow:hidden}.login-page{display:flex;justify-content:center;align-items:center;min-height:100vh;padding:20px;background:linear-gradient(135deg,#0f0f0f,#1a1a1a)}.login-form{background-color:#1a1a1af2;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:48px;border-radius:16px;box-shadow:0 8px 32px #00000080;width:100%;max-width:400px;border:1px solid rgba(255,255,255,.1)}.login-form h1{font-size:1.8em;margin-bottom:32px;text-align:center;color:#fffffff2;font-weight:300;letter-spacing:.5px}.login-form input{width:100%;padding:14px 16px;margin-bottom:20px;border:1px solid rgba(255,255,255,.15);border-radius:8px;background-color:#ffffff0d;color:#fffffff2;font-size:1em;font-family:inherit;min-height:48px;transition:all .3s ease}.login-form input:focus{outline:none;border-color:#3b82f699;background-color:#ffffff14;box-shadow:0 0 0 3px #3b82f61a}.login-form input::placeholder{color:#fff6}.camera-control{position:relative;width:100vw;height:100vh;overflow:hidden;background-color:#000}.camera-header{position:absolute;top:0;right:0;display:flex;justify-content:flex-end;align-items:center;padding:20px 32px;z-index:100;transition:opacity .3s ease,transform .3s ease}.camera-control.inactive .camera-header{opacity:0;transform:translateY(-100%);pointer-events:none}.header-right{display:flex;align-items:center;gap:20px}button.icon-btn{min-width:40px;width:40px;height:40px;min-height:40px;padding:0;border-radius:8px;font-size:1.3em;display:flex;align-items:center;justify-content:center;background-color:transparent;border:none;color:#ffffffb3}button.icon-btn:hover:not(:disabled){color:#fff;background-color:#ffffff1a}.connection-status{display:flex;align-items:center;gap:8px;font-size:.85em;padding:6px 12px;border-radius:20px}.connection-status.connected{color:#4ade80}.connection-status.disconnected{color:#ef4444}.connection-status.connected:before{content:"●";font-size:1em;animation:pulse 2s ease-in-out infinite}.connection-status.disconnected:before{content:"●";font-size:1em}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}.camera-content{width:100%;height:100%;position:relative}.video-player{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#000}.video-player video{width:100%;height:100%;object-fit:contain;cursor:crosshair;aspect-ratio:16 / 9}.video-player .loading,.video-player .error{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;padding:20px;color:#ffffffde;z-index:10}.video-player .loading-skeleton{position:absolute;top:0;left:0;width:100%;height:100%;background:linear-gradient(90deg,#0a0a0a,#1a1a1a,#0a0a0a);background-size:200% 100%;animation:shimmer 2s infinite}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes videoFadeIn{0%{opacity:0}to{opacity:1}}.ptz-controls{position:absolute;z-index:100;transition:opacity .3s ease;-webkit-user-select:none;user-select:none}.camera-control.inactive .ptz-controls{opacity:0;pointer-events:none}.controls-bar{display:flex;align-items:center;gap:8px;background:#14141480;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);padding:6px 10px;border-radius:20px;border:1px solid rgba(255,255,255,.08);box-shadow:0 2px 16px #0006;cursor:inherit}.controls-bar:active{cursor:grabbing}.zoom-btn,.control-icon-btn{width:32px;height:32px;min-height:32px;padding:0;border-radius:50%;font-size:1.3em;font-weight:300;line-height:1;background-color:#ffffff0d;border:1px solid rgba(255,255,255,.1);cursor:pointer}.control-icon-btn{font-size:1.1em}.zoom-btn:hover:not(:disabled){background-color:#3b82f640;border-color:#3b82f666}.divider{width:1px;height:20px;background:#ffffff1a;margin:0 4px}.preset-select{padding:6px 10px;border:1px solid rgba(255,255,255,.1);border-radius:16px;background-color:#ffffff0d;color:#ffffffe6;font-size:.85em;font-family:inherit;cursor:pointer!important;min-height:32px;transition:all .2s ease;min-width:140px}.preset-select:hover:not(:disabled){border-color:#3b82f680;background-color:#ffffff1f}.preset-select:focus{outline:none;border-color:#3b82f699;background-color:#ffffff1f;box-shadow:0 0 0 3px #3b82f626}.preset-select option{background-color:#1a1a1a;color:#fffffff2}.loading-indicator{font-size:1.2em;color:#3b82f6cc;animation:pulse 1s ease-in-out infinite;margin-left:4px}button{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:12px 24px;border:1px solid rgba(255,255,255,.15);border-radius:8px;font-size:.95em;font-weight:400;font-family:inherit;background-color:#3b82f626;color:#fffffff2;cursor:pointer;transition:all .2s ease;min-height:44px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}button:hover:not(:disabled){background-color:#3b82f640;border-color:#3b82f666;transform:translateY(-1px)}button:active:not(:disabled){transform:translateY(0)}button:disabled{opacity:.4;cursor:not-allowed;transform:none}button.secondary{background-color:transparent;border:none;color:#ffffffb3}button.secondary:hover:not(:disabled){color:#fff;background-color:#ffffff1a}.error-message{color:#fff;background-color:#dc2626e6;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:12px 20px;margin:12px 0;border-radius:8px;border-left:3px solid #ef4444;font-size:.9em}.error-message-toast,.success-message-toast{position:absolute;bottom:80px;left:50%;transform:translate(-50%);padding:10px 20px;border-radius:20px;font-size:.85em;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);animation:fadeIn .3s ease-in;white-space:nowrap;box-shadow:0 4px 16px #0006}.error-message-toast{color:#fff;background-color:#dc2626f2;border:1px solid rgba(239,68,68,.5)}.success-message-toast{color:#fff;background-color:#22c55ef2;border:1px solid rgba(74,222,128,.5);display:flex;align-items:center;gap:6px}.success-message-toast .checkmark{font-size:1.1em;font-weight:700}.success-message{color:#fff;background-color:#22c55ee6;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:12px 20px;margin:12px 0;border-radius:8px;border-left:3px solid #4ade80;display:flex;align-items:center;gap:8px;animation:fadeIn .3s ease-in;font-size:.9em}.success-message .checkmark{font-size:1.2em;font-weight:700}@keyframes fadeIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.spinner{width:48px;height:48px;border:4px solid rgba(255,255,255,.1);border-top-color:#3b82f6cc;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.button-spinner{display:inline-block;width:14px;height:14px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite;margin-right:8px}@media(max-width:768px){.camera-header{padding:16px 20px}.camera-header h1{font-size:1em}.ptz-controls{bottom:16px}.controls-bar{padding:6px 10px;gap:6px}.zoom-btn{width:32px;height:32px;min-height:32px;font-size:1.2em}.preset-select{min-width:120px;font-size:.85em;padding:6px 10px}.error-message-toast,.success-message-toast{bottom:64px;font-size:.8em;padding:8px 16px}.login-form{padding:32px 24px}}@media(max-width:480px){.ptz-controls{bottom:12px}.controls-bar{padding:6px 8px;gap:4px}.zoom-btn{width:30px;height:30px;min-height:30px;font-size:1.1em}.preset-select{min-width:100px;font-size:.8em}button{padding:10px 16px;font-size:.9em}}.error-boundary{display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:100vh;padding:40px;text-align:center;background-color:#0a0a0a}.error-boundary h1{font-size:1.5em;margin-bottom:24px;color:#ef4444;font-weight:300}.error-boundary button{background-color:#3b82f633;border-color:#3b82f666}.error-boundary button:hover{background-color:#3b82f64d}#root{max-width:1280px;margin:0 auto;padding:2rem;text-align:center}.logo{height:6em;padding:1.5em;will-change:filter;transition:filter .3s}.logo:hover{filter:drop-shadow(0 0 2em #646cffaa)}.logo.react:hover{filter:drop-shadow(0 0 2em #61dafbaa)}@keyframes logo-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media(prefers-reduced-motion:no-preference){a:nth-of-type(2) .logo{animation:logo-spin infinite 20s linear}}.card{padding:2em}.read-the-docs{color:#888}.ptz-controls{display:flex;flex-direction:column;gap:1.5rem;align-items:center;padding:1rem}.direction-controls{display:flex;flex-direction:column;gap:.5rem}.direction-row{display:flex;gap:.5rem;justify-content:center}.direction-controls button{width:60px;height:60px;font-size:1.5rem;border-radius:8px;border:1px solid #646cff;background-color:#1a1a1a;color:#fff;cursor:pointer;transition:all .2s}.direction-controls button:hover:not(:disabled){background-color:#646cff;transform:scale(1.05)}.direction-controls button:active:not(:disabled){transform:scale(.95)}.direction-controls button:disabled{opacity:.5;cursor:not-allowed}.zoom-controls{display:flex;gap:1rem;justify-content:center}.zoom-controls button{padding:.75rem 1.5rem;font-size:1rem;border-radius:8px;border:1px solid #646cff;background-color:#1a1a1a;color:#fff;cursor:pointer;transition:all .2s}.zoom-controls button:hover:not(:disabled){background-color:#646cff}.zoom-controls button:disabled{opacity:.5;cursor:not-allowed}.preset-controls{display:flex;gap:1rem;align-items:center;justify-content:center}.preset-controls select{padding:.5rem;font-size:1rem;border-radius:8px;border:1px solid #646cff;background-color:#1a1a1a;color:#fff;cursor:pointer}.preset-controls button{padding:.5rem 1rem;font-size:1rem;border-radius:8px;border:1px solid #646cff;background-color:#1a1a1a;color:#fff;cursor:pointer;transition:all .2s}.preset-controls button:hover:not(:disabled){background-color:#646cff}.preset-controls button:disabled{opacity:.5;cursor:not-allowed}
