:root{color-scheme:dark;--bg: #0b1220;--bg-raised: #111b2c;--bg-panel: #0f1a2a;--border: #1a2436;--fg: #e6edf7;--muted: #8ea0bd;--accent: #00d4ff;--accent-fg: #001824;--danger: #ff5c6c;--warn: #ffb84d;--success: #5dff9f;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;height:100%;background:var(--bg);color:var(--fg);overflow:hidden}.app-shell{display:flex;flex-direction:column;height:100vh}.app-header{display:flex;align-items:center;gap:.75rem;padding:.6rem 1rem;background:var(--bg-raised);border-bottom:1px solid var(--border);flex-wrap:wrap}.app-header h1{margin:0;font-size:1rem;letter-spacing:.12em;color:var(--accent);text-transform:uppercase}.app-subtitle{color:var(--muted);font-size:.8125rem}.app-header-spacer{flex:1}.btn{appearance:none;border:1px solid var(--border);background:transparent;color:var(--fg);padding:.4rem .85rem;border-radius:6px;font-size:.875rem;cursor:pointer;transition:background-color .12s ease,border-color .12s ease}.btn:hover:not(:disabled){background:#ffffff0a;border-color:var(--accent)}.btn:disabled{opacity:.35;cursor:not-allowed}.btn-primary{background:var(--accent);color:var(--accent-fg);border-color:var(--accent);font-weight:600}.btn-primary:hover:not(:disabled){background:#36e1ff;color:var(--accent-fg);border-color:#36e1ff}.app-main{flex:1;display:flex;min-height:0;overflow:hidden}.scene-container{flex:1;position:relative;min-width:0;background:#050911;overflow:hidden}.scene-container canvas{display:block;width:100%;height:100%}.editor-overlay{position:fixed;inset:0;z-index:100;background:var(--bg, #0b1220);display:flex;flex-direction:column}.editor-overlay>.app-shell{height:100%;width:100%}.scene-error-banner{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#281212eb;color:#ff8a87;font-size:13px;padding:16px 22px;border-radius:10px;border:1px solid rgba(255,138,135,.4);display:flex;align-items:center;gap:12px;z-index:9;max-width:calc(100% - 32px);text-align:center;box-shadow:0 8px 28px #00000080}.asset-toast{position:absolute;top:50px;left:50%;transform:translate(-50%);background:#2ea043eb;color:#fff;font-size:13px;padding:10px 16px;border-radius:8px;border:1px solid rgba(255,255,255,.18);pointer-events:none;z-index:8;max-width:calc(100% - 32px);box-shadow:0 6px 20px #0006;animation:assetToastFade .25s ease-out}@keyframes assetToastFade{0%{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%)}}.asset-palette{display:flex;flex-direction:column;gap:8px;padding:10px 12px;background:#0c122066;border-radius:8px;border:1px solid rgba(255,255,255,.06);margin-top:12px}.asset-palette-header{display:flex;justify-content:space-between;align-items:center;gap:8px}.asset-palette-header h3{margin:0;font-size:13px;font-weight:600;color:#ffffffd9}.asset-palette-hint{margin:0;font-size:11px;color:#ffffff80}.asset-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px}.asset-tile{position:relative;display:flex;flex-direction:column;background:#141c2cd9;border:1px solid rgba(255,255,255,.08);border-radius:6px;overflow:hidden;cursor:grab;user-select:none}.asset-tile:active{cursor:grabbing}.asset-tile-thumb{width:100%;aspect-ratio:1;background:#141a26;display:flex;align-items:center;justify-content:center}.asset-tile-thumb img{width:100%;height:100%;object-fit:cover;pointer-events:none}.asset-tile-format{font-size:14px;font-weight:700;color:#ffffff80;letter-spacing:.05em}.asset-tile-name{padding:4px 6px;font-size:11px;color:#ffffffc7;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.asset-tile-remove{position:absolute;top:2px;right:2px;width:18px;height:18px;border-radius:50%;background:#0000008c;color:#fff;border:none;font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;opacity:0;transition:opacity .15s ease}.asset-tile:hover .asset-tile-remove{opacity:1}.editor-field-inline{display:flex!important;flex-direction:row!important;align-items:center;gap:8px;font-size:12px;color:#ffffffbf;cursor:pointer}.editor-field-inline input[type=checkbox]{width:16px;height:16px;margin:0;cursor:pointer}.transform-mode-group{display:flex;gap:4px;flex-wrap:wrap}.transform-mode-group .btn{flex:1;min-width:80px}.mission-browser-modal{max-width:min(900px,96vw);width:100%}.mission-browser-body{max-height:60vh;overflow:auto;padding:0}.mission-browser-table{width:100%;border-collapse:collapse;font-size:13px}.mission-browser-table th,.mission-browser-table td{padding:8px 12px;text-align:start;border-bottom:1px solid var(--border, rgba(255, 255, 255, .08));vertical-align:middle}.mission-browser-table thead th{position:sticky;top:0;background:#0c1220f2;font-weight:600;color:#ffffffbf;z-index:1}.mission-browser-table .col-group{width:60px}.mission-browser-table .col-name{width:36%;font-weight:500;color:#e6edf7}.mission-browser-table .col-desc{color:#ffffffa6;max-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mission-browser-table .section-row td{background:#ffffff0a;font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:#ffffff8c;padding:6px 12px}.mission-row{cursor:pointer}.mission-row:hover{background:#ffffff0a}.mission-row.selected{background:#508cff2e}.mission-row.current .col-name:after{content:" ●";color:#6fdc8c}.mission-group-pill{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;background:#78829640;color:#ffffffbf;font-size:12px}.mission-group-pill.builtin{background:#f6c46340;color:#f6c463}.mission-group-pill.user{background:#508cff40;color:#8fbcff}.mission-browser-footer{display:flex;justify-content:flex-end;gap:8px}.run-history-modal{max-width:min(1100px,96vw);width:100%}.run-history-header-actions{display:flex;gap:8px;align-items:center}.run-history-body{max-height:65vh;overflow:auto}.run-history-table{width:100%;border-collapse:collapse;font-size:13px}.run-history-table th,.run-history-table td{padding:6px 10px;border-bottom:1px solid var(--border, rgba(255, 255, 255, .08));text-align:start;vertical-align:middle;white-space:nowrap}.run-history-table th{position:sticky;top:0;background:#0c1220f2;font-weight:600;color:#ffffffbf;z-index:1}.run-history-table td{max-width:220px;overflow:hidden;text-overflow:ellipsis}.run-history-table tbody tr:hover{background:#ffffff0a}.run-status-pill{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;background:#78829640;color:#d8def0}.run-status-success{background:#2ea04340;color:#6fdc8c}.run-status-failed{background:#da363340;color:#ff8a87}.run-status-timeout{background:#bb80094d;color:#f6c463}.run-status-stopped{background:#7882964d;color:#c8cfe0}.run-status-error{background:#da363366;color:#ffb0ad}.run-status-running{background:#508cff4d;color:#8fbcff}.hover-readout{position:absolute;bottom:14px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:12px;background:#0c1220e0;color:#e6edf7;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;padding:6px 12px;border-radius:8px;border:1px solid rgba(255,255,255,.1);pointer-events:none;z-index:6;box-shadow:0 4px 16px #00000059;max-width:calc(100% - 32px)}.hover-readout-label{color:#9cc0ff;font-weight:600;white-space:nowrap;max-width:220px;overflow:hidden;text-overflow:ellipsis}.hover-readout-coords{display:flex;gap:10px;white-space:nowrap}.hover-readout-coords em{color:#ffffff8c;font-style:normal;margin-right:3px}.hover-readout-unit{color:#ffffff73}@media(pointer:coarse){.hover-readout{display:none}}.scene-hint{position:absolute;top:10px;left:50%;transform:translate(-50%);background:#0a101cb8;color:#ffffffc7;font-size:12px;padding:6px 12px;border-radius:999px;pointer-events:none;border:1px solid rgba(255,255,255,.08);z-index:5;max-width:calc(100% - 32px);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media(pointer:coarse){.scene-hint{display:none}}.explore-toggle{position:absolute;left:14px;bottom:14px;width:52px;height:52px;border-radius:50%;background:#161e2ed9;color:#fff;border:1px solid rgba(255,255,255,.15);font-size:22px;z-index:20;display:none;align-items:center;justify-content:center;touch-action:manipulation;-webkit-tap-highlight-color:transparent;cursor:pointer}.explore-toggle.active{background:#508cffe6;border-color:#fff6}@media(pointer:coarse){.explore-toggle{display:flex}}.explore-overlay{position:absolute;inset:0;z-index:15;pointer-events:none;touch-action:none;user-select:none;-webkit-user-select:none}.explore-joystick{position:absolute;left:14px;bottom:80px;width:140px;height:140px;border-radius:50%;background:#1218268c;border:1px solid rgba(255,255,255,.12);pointer-events:auto;touch-action:none}.explore-joystick-knob{position:absolute;left:50%;top:50%;width:58px;height:58px;border-radius:50%;background:#ffffffd9;transform:translate(-50%,-50%);pointer-events:none;box-shadow:0 2px 10px #00000059}.explore-vertical{position:absolute;left:176px;bottom:80px;display:flex;flex-direction:column;gap:6px;pointer-events:auto}.explore-vbtn{width:56px;height:56px;border-radius:14px;background:#121826b3;color:#fff;border:1px solid rgba(255,255,255,.12);font-size:18px;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent}.explore-vbtn:active{background:#508cffd9}.explore-look{position:absolute;right:0;top:0;bottom:0;width:50%;pointer-events:auto;touch-action:none}[dir=rtl] .explore-toggle,[dir=rtl] .explore-joystick{left:auto;right:14px}[dir=rtl] .explore-vertical{left:auto;right:176px}[dir=rtl] .explore-look{right:auto;left:0}.side-panel{display:flex;flex-direction:column;background:var(--bg-panel);border-inline-start:1px solid var(--border);width:340px;min-height:0;overflow-y:auto}.program-panel{display:flex;flex-direction:column;background:var(--bg-panel);border-inline-start:1px solid var(--border);min-height:0;min-width:280px}.program-panel.floating{position:fixed;z-index:200;border-inline-start:1px solid var(--border);border:1px solid var(--border);border-radius:8px;box-shadow:0 16px 40px #0000008c;overflow:hidden}.programs-modal{position:fixed;z-index:210;display:flex;flex-direction:column;background:var(--bg-panel);border:1px solid var(--border);border-radius:8px;box-shadow:0 16px 40px #0009;overflow:hidden}.programs-modal-header{flex-shrink:0}.programs-modal-body{flex:1 1 auto;min-height:0;overflow:auto}.icon-btn.active{background:#00d4ff26;border-color:#00d4ff73}.splitter{flex-shrink:0;background:#ffffff0a;transition:background .15s}.splitter:hover,.splitter:active{background:#508cff73}.splitter-vertical{width:5px;cursor:col-resize;align-self:stretch}.splitter-horizontal{height:5px;cursor:row-resize}.panel-header{display:flex;align-items:center;justify-content:space-between;padding:6px 10px;background:#ffffff08;border-bottom:1px solid var(--border);font-size:12px}.panel-title{color:#ffffffc7;font-weight:600;letter-spacing:.04em;text-transform:uppercase}.floating-header{cursor:move;user-select:none}.floating-resize-handle{position:absolute;right:0;bottom:0;width:14px;height:14px;cursor:nwse-resize;background:linear-gradient(135deg,transparent 50%,rgba(255,255,255,.28) 50%)}.fpv-panel .fpv-viewport{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;background:#000;position:relative;overflow:hidden}.fpv-panel .fpv-canvas{display:block;image-rendering:pixelated;background:#000}.program-panel-browser{border-bottom:1px solid var(--border);padding:.75rem 1rem;overflow-y:auto;display:flex;flex-direction:column;gap:.5rem}.program-panel-editor{flex:1;min-height:0;display:flex;flex-direction:column}.program-empty{padding:1rem;color:var(--muted)}.panel-block{padding:1rem 1.25rem;border-bottom:1px solid var(--border)}.panel-block h2{margin:0 0 .5rem;font-size:.75rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}.panel-hint{margin:.65rem 0 0;font-size:.78rem;line-height:1.45;color:var(--muted);opacity:.85}.kv{display:grid;grid-template-columns:max-content 1fr;column-gap:.75rem;row-gap:.25rem;margin:0;font-size:.875rem}.kv dt{color:var(--muted)}.kv dd{margin:0;font-variant-numeric:tabular-nums}.error-banner{margin-top:.75rem;padding:.5rem .75rem;background:#ff5c6c1f;border:1px solid var(--danger);border-radius:4px;color:var(--danger);font-size:.8125rem}.log-block{flex:1;min-height:0;display:flex;flex-direction:column}.log-header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.5rem}.log-header h2{margin:0}.log-filters{display:flex;gap:.25rem}.log-filter{appearance:none;background:transparent;border:1px solid var(--border);color:var(--muted);padding:.1rem .45rem;border-radius:10px;font-size:.7rem;cursor:pointer;text-transform:uppercase;letter-spacing:.05em}.log-filter:hover{border-color:var(--accent)}.log-filter.active{color:var(--accent);border-color:var(--accent);background:#00d4ff1a}.log-list{flex:1;list-style:none;margin:0;padding:0;overflow-y:auto;font-family:ui-monospace,JetBrains Mono,Menlo,Consolas,monospace;font-size:.78125rem;line-height:1.5}.log-entry{padding:.1rem 0;color:var(--fg);word-break:break-word}.log-source{color:var(--muted);margin-inline-end:.35rem}.log-info{color:var(--fg)}.log-warning{color:var(--warn)}.log-error{color:var(--danger)}.log-success{color:var(--success)}.muted{color:var(--muted);font-size:.875rem}.ok{color:var(--success)}.danger{color:var(--danger)}.state-pill{display:inline-block;padding:.05rem .45rem;border-radius:10px;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;background:#00d4ff1f;color:var(--accent);border:1px solid rgba(0,212,255,.35)}.state-Error,.state-Returning{background:#ff5c6c26;color:var(--danger);border-color:#ff5c6c73}.state-Hovering,.state-Idle,.state-Ready,.state-Completed{background:#5dff9f1f;color:var(--success);border-color:#5dff9f59}.state-Stopped{background:#ffb84d1f;color:var(--warn);border-color:#ffb84d59}.mission-select{display:inline-flex;flex-direction:column;gap:.15rem;font-size:.75rem}.mission-select-label{color:var(--muted);letter-spacing:.1em;text-transform:uppercase}.mission-select select{appearance:none;background:var(--bg);color:var(--fg);border:1px solid var(--border);border-radius:6px;padding:.35rem .75rem;font:inherit;min-width:200px}.mission-select select:focus-visible{outline:2px solid var(--accent)}.mission-title{font-size:.95rem;font-weight:600;margin-bottom:.25rem}.mission-description{margin:0 0 .75rem;color:var(--muted);font-size:.8125rem;line-height:1.4}.panel-subheading{margin:.85rem 0 .4rem;font-size:.7rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}.requirement-list{list-style:none;margin:0;padding:0;font-size:.8125rem}.requirement-list li{display:flex;align-items:baseline;gap:.5rem;padding:.15rem 0}.requirement-list .req-mark{font-weight:700;width:.95rem;text-align:center}.requirement-list .req-desc{flex:1}.requirement-list .req-time{color:var(--muted);font-variant-numeric:tabular-nums}.requirement-list .req-met,.requirement-list .req-met .req-mark{color:var(--success)}.requirement-list .req-pending .req-mark{color:var(--muted)}.modal-backdrop{position:fixed;inset:0;background:#0000008c;display:grid;place-items:center;padding:1rem;z-index:20}.modal{background:var(--bg-panel);border:1px solid var(--border);border-radius:10px;max-width:520px;width:100%;box-shadow:0 12px 40px #0006}.modal-backdrop--mission-report{background:transparent;align-items:end;padding-bottom:1.25rem;pointer-events:none;z-index:1900}.modal--mission-report{max-width:520px;pointer-events:auto;box-shadow:0 -8px 32px #00000080}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--border)}.modal-header h2{margin:0;font-size:1.05rem}.modal-status{font-size:.75rem;font-weight:700;letter-spacing:.12em;padding:.15rem .6rem;border-radius:999px;border:1px solid var(--border)}.modal-header.status-success{border-bottom-color:#5dff9f73}.modal-header.status-success .modal-status{color:var(--success);border-color:#5dff9f73;background:#5dff9f1a}.modal-header.status-failed .modal-status,.modal-header.status-timeout .modal-status{color:var(--danger);border-color:#ff5c6c73;background:#ff5c6c1a}.modal-body{padding:1rem 1.25rem}.modal-footer{padding:.75rem 1.25rem;border-top:1px solid var(--border);display:flex;justify-content:flex-end}.payload-selector{display:flex;gap:.4rem;flex-wrap:wrap;margin-bottom:.5rem}.payload-btn{appearance:none;display:inline-flex;align-items:center;gap:.35rem;padding:.35rem .6rem;border-radius:6px;border:1px solid var(--border);background:var(--bg);color:var(--fg);font:inherit;font-size:.8125rem;cursor:pointer;transition:background-color .12s ease,border-color .12s ease}.payload-btn:hover:not(:disabled){border-color:var(--accent)}.payload-btn:disabled{opacity:.4;cursor:not-allowed}.payload-btn.active{background:#00d4ff26;border-color:var(--accent);color:var(--accent)}.payload-icon{font-size:1.1em}.payload-commands{font-size:.75rem;font-family:ui-monospace,JetBrains Mono,Menlo,Consolas,monospace}.startup-screen{display:grid;place-items:center;min-height:100vh;padding:1rem;background:radial-gradient(circle at 20% 20%,rgba(0,212,255,.12),transparent 40%),radial-gradient(circle at 80% 80%,rgba(93,255,159,.08),transparent 40%),var(--bg)}.startup-card{background:var(--bg-panel);border:1px solid var(--border);border-radius:14px;padding:2rem 2.25rem;width:100%;max-width:420px;display:flex;flex-direction:column;gap:1rem}.startup-card h1{margin:0;font-size:1.4rem;color:var(--accent);letter-spacing:.12em}.startup-subtitle{margin:0 0 .5rem;color:var(--muted);font-size:.9rem;line-height:1.4}.field{display:flex;flex-direction:column;gap:.25rem}.field span{font-size:.75rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.field input{appearance:none;background:var(--bg);color:var(--fg);border:1px solid var(--border);border-radius:6px;padding:.5rem .75rem;font:inherit;font-size:.95rem}.field input:focus-visible{outline:2px solid var(--accent);border-color:var(--accent)}.startup-card .btn-primary{align-self:flex-end}.user-badge{display:inline-flex;align-items:center}.user-badge-btn{appearance:none;width:32px;height:32px;border-radius:50%;border:1px solid var(--border);background:var(--bg);color:var(--fg);font:inherit;font-weight:600;font-size:.75rem;letter-spacing:.04em;cursor:pointer}.user-badge-btn:hover{border-color:var(--accent);color:var(--accent)}.program-browser{display:flex;flex-direction:column;gap:.5rem}.program-browser-tabs{display:flex;gap:.25rem;border-bottom:1px solid var(--border);margin-bottom:.25rem}.program-browser-tabs .tab{appearance:none;background:transparent;border:none;color:var(--muted);padding:.4rem .75rem;font:inherit;font-size:.8125rem;cursor:pointer;border-bottom:2px solid transparent}.program-browser-tabs .tab.active{color:var(--accent);border-bottom-color:var(--accent)}.program-browser-actions{display:flex;gap:.35rem;position:relative}.program-new-menu{position:relative}.program-new-menu-list{position:absolute;inset-inline-start:0;top:calc(100% + 4px);margin:0;padding:.25rem;list-style:none;background:var(--bg-elev, #1b1b1f);border:1px solid var(--border);border-radius:6px;box-shadow:0 6px 24px #0006;z-index:30;min-width:240px;display:flex;flex-direction:column;gap:2px}.program-new-menu-item{appearance:none;background:transparent;border:none;color:var(--fg);font:inherit;cursor:pointer;text-align:start;padding:.45rem .5rem;border-radius:4px;display:grid;grid-template-columns:auto 1fr;column-gap:.5rem;row-gap:.1rem;align-items:center}.program-new-menu-item:hover{background:#ffffff0f}.program-new-menu-item .muted{grid-column:2;font-size:.72rem;color:var(--muted)}.program-lang-badge{display:inline-block;padding:1px 6px;font-size:.68rem;font-weight:600;letter-spacing:.02em;border-radius:4px;border:1px solid transparent;line-height:1.4;vertical-align:middle}.program-lang-python{background:#3f7fbf2e;color:#7fb7f2;border-color:#7fb7f266}.program-lang-lua{background:#9566e82e;color:#c4a7f7;border-color:#c4a7f766}.program-attach{display:inline-flex;align-items:center;gap:.3rem;font-size:.75rem}.program-attach-label{color:var(--muted)}.program-attach-select{appearance:none;background:var(--bg-raised, #1b1b1f);color:var(--fg);border:1px solid var(--border);border-radius:4px;padding:2px 6px;font:inherit;font-size:.75rem;cursor:pointer}.program-attach-select:hover{border-color:var(--accent)}.program-entity-tabs{display:flex;flex-wrap:wrap;gap:2px;padding:4px 6px;background:#00000040;border-bottom:1px solid var(--border);flex-shrink:0}.program-entity-tab{appearance:none;display:inline-flex;align-items:center;gap:5px;padding:4px 8px;border:1px solid transparent;border-radius:4px;background:transparent;color:var(--muted);font:inherit;font-size:.78rem;cursor:pointer;transition:background .12s ease,color .12s ease,border-color .12s ease}.program-entity-tab:hover{color:var(--fg);background:#ffffff0a}.program-entity-tab.active{color:var(--fg);background:#00d4ff1f;border-color:#00d4ff66}.program-entity-tab-label{font-weight:500}.lua-fpv-overlay{position:absolute;right:16px;bottom:16px;display:flex;flex-direction:column;gap:6px;pointer-events:none;z-index:10;max-width:180px}.lua-fpv-overlay-card{margin:0;background:#0a0f1cd9;border:1px solid rgba(0,212,255,.35);border-radius:6px;overflow:hidden;box-shadow:0 4px 12px #00000080}.lua-fpv-overlay-image{display:block;width:100%;height:auto;image-rendering:pixelated;background:#000}.lua-fpv-overlay-caption{display:flex;justify-content:space-between;align-items:center;padding:2px 6px;font-size:.68rem;color:var(--muted);font-variant-numeric:tabular-nums}.lua-fpv-overlay-id{color:var(--accent);font-weight:600}.program-list,.template-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.3rem}.program-item{display:flex;align-items:stretch;gap:.25rem;border:1px solid var(--border);border-radius:6px;background:var(--bg);overflow:hidden}.program-item.active{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.program-item-main{appearance:none;flex:1;background:transparent;border:none;text-align:start;padding:.45rem .75rem;color:var(--fg);cursor:pointer;font:inherit;display:flex;justify-content:space-between;align-items:baseline;gap:.5rem}.program-item-name{font-size:.875rem}.program-item-meta{color:var(--muted);font-size:.75rem;font-variant-numeric:tabular-nums}.program-item-controls{display:flex;border-inline-start:1px solid var(--border)}.icon-btn{appearance:none;background:transparent;border:none;color:var(--muted);font:inherit;width:28px;cursor:pointer;font-size:1rem}.icon-btn:hover{color:var(--accent);background:#ffffff0a}.icon-btn-danger:hover{color:var(--danger)}.template-item{border:1px solid var(--border);border-radius:6px;padding:.6rem .75rem;display:flex;flex-direction:column;gap:.35rem}.template-header{display:flex;justify-content:space-between;align-items:baseline}.template-name{font-size:.875rem;font-weight:600}.template-category{font-size:.7rem;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.template-description{margin:0;font-size:.8125rem;color:var(--muted);line-height:1.4}.program-editor{flex:1;display:flex;flex-direction:column;min-height:0}.program-editor-header{padding:.5rem .75rem;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:baseline;gap:.5rem}.program-name-button{appearance:none;border:none;background:transparent;color:var(--fg);font:inherit;font-size:.95rem;font-weight:600;cursor:text;padding:.15rem .35rem;border-radius:4px}.program-name-button:hover{background:#ffffff0d}.program-name-input{appearance:none;border:1px solid var(--accent);background:var(--bg);color:var(--fg);font:inherit;font-size:.95rem;font-weight:600;padding:.1rem .35rem;border-radius:4px;min-width:180px}.program-editor-meta{color:var(--muted);font-size:.7rem;font-variant-numeric:tabular-nums}.program-editor-body{flex:1;min-height:0}.editor-placeholder{margin:0;padding:.75rem;font-family:ui-monospace,JetBrains Mono,Menlo,Consolas,monospace;font-size:.8125rem;color:var(--muted);white-space:pre;overflow:auto;height:100%}.mission-editor{flex:1;display:flex;min-height:0}.mission-editor-scene{flex:1;min-width:0;position:relative;background:#050911}.mission-editor-scene canvas{display:block;width:100%;height:100%}.mission-editor-panel{width:360px;background:var(--bg-panel);border-inline-start:1px solid var(--border);overflow-y:auto}.mission-editor-empty{padding:2rem;color:var(--muted)}.mission-actions{display:flex;gap:.3rem}.mission-editor-actions{display:flex;gap:.5rem}.editor-field{display:flex;flex-direction:column;gap:.2rem;margin-top:.5rem}.editor-field span{font-size:.7rem;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.editor-field input,.editor-field select,.editor-field textarea{appearance:none;background:var(--bg);color:var(--fg);border:1px solid var(--border);border-radius:6px;padding:.35rem .55rem;font:inherit;font-size:.875rem;resize:vertical}.editor-field input:focus-visible,.editor-field select:focus-visible,.editor-field textarea:focus-visible{outline:2px solid var(--accent);border-color:var(--accent)}.editor-fieldset{border:1px solid var(--border);border-radius:6px;padding:.5rem .75rem;margin:.75rem 0;display:flex;flex-direction:column;gap:.35rem;grid-column:span 2}.editor-fieldset legend{padding:0 .35rem;font-size:.7rem;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.axis-row{display:grid;grid-template-columns:50px repeat(3,1fr);gap:.35rem;align-items:center;font-size:.75rem;color:var(--muted)}.axis-input{display:flex;flex-direction:column;gap:.1rem}.axis-input span{font-size:.65rem;color:var(--muted);text-align:center;text-transform:uppercase}.axis-input input{appearance:none;background:var(--bg);color:var(--fg);border:1px solid var(--border);border-radius:4px;padding:.25rem .3rem;font:inherit;font-size:.8rem;font-variant-numeric:tabular-nums;width:100%;text-align:center}.axis-input input:focus-visible{outline:2px solid var(--accent);border-color:var(--accent)}.palette{display:flex;flex-wrap:wrap;gap:.35rem}.palette .btn{font-size:.8rem}.issue-list{margin:0;padding:0;list-style:none;font-size:.78rem;color:var(--danger)}.issue-list li{padding:.1rem 0}.issue-path{color:var(--muted);margin-inline-end:.35rem}.json-view{margin:.5rem 0 0;padding:.5rem;background:var(--bg);border:1px solid var(--border);border-radius:4px;max-height:260px;overflow:auto;font-family:ui-monospace,JetBrains Mono,Menlo,Consolas,monospace;font-size:.72rem;line-height:1.45;color:var(--fg)}.drone-tabs{display:flex;flex-wrap:wrap;gap:.25rem;margin-bottom:.55rem}.drone-tab{appearance:none;background:var(--bg);border:1px solid var(--border);color:var(--fg);font:inherit;font-size:.78rem;font-family:ui-monospace,JetBrains Mono,Menlo,Consolas,monospace;padding:.3rem .55rem;border-radius:6px;cursor:pointer;display:inline-flex;align-items:center;gap:.4rem}.drone-tab:hover{border-color:var(--accent)}.drone-tab.active{background:#00d4ff26;border-color:var(--accent);color:var(--accent)}.drone-tab-batt{font-size:.65rem;color:var(--muted);letter-spacing:0}.drone-tab.active .drone-tab-batt{color:var(--accent)}.battery-bar{position:relative;width:100%;height:14px;background:var(--bg);border:1px solid var(--border);border-radius:3px;overflow:hidden}.battery-bar-fill{position:absolute;inset-block:0;inset-inline-start:0;background:var(--success);transition:width .18s ease}.battery-bar.battery-mid .battery-bar-fill{background:var(--warn)}.battery-bar.battery-low .battery-bar-fill{background:var(--danger)}.battery-bar-label{position:relative;display:block;text-align:center;font-size:.68rem;line-height:14px;font-variant-numeric:tabular-nums;color:var(--fg);mix-blend-mode:difference}.language-switcher{display:inline-flex;align-items:center;gap:.35rem;font-size:.75rem}.language-switcher-label{color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.language-switcher select{appearance:none;background:var(--bg);color:var(--fg);border:1px solid var(--border);border-radius:6px;padding:.25rem .5rem;font:inherit;font-size:.8125rem}.language-switcher select:focus-visible{outline:2px solid var(--accent)}.language-switcher.inline select{min-width:110px}.startup-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:.25rem}.welcome-banner{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;background:#00d4ff14;border-bottom:1px solid var(--accent);color:var(--fg);font-size:.875rem}.welcome-banner .btn-primary{margin-inline-start:auto}.help-modal{max-width:640px}.help-subtitle{display:block;color:var(--muted);font-size:.8125rem;margin-top:.15rem}.help-body{max-height:60vh;overflow-y:auto;display:flex;flex-direction:column;gap:1rem}.help-lesson h3{margin:0 0 .35rem;font-size:.875rem;color:var(--accent);letter-spacing:.04em}.help-lesson pre{margin:0;padding:.5rem .75rem;background:var(--bg);border:1px solid var(--border);border-radius:4px;font-family:ui-monospace,JetBrains Mono,Menlo,Consolas,monospace;font-size:.78rem;line-height:1.5;white-space:pre-wrap;color:var(--fg)}[dir=rtl] .app-header h1,[dir=rtl] .app-subtitle{letter-spacing:0}[dir=rtl] .log-entry,[dir=rtl] .help-lesson pre,[dir=rtl] .json-view,[dir=rtl] .program-editor-body,[dir=rtl] .editor-placeholder{direction:ltr;text-align:start;unicode-bidi:embed}[dir=rtl] .log-source{display:inline-block;direction:ltr}@media(max-width:1100px){.program-panel{width:420px}}@media(max-width:900px){.app-main{flex-direction:column}.side-panel,.program-panel{width:100%;border-inline-start:none;border-top:1px solid var(--border)}.scene-container{min-height:250px}}@media(max-width:640px){.app-header{padding:.4rem .5rem;gap:.4rem;font-size:.85rem;flex-wrap:wrap;overflow-x:auto;-webkit-overflow-scrolling:touch}.app-header h1{font-size:.85rem;letter-spacing:.08em}.app-header .btn{padding:.55rem .7rem;min-height:40px;font-size:.8rem}.scene-hint,.app-subtitle{display:none}.program-panel.floating{width:calc(100vw - 16px)!important;left:8px!important;right:8px!important}.lua-fpv-overlay{right:8px;bottom:8px;max-width:120px}.slam-map-overlay{width:calc(50vw - 12px);max-width:200px;right:8px;bottom:8px}.plot-overlay{width:calc(100vw - 16px);max-width:380px;left:8px;bottom:8px}.scene-container:has(.plot-overlay) .slam-map-overlay{bottom:calc(50vh + 8px)}.tutorial-tooltip{width:calc(100vw - 16px)!important;max-width:420px}.program-editor-body{min-height:180px}button.icon-btn,.tutorial-tooltip-close,.tutorial-minimodule-banner-dismiss{min-width:32px;min-height:32px}}@media(max-width:360px){.app-header .btn{padding:.5rem .55rem;font-size:.75rem}.slam-map-overlay{max-width:160px}}@media(pointer:coarse)and (max-width:900px){.icon-btn{width:36px;min-height:36px}.program-attach-select{padding:4px 8px;font-size:.85rem}}.scene-outliner{display:flex;flex-direction:column;background:var(--bg-panel);min-height:0}.scene-outliner.docked{position:absolute;top:12px;left:12px;max-height:calc(100% - 24px);border:1px solid var(--border);border-radius:8px;box-shadow:0 16px 40px #0000008c;z-index:180}.outliner-body{flex:1;min-height:0;overflow-y:auto;padding:6px;display:flex;flex-direction:column;gap:8px}.outliner-section{display:flex;flex-direction:column;gap:2px}.outliner-section-title{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);padding:4px 6px}.outliner-empty{color:var(--muted);font-size:12px;padding:4px 8px}.outliner-row{display:flex;flex-direction:column;align-items:flex-start;text-align:left;padding:6px 8px;gap:1px;background:transparent;border:1px solid transparent;border-radius:4px;cursor:pointer;color:#ffffffd9;font-size:12px}.outliner-row:hover{background:#ffffff0a}.outliner-row.selected{background:#508cff2e;border-color:#508cff8c;color:#fff}.outliner-row-label{font-weight:600}.outliner-row-sub{font-size:10px;color:var(--muted)}.dashboard-root{display:flex;flex-direction:column;height:100vh;background:radial-gradient(1200px 800px at 20% 10%,rgba(0,212,255,.08),transparent 60%),var(--bg);overflow-y:auto}.dashboard-header{display:flex;align-items:center;gap:1rem;padding:.75rem 1.25rem;background:var(--bg-raised);border-bottom:1px solid var(--border)}.dashboard-header h1{margin:0;font-size:1rem;letter-spacing:.14em;color:var(--accent);text-transform:uppercase}.dashboard-header-actions{margin-left:auto;display:flex;gap:1rem;align-items:center}.dashboard-user{color:var(--muted);font-size:.875rem}.dashboard-main{flex:1;max-width:1200px;width:100%;margin:0 auto;padding:2rem 1.5rem 3rem;display:flex;flex-direction:column;gap:2rem}.dashboard-greeting{margin:0;font-size:1.75rem;font-weight:600;color:var(--fg)}.dashboard-cards{display:grid;grid-template-columns:1fr 1fr 1fr;gap:1.25rem}@media(max-width:1200px){.dashboard-cards{grid-template-columns:1fr 1fr}}@media(max-width:700px){.dashboard-cards{grid-template-columns:1fr}}.dashboard-card{position:relative;padding:1.5rem;background:var(--bg-panel);border:1px solid var(--border);border-radius:12px;display:flex;flex-direction:column;gap:.75rem}.dashboard-card--game{border-color:#f5c51873;background:linear-gradient(160deg,rgba(245,197,24,.08),transparent 60%),var(--bg-panel)}.dashboard-card-badge--new{background:#f5c518;color:#1b1500}.dashboard-card-desc{color:var(--muted);font-size:.8125rem;margin:0}.dashboard-card--learn{border-color:#00d4ff59}.dashboard-card--play{border-color:#5dff9f40}.dashboard-card h3{margin:0;font-size:1.25rem;font-weight:700;color:var(--fg)}.dashboard-card-subtitle{margin:0;color:var(--muted);font-size:.875rem;line-height:1.4}.dashboard-card-badge{position:absolute;top:-10px;right:1rem;padding:.25rem .6rem;background:var(--accent);color:var(--accent-fg);font-size:.75rem;font-weight:600;border-radius:999px}.dashboard-card-cta{margin-top:.5rem}.dashboard-card-link{background:transparent;text-align:left}.dashboard-progress{margin-top:.5rem}.dashboard-progress-bar{height:8px;background:#ffffff0d;border-radius:999px;overflow:hidden;margin-bottom:.35rem}.dashboard-progress-fill{height:100%;background:linear-gradient(90deg,var(--accent),#36e1ff);transition:width .2s ease}.dashboard-progress-label{color:var(--muted);font-size:.8125rem}.dashboard-sections-list{list-style:none;margin:.75rem 0 0;padding:0;display:flex;flex-direction:column;gap:.25rem;font-size:.8125rem}.dashboard-sections-item{display:grid;grid-template-columns:auto 1fr auto;gap:.75rem;align-items:center;padding:.25rem 0;color:var(--muted);border-bottom:1px dashed rgba(255,255,255,.04)}.dashboard-sections-item:last-child{border-bottom:none}.dashboard-section-dots{color:var(--accent);letter-spacing:.1em}.dashboard-section-dots-muted{color:#ffffff1a}.dashboard-section-title{color:var(--fg)}.dashboard-section-progress{font-variant-numeric:tabular-nums}.dashboard-recent-title{margin:1rem 0 .5rem;font-size:.875rem;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;font-weight:600}.dashboard-recent-empty{padding:1rem;color:var(--muted);font-size:.8125rem;border:1px dashed var(--border);border-radius:8px;text-align:center}.dashboard-recent-list{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(3,1fr);gap:.5rem}.dashboard-recent-tile{width:100%;background:var(--bg-raised);border:1px solid var(--border);border-radius:8px;padding:0;overflow:hidden;cursor:pointer;color:inherit;transition:border-color .12s ease}.dashboard-recent-tile:hover{border-color:var(--accent)}.dashboard-recent-thumb{aspect-ratio:16 / 9;background:#050911;display:flex;align-items:center;justify-content:center;color:var(--muted)}.dashboard-recent-thumb img{width:100%;height:100%;object-fit:cover;display:block}.dashboard-recent-thumb-placeholder{font-size:1.5rem;opacity:.35}.dashboard-recent-meta{padding:.5rem .65rem;display:flex;flex-direction:column;gap:.1rem;text-align:left}.dashboard-recent-name{font-size:.8125rem;color:var(--fg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dashboard-recent-date{font-size:.75rem;color:var(--muted)}.dashboard-achievements{padding:1.25rem;background:var(--bg-panel);border:1px solid var(--border);border-radius:12px}.dashboard-achievements h3{margin:0 0 .75rem;font-size:1rem;color:var(--fg)}.dashboard-achievements-empty{color:var(--muted);font-size:.875rem}.dashboard-achievements-list{list-style:none;padding:0;margin:0;display:flex;gap:.6rem;flex-wrap:wrap}.dashboard-achievement{display:flex;align-items:center;gap:.4rem;padding:.35rem .7rem;background:var(--bg-raised);border:1px solid var(--border);border-radius:999px;font-size:.8125rem}.dashboard-achievement-icon{font-size:1rem}.dashboard-achievement--more{color:var(--muted)}.learn-root{display:flex;flex-direction:column;height:100vh;background:var(--bg);overflow-y:auto}.learn-header{display:flex;align-items:center;gap:1rem;padding:.75rem 1.25rem;background:var(--bg-raised);border-bottom:1px solid var(--border)}.learn-header h2{margin:0;font-size:1rem;letter-spacing:.1em;text-transform:uppercase;color:var(--accent)}.learn-header-spacer{flex:1}.learn-header-counter{color:var(--muted);font-size:.8125rem;font-variant-numeric:tabular-nums}.learn-main{max-width:900px;width:100%;margin:0 auto;padding:1.5rem 1.25rem 3rem;display:flex;flex-direction:column;gap:1.25rem}.learn-tabs{display:flex;gap:.4rem;padding:0 1.25rem;border-bottom:1px solid var(--border)}.learn-tab{background:transparent;border:0;border-bottom:2px solid transparent;color:var(--muted);padding:.6rem .9rem .55rem;font:inherit;cursor:pointer;display:flex;align-items:center;gap:.35rem;font-weight:500}.learn-tab--active{color:var(--text);border-bottom-color:var(--accent, #3a7bff)}.learn-tab-count{font-size:.75rem;padding:.05rem .4rem;border-radius:999px;background:color-mix(in oklab,currentColor 12%,transparent)}.learn-sphere{padding:1.25rem;background:var(--bg-panel);border:1px solid var(--border);border-radius:12px;border-left:4px solid var(--sphere-color, var(--accent, #3a7bff))}.learn-sphere-header{display:flex;align-items:baseline;gap:.6rem;margin-bottom:1rem}.learn-sphere-header h3{margin:0;flex:1}.learn-sphere-icon{font-size:1.3rem}.learn-sphere-count{color:var(--muted);font-size:.85rem}.learn-tracks-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:.9rem}.learn-track-card{padding:.85rem;background:var(--bg-base);border:1px solid var(--border);border-radius:10px;display:flex;flex-direction:column;gap:.55rem}.learn-track-card-head{display:flex;align-items:baseline;gap:.45rem}.learn-track-card-head h4{margin:0;font-size:1rem;flex:1}.learn-track-card-hyp{font-size:.7rem;font-weight:600;padding:.08rem .35rem;border-radius:4px;color:var(--sphere-color, var(--accent, #3a7bff));background:color-mix(in oklab,var(--sphere-color, var(--accent, #3a7bff)) 18%,transparent)}.learn-track-card-desc{margin:0;color:var(--muted);font-size:.85rem;line-height:1.35}.learn-track-card-meta{display:flex;justify-content:space-between;align-items:center;font-size:.78rem;color:var(--muted)}.learn-track-card-diff{color:var(--sphere-color, var(--accent, #3a7bff));letter-spacing:1px}.learn-track-card-badges{display:flex;gap:.3rem;flex-wrap:wrap}.learn-track-card-badge{font-size:.7rem;padding:.1rem .4rem;border-radius:4px;background:color-mix(in oklab,currentColor 10%,transparent);color:var(--muted)}.learn-track-card-progress{height:4px;border-radius:999px;background:color-mix(in oklab,var(--border) 60%,transparent);overflow:hidden}.learn-track-card-progress-bar{height:100%;background:var(--sphere-color, var(--accent, #3a7bff));transition:width .2s ease}.learn-track-card-footer{display:flex;justify-content:space-between;align-items:center;gap:.6rem}.learn-track-card-progress-text{font-size:.8rem;color:var(--muted)}.learn-roles{padding:1.25rem;background:var(--bg-panel);border:1px solid var(--border);border-radius:12px}.learn-roles-header{display:flex;align-items:baseline;gap:.75rem;margin-bottom:1rem}.learn-roles-header h3{margin:0}.learn-roles-sub{color:var(--muted);font-size:.8rem}.learn-roles-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:.9rem}.learn-role-card{padding:1rem;background:var(--bg-base);border:1px solid var(--border);border-left:4px solid var(--role-color, var(--accent, #3a7bff));border-radius:10px;display:flex;flex-direction:column;gap:.7rem}.learn-role-card--done{box-shadow:0 0 0 1px color-mix(in oklab,var(--role-color, currentColor) 35%,transparent)}.learn-role-card-head{display:flex;gap:.7rem;align-items:flex-start}.learn-role-card-icon{font-size:1.6rem;line-height:1}.learn-role-card-titles{flex:1}.learn-role-card-titles h4{margin:0 0 .25rem;font-size:1rem;color:var(--role-color, var(--text))}.learn-role-card-titles p{margin:0;color:var(--muted);font-size:.82rem;line-height:1.35}.learn-role-card-stats{display:flex;flex-wrap:wrap;gap:.5rem .85rem;font-size:.82rem;color:var(--text)}.learn-role-card-stat strong{color:var(--role-color, var(--accent, #3a7bff))}.learn-role-card-stat-muted{color:var(--muted)}.learn-role-card-progress{height:4px;border-radius:999px;background:color-mix(in oklab,var(--border) 60%,transparent);overflow:hidden}.learn-role-card-progress-bar{height:100%;background:var(--role-color, var(--accent, #3a7bff));transition:width .2s ease}.learn-role-card-tracks{display:flex;flex-direction:column;gap:.4rem;border-top:1px dashed var(--border);padding-top:.7rem}.learn-role-card-track{display:flex;align-items:center;gap:.55rem;font-size:.85rem}.learn-role-card-track-hyp{font-size:.7rem;font-weight:600;padding:.08rem .35rem;border-radius:4px;color:var(--role-color, var(--accent, #3a7bff));background:color-mix(in oklab,var(--role-color, var(--accent, #3a7bff)) 18%,transparent)}.learn-role-card-track-title{flex:1}.learn-role-card-track--soon .learn-role-card-track-title{color:var(--muted);font-style:italic}.learn-role-card-track-soon{color:var(--muted);font-size:.75rem}.learn-role-card-track-btn{padding:.2rem .55rem;font-size:.78rem}.learn-role-card-exam{margin-top:.4rem;padding:.6rem .7rem;background:color-mix(in oklab,var(--role-color, var(--accent, #3a7bff)) 8%,transparent);border-radius:6px}.learn-role-card-exam-label{display:block;font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-bottom:.2rem}.learn-role-card-exam strong{display:block;font-size:.9rem;color:var(--role-color, var(--text))}.learn-role-card-exam p{margin:.25rem 0 0;color:var(--muted);font-size:.8rem;line-height:1.35}.learn-role-card-footer{display:flex;justify-content:flex-end}.learn-section{padding:1.25rem;background:var(--bg-panel);border:1px solid var(--border);border-radius:12px}.learn-section-header{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:.75rem}.learn-section-header h3{margin:.25rem 0 0;font-size:1.125rem;color:var(--fg)}.learn-section-difficulty{color:var(--accent);letter-spacing:.12em;font-size:.75rem}.learn-section-difficulty-muted{color:#ffffff14}.learn-section-summary{margin:.25rem 0 0;color:var(--muted);font-size:.8125rem}.learn-section-stats{display:flex;flex-direction:column;align-items:flex-end;gap:.25rem;color:var(--fg);font-variant-numeric:tabular-nums}.learn-section-soon{color:var(--muted);font-style:italic}.learn-section-badge{padding:.2rem .5rem;background:var(--success);color:#022012;font-size:.7rem;font-weight:700;border-radius:999px;text-transform:uppercase;letter-spacing:.05em}.learn-lessons{list-style:none;padding:0;margin:.75rem 0 0;display:flex;flex-direction:column;gap:.35rem}.learn-lesson-btn{width:100%;display:grid;grid-template-columns:1.5rem 2.5rem 1fr auto;grid-template-areas:"status order title meta" ". . summary summary";gap:.35rem .75rem;align-items:center;padding:.6rem .85rem;background:var(--bg-raised);border:1px solid var(--border);border-radius:8px;color:inherit;text-align:left;cursor:pointer;transition:border-color .12s ease,background-color .12s ease}.learn-lesson-btn:hover{border-color:var(--accent);background:#00d4ff0d}.learn-lesson--done .learn-lesson-btn{border-color:#5dff9f4d}.learn-lesson--started .learn-lesson-btn{border-color:#ffb84d4d}.learn-lesson-status{grid-area:status;font-size:1rem;color:var(--muted)}.learn-lesson--done .learn-lesson-status{color:var(--success)}.learn-lesson--started .learn-lesson-status{color:var(--warn)}.learn-lesson-order{grid-area:order;font-weight:700;color:var(--accent);font-variant-numeric:tabular-nums}.learn-lesson-title{grid-area:title;font-weight:600}.learn-lesson-summary{grid-area:summary;color:var(--muted);font-size:.8125rem}.learn-lesson-meta{grid-area:meta;color:var(--muted);font-size:.75rem;white-space:nowrap}.tutorial-overlay{position:fixed;inset:0;pointer-events:none;z-index:2000}.tutorial-overlay--congrats{background:#0509118c;pointer-events:auto;display:grid;place-items:center}.tutorial-congrats{max-width:480px;width:calc(100% - 2rem);padding:2rem;background:var(--bg-panel);border:1px solid var(--accent);border-radius:12px;text-align:center;box-shadow:0 24px 64px #000000a6;color:var(--fg);animation:tutorialTooltipFade .22s ease-out}.tutorial-congrats-emoji{font-size:3.5rem;line-height:1;margin-bottom:.5rem}.tutorial-congrats-title{margin:0 0 .5rem;font-size:1.5rem}.tutorial-congrats-body{margin:0 0 1.25rem;color:var(--fg-muted, #9aa4b2)}.tutorial-congrats-actions{display:flex;gap:.5rem;justify-content:center;flex-wrap:wrap}.tutorial-spot{position:fixed;border:2px solid var(--accent);border-radius:8px;box-shadow:0 0 0 9999px #0509118c,0 0 24px #00d4ff59;transition:top .18s ease,left .18s ease,width .18s ease,height .18s ease;pointer-events:none}.tutorial-tooltip{position:fixed;width:360px;max-height:calc(100vh - 32px);overflow-y:auto;padding:1rem;background:var(--bg-panel);border:1px solid var(--accent);border-radius:10px;box-shadow:0 14px 40px #0000008c;color:var(--fg);pointer-events:auto;transition:top .18s ease,left .18s ease;animation:tutorialTooltipFade .22s ease-out}@keyframes tutorialTooltipFade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.tutorial-tooltip-arrow{position:absolute;width:14px;height:14px;background:var(--bg-panel);border:1px solid var(--accent);transform:rotate(45deg);pointer-events:none}.tutorial-tooltip--top .tutorial-tooltip-arrow{bottom:-8px;left:50%;margin-left:-7px;border-top:none;border-left:none}.tutorial-tooltip--bottom .tutorial-tooltip-arrow{top:-8px;left:50%;margin-left:-7px;border-right:none;border-bottom:none}.tutorial-tooltip--left .tutorial-tooltip-arrow{right:-8px;top:50%;margin-top:-7px;border-bottom:none;border-left:none}.tutorial-tooltip--right .tutorial-tooltip-arrow{left:-8px;top:50%;margin-top:-7px;border-top:none;border-right:none}.tutorial-tooltip-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}.tutorial-tooltip-progress{font-size:.8rem;color:var(--accent);letter-spacing:.08em;text-transform:uppercase}.tutorial-tooltip-close{background:transparent;border:none;color:var(--muted);cursor:pointer;font-size:1.15rem;padding:0 .35rem}.tutorial-tooltip-title{margin:0 0 .5rem;font-size:1.2rem;line-height:1.3;color:var(--fg)}.tutorial-tooltip-body{margin:0 0 .85rem;color:var(--fg);font-size:1rem;line-height:1.55}.tutorial-minimodule-banner{display:flex;align-items:flex-start;gap:.5rem;padding:.55rem .65rem;margin:0 0 .75rem;border-radius:6px;background:color-mix(in oklab,var(--accent, #3a7bff) 14%,transparent);border:1px solid color-mix(in oklab,var(--accent, #3a7bff) 35%,transparent);font-size:.8rem;line-height:1.35}.tutorial-minimodule-banner-icon{flex-shrink:0;font-size:1rem;line-height:1}.tutorial-minimodule-banner-text{flex:1}.tutorial-minimodule-banner-dismiss{flex-shrink:0;background:transparent;border:0;color:inherit;opacity:.6;cursor:pointer;padding:0 .15rem;font-size:.85rem}.tutorial-minimodule-banner-dismiss:hover{opacity:1}.tutorial-tooltip-hint{display:flex;gap:.6rem;align-items:flex-start;margin:.5rem 0 .85rem;padding:.6rem .85rem;background:#00d4ff1f;border:1px solid rgba(0,212,255,.45);border-radius:8px;font-size:.95rem;line-height:1.4;color:var(--fg)}.tutorial-tooltip-hint-dot{flex-shrink:0;line-height:1.25}.tutorial-tooltip-actions{display:flex;justify-content:space-between;gap:.5rem}.tutorial-tooltip-code{margin:0 0 .75rem;background:#050911;border:1px solid var(--border);border-radius:6px;overflow:hidden}.tutorial-tooltip-code pre{margin:0;padding:.55rem .7rem;font-family:JetBrains Mono,Menlo,Consolas,monospace;font-size:.8125rem;color:#b8e6ff;white-space:pre-wrap;word-break:break-word;max-height:45vh;overflow-y:auto}.tutorial-tooltip-code-btn{width:100%;border-radius:0;border-left:none;border-right:none;border-bottom:none}.game-shell{display:flex;flex-direction:column;height:100vh;background:#10161f;color:var(--fg);overflow:hidden}.game-header{display:flex;align-items:center;gap:.75rem;padding:.5rem .75rem;border-bottom:1px solid var(--border);background:var(--bg-panel);flex-wrap:wrap}.game-header h1{margin:0;font-size:1.05rem;font-weight:700}.game-header-subtitle{color:var(--muted);font-size:.85rem}.game-header-spacer{flex:1}.game-hud{display:flex;gap:.75rem;align-items:center}.game-stat{display:flex;flex-direction:column;padding:.3rem .7rem;background:#ffffff0a;border:1px solid var(--border);border-radius:6px;min-width:80px}.game-stat-label{font-size:.7rem;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}.game-stat-value{font-size:1rem;font-weight:600;font-family:var(--font-mono, ui-monospace, monospace)}.game-stat--money .game-stat-value{color:#f5c518}.game-main{display:grid;grid-template-columns:1fr 460px;flex:1;min-height:0}@media(max-width:1100px){.game-main{grid-template-columns:1fr 380px}}.game-scene{position:relative;background:#87ceeb;overflow:hidden}.game-side{display:flex;flex-direction:column;border-left:1px solid var(--border);background:var(--bg-panel);min-height:0}.game-tabs{display:flex;border-bottom:1px solid var(--border)}.game-tab{flex:1;padding:.55rem;background:transparent;color:var(--muted);border:none;border-right:1px solid var(--border);cursor:pointer;font-size:.85rem}.game-tab:last-child{border-right:none}.game-tab.active{color:var(--fg);background:#f5c51814;box-shadow:inset 0 -2px #f5c518}.game-editor-wrap{flex:1 1 55%;min-height:240px;position:relative}.game-editor-loading{padding:1rem;color:var(--muted)}.game-error-banner{padding:.5rem .75rem;background:#e0313126;border-top:1px solid rgba(224,49,49,.4);border-bottom:1px solid rgba(224,49,49,.4);font-size:.85rem}.game-error-hint{display:block;color:var(--muted);margin-top:.25rem;font-size:.8rem}.game-log{flex:1 1 35%;min-height:120px;display:flex;flex-direction:column;border-top:1px solid var(--border);overflow:hidden}.game-log-header{padding:.4rem .75rem;background:#ffffff08;font-size:.75rem;text-transform:uppercase;color:var(--muted)}.game-log-list{list-style:none;margin:0;padding:.25rem 0;overflow-y:auto;flex:1;font-family:var(--font-mono, ui-monospace, monospace);font-size:.8rem}.game-log-entry{padding:.15rem .75rem;white-space:pre-wrap;word-break:break-word}.game-log-entry.level-error{color:#ff8a8a}.game-log-entry.level-warning{color:#ffc978}.game-log-entry.level-success{color:#5dff9f}.game-log-entry.level-info{color:var(--fg)}.game-howto pre.game-api-ref{background:#00000040;padding:.75rem;border-radius:6px;font-size:.8rem;white-space:pre;overflow-x:auto}.game-leaderboard-table{width:100%;border-collapse:collapse;font-size:.875rem}.game-leaderboard-table th,.game-leaderboard-table td{padding:.4rem .6rem;border-bottom:1px solid var(--border);text-align:left}.game-leaderboard-table th{color:var(--muted);font-weight:500}.game-level-select select{padding:.35rem .5rem;background:var(--bg);color:var(--fg);border:1px solid var(--border);border-radius:6px;font-size:.85rem}.dashboard-game-levels{list-style:none;padding:0;margin:.5rem 0;display:flex;flex-direction:column;gap:.3rem}.dashboard-game-level-btn{width:100%;display:grid;grid-template-columns:auto 1fr auto auto;gap:.5rem;padding:.4rem .6rem;background:#ffffff08;border:1px solid var(--border);border-radius:6px;color:var(--fg);cursor:pointer;font-size:.82rem;align-items:center}.dashboard-game-level-btn:hover{background:#f5c5181a;border-color:#f5c51866}.dashboard-game-level-index{color:var(--muted);font-weight:600}.dashboard-game-level-size{font-family:var(--font-mono, ui-monospace, monospace);color:var(--muted)}.dashboard-game-level-best{color:#f5c518;font-weight:600;min-width:90px;text-align:right}.game-log-entry.clickable{cursor:pointer}.game-log-entry.clickable:hover{background:#f5c51814}.game-hints-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.6rem}.game-hint-row{border:1px solid var(--border);border-radius:8px;padding:.6rem .75rem;background:#ffffff05}.game-hint-row.level-auto_solve{border-color:#e0313159;background:#e031310d}.game-hint-head{display:flex;align-items:center;gap:.5rem}.game-hint-icon{font-size:1.15rem}.game-hint-label{flex:1;font-weight:600}.game-hint-penalty{color:#ff8a8a;font-family:var(--font-mono, ui-monospace, monospace);font-size:.85rem}.game-hint-body{margin-top:.55rem;color:var(--fg)}.game-hint-body p{margin:0 0 .5rem}.game-hint-code{background:#0000004d;padding:.5rem;border-radius:6px;font-size:.78rem;white-space:pre;overflow-x:auto;margin:0}.game-tutorial-root{position:fixed;inset:0;z-index:9000;pointer-events:none}.game-tutorial-highlight{position:fixed;border:2px solid #f5c518;border-radius:10px;box-shadow:0 0 0 3px #f5c51840,0 0 9999px 9999px #00000080;pointer-events:none;transition:top .18s,left .18s,width .18s,height .18s}.game-tutorial-tooltip{position:fixed;max-width:420px;min-width:260px;padding:1rem 1.15rem;background:#1b2230;color:var(--fg);border:1px solid rgba(245,197,24,.5);border-radius:10px;box-shadow:0 8px 24px #0006;pointer-events:auto;z-index:9001}.game-tutorial-progress{font-size:.75rem;color:var(--muted);letter-spacing:.04em;margin-bottom:.2rem}.game-tutorial-title{margin:0 0 .35rem;font-size:1.02rem;color:#f5c518}.game-tutorial-text{margin:0 0 .85rem;font-size:.88rem;line-height:1.45}.game-tutorial-actions{display:flex;justify-content:flex-end;gap:.5rem}.game-tutorial-tooltip[data-placement=center]{box-shadow:0 10px 40px #0009}.game-speed{display:inline-flex;gap:.15rem;padding:.15rem;border:1px solid var(--border);border-radius:6px;background:#ffffff08}.game-speed-btn{padding:.2rem .45rem;background:transparent;color:var(--muted);border:none;border-radius:4px;cursor:pointer;font-size:.8rem;font-family:var(--font-mono, ui-monospace, monospace);min-width:28px}.game-speed-btn:hover{background:#f5c51814;color:var(--fg)}.game-speed-btn.active{background:#f5c518;color:#1b1500;font-weight:700}.game-plant-progress-layer{position:absolute;inset:0;pointer-events:none}.game-plant-progress-label{position:absolute;transform:translate(-50%,-100%);padding:.1rem .4rem;background:#0000008c;color:#fff;border-radius:4px;font-size:.75rem;font-weight:600;font-family:var(--font-mono, ui-monospace, monospace);white-space:nowrap;backdrop-filter:blur(2px);user-select:none}.game-cell-tooltip{position:absolute;top:8px;right:8px;padding:.4rem .6rem;background:#0a0e16e0;border:1px solid var(--border);border-radius:6px;color:var(--fg);font-size:.8rem;pointer-events:none;z-index:10}.game-cell-tooltip-coords{font-family:var(--font-mono, ui-monospace, monospace);color:var(--muted);font-size:.72rem}.game-cell-tooltip-kind{font-weight:600}.game-cell-tooltip-state{color:#f5c518}.game-scene{position:relative}
