:root{font-family:system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;background-color:#242424;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}body{margin:0;display:flex;place-items:center;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}@media (prefers-color-scheme: light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}.joystick-base{background-image:radial-gradient(circle,#4a5568,#2d3748 70%,#1a202c);border-radius:50%;position:relative;display:flex;justify-content:center;align-items:center;cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;box-shadow:inset 0 0 15px #00000080,0 5px 10px #0000004d;border:2px solid #4a5568}.joystick-base:active{cursor:grabbing;box-shadow:inset 0 0 20px #000000b3,0 2px 5px #0003}.joystick-stick{background-image:radial-gradient(circle,#63b3ed,#4299e1 60%,#3182ce);border-radius:50%;position:absolute;box-shadow:0 4px 8px #0006,inset 0 2px 4px #fff3;transition:transform .05s linear;z-index:10;cursor:grab;border:1px solid #2c5282}.joystick-stick:active{transition:none;cursor:grabbing;background-image:radial-gradient(circle,#4299e1,#3182ce 60%,#2b6cb0);box-shadow:0 2px 4px #0000004d,inset 0 1px 3px #0003}.joystick-stick:before{content:"";position:absolute;top:50%;left:50%;width:10px;height:10px;background-color:#ffffff4d;border-radius:50%;transform:translate(-50%,-50%);box-shadow:0 0 5px #ffffff80}body{margin:0;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:linear-gradient(135deg,#1e293b,#0f172a);color:#e2e8f0;display:flex;justify-content:center;align-items:center;min-height:100vh;padding:1rem;box-sizing:border-box;overflow-x:hidden}.app-container{width:100%;max-width:400px;background-color:#2d3748d9;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);padding:2rem;border-radius:1.5rem;box-shadow:0 20px 40px #0000004d,0 0 0 1px #ffffff0d inset;border:1px solid rgba(100,116,139,.3);display:flex;flex-direction:column;gap:1.25rem}.header{text-align:center;margin-bottom:.5rem}.header h1{font-size:2.25rem;font-weight:700;color:#7dd3fc;margin:0 0 .3rem;text-shadow:0 2px 5px rgba(0,0,0,.5)}.header p{font-size:.9rem;color:#94a3b8}.status-display{padding:.8rem 1rem;background-color:#1e293bb3;border-radius:.75rem;text-align:center;border:1px solid rgba(71,85,105,.5);box-shadow:inset 0 1px 3px #0003}.status-text{display:flex;align-items:center;justify-content:center;font-weight:600;font-size:.95rem}.status-text .icon{margin-right:.6rem}.status-connected{color:#4ade80}.status-disconnected{color:#f87171}.status-connecting{color:#facc15}.last-command-text{font-size:.7rem;color:#64748b;margin-top:.3rem;word-break:break-all;line-height:1.4}.topic-config-section{display:flex;align-items:center;gap:.75rem;background-color:#1e293bb3;padding:.8rem 1rem;border-radius:.75rem;border:1px solid rgba(71,85,105,.5)}.topic-label{font-size:.9rem;font-weight:500;color:#cbd5e0;white-space:nowrap}.topic-input{flex-grow:1;padding:.6rem .8rem;border-radius:.375rem;border:1px solid #475569;background-color:#1e293b;color:#e2e8f0;font-size:.9rem;transition:border-color .2s,box-shadow .2s}.topic-input::placeholder{color:#64748b}.topic-input:focus{outline:none;border-color:#38bdf8;box-shadow:0 0 0 3px #38bdf84d}.topic-input:disabled{background-color:#334155;cursor:not-allowed;opacity:.7}.topic-set-button{padding:.6rem 1rem;border-radius:.375rem;border:none;background-image:linear-gradient(to right,#22d3ee,#0ea5e9);color:#fff;font-size:.9rem;font-weight:600;cursor:pointer;transition:all .2s ease-in-out;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 5px #0003}.topic-set-button:hover:not(:disabled){background-image:linear-gradient(to right,#0ea5e9,#22d3ee);box-shadow:0 4px 10px #0ea5e966}.topic-set-button:active:not(:disabled){transform:translateY(1px) scale(.98)}.topic-set-button:disabled{background-image:none;background-color:#475569;cursor:not-allowed;opacity:.6}.topic-set-button svg{transition:transform .2s ease-in-out}.topic-set-button:hover:not(:disabled) svg{transform:rotate(45deg)}.current-gps-display{padding:.8rem 1rem;background-color:#1e293b80;border:1px dashed #475569;border-radius:.75rem;text-align:center;font-size:.85rem;color:#94a3b8;display:flex;align-items:center;justify-content:center}.current-gps-display .icon{margin-right:.6rem;color:#38bdf8}.joystick-area{display:flex;justify-content:center;align-items:center;margin-top:.5rem;margin-bottom:1rem;padding:1.25rem;background-color:#1a202c99;border-radius:1rem;box-shadow:inset 0 2px 8px #0006;min-height:auto}.emergency-stop-button{width:100%;max-width:240px;margin:.5rem auto 0;padding:.9rem 1rem;font-size:1rem;font-weight:600;display:flex;align-items:center;justify-content:center;border-radius:.5rem;transition:background-color .2s ease-in-out,transform .1s ease-out,box-shadow .2s;border:none;color:#fff}.emergency-stop-button svg{margin-right:.75rem}.emergency-stop-button:active:not(:disabled){transform:translateY(1px) scale(.97)}.control-button{box-shadow:0 4px 8px #0003;cursor:pointer}.control-button:disabled{background-color:#475569!important;cursor:not-allowed!important;box-shadow:none;opacity:.6}.stop-button{background-image:linear-gradient(to right,#f87171,#ef4444)}.stop-button:not(:disabled):hover{background-image:linear-gradient(to right,#ef4444,#f87171);box-shadow:0 4px 12px #ef444466}.footer{text-align:center;font-size:.75rem;color:#64748b;margin-top:1rem;padding-top:1rem;border-top:1px solid rgba(71,85,105,.5)}.footer p{margin:.25rem 0}
