*{margin:0;padding:0;box-sizing:border-box}html,body{width:100%;height:100%;overflow:hidden}#root{width:100%;height:100%}.gamepad-display{width:100%;max-width:100%;margin:0 auto}.gamepad-svg{width:100%;height:auto}.gamepad-body{fill:#2a2a2a;stroke:#444;stroke-width:2}.trigger-base{fill:#3a3a3a;stroke:#555;stroke-width:1}.trigger-fill{fill:#666;transition:fill .1s ease}.trigger-fill.pressed{fill:#2196f3;filter:drop-shadow(0 0 4px rgba(33,150,243,.6))}.bumper{fill:#3a3a3a;stroke:#555;stroke-width:1;transition:all .1s ease}.bumper.pressed{fill:#2196f3;filter:drop-shadow(0 0 4px rgba(33,150,243,.6))}.stick-base{fill:#1a1a1a;stroke:#444;stroke-width:2}.stick-knob{fill:#4a4a4a;stroke:#666;stroke-width:2;transition:all .05s ease}.stick-knob.pressed{fill:#2196f3;stroke:#1976d2;filter:drop-shadow(0 0 4px rgba(33,150,243,.8))}.stick-line{stroke:#666;stroke-width:1.5;stroke-dasharray:2,2}.dpad-button{fill:#3a3a3a;stroke:#555;stroke-width:1;transition:all .1s ease}.dpad-button.pressed{fill:#2196f3;filter:drop-shadow(0 0 3px rgba(33,150,243,.6))}.center-button{fill:#3a3a3a;stroke:#555;stroke-width:1;transition:all .1s ease}.center-button.pressed{fill:#2196f3;filter:drop-shadow(0 0 3px rgba(33,150,243,.6))}.xbox-button{fill:#1a1a1a;stroke:#888;stroke-width:2;transition:all .1s ease}.xbox-button.pressed{fill:#4caf50;stroke:#66bb6a;filter:drop-shadow(0 0 6px rgba(76,175,80,.8))}.action-button{stroke-width:2;transition:all .1s ease;opacity:.6}.action-button.pressed{opacity:1;filter:drop-shadow(0 0 6px currentColor)}.a-button{fill:#1b5e20;stroke:#2e7d32}.a-button.pressed{fill:#4caf50;stroke:#66bb6a}.b-button{fill:#b71c1c;stroke:#c62828}.b-button.pressed{fill:#f44336;stroke:#ef5350}.x-button{fill:#0d47a1;stroke:#1565c0}.x-button.pressed{fill:#2196f3;stroke:#42a5f5}.y-button{fill:#f57f17;stroke:#f9a825}.y-button.pressed{fill:#ffeb3b;stroke:#fff176}.button-label{font-size:12px;font-weight:600;fill:#aaa;text-anchor:middle;dominant-baseline:middle;pointer-events:none}.button-label-small{font-size:10px;font-weight:600;fill:#aaa;text-anchor:middle;dominant-baseline:middle;pointer-events:none}.button-label-tiny{font-size:7px;font-weight:600;fill:#aaa;text-anchor:middle;dominant-baseline:middle;pointer-events:none}.action-label{font-size:16px;font-weight:700;fill:#fff;text-anchor:middle;dominant-baseline:middle;pointer-events:none;text-shadow:0 1px 2px rgba(0,0,0,.5)}.xbox-label{font-size:16px;fill:#888;text-anchor:middle;dominant-baseline:middle;pointer-events:none;transition:fill .1s ease}.xbox-button.pressed+text.xbox-label{fill:#fff}.control-panel{padding:16px}.control-section{margin-bottom:20px}.control-section h2{font-size:16px;font-weight:600;margin-bottom:10px;color:#333}.button-group{display:flex;flex-direction:row;gap:8px;margin-bottom:8px}.btn{padding:8px 14px;font-size:14px;font-weight:600;border:none;border-radius:5px;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:6px;flex:1;min-width:0}.btn:hover:not(.disabled){transform:translateY(-2px);box-shadow:0 4px 8px #00000026}.btn:active:not(.disabled){transform:translateY(0)}.btn.disabled{opacity:.5;cursor:not-allowed}.btn-run{background-color:#4caf50;color:#fff}.btn-run:hover:not(.disabled){background-color:#45a049}.btn-stop{background-color:#f44336;color:#fff}.btn-stop:hover:not(.disabled){background-color:#da190b}.btn-download{background-color:#2196f3;color:#fff}.btn-download:hover{background-color:#0b7dda}.btn-upload{background-color:#ff9800;color:#fff}.btn-upload:hover{background-color:#f57c00}.btn-programs{background-color:#9c27b0;color:#fff}.btn-programs:hover{background-color:#7b1fa2}.info-grid{display:flex;flex-direction:column;gap:8px}.info-item{display:flex;justify-content:space-between;padding:8px 12px;background-color:#fff;border-radius:4px;border:1px solid #ddd}.info-label{font-weight:500;color:#666}.info-value{font-weight:600;color:#333}.status-indicator{display:flex;align-items:center;gap:10px;padding:12px 16px;background-color:#fff;border-radius:6px;border:2px solid #ddd}.status-indicator.running{border-color:#4caf50}.status-indicator.stopped{border-color:#999}.status-indicator.connected{border-color:#2196f3}.status-indicator.disconnected{border-color:#ff9800}.status-dot{width:12px;height:12px;border-radius:50%;background-color:#999}.status-indicator.running .status-dot{background-color:#4caf50;animation:pulse 1.5s ease-in-out infinite}.status-indicator.connected .status-dot{background-color:#2196f3;animation:pulse 1.5s ease-in-out infinite}.status-indicator.disconnected .status-dot{background-color:#ff9800}.status-text{font-weight:600;font-size:16px;color:#333}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.error-section{background-color:#fff5f5;border:2px solid #f44336;border-radius:8px;padding:16px}.error-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.error-header h2{margin:0;color:#f44336}.error-dismiss{background:none;border:none;font-size:20px;cursor:pointer;color:#999;padding:0 8px;transition:color .2s}.error-dismiss:hover{color:#f44336}.error-message{background-color:#fff;padding:12px;border-radius:4px;border-left:4px solid #f44336;font-family:Courier New,monospace;font-size:14px;color:#d32f2f;word-break:break-word}.hardware-group{margin-bottom:0}.hardware-group h3{font-size:13px;font-weight:600;color:#666;margin-bottom:6px}.hardware-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:6px}.hardware-item{display:flex;justify-content:space-between;padding:4px 8px;background-color:#fff;border-radius:3px;font-size:12px;border:1px solid #ddd}.hardware-label{font-weight:500;color:#666}.hardware-value{font-weight:600;color:#333;font-family:Courier New,monospace}.led-display{display:flex;align-items:center;gap:12px;padding:8px;background-color:#fff;border-radius:4px;border:1px solid #ddd}.led-preview{width:32px;height:32px;border-radius:50%;border:2px solid #ddd;box-shadow:0 2px 4px #0003}.led-values{display:flex;flex-direction:column;gap:4px;font-size:12px}.led-value{font-weight:600;color:#333;font-family:Courier New,monospace}.gamepad-status{color:#4caf50;font-weight:600;margin-bottom:6px;font-size:11px}.gamepad-status.disconnected{color:#999}.error-item{background-color:#fff5f5;border:1px solid #f44336}.status-compact{display:flex;gap:8px;margin-top:8px}.status-badge{display:flex;align-items:center;gap:6px;padding:6px 12px;background-color:#fff;border-radius:4px;border:2px solid #ddd;font-size:13px;font-weight:600;flex:1}.status-badge.connected{border-color:#2196f3}.status-badge.disconnected{border-color:#ff9800}.status-badge.connecting{border-color:#ffc107;background-color:#ffc1071a}.status-badge.error{border-color:#f44336;background-color:#f443361a}.status-badge.running{border-color:#4caf50}.status-badge.stopped,.status-badge.vm-state{border-color:#999}.status-badge .status-dot{width:8px;height:8px;border-radius:50%;background-color:#999}.status-badge.connected .status-dot{background-color:#2196f3;animation:pulse 1.5s ease-in-out infinite}.status-badge.disconnected .status-dot{background-color:#ff9800}.status-badge.connecting .status-dot{background-color:#ffc107;animation:pulse 1.5s ease-in-out infinite}.status-badge.error .status-dot{background-color:#f44336}.status-badge.running .status-dot{background-color:#4caf50;animation:pulse 1.5s ease-in-out infinite}.vm-error-compact{display:flex;align-items:center;gap:8px;margin-top:8px;padding:8px 12px;background-color:#fff5f5;border-left:3px solid #f44336;border-radius:4px;font-size:13px}.vm-error-compact .error-icon{color:#f44336;font-size:16px}.vm-error-compact .error-text{color:#d32f2f;font-family:Courier New,monospace}.info-compact{display:flex;gap:12px;margin-top:8px;padding:8px 12px;background-color:#fff;border-radius:4px;border:1px solid #ddd;font-size:13px;font-weight:600;color:#666}.variables-compact{margin-top:8px;padding:8px 12px;background-color:#fff;border-radius:4px;border:1px solid #ddd}.variables-header{font-size:13px;font-weight:600;color:#666;margin-bottom:6px}.variables-list{display:grid;grid-template-columns:repeat(2,1fr);gap:6px}.variable-item{display:flex;justify-content:space-between;font-size:12px;padding:4px 8px;background-color:#f9f9f9;border-radius:3px}.variable-name{font-weight:500;color:#666}.variable-value{font-weight:600;color:#333;font-family:Courier New,monospace}.hardware-row{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px}.hardware-row:last-child{margin-bottom:0}.variable-modal-overlay{position:fixed;inset:0;background-color:#00000080;display:flex;align-items:center;justify-content:center;z-index:10000;animation:fadeIn .2s ease-in-out}.variable-modal{background:#fff;border-radius:8px;box-shadow:0 4px 20px #0000004d;min-width:400px;max-width:500px;padding:24px;animation:slideIn .2s ease-out}.variable-modal-title{margin:0 0 20px;font-size:20px;font-weight:600;color:#333}.variable-modal-body{margin-bottom:24px}.variable-modal-label{display:block;margin-bottom:8px;font-size:14px;font-weight:500;color:#555}.variable-modal-input{width:100%;padding:10px 12px;font-size:14px;border:2px solid #ddd;border-radius:4px;outline:none;transition:border-color .2s;box-sizing:border-box}.variable-modal-input:focus{border-color:#4285f4}.variable-modal-input.error{border-color:#d93025}.variable-modal-input::placeholder{color:#aaa}.variable-modal-error{margin-top:8px;font-size:13px;color:#d93025}.variable-modal-actions{display:flex;justify-content:flex-end;gap:12px}.variable-modal-button{padding:10px 24px;font-size:14px;font-weight:500;border:none;border-radius:4px;cursor:pointer;transition:background-color .2s}.variable-modal-button.cancel{background-color:#f1f3f4;color:#5f6368}.variable-modal-button.cancel:hover{background-color:#e8eaed}.variable-modal-button.confirm{background-color:#4285f4;color:#fff}.variable-modal-button.confirm:hover{background-color:#3367d6}.variable-modal-button:active{transform:scale(.98)}.connect-banner{grid-column:1 / -1;grid-row:1;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 16px;padding:10px 16px;background-color:#fff3e0;border-bottom:1px solid #ff9800}.connect-banner-text{display:flex;flex-direction:column;gap:2px;font-size:.875rem;color:#5d4037}.connect-banner-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.connect-banner-download{padding:6px 12px;background-color:#ff9800;color:#fff;border-radius:4px;font-size:.875rem;font-weight:700;text-decoration:none;white-space:nowrap}.connect-banner-download:hover{background-color:#f57c00}.connect-banner-reload{padding:6px 12px;background-color:#fff;color:#5d4037;border:1px solid #ff9800;border-radius:4px;font-size:.875rem;cursor:pointer;white-space:nowrap}.connect-banner-reload:hover{background-color:#ffe0b2}.app-banner-stack{grid-column:1 / -1;grid-row:1;display:flex;flex-direction:column}.app-banner-stack .connect-banner{grid-column:auto;grid-row:auto}.firmware-update-banner{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 16px;padding:10px 16px;background-color:#e8f0fe;border-bottom:1px solid #4285f4}.firmware-update-banner-text{display:flex;flex-direction:column;gap:2px;font-size:.875rem;color:#174ea6}.firmware-update-banner-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.firmware-update-banner-primary,.firmware-update-banner-secondary{padding:6px 12px;border-radius:4px;font-size:.875rem;font-weight:700;cursor:pointer;white-space:nowrap}.firmware-update-banner-primary{background-color:#4285f4;color:#fff;border:1px solid #4285f4}.firmware-update-banner-primary:hover{background-color:#3367d6}.firmware-update-banner-secondary{background-color:#fff;color:#174ea6;border:1px solid #4285f4}.firmware-update-banner-secondary:hover{background-color:#d2e3fc}.firmware-update-section{position:relative}.firmware-update-device{display:grid;gap:8px;margin:0 0 16px;padding:12px;background-color:#f8fafd;border:1px solid #dfe5f2;border-radius:4px}.firmware-update-device div{display:flex;justify-content:space-between;gap:16px;font-size:13px}.firmware-update-device dt{color:#5f6368;font-weight:500}.firmware-update-device dd{color:#202124;font-weight:600;margin:0}.firmware-update-actions{display:flex;align-items:center;gap:10px;margin:12px 0}.firmware-update-actions button{padding:8px 14px;border:1px solid #dadce0;border-radius:4px;background-color:#fff;color:#3c4043;font-size:14px;font-weight:500;cursor:pointer}.firmware-update-actions button:hover:not(:disabled){background-color:#f1f3f4}.firmware-update-actions button:disabled{opacity:.55;cursor:not-allowed}.firmware-update-actions .firmware-update-primary{background-color:#4285f4;border-color:#4285f4;color:#fff}.firmware-update-actions .firmware-update-primary:hover:not(:disabled){background-color:#3367d6}.firmware-update-warning,.firmware-update-note,.firmware-update-message,.firmware-update-message-muted,.firmware-update-error,.firmware-update-stage{display:flex;flex-direction:column;gap:4px;padding:10px 12px;border-radius:4px;font-size:13px;line-height:1.45;margin:10px 0}.firmware-update-warning{background-color:#fff3e0;border:1px solid #ffb74d;color:#5d4037}.firmware-update-warning a{color:#174ea6;font-weight:600}.firmware-update-note{background-color:#fef7e0;border:1px solid #fdd663;color:#5f4b00}.firmware-update-message{background-color:#e6f4ea;border:1px solid #81c995;color:#137333}.firmware-update-message-muted,.firmware-update-stage{background-color:#f1f3f4;border:1px solid #dadce0;color:#3c4043}.firmware-update-error{background-color:#fce8e6;border:1px solid #f5c6cb;color:#d93025}.firmware-update-progress{display:flex;flex-direction:column;gap:6px;margin-top:10px}.firmware-update-progress-label,.firmware-update-progress-bytes{display:flex;justify-content:space-between;gap:12px;color:#3c4043;font-size:13px}.firmware-update-progress-bytes{color:#5f6368;font-size:12px}.firmware-update-progress-track{position:relative;width:100%;height:8px;overflow:hidden;background-color:#e8eaed;border-radius:4px}.firmware-update-progress-bar{height:100%;background-color:#4285f4;border-radius:4px;transition:width .15s ease}.firmware-update-progress-track-indeterminate .firmware-update-progress-bar{position:absolute;width:38%;animation:firmwareUpdateIndeterminate 1.1s ease-in-out infinite}@keyframes firmwareUpdateIndeterminate{0%{left:-40%}to{left:100%}}.firmware-update-blocking-overlay{position:fixed;inset:0;z-index:20000;display:flex;align-items:center;justify-content:center;padding:24px;background-color:#202124ad}.firmware-update-blocking-card{width:min(440px,100%);padding:22px;background-color:#fff;border-radius:8px;box-shadow:0 12px 32px #00000047;color:#202124}.firmware-update-blocking-card strong{display:block;margin-bottom:10px;color:#d93025;font-size:16px}.firmware-update-blocking-card>span{display:block;color:#3c4043;font-size:14px}.mode-badge{display:inline-flex;align-items:center;gap:.25em;padding:.1rem .5rem;border-radius:999px;font-size:.75rem;font-weight:600;line-height:1.6;white-space:nowrap;-webkit-user-select:none;user-select:none}.mode-badge-embedded{background-color:#e8f5e9;color:#2e7d32;border:1px solid #a5d6a7}.mode-badge-cloud{background-color:#e3f2fd;color:#1565c0;border:1px solid #90caf9}.cloud-appbar{grid-row:2;grid-column:1 / -1;display:flex;align-items:center;gap:12px;height:48px;padding:0 14px;background:#1f2733;color:#fff}.cab-brand{font-weight:700;font-size:15px;white-space:nowrap}.cab-filemenu,.cab-acct-wrap{position:relative}.cab-title-btn{display:flex;align-items:center;gap:8px;background:#2b3543;border:1px solid #3a4757;color:#fff;border-radius:6px;padding:6px 12px;cursor:pointer;font-size:14px;font-weight:600;max-width:360px}.cab-title-btn:hover{background:#333f50}.cab-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cab-caret{opacity:.7;font-size:11px}.cab-dirty{color:#ffca6b;font-size:12px;font-weight:700;white-space:nowrap}.cab-chip{font-size:11px;font-weight:700;border-radius:9px;padding:2px 8px;white-space:nowrap}.cab-chip-ro{color:#5a4a00;background:#ffe9a8}.cab-chip-admin{color:#fff;background:#e65100}.cab-save{background:#2e7d32;border:none;color:#fff;border-radius:6px;padding:7px 16px;font-size:14px;font-weight:700;cursor:pointer;white-space:nowrap}.cab-save:hover{background:#276b2b}.cab-publish{background:#e65100}.cab-publish:hover{background:#c95600}.cab-spacer{flex:1}.cab-right{display:flex;align-items:center}.cab-login-links{display:flex;align-items:center;gap:12px;font-size:14px}.cab-link{color:#cdd6e2;text-decoration:none}.cab-link:hover{color:#fff;text-decoration:underline}.cab-link-primary{color:#8ec5ff;font-weight:700}.cab-acct{display:flex;align-items:center;gap:8px;background:#2b3543;border:1px solid #3a4757;border-radius:20px;padding:4px 10px 4px 4px;cursor:pointer;color:#fff;max-width:280px}.cab-avatar{width:26px;height:26px;border-radius:50%;background:#4285f4;color:#fff;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex:none}.cab-avatar.admin{background:#e65100}.cab-acct-name{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cab-admin-pill{font-size:10px;font-weight:700;color:#ffd9b0;background:#7a3b00;border-radius:9px;padding:1px 6px;white-space:nowrap}.cab-menu{position:absolute;top:42px;left:0;min-width:230px;background:#fff;color:#222;border:1px solid #e2e2e2;border-radius:8px;box-shadow:0 8px 28px #00000038;padding:6px;z-index:40000}.cab-menu-right{left:auto;right:0}.cab-mi{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:9px 10px;border:none;background:none;border-radius:6px;font-size:14px;cursor:pointer;color:#333;text-decoration:none}.cab-mi:hover{background:#f1f4f8}.cab-k{width:18px;text-align:center}.cab-locked{color:#999}.cab-admin{color:#e65100}.cab-sep{height:1px;background:#eee;margin:6px 4px}.cab-cap{font-size:11px;color:#999;padding:6px 10px 2px;font-weight:700}.cab-logout-form{margin:0}.dlg-overlay{position:fixed;inset:0;background:#00000073;z-index:60000;display:flex;align-items:center;justify-content:center}.dlg{width:380px;max-width:92vw;background:#fff;border-radius:10px;padding:20px;box-shadow:0 12px 40px #0000004d}.dlg-msg{font-size:14px;color:#333;line-height:1.6;white-space:pre-wrap}.dlg-input{width:100%;margin-top:14px;padding:9px 10px;border:1px solid #ddd;border-radius:6px;font-size:14px}.dlg-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:18px}.dlg-btn{padding:8px 16px;border:1px solid #ddd;background:#fafafa;border-radius:6px;font-size:14px;font-weight:600;cursor:pointer;color:#333}.dlg-btn:hover{background:#f0f0f0}.dlg-primary{background:#1565c0;border-color:#1565c0;color:#fff}.dlg-primary:hover{background:#114a98}.om-overlay{position:fixed;inset:0;background:#00000073;z-index:50000;display:flex;align-items:center;justify-content:center}.om-modal{width:540px;max-width:92vw;max-height:80vh;background:#fff;border-radius:10px;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 12px 40px #0000004d}.om-head{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid #eee}.om-head h3{margin:0;font-size:17px}.om-close{border:none;background:none;font-size:22px;cursor:pointer;color:#999}.om-tabs{display:flex;gap:4px;padding:8px 18px 0;border-bottom:1px solid #f0f0f0}.om-tab{border:none;background:none;font-size:14px;font-weight:600;color:#888;cursor:pointer;padding:8px 14px;border-bottom:2px solid transparent;margin-bottom:-1px}.om-tab.on{color:#1565c0;border-bottom-color:#1565c0}.om-error{margin:10px 18px 0;padding:8px 12px;background:#fff5f5;border:1px solid #f44336;border-radius:6px;color:#c62828;font-size:13px}.om-body{overflow-y:auto;padding:12px 18px 18px}.om-empty{font-size:13px;color:#999;text-align:center;padding:24px}.om-list{display:flex;flex-direction:column;gap:6px}.om-item{display:flex;align-items:center;gap:8px;padding:0 10px 0 0;background:#fff;border:1px solid #ddd;border-radius:5px}.om-item:hover{border-color:#bbb;background:#fafcff}.om-item-main{flex:1;min-width:0;text-align:left;border:none;background:none;cursor:pointer;padding:9px 10px}.om-name{font-size:14px;font-weight:600;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.om-date{font-size:11px;color:#999;margin-top:2px}.om-icon{border:none;background:none;cursor:pointer;font-size:15px;color:#888;padding:6px;border-radius:4px}.om-icon:hover{background:#eee;color:#333}.settings-overlay{position:fixed;inset:0;background-color:#00000080;display:flex;align-items:center;justify-content:center;z-index:10000;animation:fadeIn .2s ease-in-out}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.settings-panel{background:#fff;border-radius:8px;box-shadow:0 4px 20px #0000004d;min-width:500px;max-width:600px;max-height:80vh;display:flex;flex-direction:column;animation:slideIn .2s ease-out}@keyframes slideIn{0%{transform:translateY(-20px);opacity:0}to{transform:translateY(0);opacity:1}}.settings-header{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:1px solid #e0e0e0}.settings-header h2{margin:0;font-size:20px;font-weight:600;color:#333}.close-button{background:none;border:none;font-size:24px;color:#666;cursor:pointer;padding:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:background-color .2s}.close-button:hover{background-color:#f1f3f4}.settings-content{padding:24px;overflow-y:auto;flex:1}.settings-loading{text-align:center;padding:40px;color:#666;font-size:16px}.settings-error,.settings-success{padding:12px 16px;border-radius:4px;margin-bottom:20px;font-size:14px}.settings-error{background-color:#fce8e6;color:#d93025;border:1px solid #f5c6cb}.settings-success{background-color:#e6f4ea;color:#137333;border:1px solid #c6e1c6}.settings-section{margin-bottom:28px}.settings-section:last-child{margin-bottom:0}.settings-section h3{margin:0 0 16px;font-size:16px;font-weight:600;color:#333;border-bottom:2px solid #4285f4;padding-bottom:8px}.settings-item{margin-bottom:16px}.settings-item:last-child{margin-bottom:0}.settings-item label{display:block;font-size:14px;color:#555;font-weight:500}.settings-item input[type=checkbox],.settings-item input[type=radio]{margin-right:8px;cursor:pointer}.settings-item .radio-group{margin-top:8px;display:flex;flex-direction:column;gap:8px}.settings-item .radio-group label{display:flex;align-items:center;font-weight:400}.settings-item input[type=text],.settings-item input[type=password],.settings-item input[type=number]{width:100%;padding:8px 12px;font-size:14px;border:2px solid #ddd;border-radius:4px;outline:none;transition:border-color .2s;box-sizing:border-box;margin-top:6px}.settings-item input[type=text]:focus,.settings-item input[type=password]:focus,.settings-item input[type=number]:focus{border-color:#4285f4}.settings-item .unit{margin-left:8px;color:#666;font-size:14px}.help-text{display:block;margin-top:4px;font-size:12px;color:#666;font-weight:400}.warning-text{color:#ea8600;font-size:13px;font-weight:400}.settings-footer{display:flex;justify-content:flex-end;gap:12px;padding:16px 24px;border-top:1px solid #e0e0e0}.settings-footer button{padding:10px 24px;font-size:14px;font-weight:500;border:none;border-radius:4px;cursor:pointer;transition:background-color .2s,opacity .2s}.save-button{background-color:#4285f4;color:#fff}.save-button:hover:not(:disabled){background-color:#3367d6}.save-button:disabled{opacity:.5;cursor:not-allowed}.reset-button{background-color:#f1f3f4;color:#5f6368}.reset-button:hover:not(:disabled){background-color:#e8eaed}.reset-button:disabled{opacity:.5;cursor:not-allowed}.cancel-button{background-color:#f1f3f4;color:#5f6368}.cancel-button:hover{background-color:#e8eaed}.settings-footer button:active{transform:scale(.98)}.version-info{font-size:.75rem;color:#999;font-family:Courier New,monospace;white-space:nowrap}.version-info-error{color:#ff6b6b}#app{width:100%;height:100vh;margin:0;padding:0;display:grid;grid-template-columns:1fr 500px;grid-template-rows:auto auto minmax(0,1fr) auto;gap:0}.version-footer{grid-column:1 / -1;grid-row:4;padding:.25rem .5rem;background-color:#fafafa;border-top:1px solid #ddd;text-align:center}.editor-panel{grid-row:3;width:100%;height:100%;overflow:hidden}.control-panel{grid-row:3;width:100%;height:100%;background-color:#f5f5f5;border-left:1px solid #ddd;display:flex;flex-direction:column;overflow-y:auto}.blockly-workspace-wrapper{position:relative;width:100%;height:100%}.blockly-container{width:100%;height:100%}.blockly-readonly-overlay{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#000c;color:#fff;padding:20px 40px;border-radius:8px;font-size:18px;font-weight:700;pointer-events:none;z-index:1000}.settings-button{position:fixed;bottom:16px;right:16px;width:48px;height:48px;background-color:#4285f4;color:#fff;border:none;border-radius:50%;font-size:24px;cursor:pointer;box-shadow:0 2px 8px #0003;transition:background-color .2s,transform .1s,box-shadow .2s;z-index:9999;display:flex;align-items:center;justify-content:center}.settings-button:hover{background-color:#3367d6;box-shadow:0 4px 12px #0000004d}.settings-button:active{transform:scale(.95)}.blocklyDropDownContent{overflow-y:auto}
