:root{--pybricks-blue: #0088ce;--bg-primary: #1e1e1e;--bg-secondary: #252526;--bg-tertiary: #2d2d30;--bg-hover: #3e3e42;--bg-active: #094771;--text-primary: #cccccc;--text-secondary: #858585;--text-bright: #ffffff;--border-color: #3e3e42;--toolbar-bg: #333333;--statusbar-bg: #007acc;--terminal-bg: #1e1e1e;--success: #4caf50;--warning: #ff9800;--error: #f44336;--info: #2196f3}.app.light{--bg-primary: #ffffff;--bg-secondary: #f3f3f3;--bg-tertiary: #e8e8e8;--bg-hover: #e0e0e0;--bg-active: #cce5ff;--text-primary: #333333;--text-secondary: #666666;--text-bright: #000000;--border-color: #d4d4d4;--toolbar-bg: #f0f0f0;--statusbar-bg: #007acc;--terminal-bg: #f8f8f8}*{margin:0;padding:0;box-sizing:border-box}html,body,#root{width:100%;height:100%;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.app{display:flex;flex-direction:column;height:100vh;background:var(--bg-primary);color:var(--text-primary)}.toolbar{display:flex;align-items:center;justify-content:space-between;height:44px;padding:0 8px;background:var(--toolbar-bg);border-bottom:1px solid var(--border-color);flex-shrink:0;gap:8px}.toolbar-group{display:flex;align-items:center;gap:4px}.toolbar-center{flex:0 0 auto}.toolbar-center .toolbar-group,.toolbar-center{gap:6px}.toolbar-right{justify-content:flex-end}.toolbar-separator{width:1px;height:20px;background:var(--border-color);margin:0 4px}.toolbar-btn{display:flex;align-items:center;gap:6px;padding:4px 10px;border:none;background:transparent;color:var(--text-primary);border-radius:4px;cursor:pointer;font-size:12px;height:32px;transition:background .15s,color .15s;white-space:nowrap}.toolbar-btn:hover{background:var(--bg-hover)}.toolbar-btn:active{background:var(--bg-active)}.toolbar-btn.active{background:var(--bg-active);color:var(--text-bright)}.toolbar-btn:disabled{opacity:.4;cursor:not-allowed}.toolbar-btn.run-btn:not(:disabled):hover{background:#4caf5033;color:#4caf50}.toolbar-btn.stop-btn:not(:disabled):hover{background:#f4433633;color:#f44336}.toolbar-label{font-size:12px}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}.pulse{animation:pulse 1.5s infinite}.editor-mode-toggle{display:flex;background:var(--bg-secondary);border-radius:6px;padding:2px;border:1px solid var(--border-color)}.mode-btn{display:flex;align-items:center;gap:4px;padding:4px 14px;border:none;background:transparent;color:var(--text-secondary);border-radius:4px;cursor:pointer;font-size:12px;font-weight:500;transition:all .2s}.mode-btn:hover{color:var(--text-primary)}.mode-btn.active{background:var(--pybricks-blue);color:#fff;box-shadow:0 1px 3px #0003}.status-indicators{display:flex;align-items:center;gap:6px;padding:0 8px}.battery-text{font-size:11px;color:var(--text-secondary)}.main-content{display:flex;flex:1;overflow:hidden}.resize-handle{flex-shrink:0;background:transparent;transition:background .15s;z-index:10}.resize-handle:hover,.resize-handle:active{background:var(--accent-color)}.resize-handle-h{width:4px;cursor:col-resize}.resize-handle-v{height:4px;cursor:row-resize}.file-explorer-wrapper{flex-shrink:0;display:flex;overflow:hidden}.file-explorer{width:100%;background:var(--bg-secondary);border-right:1px solid var(--border-color);display:flex;flex-direction:column;flex-shrink:0;overflow:hidden}.file-explorer-header{display:flex;align-items:center;gap:6px;padding:8px 12px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-secondary);border-bottom:1px solid var(--border-color)}.file-explorer-action{margin-left:auto;background:none;border:none;color:var(--text-secondary);cursor:pointer;padding:2px;border-radius:3px;display:flex;align-items:center}.file-explorer-action:hover{color:var(--text-primary);background:var(--bg-hover)}.file-explorer-list{flex:1;overflow-y:auto;padding:4px 0}.file-explorer-examples{display:flex;gap:6px;padding:8px 10px;border-bottom:1px solid var(--border-color)}.file-explorer-example-select{flex:1;min-width:0;border:1px solid var(--border-color);border-radius:4px;background:var(--bg-primary);color:var(--text-primary);font-size:12px;padding:4px 6px}.file-explorer-example-select:focus{outline:none;border-color:var(--pybricks-blue)}.file-explorer-example-load{border:1px solid var(--border-color);border-radius:4px;background:var(--bg-secondary);color:var(--text-primary);font-size:12px;padding:4px 8px;cursor:pointer;white-space:nowrap}.file-explorer-example-load:hover{background:var(--bg-hover)}.file-explorer-empty{padding:20px 12px;text-align:center;color:var(--text-secondary);font-size:12px}.file-explorer-create-btn{display:inline-flex;align-items:center;gap:6px;margin-top:12px;padding:6px 14px;border:1px solid var(--border-color);border-radius:4px;background:transparent;color:var(--text-primary);cursor:pointer;font-size:12px;transition:background .15s}.file-explorer-create-btn:hover{background:var(--bg-hover)}.file-item{display:flex;align-items:center;gap:6px;padding:4px 12px;cursor:pointer;font-size:13px;color:var(--text-primary);transition:background .1s}.file-item:hover{background:var(--bg-hover)}.file-item.active{background:var(--bg-active);color:var(--text-bright)}.file-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-mode{font-size:10px;color:var(--text-secondary);flex-shrink:0}.file-delete{opacity:0;background:none;border:none;color:var(--text-secondary);cursor:pointer;padding:2px;border-radius:3px;display:flex;align-items:center;transition:opacity .15s}.file-item:hover .file-delete{opacity:1}.file-delete:hover{color:var(--error)}.file-rename-btn{opacity:0;background:none;border:none;color:var(--text-secondary);cursor:pointer;padding:2px;border-radius:3px;display:flex;align-items:center;transition:opacity .15s}.file-item:hover .file-rename-btn{opacity:1}.file-rename-btn:hover{color:var(--primary)}.file-rename-input{flex:1;background:var(--bg-primary);border:1px solid var(--primary);color:var(--text-primary);font-size:12px;padding:1px 4px;border-radius:3px;outline:none;min-width:0}.editor-area{flex:1;display:flex;flex-direction:column;overflow:hidden}.editor-container{flex:1;overflow:hidden;position:relative}.python-editor{height:100%;width:100%}.block-editor{height:100%;width:100%;position:relative}.blockly-container{height:100%;width:100%}.dark .blocklyMainBackground{fill:#1e1e1e!important}.dark .blocklyToolboxDiv{background:#252526!important}.dark .blocklyTreeRow{color:#ccc!important}.dark .blocklyFlyoutBackground{fill:#2d2d30!important}.terminal-wrapper{flex-shrink:0;display:flex;flex-direction:column;overflow:hidden}.terminal-panel{flex:1;display:flex;flex-direction:column;border-top:1px solid var(--border-color);background:var(--terminal-bg);overflow:hidden}.terminal-header{display:flex;align-items:center;justify-content:space-between;padding:4px 12px;background:var(--bg-secondary);border-bottom:1px solid var(--border-color);flex-shrink:0}.terminal-title{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-secondary)}.terminal-action-btn{background:none;border:none;color:var(--text-secondary);cursor:pointer;padding:3px;border-radius:3px;display:flex;align-items:center}.terminal-action-btn:hover{color:var(--text-primary);background:var(--bg-hover)}.terminal-content{flex:1;overflow-y:auto;padding:8px 12px;font-family:JetBrains Mono,Fira Code,Cascadia Code,monospace;font-size:12px;line-height:1.5}.terminal-empty{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-secondary);font-size:12px;font-style:italic}.terminal-line{display:flex;gap:8px;padding:1px 0;min-width:0}.terminal-line.terminal-output,.terminal-output .terminal-text{display:block;width:100%}.terminal-timestamp{color:var(--text-secondary);font-size:10px;flex-shrink:0;min-width:70px}.terminal-text{white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;min-width:0;flex:1}.terminal-output .terminal-text{color:var(--text-primary)}.terminal-error .terminal-text{color:var(--error)}.terminal-info .terminal-text{color:var(--info)}.terminal-input .terminal-text{color:var(--success)}.activation-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:10000;background:#000000b3;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.activation-modal{position:relative;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:12px;padding:2rem 2.5rem;max-width:440px;width:90%;box-shadow:0 12px 40px #00000080;color:var(--text-primary)}.activation-modal h2{margin:0 0 .75rem;font-size:1.25rem;color:var(--text-bright)}.activation-modal p{font-size:.88rem;line-height:1.6;margin-bottom:1rem;color:var(--text-secondary)}.activation-input{width:100%;padding:10px 12px;font-size:.95rem;border:1px solid var(--border-color);border-radius:6px;background:var(--bg-primary);color:var(--text-primary);outline:none;margin-bottom:.5rem}.activation-input:focus{border-color:var(--pybricks-blue)}.activation-error{color:var(--error);font-size:.82rem;margin:0 0 .5rem}.activation-submit{width:100%;padding:10px;font-size:.95rem;border:none;border-radius:6px;background:var(--pybricks-blue);color:#fff;cursor:pointer;font-weight:600;margin-bottom:1rem}.activation-submit:hover{opacity:.9}.activation-submit:disabled{opacity:.6;cursor:not-allowed}.activation-links{display:flex;flex-direction:column;gap:6px;font-size:.82rem}.activation-links a{color:var(--info);text-decoration:none}.activation-links a:hover{text-decoration:underline}.activation-link-hint{color:var(--text-secondary);font-size:.78rem;font-style:italic}.activation-pricing-link{background:none;border:none;color:var(--info);font-size:.85rem;font-weight:600;cursor:pointer;padding:0;text-decoration:none}.activation-pricing-link:hover{text-decoration:underline}.activation-back-link{background:none;border:none;color:var(--text-secondary);font-size:.82rem;cursor:pointer;padding:0;margin-top:10px}.activation-back-link:hover{color:var(--text-bright)}.pricing-cards{display:flex;gap:10px;margin:12px 0}.pricing-card{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;padding:14px 10px;border:1px solid var(--border-color);border-radius:8px;background:var(--bg-primary);position:relative}.pricing-card--best{border-color:var(--pybricks-blue);box-shadow:0 0 0 1px var(--pybricks-blue)}.pricing-badge{position:absolute;top:-9px;right:-6px;background:var(--pybricks-blue);color:#fff;font-size:.65rem;font-weight:700;padding:2px 7px;border-radius:10px;text-transform:uppercase;letter-spacing:.3px}.pricing-label{font-size:.82rem;font-weight:600;color:var(--text-bright)}.pricing-price{font-size:1.3rem;font-weight:700;color:var(--text-bright)}.pricing-period{font-size:.7rem;font-weight:400;color:var(--text-secondary)}.pricing-subscribe{display:inline-block;margin-top:6px;padding:6px 18px;font-size:.8rem;font-weight:600;border-radius:6px;background:var(--pybricks-blue);color:#fff;text-decoration:none;transition:opacity .15s}.pricing-subscribe:hover{opacity:.85}.activation-close{position:absolute;top:10px;right:14px;background:none;border:none;color:var(--text-secondary);font-size:1.4rem;cursor:pointer;line-height:1;padding:2px 6px}.activation-close:hover{color:var(--text-bright)}.status-bar{display:flex;align-items:center;justify-content:space-between;height:24px;padding:0 12px;background:var(--statusbar-bg);color:#fff;font-size:11px;flex-shrink:0}.status-bar-left,.status-bar-right{display:flex;align-items:center;gap:12px}.status-bar-center{display:flex;align-items:center;gap:6px}.status-bar-link{color:#ffffffbf;text-decoration:none;font-size:10.5px;transition:color .15s;white-space:nowrap}.status-bar-link:hover{color:#fff;text-decoration:underline}.status-bar-link-sep{color:#ffffff4d;font-size:10px}.status-item{display:flex;align-items:center;gap:4px;opacity:.9}.connection-status.connected{color:#a5d6a7}.connection-status.disconnected{color:#ffffffb3}.connection-status.connecting{color:#ffe082}.hub-status.running{color:#a5d6a7}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--bg-hover);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--text-secondary)}.ai-chat-wrapper{flex-shrink:0;display:flex;flex-direction:column;overflow:hidden;height:100%}.ai-chat-wrapper.closed{width:0!important;min-width:0;border:0}.ai-chat-panel{flex:1;display:flex;flex-direction:column;border-left:1px solid var(--border-color);background:var(--bg-secondary);height:100%;overflow:hidden}.ai-chat-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--bg-tertiary);border-bottom:1px solid var(--border-color);flex-shrink:0}.ai-chat-title{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:600;color:var(--text-bright)}.ai-chat-badge{font-size:10px;font-weight:500;padding:1px 6px;border-radius:10px;background:linear-gradient(135deg,#d97706,#ea580c);color:#fff;letter-spacing:.3px}.ai-provider-select{font-size:10px;padding:1px 4px;border-radius:4px;border:1px solid var(--border-color);background:var(--bg-secondary);color:var(--text-primary);cursor:pointer;outline:none;margin-left:2px}.ai-provider-select:hover{border-color:var(--accent-color)}.ai-config-warning a{color:var(--accent-color);text-decoration:underline}.ai-chat-header-actions{display:flex;gap:4px}.ai-chat-header-btn{background:none;border:none;color:var(--text-secondary);cursor:pointer;padding:4px;border-radius:4px;display:flex;align-items:center}.ai-chat-header-btn:hover{color:var(--text-primary);background:var(--bg-hover)}.ai-chat-messages{flex:1;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:16px}.ai-chat-welcome{display:flex;flex-direction:column;align-items:center;text-align:center;padding:24px 16px;gap:12px}.ai-welcome-icon{width:56px;height:56px;border-radius:50%;background:linear-gradient(135deg,var(--pybricks-blue),#6366f1);display:flex;align-items:center;justify-content:center;color:#fff}.ai-chat-welcome h3{font-size:16px;color:var(--text-bright);margin:0}.ai-chat-welcome p{font-size:13px;color:var(--text-secondary);line-height:1.5;max-width:300px}.ai-config-warning{display:flex;align-items:center;gap:8px;padding:8px 12px;background:#f443361a;border:1px solid rgba(244,67,54,.3);border-radius:6px;font-size:12px;color:var(--error);margin-top:4px}.ai-config-warning code{background:var(--bg-tertiary);padding:1px 4px;border-radius:3px;font-size:11px}.ai-quick-prompts{width:100%;margin-top:8px}.ai-quick-label{font-size:11px;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px}.ai-quick-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}.ai-quick-btn{padding:8px 10px;border:1px solid var(--border-color);border-radius:6px;background:var(--bg-primary);color:var(--text-primary);font-size:12px;cursor:pointer;text-align:left;transition:all .15s}.ai-quick-btn:hover{border-color:var(--pybricks-blue);background:var(--bg-hover)}.ai-quick-btn-locked{opacity:.45;cursor:not-allowed;position:relative}.ai-quick-btn-locked:hover{border-color:var(--border-color);background:var(--bg-primary);opacity:.55}.ai-lock-icon{font-size:10px;margin-right:3px}.ai-message{display:flex;gap:10px;animation:ai-fade-in .2s ease}@keyframes ai-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.ai-message-avatar{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px}.ai-message-user .ai-message-avatar{background:var(--pybricks-blue);color:#fff}.ai-message-assistant .ai-message-avatar{background:linear-gradient(135deg,#d97706,#ea580c);color:#fff}.ai-message-content{flex:1;min-width:0}.ai-message-header{margin-bottom:4px}.ai-message-role{font-size:12px;font-weight:600;color:var(--text-bright)}.ai-message-body{font-size:13px;line-height:1.6;color:var(--text-primary);word-wrap:break-word;overflow-wrap:break-word}.ai-message-user .ai-message-body{background:var(--bg-tertiary);padding:8px 12px;border-radius:2px 8px 8px}.ai-code-block{margin:8px 0;border-radius:6px;overflow:hidden;border:1px solid var(--border-color)}.ai-code-header{display:flex;align-items:center;justify-content:space-between;padding:4px 10px;background:var(--bg-tertiary);border-bottom:1px solid var(--border-color)}.ai-code-lang{font-size:11px;color:var(--text-secondary);font-weight:500}.ai-code-actions{display:flex;gap:4px}.ai-code-action-btn{display:flex;align-items:center;gap:4px;padding:2px 8px;border:none;background:transparent;color:var(--text-secondary);font-size:11px;cursor:pointer;border-radius:3px}.ai-code-action-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.ai-code-content{padding:10px 12px;background:var(--bg-primary);font-family:JetBrains Mono,Fira Code,Cascadia Code,monospace;font-size:12px;line-height:1.5;overflow-x:auto;margin:0}.ai-code-content code{color:var(--text-primary)}.ai-typing-indicator{display:inline-flex;align-items:center;gap:6px;color:var(--text-secondary);font-style:italic}.ai-spin{animation:ai-spin-anim 1s linear infinite}@keyframes ai-spin-anim{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ai-chat-input-area{border-top:1px solid var(--border-color);background:var(--bg-secondary);flex-shrink:0;position:relative}.ai-subscribe-overlay{display:flex;flex-direction:column;align-items:center;gap:4px;padding:16px 20px;text-align:center;background:var(--bg-primary);border-bottom:1px solid var(--border-color)}.ai-subscribe-overlay p{margin:0;font-size:.82rem;color:var(--text-secondary);line-height:1.4}.ai-subscribe-overlay p strong{color:var(--text-bright)}.ai-subscribe-overlay svg{color:var(--pybricks-blue)}.ai-subscribe-btn{margin-top:6px;padding:8px 22px;font-size:.85rem;font-weight:600;border:none;border-radius:6px;background:var(--pybricks-blue);color:#fff;cursor:pointer;transition:opacity .15s}.ai-subscribe-btn:hover{opacity:.85}.ai-chat-context-bar{display:flex;align-items:center;gap:6px;padding:4px 12px;font-size:11px;color:var(--text-secondary);background:var(--bg-tertiary);border-bottom:1px solid var(--border-color)}.ai-chat-input-row{display:flex;align-items:flex-end;gap:8px;padding:10px 12px}.ai-chat-input{flex:1;resize:none;border:1px solid var(--border-color);border-radius:8px;background:var(--bg-primary);color:var(--text-primary);padding:8px 12px;font-size:13px;font-family:inherit;line-height:1.4;max-height:120px;outline:none;transition:border-color .15s}.ai-chat-input:focus{border-color:var(--pybricks-blue)}.ai-chat-input::placeholder{color:var(--text-secondary)}.ai-send-btn{width:36px;height:36px;border:none;border-radius:8px;background:var(--pybricks-blue);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .15s,opacity .15s}.ai-send-btn:hover:not(:disabled){background:#0077b5}.ai-send-btn:disabled{opacity:.4;cursor:not-allowed}@media (max-width: 768px){.toolbar-label{display:none}.status-bar{font-size:10px}}
