.blockly-div[data-v-add33a33]{width:100%;height:100%}.serial-terminal[data-v-df3eb3fe]{color:#d4d4d4;background:#1e1e1e;flex-direction:column;height:100%;font-family:Consolas,Monaco,Courier New,monospace;font-size:12px;display:flex}.terminal-header[data-v-df3eb3fe]{background-color:#2d2d30;border-bottom:1px solid #333;flex-shrink:0;justify-content:space-between;align-items:center;padding:10px 15px;display:flex}.terminal-header h3[data-v-df3eb3fe]{color:#d4d4d4;margin:0;font-size:14px}.terminal-controls[data-v-df3eb3fe]{align-items:center;gap:8px;display:flex}.status-dot[data-v-df3eb3fe]{border-radius:50%;width:8px;height:8px}.status-dot.connected[data-v-df3eb3fe]{background:#4caf50;box-shadow:0 0 4px #4caf50}.status-dot.disconnected[data-v-df3eb3fe]{background:#666}.status-text[data-v-df3eb3fe]{color:#999;font-size:11px}.clear-btn[data-v-df3eb3fe]{cursor:pointer;color:#d4d4d4;background-color:#333;border:none;border-radius:3px;align-items:center;gap:4px;padding:4px 8px;font-size:12px;transition:all .2s;display:flex}.clear-btn[data-v-df3eb3fe]:hover{background-color:#444}.clear-btn:hover svg[data-v-df3eb3fe]{stroke:#e74c3c}.terminal-body[data-v-df3eb3fe]{-webkit-user-select:text;user-select:text;background-color:#1e1e1e;flex:1;padding:10px;line-height:1.4;overflow-y:auto}.terminal-line[data-v-df3eb3fe]{white-space:pre-wrap;word-break:break-all;background-color:#1a1a1a;border-left:3px solid #333;border-radius:3px;margin-bottom:4px;padding:4px 8px}.terminal-placeholder[data-v-df3eb3fe]{color:#666;text-align:center;padding:20px;font-style:italic}.terminal-body[data-v-df3eb3fe]::-webkit-scrollbar{width:6px}.terminal-body[data-v-df3eb3fe]::-webkit-scrollbar-track{background:#2d2d30}.terminal-body[data-v-df3eb3fe]::-webkit-scrollbar-thumb{background:#5a5a5c;border-radius:3px}.terminal-body[data-v-df3eb3fe]::-webkit-scrollbar-thumb:hover{background:#6e6e70}.terminal-input-row[data-v-df3eb3fe]{background:#2d2d30;border-top:1px solid #333;flex-shrink:0;align-items:center;gap:8px;padding:8px 10px;display:flex}.repl-prompt[data-v-df3eb3fe]{color:#4caf50;-webkit-user-select:none;user-select:none;font-size:12px;font-weight:700}.repl-input[data-v-df3eb3fe]{color:#d4d4d4;background:#1e1e1e;border:1px solid #3e3e42;border-radius:4px;outline:none;flex:1;padding:6px 8px;font-family:Consolas,Monaco,Courier New,monospace;font-size:12px}.repl-input[data-v-df3eb3fe]:focus{border-color:#4caf50}.repl-input[data-v-df3eb3fe]:disabled{opacity:.5;cursor:not-allowed}.send-btn[data-v-df3eb3fe]{cursor:pointer;color:#d4d4d4;background-color:#3c3c3c;border:1px solid #3e3e42;border-radius:4px;padding:5px 12px;font-size:12px;transition:all .2s}.send-btn[data-v-df3eb3fe]:hover:not(:disabled){background-color:#464647;border-color:#4caf50}.send-btn[data-v-df3eb3fe]:disabled{opacity:.4;cursor:not-allowed}*{box-sizing:border-box;margin:0;padding:0}html,body{background:#1b173d;width:100vw;height:100vh;margin:0;padding:0;overflow:hidden}#app{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#2c3e50;flex-direction:column;width:100vw;height:100vh;margin:0;padding:0;font-family:Avenir,Helvetica,Arial,sans-serif;display:flex;overflow:hidden}.modal-mask{z-index:2000;background:#00000080;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.file-modal{background:#fff;border-radius:12px;flex-direction:column;width:420px;max-width:90vw;max-height:72vh;display:flex;overflow:hidden;box-shadow:0 12px 40px #0000004d}.file-modal-title{color:#2c3e50;border-bottom:1px solid #eee;justify-content:space-between;align-items:center;padding:14px 16px;font-size:15px;font-weight:600;display:flex}.file-modal-close{color:#999;cursor:pointer;background:0 0;border:none;padding:0 2px;font-size:20px;line-height:1}.file-modal-close:hover{color:#333}.file-modal-body{flex:1;padding:16px;overflow-y:auto}.file-label{color:#666;margin-bottom:6px;font-size:13px;display:block}.file-input{border:1px solid #ddd;border-radius:6px;outline:none;width:100%;padding:8px 10px;font-size:14px}.file-input:focus{border-color:#338fe2}.file-hint{color:#999;margin-top:8px;font-size:12px;line-height:1.5}.file-loading,.file-empty{text-align:center;color:#999;padding:24px 0;font-size:13px}.file-item{cursor:pointer;color:#2c3e50;text-align:left;background:#f7f8fa;border:1px solid #eee;border-radius:8px;align-items:center;gap:10px;width:100%;margin-bottom:6px;padding:10px 12px;font-size:14px;display:flex}.file-item:hover{background:#eef5fd;border-color:#338fe2}.file-ext{letter-spacing:.5px;color:#fff;background:#338fe2;border-radius:4px;flex-shrink:0;padding:2px 6px;font-size:10px;font-weight:700}.file-ext.luwu{background:#9b59b6}.file-item-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ble-rssi{color:#999;flex-shrink:0;margin-left:auto;font-size:11px}.code-view-body{flex-direction:column;display:flex}.code-view{color:#f8f8f2;white-space:pre-wrap;word-break:break-all;background:#2c3e50;border-radius:8px;flex:1;max-height:40vh;margin-top:8px;padding:12px;font-family:Menlo,Consolas,monospace;font-size:12px;line-height:1.5;overflow:auto}.file-error{color:#e74c3c;padding:0 16px 8px;font-size:12px}.file-modal-actions{border-top:1px solid #eee;justify-content:flex-end;gap:8px;padding:12px 16px;display:flex}.modal-btn{color:#4a5568;cursor:pointer;background:#f0f1f3;border:1px solid #e0e2e6;border-radius:6px;padding:7px 18px;font-size:13px;transition:all .15s}.modal-btn:hover{background:#e4e7eb}.modal-btn:disabled{opacity:.5;cursor:not-allowed}.modal-btn.primary{color:#fff;background:#338fe2;border-color:#338fe2;font-weight:600}.modal-btn.primary:hover{background:#2a7bc7}.modal-btn.primary:disabled{background:#a8c8ec;border-color:#a8c8ec}.fw-option{cursor:pointer;background:#f7f8fa;border:2px solid #eee;border-radius:8px;margin-bottom:8px;padding:12px 14px;transition:all .15s}.fw-option:hover{border-color:#b8d9f7}.fw-option.active{background:#eef5fd;border-color:#338fe2}.fw-option-name{color:#2c3e50;font-size:14px;font-weight:600}.fw-option-desc{color:#999;margin-top:4px;font-size:12px}.flash-status{color:#2c3e50;word-break:break-all;font-size:13px;line-height:1.6}.flash-status.error{color:#e74c3c}.flash-progress{background:#eee;border-radius:5px;height:10px;margin-top:14px;overflow:hidden}.flash-progress-bar{background:#338fe2;border-radius:5px;height:100%;transition:width .2s}.flash-progress-text{color:#999;text-align:right;margin-top:8px;font-size:12px}.erase-option{color:#666;cursor:pointer;align-items:center;gap:8px;margin-top:12px;font-size:13px;display:flex}.erase-option input{accent-color:#338fe2;cursor:pointer;width:15px;height:15px}#toolbar{background-color:#1b173d;flex-shrink:0;justify-content:space-between;align-items:center;height:50px;padding:0 15px;display:flex;box-shadow:0 2px 4px #0000001a}.toolbar-left{align-items:center;gap:8px;display:flex}.app-title{color:#ffffffe6;letter-spacing:.5px;font-size:18px;font-weight:700}.app-logo{width:auto;height:28px;display:block}.toolbar-right{align-items:center;gap:6px;display:flex}.toolbar-center{gap:4px;margin-right:10px;display:flex}.board-selector-wrapper{position:relative}.mode-toggle{background:#ffffff14;border:1px solid #ffffff26;border-radius:7px;gap:2px;margin-left:10px;padding:2px;display:flex}.mode-btn{color:#9ca3af;cursor:pointer;background:0 0;border:none;border-radius:5px;padding:4px 12px;font-size:12px;transition:all .2s}.mode-btn:hover{color:#e5e7eb}.mode-btn.active{color:#fff;background:#338fe2}#python-editor{background:#1e1e1e;flex:1;min-width:0}.docs-modal{color:#d4d4d4;background:#1e1e2a;border:1px solid #3e3e4a;border-radius:12px;flex-direction:column;width:min(960px,92vw);height:min(700px,86vh);display:flex;overflow:hidden;box-shadow:0 12px 40px #0006}.docs-header{background:#1a1a24;border-bottom:1px solid #333;flex-shrink:0;align-items:center;gap:12px;padding:12px 16px;display:flex}.docs-title{color:#fff;white-space:nowrap;font-size:15px;font-weight:600}.docs-search{color:#e5e7eb;background:#262633;border:1px solid #3e3e4a;border-radius:6px;outline:none;flex:1;padding:6px 10px;font-size:13px}.docs-search:focus{border-color:#338fe2}.docs-body{flex:1;min-height:0;display:flex}.docs-nav{border-right:1px solid #333;flex-direction:column;flex-shrink:0;gap:4px;width:150px;padding:10px 8px;display:flex;overflow-y:auto}.docs-nav-btn{color:#9ca3af;text-align:left;cursor:pointer;background:0 0;border:none;border-radius:6px;padding:7px 10px;font-size:13px}.docs-nav-btn:hover{color:#e5e7eb;background:#ffffff0f}.docs-nav-btn.active{color:#fff;background:#338fe2}.docs-content{flex:1;padding:14px 18px;overflow-y:auto}.docs-entry{margin-bottom:18px}.docs-sig{color:#7dd3fc;background:#338fe21f;border:1px solid #338fe24d;border-radius:6px;padding:6px 10px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:13px;display:inline-block}.docs-desc{color:#b8bcc8;margin:8px 2px;font-size:13px}.docs-code-wrap{position:relative}.docs-code{color:#a6e3a1;white-space:pre;background:#14141c;border:1px solid #2c2c38;border-radius:6px;padding:10px 12px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:12.5px;overflow-x:auto}.docs-copy{color:#9ca3af;cursor:pointer;background:#2c2c38;border:none;border-radius:4px;padding:2px 7px;font-size:12px;position:absolute;top:6px;right:6px}.docs-copy:hover{color:#fff;background:#3c3c48}.docs-empty{color:#9ca3af;text-align:center;padding:20px 0;font-size:13px}.board-btn{gap:8px;padding:0 10px 0 4px}.board-img{object-fit:cover;background:#ffffff1a;border-radius:50%;flex-shrink:0;width:22px;height:22px}.board-img.large{width:40px;height:40px}.board-img-placeholder{color:#fff;background:linear-gradient(135deg,#6366f1,#8b5cf6);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:22px;height:22px;font-size:11px;font-weight:700;display:flex}.board-img-placeholder.large{width:40px;height:40px;font-size:18px}.board-name{font-size:13px;font-weight:500}.board-arrow{opacity:.6;transition:transform .2s}.board-arrow.open{transform:rotate(180deg)}.board-dropdown{z-index:1000;background:#1e1b3a;border:1px solid #ffffff26;border-radius:10px;min-width:210px;position:absolute;top:calc(100% + 6px);left:0;overflow:hidden;box-shadow:0 8px 30px #0006}.board-option{color:#e2e8f0;cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:12px;width:100%;padding:10px 14px;transition:background .15s;display:flex}.board-option:hover{background:#6366f140}.board-option:disabled{opacity:.45;cursor:not-allowed}.board-option:disabled:hover{background:0 0}.board-option.active{background:#6366f12e}.board-option+.board-option{border-top:1px solid #ffffff14}.board-option-text{flex-direction:column;gap:2px;display:flex}.board-option-name{font-size:14px;font-weight:600}.board-option-desc{color:#ffffff80;font-size:11px}.toolbar-btn{box-sizing:border-box;color:#ffffffd9;cursor:pointer;white-space:nowrap;background:#ffffff12;border:1px solid #ffffff1f;border-radius:5px;align-items:center;gap:5px;height:32px;padding:6px 11px;font-size:13px;font-weight:400;transition:background .15s,border-color .15s,color .15s;display:flex}.toolbar-btn:hover{color:#fff;background:#ffffff21;border-color:#ffffff38}.toolbar-btn:disabled{color:#ffffff4d;cursor:not-allowed;background:0 0;border-color:#ffffff0f}.btn-icon{flex-shrink:0;justify-content:center;align-items:center;font-size:14px;display:flex}.connect-btn{border-color:#ffffff2e}.connect-btn.connected{color:#4ade80;background:#4ade8014;border-color:#4ade8059}.connect-btn.ble.connected{color:#60a5fa;background:#60a5fa14;border-color:#60a5fa59}.connect-wrapper{position:relative}.connect-dropdown{z-index:1000;background:#1e1b3a;border:1px solid #ffffff26;border-radius:8px;min-width:120px;position:absolute;top:calc(100% + 6px);left:0;overflow:hidden;box-shadow:0 8px 30px #0006}.connect-option{color:#e2e8f0;cursor:pointer;background:0 0;border:none;align-items:center;gap:10px;width:100%;padding:10px 16px;font-size:14px;transition:background .15s;display:flex}.connect-option:hover{background:#6366f140}.connect-option+.connect-option{border-top:1px solid #ffffff14}.run-btn{color:#86efac;border-color:#86efac4d}.run-btn:hover:not(:disabled){color:#bbf7d0;background:#86efac1a;border-color:#86efac80}.stop-btn{color:#fca5a5;border-color:#fca5a54d}.stop-btn:hover:not(:disabled){color:#fecaca;background:#fca5a51a;border-color:#fca5a580}.upload-btn{color:#7dd3fc;border-color:#7dd3fc4d}.upload-btn:hover:not(:disabled){color:#bae6fd;background:#7dd3fc1a;border-color:#7dd3fc80}.reset-btn:disabled{color:#ffffff40;background:0 0;border-color:#ffffff0f}.toolbar-btn.calibrating{color:#1f2937;background:#fbbf24;border-color:#fbbf24}.toolbar-btn.calibrating:hover:not(:disabled){background:#fcd34d;border-color:#fcd34d}.calib-banner{color:#fcd34d;text-align:center;background:#fbbf2426;border-bottom:1px solid #fbbf2466;padding:6px 16px;font-size:13px}.main-content{flex:1;width:100%;height:calc(100vh - 50px);display:flex;position:relative;overflow:hidden}#blockly-wrapper{flex:1;min-width:0;position:relative;overflow:hidden}.split-v{cursor:col-resize;z-index:5;background:0 0;flex-shrink:0;width:6px;margin:0 -3px;transition:background .2s}.split-v:hover{background:#338fe299}.split-h{cursor:row-resize;z-index:5;background:0 0;flex-shrink:0;height:6px;margin:-3px 0;transition:background .2s}.split-h:hover{background:#338fe299}#code-panel{background-color:#0f0f0f;border-left:1px solid #333;flex-direction:column;width:40%;display:flex}.code-section{border-bottom:1px solid #333;flex-direction:column;flex:0 0 50%;min-height:0;display:flex;overflow:hidden}.code-header{background-color:#1a1a1a;border-bottom:1px solid #333;flex-shrink:0;justify-content:space-between;align-items:center;padding:10px 15px;display:flex}.code-header h3{color:#d4d4d4;margin:0;font-size:14px}.copy-btn{color:#ccc;cursor:pointer;background:#3c3c3c;border:1px solid #3e3e42;border-radius:4px;justify-content:center;align-items:center;padding:6px;font-size:12px;transition:all .2s;display:flex}.copy-btn:hover{background-color:#464647;border-color:#5a5a5c}.ace-editor-wrapper{background-color:#1e1e1e;border:none;flex:1;min-height:0}.ace-editor-wrapper .ace_content{background-color:#1e1e1e!important}.ace-editor-wrapper .ace_gutter{color:#858585!important;background-color:#1e1e1e!important}.ace-editor-wrapper .ace_scroller{background-color:#1e1e1e!important}.log-section{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.blocklyToolboxDiv{box-shadow:2px 0 12px #0000000f;background:#fff!important;border-right:1px solid #e8e8e8!important;width:150px!important;padding:8px!important;overflow:hidden auto!important}.blocklyToolboxContents{padding:0!important}.blocklyTreeRow{background:0 0!important;border-left:none!important;height:auto!important;margin:0!important;padding:0!important;line-height:normal!important}.blocklyTreeIcon:not(.toolbox-icon){display:none!important}.toolbox-row{cursor:pointer!important;border-left:none!important;border-radius:8px!important;flex-direction:row!important;align-items:center!important;height:48px!important;min-height:auto!important;margin:0 4px 4px!important;padding:8px!important;transition:all .2s!important;display:flex!important}.toolbox-row:hover{background:var(--cat-color,#f3f4f6)!important}.toolbox-row.blocklyTreeSelected{background:var(--cat-color,#eef2ff)!important}.toolbox-row .blocklyTreeRowContentContainer{flex-direction:row!important;align-items:center!important;gap:10px!important;width:100%!important;display:flex!important}.toolbox-icon{width:32px!important;min-width:32px!important;height:32px!important;box-shadow:none!important;background-color:#0000!important;border:none!important;border-radius:50%!important;flex-shrink:0!important;justify-content:center!important;align-items:center!important;display:flex!important}.blocklyToolboxDiv .blocklyTreeIcon{background-color:#0000!important}.icon-robot,.icon-motion,.icon-actions,.icon-servo,.icon-sensors,.icon-display,.icon-laser,.icon-audio,.icon-camera,.icon-button,.icon-gamepad,.icon-control,.icon-operators,.icon-data,.icon-variables,.icon-function{background-position:50%!important;background-repeat:no-repeat!important;background-size:28px 28px!important}.icon-robot{background-image:url(../icons/cat-robot.png)!important}.icon-motion{background-image:url(../icons/cat-motion.svg)!important}.icon-actions{background-image:url(../icons/cat-actions.png)!important}.icon-servo{background-image:url(../icons/cat-servo.svg)!important}.icon-sensors{background-image:url(../icons/cat-sensors.png)!important}.icon-display{background-image:url(../icons/cat-display.png)!important}.icon-laser{background-image:url(../icons/cat-laser.png)!important}.icon-audio{background-image:url(../icons/cat-audio.png)!important}.icon-camera{background-image:url(../icons/cat-camera.png)!important}.icon-button{background-image:url(../icons/cat-button.png)!important}.icon-gamepad{background-image:url(../icons/cat-gamepad.svg)!important}.icon-control{background-image:url(../icons/cat-control.png)!important}.icon-operators{background-image:url(../icons/cat-operators.png)!important}.icon-data{background-image:url(../icons/cat-data.png)!important}.icon-variables{background-image:url(../icons/cat-variables.png)!important}.icon-function{background-image:url(../icons/cat-function.svg)!important}.toolbox-label{color:#6b7280!important;letter-spacing:.3px!important;white-space:nowrap!important;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif!important;font-size:14px!important;font-weight:500!important;line-height:1.2!important}.toolbox-row:hover .toolbox-label{color:#fff!important}.toolbox-row.blocklyTreeSelected .toolbox-label{color:#fff!important;font-weight:600!important}.blocklyTreeSeparator{background:#e5e7eb!important;border:none!important;height:1px!important;margin:8px 12px!important;padding:0!important}.blocklyFlyoutBackground{fill:#191923e0!important;fill-opacity:1!important}.blocklyFlyout{min-width:300px!important}.blocklyFlyout .blocklyFlyoutLabel text{fill:#ffffff8c!important;letter-spacing:1px!important;text-transform:uppercase!important;font-size:13px!important;font-weight:500!important}.blocklyFlyout .flyout-header text{fill:#fff!important;letter-spacing:1.5px!important;font-size:20px!important;font-weight:700!important}.blocklyFlyoutScrollbar .blocklyScrollbarHandle{rx:3;ry:3;fill:#fff3!important}.blocklyToolboxDiv::-webkit-scrollbar{width:4px}.blocklyToolboxDiv::-webkit-scrollbar-track{background:0 0}.blocklyToolboxDiv::-webkit-scrollbar-thumb{background:#ddd;border-radius:2px}.blocklyPathDark{visibility:hidden!important;opacity:0!important;display:none!important}.blocklyDiv .blocklyTrash{visibility:visible!important;display:block!important}
