@import"https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&family=Space+Grotesk:wght@400;500;700&display=swap";.app-confirm-backdrop[data-v-62be2f2d]{z-index:2200}.app-confirm-message[data-v-62be2f2d]{white-space:pre-wrap;word-break:break-word}.fm-backdrop[data-v-a329ba40]{position:fixed;inset:0;z-index:200;background:#0000008c;display:flex;align-items:center;justify-content:center}.fm-dialog[data-v-a329ba40]{background:#0f1b2d;color:#e2e8f0;border-radius:14px;width:90vw;max-width:680px;max-height:85vh;display:flex;flex-direction:column;border:1px solid rgba(148,163,184,.2)}.fm-header[data-v-a329ba40]{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid rgba(148,163,184,.14)}.fm-header h2[data-v-a329ba40]{margin:0;font-size:1.1rem}.fm-close[data-v-a329ba40]{border:none;background:transparent;color:#94a3b8;font-size:1.2rem;cursor:pointer;padding:4px 8px;border-radius:6px}.fm-close[data-v-a329ba40]:hover{background:#94a3b826}.fm-toolbar[data-v-a329ba40]{display:flex;align-items:center;justify-content:space-between;padding:8px 14px;gap:8px;flex-wrap:wrap;border-bottom:1px solid rgba(148,163,184,.1)}.fm-breadcrumb[data-v-a329ba40]{display:flex;align-items:center;gap:2px;min-width:0;flex:1}.fm-crumb[data-v-a329ba40]{border:none;background:transparent;color:#60a5fa;cursor:pointer;font-size:.82rem;padding:2px 4px;border-radius:4px;white-space:nowrap}.fm-crumb[data-v-a329ba40]:hover{background:#60a5fa26}.fm-crumb[data-v-a329ba40]:after{content:"›";margin-left:4px;color:#475569}.fm-crumb[data-v-a329ba40]:last-child:after{content:""}.fm-actions[data-v-a329ba40]{display:flex;gap:4px;flex-shrink:0}.fm-btn[data-v-a329ba40]{border:1px solid rgba(148,163,184,.22);background:#0f182a99;color:#cbd5e1;padding:5px 10px;border-radius:6px;font-size:.78rem;cursor:pointer;white-space:nowrap}.fm-btn[data-v-a329ba40]:hover{background:#1e293be6;border-color:#60a5fa80}.fm-btn[data-v-a329ba40]:disabled{opacity:.4;cursor:default}.fm-btn-primary[data-v-a329ba40]{background:#1b61c9;color:#fff;border-color:#1b61c9}.fm-delete-confirm-btn[data-v-a329ba40]{background:#be183c;color:#fff;border-color:#be183c}.fm-delete-confirm-btn[data-v-a329ba40]:hover{background:#dc2650}.fm-upload-label[data-v-a329ba40]{display:inline-flex;align-items:center;cursor:pointer}.fm-list-wrap[data-v-a329ba40]{flex:1;overflow-y:auto;min-height:200px}.fm-progress-bar[data-v-a329ba40]{padding:8px 14px;border-bottom:1px solid rgba(148,163,184,.1)}.fm-progress-info[data-v-a329ba40]{font-size:.75rem;color:#94a3b8;margin-bottom:4px}.fm-progress-track[data-v-a329ba40]{height:6px;background:#94a3b826;border-radius:3px;overflow:hidden}.fm-progress-fill[data-v-a329ba40]{height:100%;background:#3b82f6;border-radius:3px;transition:width .15s}.fm-loading[data-v-a329ba40],.fm-empty[data-v-a329ba40]{padding:40px;text-align:center;color:#64748b;font-size:.88rem}.fm-error[data-v-a329ba40]{color:#fb7185;word-break:break-all}.fm-table[data-v-a329ba40]{width:100%;border-collapse:collapse}.fm-table th[data-v-a329ba40]{text-align:left;padding:6px 14px;font-size:.72rem;color:#64748b;border-bottom:1px solid rgba(148,163,184,.1);position:sticky;top:0;background:#0f1b2d;z-index:1}.fm-row[data-v-a329ba40]{cursor:pointer;transition:background .1s}.fm-row[data-v-a329ba40]:hover{background:#1e293b99}.fm-row td[data-v-a329ba40]{padding:6px 14px;font-size:.82rem;border-bottom:1px solid rgba(148,163,184,.06)}.fm-col-name[data-v-a329ba40]{display:flex;align-items:center;gap:8px}.fm-icon[data-v-a329ba40]{font-size:1rem}.fm-name[data-v-a329ba40]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fm-col-size[data-v-a329ba40]{color:#64748b;width:80px;text-align:right}.fm-col-actions[data-v-a329ba40]{width:70px;text-align:right;white-space:nowrap}.fm-mini-btn[data-v-a329ba40]{border:none;background:transparent;color:#64748b;cursor:pointer;padding:2px 6px;border-radius:4px;font-size:.88rem}.fm-mini-btn[data-v-a329ba40]:hover{background:#94a3b826}.fm-delete-btn[data-v-a329ba40]:hover{color:#f87171}.fm-editor-overlay[data-v-a329ba40]{position:absolute;inset:0;background:#0006;display:flex;align-items:center;justify-content:center;z-index:10}.fm-editor-panel[data-v-a329ba40]{background:#0f1b2d;border:1px solid rgba(148,163,184,.2);border-radius:10px;width:90%;height:85%;display:flex;flex-direction:column}.fm-editor-header[data-v-a329ba40]{display:flex;align-items:center;justify-content:space-between;padding:8px 14px;border-bottom:1px solid rgba(148,163,184,.14);gap:8px}.fm-editor-header span[data-v-a329ba40]{font-size:.85rem;color:#cbd5e1}.fm-editor-header div[data-v-a329ba40]{display:flex;gap:4px}.fm-textarea[data-v-a329ba40]{flex:1;width:100%;border:none;background:#091322;color:#e2e8f0;padding:12px;font-family:Cascadia Code,Fira Code,monospace;font-size:.82rem;resize:none;outline:none;line-height:1.5}.fm-image-panel[data-v-a329ba40]{height:auto;max-height:90%}.fm-image-wrap[data-v-a329ba40]{flex:1;overflow:auto;display:flex;align-items:center;justify-content:center;background:#091322;padding:16px;min-height:200px}.fm-image[data-v-a329ba40]{max-width:100%;max-height:60vh;object-fit:contain;border-radius:8px}.fm-prompt-overlay[data-v-a329ba40]{position:absolute;inset:0;background:#0006;display:flex;align-items:center;justify-content:center;z-index:20}.fm-prompt[data-v-a329ba40]{background:#0f1b2d;border:1px solid rgba(148,163,184,.2);border-radius:10px;padding:20px;width:320px}.fm-prompt p[data-v-a329ba40]{margin:0 0 8px;font-size:.88rem;color:#cbd5e1}.fm-input[data-v-a329ba40]{width:100%;padding:8px 10px;border-radius:6px;border:1px solid rgba(148,163,184,.22);background:#091322;color:#e2e8f0;font-size:.85rem;margin-bottom:12px}.fm-prompt-actions[data-v-a329ba40]{display:flex;justify-content:flex-end;gap:6px}.login-prompt-backdrop[data-v-f2e091f9]{position:fixed;inset:0;z-index:1200;display:flex;align-items:center;justify-content:center;padding:24px;background:#172b4d6b;backdrop-filter:blur(3px)}.login-prompt-dialog[data-v-f2e091f9]{width:min(400px,100%);padding:30px 30px 26px;border-radius:18px;background:#fff;box-shadow:0 18px 48px #1f4ea838;text-align:center;animation:login-prompt-pop-f2e091f9 .18s ease-out}@keyframes login-prompt-pop-f2e091f9{0%{opacity:0;transform:translateY(10px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}.login-prompt-icon[data-v-f2e091f9]{display:inline-flex;align-items:center;justify-content:center;width:58px;height:58px;margin-bottom:14px;border-radius:50%;color:#2f7cf6;background:linear-gradient(145deg,#e8f1fe,#d4e5fd)}.login-prompt-title[data-v-f2e091f9]{margin:0 0 8px;font-size:19px;font-weight:700;color:#1b2b4d}.login-prompt-message[data-v-f2e091f9]{margin:0 0 22px;font-size:14px;line-height:1.65;color:#5a6b8c}.login-prompt-actions[data-v-f2e091f9]{display:flex;gap:12px;justify-content:center}.login-prompt-btn[data-v-f2e091f9]{flex:1;max-width:150px;padding:10px 18px;border-radius:12px;border:none;font-size:14.5px;font-weight:600;cursor:pointer;transition:background .15s,box-shadow .15s,transform .1s}.login-prompt-btn[data-v-f2e091f9]:active{transform:translateY(1px)}.login-prompt-btn-primary[data-v-f2e091f9]{color:#fff;background:linear-gradient(135deg,#2f7cf6,#5a96f8);box-shadow:0 6px 16px #2f7cf659}.login-prompt-btn-primary[data-v-f2e091f9]:hover{background:linear-gradient(135deg,#2470ea,#4a8af6);box-shadow:0 8px 20px #2f7cf66b}.login-prompt-btn-ghost[data-v-f2e091f9]{color:#4a5b7c;background:#eef2f9}.login-prompt-btn-ghost[data-v-f2e091f9]:hover{background:#e2e9f5}.login-page[data-v-c7118c18]{display:flex;width:100%;height:100%;min-height:100vh;overflow:hidden;position:relative}.login-beian[data-v-c7118c18]{position:fixed;left:0;right:0;bottom:0;display:flex;justify-content:center;gap:16px;padding:6px 12px;font-size:12px;color:#787882d9;background:#fff9;backdrop-filter:blur(4px);z-index:5}.login-beian a[data-v-c7118c18]{color:inherit;text-decoration:none}.login-beian a[data-v-c7118c18]:hover{text-decoration:underline}.login-language[data-v-c7118c18]{position:absolute;top:18px;right:20px;z-index:10}.login-back[data-v-c7118c18]{position:absolute;top:18px;left:20px;z-index:10;padding:8px 14px;border-radius:8px;border:1px solid rgba(255,255,255,.35);background:#ffffff24;color:#fff;font-size:.9rem;cursor:pointer;outline:none;transition:background .2s ease,border-color .2s ease}.login-back[data-v-c7118c18]:hover{background:#ffffff3d;border-color:#ffffff8c}.login-language-select[data-v-c7118c18]{min-width:100px;padding:8px 12px;border-radius:8px;border:1px solid #e0e2e6;background:#fff;color:#181d26;font-size:.9rem;outline:none;cursor:pointer}.login-language-select[data-v-c7118c18]:focus{border-color:#1b61c9;box-shadow:0 0 0 3px #1b61c91f}.login-left[data-v-c7118c18]{flex:0 0 60%;background:linear-gradient(135deg,#1b61c9,#254fad);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px;position:relative;overflow:hidden}.login-left[data-v-c7118c18]:before{content:"";position:absolute;width:500px;height:500px;border-radius:50%;background:#ffffff0a;top:-150px;right:-100px}.login-left[data-v-c7118c18]:after{content:"";position:absolute;width:300px;height:300px;border-radius:50%;background:#ffffff08;bottom:-80px;left:-60px}.login-left-content[data-v-c7118c18]{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;gap:24px}.login-brand[data-v-c7118c18]{display:flex;align-items:center;gap:12px}.login-brand-logo[data-v-c7118c18]{width:42px;height:42px;object-fit:contain;filter:brightness(2) drop-shadow(0 4px 12px rgba(255,255,255,.3))}.login-brand-name[data-v-c7118c18]{font-size:1.4rem;font-weight:700;color:#fff;letter-spacing:.04em}.sugar-stage[data-v-c7118c18]{position:relative;width:100%;max-width:440px;height:380px;user-select:none}.sugar-scenes[data-v-c7118c18]{position:absolute;inset:0;z-index:1;pointer-events:none}.sugar-scene[data-v-c7118c18]{position:absolute;inset:0;opacity:0;transition:opacity .8s ease}.sugar-scene.active[data-v-c7118c18]{opacity:.32}.scene-block[data-v-c7118c18]{position:absolute;left:50%;top:50%;width:34px;height:34px;margin:-17px 0 0 -17px;border-radius:8px;background:#ffffff80;animation:blockAssemble-c7118c18 9s ease-in-out infinite}.scene-block-1[data-v-c7118c18]{--sx: -140px;--sy: -90px;--ex: -19px;--ey: -19px}.scene-block-2[data-v-c7118c18]{--sx: 130px;--sy: -70px;--ex: 19px;--ey: -19px;background:#ffd16699}.scene-block-3[data-v-c7118c18]{--sx: -120px;--sy: 100px;--ex: -19px;--ey: 19px;background:#8ecae699}.scene-block-4[data-v-c7118c18]{--sx: 140px;--sy: 90px;--ex: 19px;--ey: 19px;background:#06d6a08c}@keyframes blockAssemble-c7118c18{0%,12%{transform:translate(var(--sx),var(--sy)) rotate(0)}45%,62%{transform:translate(var(--ex),var(--ey)) rotate(90deg)}92%,to{transform:translate(var(--sx),var(--sy)) rotate(0)}}.scene-wires-svg[data-v-c7118c18]{width:100%;height:100%}.wire[data-v-c7118c18]{stroke-dasharray:6 6;opacity:.25;animation:wireGlow-c7118c18 9s ease-in-out infinite}.wire-dot[data-v-c7118c18]{opacity:.15;animation:dotGlow-c7118c18 9s ease-in-out infinite}.wire-dot-1[data-v-c7118c18]{animation-delay:0s}.wire-1[data-v-c7118c18]{animation-delay:.4s}.wire-dot-2[data-v-c7118c18]{animation-delay:.8s}.wire-2[data-v-c7118c18]{animation-delay:1.2s}.wire-dot-3[data-v-c7118c18]{animation-delay:1.6s}.wire-3[data-v-c7118c18]{animation-delay:2s}.wire-dot-4[data-v-c7118c18]{animation-delay:2.4s}.wire-4[data-v-c7118c18]{animation-delay:2.8s}.wire-dot-5[data-v-c7118c18]{animation-delay:3.2s}@keyframes dotGlow-c7118c18{0%,to{opacity:.15}10%,55%{opacity:.95}70%{opacity:.15}}@keyframes wireGlow-c7118c18{0%,to{opacity:.15}10%,55%{opacity:.7}70%{opacity:.15}}.camera-frame[data-v-c7118c18]{position:absolute;left:8%;top:30%;width:110px;height:110px;border:2px dashed rgba(255,255,255,.7);border-radius:12px;animation:cameraScan-c7118c18 9s ease-in-out infinite}.camera-icon[data-v-c7118c18]{position:absolute;left:62%;top:38%;width:52px;height:52px;object-fit:contain;opacity:0;animation:cameraLock-c7118c18 9s ease-in-out infinite}.camera-bubble[data-v-c7118c18]{position:absolute;left:62%;top:26%;padding:4px 10px;border-radius:999px;background:#ffffffd9;color:#1b61c9;font-size:.75rem;font-weight:600;white-space:nowrap;opacity:0;animation:cameraLock-c7118c18 9s ease-in-out infinite}@keyframes cameraScan-c7118c18{0%,15%{left:8%}45%,85%{left:55%}to{left:8%}}@keyframes cameraLock-c7118c18{0%,44%{opacity:0;transform:scale(.6)}52%,82%{opacity:1;transform:scale(1)}92%,to{opacity:0;transform:scale(.6)}}.sugar-light-spot[data-v-c7118c18]{position:absolute;width:40px;height:40px;margin:-20px 0 0 -20px;border-radius:50%;background:radial-gradient(circle,#fff6c8f2,#fff6c800 70%);transition:left 2s ease-in-out,top 2s ease-in-out;z-index:2;pointer-events:none}.sugar-fx-layer[data-v-c7118c18]{position:absolute;inset:0;z-index:5;overflow:hidden;pointer-events:none}.sugar-particle[data-v-c7118c18]{position:absolute;width:10px;height:10px;margin:-5px 0 0 -5px;border-radius:50%;animation:particleFly-c7118c18 .9s ease-out forwards}@keyframes particleFly-c7118c18{0%{transform:translate(0) scale(1);opacity:1}to{transform:translate(var(--dx),var(--dy)) scale(.4);opacity:0}}.sugar-runner[data-v-c7118c18]{position:absolute;left:-70px;animation:runnerDash-c7118c18 2s linear forwards;filter:drop-shadow(0 4px 6px rgba(0,0,0,.25))}@keyframes runnerDash-c7118c18{0%{transform:translate(0)}25%{transform:translate(160px,-10px)}50%{transform:translate(320px)}75%{transform:translate(480px,-10px)}to{transform:translate(660px)}}.sugar-hero[data-v-c7118c18]{position:absolute;left:42%;top:44%;width:180px;height:180px;margin:-90px 0 0 -90px;cursor:pointer;transition:transform .3s ease-out;z-index:3}.sugar-buddy[data-v-c7118c18]{position:absolute;left:76%;top:64%;width:104px;height:104px;margin:-52px 0 0 -52px;cursor:pointer;transition:transform .3s ease-out;z-index:3}.sugar-float[data-v-c7118c18]{animation:sugarFloat-c7118c18 4s ease-in-out infinite}.sugar-float-buddy[data-v-c7118c18]{animation-duration:4.8s;animation-delay:-1.6s}@keyframes sugarFloat-c7118c18{0%,to{transform:translateY(0)}50%{transform:translateY(-14px)}}.sugar-img[data-v-c7118c18]{width:100%;display:block;filter:drop-shadow(0 10px 18px rgba(0,0,0,.28));transform-origin:center 62%;transition:transform .12s ease}.sugar-img.blink[data-v-c7118c18]{transform:scaleY(.14)}.sugar-action.sugar-flip[data-v-c7118c18]{animation:sugarFlip-c7118c18 .8s ease}@keyframes sugarFlip-c7118c18{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.sugar-action.sugar-squash[data-v-c7118c18]{animation:sugarSquash-c7118c18 .55s ease}@keyframes sugarSquash-c7118c18{0%{transform:scale(1)}30%{transform:scale(1.15,.7)}60%{transform:scale(.95,1.08)}to{transform:scale(1)}}@media(prefers-reduced-motion:reduce){.sugar-float[data-v-c7118c18],.sugar-float-buddy[data-v-c7118c18],.scene-block[data-v-c7118c18],.wire[data-v-c7118c18],.wire-dot[data-v-c7118c18],.camera-frame[data-v-c7118c18],.camera-icon[data-v-c7118c18],.camera-bubble[data-v-c7118c18],.sugar-particle[data-v-c7118c18],.sugar-runner[data-v-c7118c18],.sugar-action.sugar-flip[data-v-c7118c18],.sugar-action.sugar-squash[data-v-c7118c18]{animation:none!important}.sugar-scene[data-v-c7118c18],.sugar-light-spot[data-v-c7118c18]{display:none}.sugar-hero[data-v-c7118c18],.sugar-buddy[data-v-c7118c18],.sugar-img[data-v-c7118c18]{transition:none}}.login-left-slogan[data-v-c7118c18]{color:#ffffffbf;font-size:1.1rem;letter-spacing:.06em}.login-right[data-v-c7118c18]{flex:0 0 40%;background:#fff;display:flex;align-items:center;justify-content:center;padding:40px 32px}.login-form-container[data-v-c7118c18]{width:100%;max-width:380px}.login-title[data-v-c7118c18]{font-size:1.4rem;font-weight:600;color:#181d26;margin:0 0 20px;text-align:center;letter-spacing:.12px}.login-form[data-v-c7118c18]{display:flex;flex-direction:column;gap:16px}.login-contact-pane[data-v-c7118c18]{align-items:center;text-align:center;padding-top:4px}.login-contact-lead[data-v-c7118c18]{font-size:13.5px;line-height:1.7;color:#5a6478}.login-contact-qr[data-v-c7118c18]{width:220px;max-width:70%;height:auto;border-radius:12px;border:1px solid #e3e6ec;background:#fff;user-select:none;margin:4px 0 8px}.login-contact-back[data-v-c7118c18]{font-size:13px}.login-field[data-v-c7118c18]{display:flex;flex-direction:column;gap:6px}.login-field-label[data-v-c7118c18]{font-size:.85rem;font-weight:500;color:#181d26;letter-spacing:.08px}.login-field-optional[data-v-c7118c18]{font-weight:400;color:#aaa;font-size:.8rem}.login-field-input-wrap[data-v-c7118c18]{position:relative;display:flex;align-items:center}.login-field-input[data-v-c7118c18]{width:100%;height:44px;padding:0 14px;border:1px solid #e0e2e6;border-radius:8px;font-size:.95rem;color:#181d26;background:#fff;outline:none;transition:border-color .2s,box-shadow .2s;letter-spacing:.08px}.login-field-input[data-v-c7118c18]::placeholder{color:#999}.login-field-input[data-v-c7118c18]:focus{border-color:#1b61c9;box-shadow:0 0 0 3px #1b61c91f;background:#fff}.login-field-input-wrap .login-field-input[data-v-c7118c18]{padding-right:60px}.login-field-toggle[data-v-c7118c18]{position:absolute;right:10px;background:none;border:none;font-size:.78rem;color:#1b61c9;cursor:pointer;padding:4px 6px;font-weight:500}.login-error[data-v-c7118c18]{background:#fff2f0;border:1px solid #ffccc7;color:#cf1322;font-size:.85rem;padding:10px 12px;border-radius:8px}.login-submit-btn[data-v-c7118c18]{width:100%;height:46px;border:none;border-radius:12px;background:#1b61c9;color:#fff;font-size:1rem;font-weight:500;cursor:pointer;transition:background .2s,transform .1s;margin-top:4px;letter-spacing:.08px;box-shadow:#2d7ff947 0 1px 3px}.login-submit-btn[data-v-c7118c18]:hover:not(:disabled){background:#254fad}.login-submit-btn[data-v-c7118c18]:active:not(:disabled){transform:scale(.98)}.login-submit-btn[data-v-c7118c18]:disabled{opacity:.6;cursor:not-allowed}.login-switch-mode[data-v-c7118c18]{text-align:center;font-size:.85rem;color:#666;letter-spacing:.08px}.login-switch-link[data-v-c7118c18]{background:none;border:none;color:#1b61c9;font-size:.85rem;font-weight:600;cursor:pointer;padding:0}.login-switch-link[data-v-c7118c18]:hover{text-decoration:underline}@media(max-width:768px){.login-page[data-v-c7118c18]{flex-direction:column;overflow:auto}.login-language[data-v-c7118c18]{top:12px;right:12px}.login-back[data-v-c7118c18]{top:12px;left:12px}.login-left[data-v-c7118c18]{flex:0 0 auto;min-height:200px;padding:30px 20px}.sugar-stage[data-v-c7118c18]{max-width:280px;height:240px}.sugar-hero[data-v-c7118c18]{width:120px;height:120px;margin:-60px 0 0 -60px}.sugar-buddy[data-v-c7118c18]{width:72px;height:72px;margin:-36px 0 0 -36px}.login-right[data-v-c7118c18]{flex:1;padding:24px 20px}.login-form-container[data-v-c7118c18]{max-width:100%}}.account-entry[data-v-cb556c7a]{display:flex;align-items:center}.account-login-btn[data-v-cb556c7a]{padding:8px 20px;font-size:14px}.user-menu[data-v-cb556c7a]{position:relative}.user-chip[data-v-cb556c7a]{display:flex;align-items:center;gap:8px;border:none;background:none;padding:2px 4px;border-radius:999px;color:var(--ink)}.user-chip[data-v-cb556c7a]:hover{background:var(--primary-soft)}.user-dropdown[data-v-cb556c7a]{position:absolute;right:0;top:calc(100% + 8px);min-width:148px;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-hover);padding:6px;display:flex;flex-direction:column;z-index:60}.user-dropdown-item[data-v-cb556c7a]{border:none;background:none;text-align:left;font-size:13.5px;color:var(--ink-2);padding:9px 12px;border-radius:8px}.user-dropdown-item[data-v-cb556c7a]:hover{background:var(--primary-soft);color:var(--primary-text)}.user-dropdown-item.is-danger[data-v-cb556c7a]:hover{background:var(--pink-bg);color:var(--pink-ink)}.cpw-backdrop[data-v-cb556c7a]{position:fixed;inset:0;z-index:1200;display:flex;align-items:center;justify-content:center;padding:24px;background:#172b4d6b;backdrop-filter:blur(3px)}.cpw-dialog[data-v-cb556c7a]{width:min(400px,100%);padding:26px 28px 24px;border-radius:18px;background:#fff;box-shadow:0 18px 48px #1f4ea838;animation:cpw-pop-cb556c7a .18s ease-out}@keyframes cpw-pop-cb556c7a{0%{opacity:0;transform:translateY(10px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}.cpw-title[data-v-cb556c7a]{margin:0 0 6px;font-size:19px;font-weight:700;color:#1b2b4d}.cpw-hint[data-v-cb556c7a]{margin:0 0 18px;font-size:13px;line-height:1.6;color:#5a6b8c}.cpw-form[data-v-cb556c7a]{display:flex;flex-direction:column;gap:14px}.cpw-field[data-v-cb556c7a]{display:flex;flex-direction:column;gap:6px}.cpw-field-label[data-v-cb556c7a]{font-size:13.5px;font-weight:500;color:#1b2b4d}.cpw-input-wrap[data-v-cb556c7a]{position:relative;display:flex;align-items:center}.cpw-input[data-v-cb556c7a]{width:100%;height:42px;padding:0 58px 0 14px;border:1px solid #e0e2e6;border-radius:8px;font-size:14px;color:#181d26;background:#fff;outline:none;transition:border-color .2s,box-shadow .2s}.cpw-input[data-v-cb556c7a]::placeholder{color:#999}.cpw-input[data-v-cb556c7a]:focus{border-color:#1b61c9;box-shadow:0 0 0 3px #1b61c91f}.cpw-toggle[data-v-cb556c7a]{position:absolute;right:8px;border:none;background:none;padding:4px 6px;font-size:12.5px;font-weight:500;color:#1b61c9;cursor:pointer}.cpw-error[data-v-cb556c7a]{margin:0;padding:9px 12px;border:1px solid #e3e6ec;border-radius:8px;background:#f4f6fa;font-size:13px;line-height:1.55;color:#5a6478}.cpw-actions[data-v-cb556c7a]{display:flex;gap:12px;justify-content:flex-end;margin-top:4px}.cpw-btn[data-v-cb556c7a]{padding:9px 18px;border:none;border-radius:10px;font-size:14px;font-weight:600;cursor:pointer;transition:background .15s,transform .1s}.cpw-btn[data-v-cb556c7a]:active{transform:translateY(1px)}.cpw-btn[data-v-cb556c7a]:disabled{opacity:.6;cursor:not-allowed}.cpw-btn-primary[data-v-cb556c7a]{color:#fff;background:linear-gradient(135deg,#2f7cf6,#5a96f8);box-shadow:0 6px 16px #2f7cf659}.cpw-btn-primary[data-v-cb556c7a]:hover:not(:disabled){background:linear-gradient(135deg,#2470ea,#4a8af6)}.cpw-btn-ghost[data-v-cb556c7a]{color:#4a5b7c;background:#eef2f9}.cpw-btn-ghost[data-v-cb556c7a]:hover:not(:disabled){background:#e2e9f5}.login-guide[data-v-c237be32]{display:flex;align-items:center;gap:20px}.login-guide img[data-v-c237be32]{width:72px;height:72px;object-fit:contain;flex-shrink:0}.login-guide-body[data-v-c237be32]{flex:1}.login-guide-body h3[data-v-c237be32]{font-size:17px;margin-bottom:6px}.login-guide-body p[data-v-c237be32]{font-size:13.5px;color:var(--ink-2)}.portal-root{--primary: #4a6cf7;--primary-dark: #3a56d4;--primary-light: #7f97fa;--primary-text: #4a6cf7;--primary-soft: #f0f4ff;--primary-soft-hover: #e2e9ff;--btn-bg: #4a6cf7;--btn-bg-hover: #3a56d4;--grad-1: #4a6cf7;--grad-2: #6d86f9;--grad-3: #8fa3fb;--hero-bg: linear-gradient(120deg, #eef2ff 0%, #f7faff 55%, #ffffff 100%);--banner-bg: linear-gradient(115deg, #fff4f8 0%, #f0f4ff 60%, #eaf6ff 100%);--video-bg: linear-gradient(135deg, #2b3350, #4a6cf7);--ppt-bg: linear-gradient(120deg, #eef2ff, #e4f3ff);--chart-holder-bg: linear-gradient(180deg, #fbfcff, #f4f7ff);--bar-track: #dbe4ff;--bp-tint: rgba(74, 108, 247, .05);--bp-line: rgba(74, 108, 247, .1);--bp-icon: #4a6cf7;--btn-shadow: 0 4px 14px rgba(74, 108, 247, .32);--welcome-shadow: 0 8px 26px rgba(74, 108, 247, .3);--shadow-hover: 0 6px 18px rgba(74, 108, 247, .12), 0 14px 40px rgba(31, 39, 51, .1);--acc1-bg: #f0f4ff;--acc1-ink: #4a6cf7;--acc1-label: #4a5e9e;--acc2-bg: #f0fff4;--acc2-ink: #2e7d32;--acc3-bg: #fff8e1;--acc3-ink: #e65100;--acc4-bg: #fce4ec;--acc4-ink: #c62828;--cov-1: linear-gradient(135deg, #4a6cf7, #7f97fa);--cov-2: linear-gradient(135deg, #43a047, #7ed491);--cov-3: linear-gradient(135deg, #fb8c00, #ffc966);--cov-4: linear-gradient(135deg, #1e88e5, #6ec6ff);--cov-5: linear-gradient(135deg, #e53935, #ff8a80);--cov-6: linear-gradient(135deg, #8e24aa, #ce93d8);--chart-line1: #4a6cf7;--chart-line2: #9db4f5;--ok: #34a853;--ok-ink: #2e7d32;--ok-bg: #f0fff4;--warn-bg: #fff8e1;--warn-ink: #e65100;--pink-bg: #fce4ec;--pink-ink: #c62828;--ink: #1f2733;--ink-2: #55617a;--ink-3: #8a94ab;--line: #e8ecf4;--page: #f6f8fc;--white: #ffffff;--radius: 14px;--radius-lg: 16px;--shadow: 0 2px 10px rgba(31, 39, 51, .05), 0 8px 28px rgba(31, 39, 51, .06)}.portal-root,.portal-root *,.portal-root *:before,.portal-root *:after{box-sizing:border-box}.portal-root h1,.portal-root h2,.portal-root h3,.portal-root h4,.portal-root p{margin:0}.portal-root{font-family:PingFang SC,Microsoft YaHei,Helvetica Neue,Arial,sans-serif;background:var(--page);color:var(--ink);line-height:1.6;font-size:15px}.portal-root a{color:inherit;text-decoration:none}.portal-root img{display:block;max-width:100%}.portal-root button{font-family:inherit;cursor:pointer}.portal-root .container{max-width:1200px;margin:0 auto;padding:0 24px}.portal-root .site-header{position:sticky;top:0;z-index:50;background:#ffffffeb;backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}.portal-root .site-header .container{display:flex;align-items:center;gap:24px;height:64px}.portal-root .brand{display:flex;align-items:center;gap:10px;flex-shrink:0}.portal-root .brand img{width:34px;height:34px}.portal-root .brand .brand-name{font-size:17px;font-weight:700;letter-spacing:.5px}.portal-root .brand .brand-name em{font-style:normal;color:var(--primary)}.portal-root .main-nav{display:flex;gap:4px;flex:1;overflow-x:auto}.portal-root .main-nav a{padding:7px 14px;border-radius:999px;font-size:14.5px;color:var(--ink-2);white-space:nowrap;transition:background .15s,color .15s}.portal-root .main-nav a:hover{background:var(--primary-soft);color:var(--primary-text)}.portal-root .main-nav a.active{background:var(--btn-bg);color:#fff;font-weight:600}.portal-root .header-right{display:flex;align-items:center;gap:14px;flex-shrink:0}.portal-root .search-box{display:flex;align-items:center;gap:6px;background:var(--page);border:1px solid var(--line);border-radius:999px;padding:6px 14px;color:var(--ink-3);font-size:13.5px;width:180px}.portal-root .search-box svg{flex-shrink:0}.portal-root .user-chip{display:flex;align-items:center;gap:8px}.portal-root .user-chip img{width:36px;height:36px;border-radius:50%;background:var(--primary-soft);border:2px solid #fff;box-shadow:0 1px 4px #1f27331f;object-fit:contain}.portal-root .user-chip .user-name{font-size:14px;font-weight:600}.portal-root .page-main{padding:28px 0 72px}.portal-root .section{margin-top:36px}.portal-root .section:first-child{margin-top:0}.portal-root .section-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:16px}.portal-root .section-title{font-size:20px;font-weight:700;display:flex;align-items:center;gap:8px}.portal-root .section-title:before{content:"";width:5px;height:20px;border-radius:3px;background:var(--primary)}.portal-root .section-more{font-size:13.5px;color:var(--primary-text)}.portal-root .section-more:hover{text-decoration:underline}.portal-root .card{background:var(--white);border-radius:var(--radius-lg);box-shadow:var(--shadow);border:1px solid rgba(232,236,244,.7);padding:22px}.portal-root .card.hoverable{transition:transform .18s,box-shadow .18s}.portal-root .card.hoverable:hover{transform:translateY(-3px);box-shadow:var(--shadow-hover)}.portal-root .btn{display:inline-flex;align-items:center;gap:8px;border:none;border-radius:999px;padding:11px 26px;font-size:15px;font-weight:600;transition:background .15s,transform .15s,box-shadow .15s}.portal-root .btn-primary{background:var(--btn-bg);color:#fff;box-shadow:var(--btn-shadow)}.portal-root .btn-primary:hover{background:var(--btn-bg-hover);transform:translateY(-1px)}.portal-root .btn-ghost{background:var(--primary-soft);color:var(--primary-text)}.portal-root .btn-ghost:hover{background:var(--primary-soft-hover)}.portal-root .tag{display:inline-block;font-size:12px;padding:2px 10px;border-radius:999px;background:var(--primary-soft);color:var(--primary-text);white-space:nowrap}.portal-root .tag.green{background:var(--ok-bg);color:var(--ok-ink)}.portal-root .tag.orange{background:var(--warn-bg);color:var(--warn-ink)}.portal-root .tag.pink{background:var(--pink-bg);color:var(--pink-ink)}.portal-root .tag.gray{background:#eef1f6;color:var(--ink-2)}.portal-root .chip-row{display:flex;flex-wrap:wrap;gap:10px}.portal-root .placeholder-card{border:1.5px dashed #cdd5e4;box-shadow:none;background:#fbfcff;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:var(--ink-3)}.portal-root .placeholder-card h4{color:var(--ink-2)}.portal-root .placeholder-icon{background:#eef1f6;color:var(--ink-3)}.portal-root .planned-chip-row{display:flex;flex-wrap:wrap;gap:10px}.portal-root .planned-chip{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border:1.5px dashed #cdd5e4;border-radius:999px;background:#fbfcff;color:var(--ink-2);font-size:13px}.portal-root .planned-chip svg{color:var(--ink-3);flex-shrink:0}.portal-root .planned-chip-tag{font-style:normal;font-size:11.5px;padding:1px 8px;border-radius:999px;background:#eef1f6;color:var(--ink-3)}.portal-root .chip{border:1px solid var(--line);background:var(--white);color:var(--ink-2);border-radius:999px;padding:7px 18px;font-size:14px;transition:all .15s}.portal-root .chip:hover{border-color:var(--primary);color:var(--primary-text)}.portal-root .chip.on{background:var(--btn-bg);border-color:var(--btn-bg);color:#fff;font-weight:600}.portal-root .page-hero{display:flex;align-items:center;justify-content:space-between;gap:24px;background:var(--hero-bg);border-radius:var(--radius-lg);border:1px solid rgba(232,236,244,.8);box-shadow:var(--shadow);padding:20px 30px}.portal-root .page-hero h1{font-size:24px;margin-bottom:6px}.portal-root .page-hero p{color:var(--ink-2);max-width:560px}.portal-root .page-hero .hero-actions{margin-top:14px;display:flex;gap:12px;align-items:center}.portal-root .page-hero .hero-mascot{flex-shrink:0;display:flex;align-items:center;gap:14px}.portal-root .page-hero .hero-mascot img{width:92px;height:92px;object-fit:contain;animation:hero-float 3.4s ease-in-out infinite}.portal-root .hero-bubble{position:relative;background:#fff;border:1px solid #e4e9f2;border-radius:14px;padding:8px 13px;font-size:12.5px;line-height:1.5;color:var(--ink-2);max-width:180px;box-shadow:0 4px 14px #3c5aa014}.portal-root .hero-bubble:after{content:"";position:absolute;right:-6px;top:50%;width:11px;height:11px;background:#fff;border-top:1px solid #e4e9f2;border-right:1px solid #e4e9f2;transform:translateY(-50%) rotate(45deg)}@keyframes hero-float{0%,to{transform:translateY(0)}50%{transform:translateY(-5px)}}.portal-root .welcome-row{display:grid;grid-template-columns:5fr 7fr;gap:20px}.portal-root .welcome-card{display:flex;align-items:center;gap:20px;background:linear-gradient(125deg,var(--grad-1) 0%,var(--grad-2) 60%,var(--grad-3) 100%);color:#fff;border-radius:var(--radius-lg);box-shadow:var(--welcome-shadow);padding:26px 28px}.portal-root .welcome-card img{width:96px;height:96px;object-fit:contain;filter:drop-shadow(0 4px 8px rgba(0,0,0,.18))}.portal-root .welcome-card h1{font-size:24px;margin-bottom:6px}.portal-root .welcome-card p{color:#ffffffe0;font-size:14px}.portal-root .continue-cards{display:flex;flex-direction:column;gap:14px}.portal-root .continue-card{flex:1;display:flex;align-items:center;gap:16px;background:var(--white);border-radius:var(--radius-lg);box-shadow:var(--shadow);border:1px solid rgba(232,236,244,.7);padding:16px 20px;transition:transform .18s,box-shadow .18s}.portal-root .continue-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-hover)}.portal-root .continue-card .cc-icon{width:46px;height:46px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.portal-root .continue-card .cc-body{flex:1;min-width:0}.portal-root .continue-card .cc-title{font-weight:700;font-size:15.5px}.portal-root .continue-card .cc-meta{font-size:12.5px;color:var(--ink-3);margin-top:2px}.portal-root .continue-card .cc-go{flex-shrink:0;font-size:13px;font-weight:600;color:var(--primary-text);background:var(--primary-soft);border-radius:999px;padding:6px 14px}.portal-root .progress{height:6px;border-radius:99px;background:#edf0f7;overflow:hidden;margin-top:8px}.portal-root .progress>i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--primary),var(--primary-light))}.portal-root .module-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}.portal-root .module-card{display:flex;flex-direction:column;gap:12px}.portal-root .module-card .mc-icon{width:54px;height:54px;border-radius:14px;display:flex;align-items:center;justify-content:center}.portal-root .module-card h3{font-size:17.5px}.portal-root .module-card p{font-size:13.5px;color:var(--ink-2);flex:1}.portal-root .module-card .mc-tags{display:flex;flex-wrap:wrap;gap:6px}.portal-root .module-card .mc-arrow{margin-top:2px;font-size:13px;font-weight:600;color:var(--primary-text)}.portal-root .ic-blue{background:var(--acc1-bg);color:var(--acc1-ink)}.portal-root .ic-green{background:var(--acc2-bg);color:var(--acc2-ink)}.portal-root .ic-orange{background:var(--acc3-bg);color:var(--acc3-ink)}.portal-root .ic-pink{background:var(--acc4-bg);color:var(--acc4-ink)}.portal-root .stats-row{display:grid;grid-template-columns:7fr 5fr;gap:18px}.portal-root .stat-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}.portal-root .stat-card{border-radius:var(--radius);padding:18px 20px;display:flex;align-items:center;gap:14px}.portal-root .stat-card .st-num{font-size:28px;font-weight:800;line-height:1.1}.portal-root .stat-card .st-label{font-size:13px;color:var(--ink-2)}.portal-root .stat-card .st-icon{width:44px;height:44px;border-radius:12px;background:#ffffffbf;display:flex;align-items:center;justify-content:center;flex-shrink:0}.portal-root .stat-card.s-blue{background:var(--acc1-bg);color:var(--acc1-ink)}.portal-root .stat-card.s-blue .st-label{color:var(--acc1-label)}.portal-root .stat-card.s-green{background:var(--acc2-bg);color:var(--acc2-ink)}.portal-root .stat-card.s-orange{background:var(--acc3-bg);color:var(--acc3-ink)}.portal-root .stat-card.s-pink{background:var(--acc4-bg);color:var(--acc4-ink)}.portal-root .week-chart{display:flex;flex-direction:column}.portal-root .week-chart h3{font-size:15.5px;margin-bottom:4px}.portal-root .week-chart .wc-sub{font-size:12.5px;color:var(--ink-3);margin-bottom:14px}.portal-root .bars{flex:1;display:flex;align-items:flex-end;gap:10px;min-height:130px;padding:0 4px}.portal-root .bar-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;height:100%;justify-content:flex-end}.portal-root .bar-col .bar{width:100%;max-width:26px;border-radius:6px 6px 3px 3px;background:var(--bar-track)}.portal-root .bar-col.today .bar{background:linear-gradient(180deg,var(--primary-light),var(--primary))}.portal-root .bar-col .bar-label{font-size:11.5px;color:var(--ink-3)}.portal-root .list-card{padding:8px 22px}.portal-root .list-row{display:flex;align-items:center;gap:14px;padding:15px 0;border-bottom:1px solid var(--line)}.portal-root .list-row:last-child{border-bottom:none}.portal-root .list-row .lr-icon{width:42px;height:42px;border-radius:11px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.portal-root .list-row .lr-body{flex:1;min-width:0}.portal-root .list-row .lr-title{font-weight:600;font-size:15px}.portal-root .list-row .lr-meta{font-size:12.5px;color:var(--ink-3);margin-top:2px}.portal-root .list-row .lr-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.portal-root .iot-dash-btn{border:1px solid var(--line);background:#fff;color:var(--primary-text);font-size:12.5px;font-weight:600;padding:5px 12px;border-radius:999px;white-space:nowrap;transition:background .15s,border-color .15s}.portal-root .iot-dash-btn:hover{background:var(--primary-soft);border-color:var(--primary)}.portal-root .cap-strip{display:flex;flex-wrap:wrap;gap:12px 28px;padding:14px 18px;border:1px solid var(--line);border-radius:14px;background:#fff}.portal-root .cap-strip-item{display:inline-flex;align-items:center;gap:8px;font-size:13.5px;font-weight:600;color:var(--ink-2)}.portal-root .cap-strip-icon{width:28px;height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.portal-root .quad-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}.portal-root .tri-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.portal-root .mini-card{text-align:left}.portal-root .mini-card .mini-icon{width:44px;height:44px;border-radius:12px;display:flex;align-items:center;justify-content:center;margin-bottom:12px}.portal-root .mini-card h4{font-size:15.5px;margin-bottom:4px}.portal-root .mini-card p{font-size:13px;color:var(--ink-2)}.portal-root .ai-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}.portal-root .ai-card{position:relative;display:flex;flex-direction:column;gap:10px}.portal-root .ai-card-badge{position:absolute;top:10px;right:10px;font-size:11px;font-weight:600;padding:2px 9px;border-radius:999px;color:#fff}.portal-root .ai-card-badge.hot{background:#ff9f43}.portal-root .ai-card-badge.new{background:#35b97f}.portal-root .ai-card .ai-icon{width:50px;height:50px;border-radius:13px;display:flex;align-items:center;justify-content:center}.portal-root .ai-card h4{font-size:16px}.portal-root .ai-card p{font-size:13px;color:var(--ink-2);flex:1}.portal-root .ai-card .ai-enter{font-size:13px;font-weight:600;color:var(--primary-text);display:inline-flex;align-items:center;gap:4px}.portal-root .assistant-banner{display:flex;align-items:center;gap:24px;background:var(--banner-bg);border-radius:var(--radius-lg);border:1px solid rgba(232,236,244,.8);box-shadow:var(--shadow);padding:24px 32px}.portal-root .assistant-banner .ab-bots{display:flex;align-items:flex-end;flex-shrink:0}.portal-root .assistant-banner .ab-bots img{width:84px;height:84px;object-fit:contain}.portal-root .assistant-banner .ab-bots img+img{width:72px;height:72px;margin-left:-14px}.portal-root .assistant-banner h3{font-size:19px;margin-bottom:6px}.portal-root .assistant-banner p{color:var(--ink-2);font-size:14px}.portal-root .iot-dash{display:grid;grid-template-columns:7fr 5fr;gap:18px;align-items:stretch}.portal-root .chart-holder{background:var(--chart-holder-bg);border:1px solid var(--line);border-radius:var(--radius);padding:14px}.portal-root .chart-holder svg{width:100%;height:auto;display:block}.portal-root .chart-holder .cl1{stroke:var(--chart-line1)}.portal-root .chart-holder .cl1f{fill:var(--chart-line1)}.portal-root .chart-holder .cl2{stroke:var(--chart-line2)}.portal-root .chart-holder .cl2f{fill:var(--chart-line2)}.portal-root .metric-stack{display:flex;flex-direction:column;gap:12px}.portal-root .metric-card{flex:1;border-radius:var(--radius);padding:14px 18px;display:flex;align-items:center;justify-content:space-between}.portal-root .metric-card .m-label{font-size:13px;color:var(--ink-2)}.portal-root .metric-card .m-value{font-size:24px;font-weight:800}.portal-root .metric-card .m-value small{font-size:13px;font-weight:500;margin-left:2px}.portal-root .m-blue{background:var(--acc1-bg);color:var(--acc1-ink)}.portal-root .m-green{background:var(--acc2-bg);color:var(--acc2-ink)}.portal-root .m-orange{background:var(--acc3-bg);color:var(--acc3-ink)}.portal-root .dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:6px;vertical-align:middle}.portal-root .dot.on{background:var(--ok);box-shadow:0 0 0 3px #34a8532e}.portal-root .dot.off{background:#b8c0d0}.portal-root .course-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.portal-root .course-card{padding:0;overflow:hidden;display:flex;flex-direction:column}.portal-root .course-cover{position:relative;height:120px;display:flex;align-items:center;justify-content:center;color:#ffffffeb}.portal-root .course-cover-badge{position:absolute;top:8px;right:8px;width:36px;height:36px;object-fit:contain;padding:3px;border-radius:10px;background:#ffffff47;box-shadow:0 2px 6px #1f2d471f}.portal-root .course-cover.cov-1{background:var(--cov-1)}.portal-root .course-cover.cov-2{background:var(--cov-2)}.portal-root .course-cover.cov-3{background:var(--cov-3)}.portal-root .course-cover.cov-4{background:var(--cov-4)}.portal-root .course-cover.cov-5{background:var(--cov-5)}.portal-root .course-cover.cov-6{background:var(--cov-6)}.portal-root .course-body{padding:16px 18px 18px;display:flex;flex-direction:column;gap:8px;flex:1}.portal-root .course-body h3{font-size:16px;line-height:1.4}.portal-root .course-body .c-meta{font-size:12.5px;color:var(--ink-3);display:flex;gap:12px}.portal-root .course-body .c-progress-row{margin-top:auto;display:flex;align-items:center;gap:10px;font-size:12px;color:var(--ink-3)}.portal-root .course-body .c-progress-row .progress{flex:1;margin-top:0}.portal-root .back-link{display:inline-flex;align-items:center;gap:6px;font-size:14px;color:var(--ink-2);margin-bottom:16px}.portal-root .back-link:hover{color:var(--primary-text)}.portal-root .detail-layout{display:grid;grid-template-columns:5fr 7fr;gap:20px;align-items:start}.portal-root .lesson-item{display:flex;gap:12px;padding:14px 0;border-bottom:1px solid var(--line);cursor:pointer}.portal-root .lesson-item:last-child{border-bottom:none}.portal-root .lesson-item .li-check{width:24px;height:24px;border-radius:50%;border:2px solid #cdd5e4;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px;color:#fff}.portal-root .lesson-item.done .li-check{background:var(--ok);border-color:var(--ok)}.portal-root .lesson-item.current .li-check{border-color:var(--primary);color:var(--primary)}.portal-root .c-official-badge{display:inline-block;vertical-align:3px;margin-left:6px;padding:1px 8px;border-radius:9px;background:linear-gradient(120deg,#f59e0b,#f97316);color:#fff;font-size:11px;font-weight:700;letter-spacing:1px}.portal-root .lesson-item.locked{opacity:.55}.portal-root .lesson-item.locked .li-title{color:var(--ink-3);font-weight:500}.portal-root .lesson-item.current .li-title{color:var(--primary-text);font-weight:700}.portal-root .lesson-item .li-title{font-size:14.5px;font-weight:600}.portal-root .lesson-item .li-meta{font-size:12px;color:var(--ink-3);margin-top:2px}.portal-root .tab-bar{display:flex;gap:6px;border-bottom:1px solid var(--line);margin-bottom:18px;flex-wrap:wrap}.portal-root .tab-btn{border:none;background:none;padding:10px 16px;font-size:14.5px;color:var(--ink-2);border-bottom:3px solid transparent;margin-bottom:-1px;font-weight:500}.portal-root .tab-btn.on{color:var(--primary-text);border-bottom-color:var(--primary);font-weight:700}.portal-root .tab-pane{display:none}.portal-root .tab-pane.on{display:block}.portal-root .video-holder{position:relative;aspect-ratio:16 / 9;border-radius:var(--radius);background:var(--video-bg);display:flex;align-items:center;justify-content:center;color:#fff}.portal-root .video-holder .play-btn{width:64px;height:64px;border-radius:50%;background:#ffffffeb;display:flex;align-items:center;justify-content:center;color:var(--primary);box-shadow:0 6px 18px #00000040}.portal-root .video-holder .vh-caption{position:absolute;bottom:12px;left:16px;font-size:13px;color:#ffffffd9}.portal-root .ppt-holder{border:1px solid var(--line);border-radius:var(--radius);background:#fbfcff;padding:18px}.portal-root .ppt-page{aspect-ratio:16 / 9;border-radius:10px;background:var(--ppt-bg);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:var(--ink-2)}.portal-root .ppt-nav{display:flex;align-items:center;justify-content:center;gap:18px;margin-top:14px}.portal-root .ppt-nav .ppt-arrow{width:36px;height:36px;border-radius:50%;border:1px solid var(--line);background:#fff;display:flex;align-items:center;justify-content:center;color:var(--ink-2);transition:all .15s}.portal-root .ppt-nav .ppt-arrow:hover{border-color:var(--primary);color:var(--primary-text)}.portal-root .ppt-nav .ppt-num{font-size:13.5px;color:var(--ink-2)}.portal-root .blueprint-holder{border:1px solid var(--line);border-radius:var(--radius);background:linear-gradient(var(--bp-tint),var(--bp-tint)),repeating-linear-gradient(0deg,transparent,transparent 23px,var(--bp-line) 24px),repeating-linear-gradient(90deg,transparent,transparent 23px,var(--bp-line) 24px),#fdfeff;padding:26px;display:flex;flex-direction:column;align-items:center;gap:14px;color:var(--ink-2);text-align:center}.portal-root .blueprint-holder>svg{color:var(--bp-icon)}.portal-root .doc-holder{position:relative;border:1px solid var(--line);border-radius:var(--radius);background:#fffdf7;padding:26px}.portal-root .doc-holder .doc-lines{display:flex;flex-direction:column;gap:12px;margin-top:14px}.portal-root .doc-holder .doc-lines i{display:block;height:10px;border-radius:5px;background:#f0e9d8}.portal-root .teacher-badge{position:absolute;top:14px;right:14px;font-size:12px;background:var(--pink-bg);color:var(--pink-ink);border-radius:999px;padding:3px 12px;font-weight:600}.portal-root .lesson-cta{margin-top:20px;display:flex;align-items:center;gap:16px;flex-wrap:wrap}.portal-root .lesson-cta .cta-note{font-size:12.5px;color:var(--ink-3)}.portal-root .encourage{display:flex;align-items:center;gap:12px;background:var(--warn-bg);border-radius:var(--radius);padding:12px 16px;margin-top:16px}.portal-root .encourage img{width:44px;height:44px;object-fit:contain}.portal-root .encourage p{font-size:13.5px;color:var(--warn-ink)}.portal-root .site-footer{border-top:1px solid var(--line);background:#fff;padding:22px 0;color:var(--ink-3);font-size:13px;text-align:center}@media(max-width:1024px){.portal-root .module-grid,.portal-root .ai-grid,.portal-root .quad-grid,.portal-root .course-grid{grid-template-columns:repeat(2,1fr)}.portal-root .welcome-row,.portal-root .stats-row,.portal-root .iot-dash,.portal-root .detail-layout{grid-template-columns:1fr}}@media(max-width:720px){.portal-root .search-box{display:none}.portal-root .tri-grid,.portal-root .course-grid,.portal-root .module-grid,.portal-root .ai-grid,.portal-root .quad-grid{grid-template-columns:1fr}.portal-root .page-hero{flex-direction:column;text-align:center}.portal-root .page-hero .hero-actions{justify-content:center}.portal-root .hero-bubble{display:none}.portal-root .brand .brand-name{font-size:15px}}.portal-root{--code-bg: #f4f6fb}.portal-root .sub-tabs{background:#fff;border-bottom:1px solid var(--line)}.portal-root .sub-tabs .container{display:flex;gap:8px;height:48px;align-items:center}.portal-root .sub-tab{padding:6px 16px;border-radius:999px;font-size:14px;color:var(--ink-2);transition:background .15s,color .15s}.portal-root .sub-tab:hover{background:var(--primary-soft);color:var(--primary-text)}.portal-root .sub-tab.on{background:var(--btn-bg);color:#fff;font-weight:600}.portal-root .docs-layout{display:grid;grid-template-columns:260px 1fr;gap:20px;align-items:start}.portal-root .doc-tree{padding:12px;position:sticky;top:84px;max-height:calc(100vh - 110px);overflow:auto}.portal-root .dt-group+.dt-group{margin-top:4px}.portal-root .dt-cat{width:100%;display:flex;align-items:center;justify-content:space-between;border:none;background:none;padding:9px 10px;font-size:13.5px;font-weight:700;color:var(--ink);border-radius:9px}.portal-root .dt-cat:hover{background:var(--page)}.portal-root .dt-cat svg{transition:transform .15s;color:var(--ink-3)}.portal-root .dt-group.closed .dt-cat svg{transform:rotate(-90deg)}.portal-root .dt-group.closed .dt-items{display:none}.portal-root .dt-items{display:flex;flex-direction:column;gap:1px;padding:0 4px 6px}.portal-root .dt-item{text-align:left;border:none;background:none;font-size:13.5px;color:var(--ink-2);padding:7px 10px 7px 12px;border-radius:8px;border-left:3px solid transparent;transition:background .12s,color .12s}.portal-root .dt-item:hover{background:var(--page);color:var(--ink)}.portal-root .dt-item.on{background:var(--primary-soft);color:var(--primary-text);font-weight:600;border-left-color:var(--primary)}.portal-root .doc-article{display:none}.portal-root .doc-article.on{display:block}.portal-root .doc-article h2{font-size:22px;margin-bottom:4px}.portal-root .doc-article .doc-sub{font-size:13px;color:var(--ink-3);margin-bottom:16px}.portal-root .doc-article h3{font-size:16.5px;margin:26px 0 10px;display:flex;align-items:center;gap:8px}.portal-root .doc-article h3:before{content:"";width:4px;height:16px;border-radius:2px;background:var(--primary)}.portal-root .doc-article p{color:var(--ink-2);margin-bottom:8px;font-size:14.5px}.portal-root .portal-static-page{font-size:14.5px;line-height:1.85;color:var(--ink-2)}.portal-root .portal-static-page .lead{font-size:15.5px;color:var(--ink-1, #1f2533);margin:14px 0 18px;line-height:1.8}.portal-root .portal-static-page ul{margin:8px 0 14px 22px}.portal-root .portal-static-page li{margin:4px 0}.portal-root .portal-static-page strong{color:var(--ink-1, #1f2533)}.portal-root .portal-static-page .legal-updated{font-size:12.5px;color:var(--ink-3);margin-bottom:4px}.portal-root .portal-static-page .legal-note{margin-top:18px;padding-top:12px;border-top:1px dashed #e3e6ec;color:var(--ink-3);font-size:13px}.portal-root .spec-table{width:100%;border-collapse:collapse;font-size:13.5px;margin:4px 0}.portal-root .spec-table th,.portal-root .spec-table td{text-align:left;padding:9px 12px;border-bottom:1px solid var(--line)}.portal-root .spec-table th{background:var(--primary-soft);color:var(--primary-text);font-weight:600;white-space:nowrap}.portal-root .spec-table td:first-child{color:var(--ink-2);white-space:nowrap}.portal-root .code-block{background:var(--code-bg);border:1px solid var(--line);border-radius:10px;padding:12px 16px;font-family:Consolas,Courier New,monospace;font-size:13px;color:var(--ink-2);overflow-x:auto;line-height:1.7}.portal-root .blk-row{display:flex;flex-wrap:wrap;gap:10px;margin:8px 0}.portal-root .blk{display:inline-flex;align-items:center;gap:6px;background:var(--primary-soft);color:var(--primary-text);font-weight:600;font-size:13px;border-radius:8px;padding:7px 14px;box-shadow:inset 0 -2.5px #1f273314}.portal-root .blk i{font-style:normal;background:#fff;border-radius:6px;padding:1px 8px;color:var(--ink);box-shadow:inset 0 0 0 1px var(--line)}.portal-root .tip-box{display:flex;gap:10px;background:var(--warn-bg);border-radius:10px;padding:12px 16px;font-size:13.5px;color:var(--warn-ink);margin-top:16px;align-items:flex-start}.portal-root .tip-box svg{flex-shrink:0;margin-top:2px}.portal-root .doc-steps{display:flex;flex-direction:column;gap:12px;margin-top:8px}.portal-root .doc-steps li{list-style:none;display:flex;gap:12px;font-size:14.5px;color:var(--ink-2);counter-increment:step}.portal-root .doc-steps{counter-reset:step}.portal-root .doc-steps li:before{content:counter(step);flex-shrink:0;width:24px;height:24px;border-radius:50%;background:var(--primary-soft);color:var(--primary-text);font-weight:700;font-size:13px;display:flex;align-items:center;justify-content:center}.portal-root .faq details{border:1px solid var(--line);border-radius:10px;padding:0 16px;background:#fff}.portal-root .faq details+details{margin-top:10px}.portal-root .faq summary{cursor:pointer;padding:13px 0;font-weight:600;font-size:14.5px;list-style:none;display:flex;justify-content:space-between;align-items:center}.portal-root .faq summary::-webkit-details-marker{display:none}.portal-root .faq summary:after{content:"+";color:var(--primary-text);font-size:18px;font-weight:400}.portal-root .faq details[open] summary:after{content:"–"}.portal-root .faq details p{padding-bottom:14px;font-size:14px;margin-bottom:0}.portal-root .wip-box{text-align:center;padding:56px 20px;color:var(--ink-3);display:flex;flex-direction:column;align-items:center;gap:14px}.portal-root .wip-box .wip-icon{width:64px;height:64px;border-radius:16px;background:var(--primary-soft);color:var(--primary-text);display:flex;align-items:center;justify-content:center}.portal-root .wip-box h2{font-size:19px;color:var(--ink)}.portal-root .dl-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.portal-root .dl-card{display:flex;flex-direction:column;gap:12px}.portal-root .dl-card .dl-icon{width:52px;height:52px;border-radius:13px;display:flex;align-items:center;justify-content:center}.portal-root .dl-card h3{font-size:17px}.portal-root .dl-meta{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--ink-2);flex:1}.portal-root .dl-meta .m-row{display:flex;justify-content:space-between;gap:12px;border-bottom:1px dashed var(--line);padding-bottom:5px}.portal-root .dl-meta .m-row span:last-child{color:var(--ink);font-weight:600;text-align:right}.portal-root .dl-actions{display:flex;align-items:center;gap:14px;margin-top:4px}.portal-root .dl-link{font-size:13px;color:var(--primary-text)}.portal-root .dl-link:hover{text-decoration:underline}.portal-root .dl-card.disabled{background:#f2f4f8;box-shadow:none;border:1.5px dashed #cdd5e4;color:var(--ink-3)}.portal-root .dl-card.disabled .dl-icon{background:#e6eaf1;color:var(--ink-3)}.portal-root .dl-card.disabled .dl-meta .m-row span:last-child{color:var(--ink-3)}.portal-root .dl-card.disabled h3{color:var(--ink-2)}.portal-root .helper-card{display:flex;gap:24px;align-items:center}.portal-root .helper-card .hc-icon{width:64px;height:64px;border-radius:16px;flex-shrink:0;display:flex;align-items:center;justify-content:center}.portal-root .helper-card .hc-body{flex:1}.portal-root .helper-card h3{font-size:17.5px;margin-bottom:6px}.portal-root .helper-card p{font-size:14px;color:var(--ink-2);max-width:620px}.portal-root .helper-card .hc-actions{display:flex;flex-direction:column;gap:10px;flex-shrink:0}.portal-root .install-card{padding:0;overflow:hidden}.portal-root .install-card+.install-card{margin-top:14px}.portal-root .install-card summary{cursor:pointer;padding:18px 22px;font-weight:700;font-size:15.5px;list-style:none;display:flex;justify-content:space-between;align-items:center}.portal-root .install-card summary::-webkit-details-marker{display:none}.portal-root .install-card summary svg{transition:transform .15s;color:var(--ink-3)}.portal-root .install-card[open] summary svg{transform:rotate(180deg)}.portal-root .install-card .install-body{padding:0 22px 20px}.portal-root .install-body .code-block{margin-top:8px}@media(max-width:1024px){.portal-root .docs-layout{grid-template-columns:1fr}.portal-root .doc-tree{position:static;max-height:none}.portal-root .dl-grid{grid-template-columns:1fr}.portal-root .helper-card{flex-direction:column;align-items:flex-start}.portal-root .helper-card .hc-actions{flex-direction:row;flex-wrap:wrap}}.portal-root{--bnr-1: linear-gradient(120deg, #4a6cf7, #8fa3fb);--bnr-2: linear-gradient(120deg, #43a047, #7ed491);--bnr-3: linear-gradient(120deg, #fb8c00, #ffc966)}.portal-root .carousel{position:relative;height:190px;border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow)}.portal-root .car-slide{position:absolute;inset:0;display:flex;align-items:center;padding:0 60px;color:#fff;opacity:0;transition:opacity .5s ease}.portal-root .car-slide.on{opacity:1;z-index:1}.portal-root .car-slide[data-bnr="1"]{background:var(--bnr-1)}.portal-root .car-slide[data-bnr="2"]{background:var(--bnr-2)}.portal-root .car-slide[data-bnr="3"]{background:var(--bnr-3)}.portal-root .bnr-text h2{font-size:22px;margin-bottom:6px;text-shadow:0 1px 8px rgba(0,0,0,.16)}.portal-root .bnr-text p{font-size:13.5px;color:#ffffffeb;margin-bottom:14px}.portal-root .bnr-btn{display:inline-block;background:#fffffff0;color:var(--primary-text);font-size:13px;font-weight:700;border-radius:999px;padding:7px 18px;transition:transform .15s}.portal-root .bnr-btn:hover{transform:translateY(-1px)}.portal-root .bnr-flag{position:absolute;top:12px;right:14px;z-index:3;font-size:11px;color:#fff;background:#ffffff38;border:1px solid rgba(255,255,255,.38);padding:2px 10px;border-radius:999px;pointer-events:none}.portal-root .car-arrow{position:absolute;top:50%;transform:translateY(-50%);z-index:2;width:34px;height:34px;border-radius:50%;border:none;background:#ffffffd9;color:var(--ink-2);display:flex;align-items:center;justify-content:center;opacity:.65;transition:opacity .2s,transform .15s}.portal-root .car-arrow:hover{opacity:1}.portal-root .car-arrow.prev{left:14px}.portal-root .car-arrow.next{right:14px}.portal-root .car-dots{position:absolute;bottom:12px;left:0;right:0;z-index:2;display:flex;justify-content:center;gap:7px}.portal-root .car-dot{width:8px;height:8px;border-radius:99px;border:none;padding:0;background:#ffffff80;transition:all .2s}.portal-root .car-dot.on{width:20px;background:#fff}.portal-root .duo-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:18px}.portal-root .module-grid{grid-template-columns:repeat(5,1fr)}.portal-root .site-footer{padding:26px 0;text-align:left}.portal-root .footer-inner{display:flex;justify-content:space-between;align-items:center;gap:14px;flex-wrap:wrap}.portal-root .footer-links{display:flex;gap:22px;flex-wrap:wrap}.portal-root .footer-links a{font-size:12.5px;color:var(--ink-3);transition:color .15s}.portal-root .footer-links a:hover{color:var(--primary-text)}.portal-root .footer-legal{display:flex;gap:16px;align-items:center;font-size:12.5px;color:var(--ink-3);flex-wrap:wrap}.portal-root .footer-legal a{color:var(--ink-3);transition:color .15s}.portal-root .footer-legal a:hover{color:var(--primary-text)}.portal-root .footer-icp-pending{color:var(--ink-3);opacity:.75;font-size:12px}@media(max-width:1024px){.portal-root .module-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:720px){.portal-root .module-grid,.portal-root .duo-grid{grid-template-columns:1fr}.portal-root .carousel{height:170px}.portal-root .car-slide{padding:0 44px}.portal-root .bnr-text h2{font-size:18px}.portal-root .footer-inner{flex-direction:column;justify-content:center;text-align:center}}.admin-nav-btn[data-v-7e307f36]{display:block;width:calc(100% - 16px);margin:0 8px;padding:10px 14px;border:none;border-radius:8px;background:transparent;color:#333;font-size:14px;font-weight:500;text-align:left;cursor:pointer;transition:background .15s,color .15s;letter-spacing:.08px}.admin-nav-btn[data-v-7e307f36]:hover{background:#f8fafc;color:#181d26}.admin-nav-btn.active[data-v-7e307f36]{background:#1b61c9;color:#fff}.course-source-banner[data-v-7e307f36]{display:flex;align-items:center;gap:10px;padding:7px 16px;background:linear-gradient(90deg,#fff6e8,#ffeecbf0);border-bottom:1px solid #f3d9ac;color:#7a4d0f;font-size:13px}.course-source-text[data-v-7e307f36]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.course-source-back[data-v-7e307f36]{border:1px solid #e5bd7f;background:#fff;color:#7a4d0f;border-radius:6px;padding:3px 12px;font-size:12.5px;cursor:pointer}.course-source-back[data-v-7e307f36]:hover{background:#fff8ec}.course-source-close[data-v-7e307f36]{border:none;background:transparent;color:#a87b3a;font-size:16px;cursor:pointer;padding:0 4px;line-height:1}:root{color-scheme:dark;font-family:Space Grotesk,Segoe UI,sans-serif;color:#edf4ff;--app-background: radial-gradient(circle at top left, rgba(58, 130, 246, .18), transparent 28%), radial-gradient(circle at 88% 12%, rgba(249, 115, 22, .18), transparent 24%), radial-gradient(circle at 50% 100%, rgba(34, 197, 94, .12), transparent 26%), linear-gradient(180deg, #07101b 0%, #08111d 52%, #040914 100%);background:var(--app-background);--panel-bg: rgba(7, 16, 29, .9);--panel-border: rgba(148, 163, 184, .14);--panel-border-strong: rgba(125, 211, 252, .24);--surface-bg: rgba(5, 12, 22, .8);--surface-bg-strong: rgba(7, 14, 27, .96);--blockly-workspace-bg: #09111f;--blockly-grid-stroke: #1b2a49;--blockly-toolbox-bg: #101a2d;--blockly-toolbox-fg: #dbe7ff;--blockly-flyout-bg: #0f1b31;--blockly-flyout-fg: #dbe7ff;--blockly-scrollbar: #3f5a88;--text-main: #edf4ff;--text-muted: #9fb0cf;--text-soft: #7f93b5;--accent-blue: #66d0ff;--accent-orange: #f97316;--accent-coral: #fb7185;--accent-green: #22c55e;--shadow-lg: 0 24px 60px rgba(0, 0, 0, .32), inset 0 1px 0 rgba(255, 255, 255, .04)}:root[data-theme=light]{color-scheme:light;font-family:Haas,-apple-system,system-ui,Segoe UI,Roboto,sans-serif;color:#181d26;--app-background: #ffffff;--panel-bg: #ffffff;--panel-border: #e0e2e6;--panel-border-strong: #d1d5db;--surface-bg: #f8fafc;--surface-bg-strong: #ffffff;--blockly-workspace-bg: #ffffff;--blockly-grid-stroke: #e2eaf5;--blockly-toolbox-bg: #f9fbfe;--blockly-toolbox-fg: #1f2b3d;--blockly-flyout-bg: #f9fbfe;--blockly-flyout-fg: #1f2b3d;--blockly-scrollbar: #c9d3e2;--text-main: #181d26;--text-muted: rgba(4, 14, 32, .69);--text-soft: #333333;--accent-blue: #1b61c9;--accent-orange: #1b61c9;--accent-coral: #254fad;--accent-green: #006400;--shadow-lg: rgba(0, 0, 0, .32) 0px 0px 1px, rgba(0, 0, 0, .08) 0px 0px 2px, rgba(45, 127, 249, .28) 0px 1px 3px, rgba(0, 0, 0, .06) 0px 0px 0px .5px inset}*{box-sizing:border-box}html,body,#app{height:100%;min-height:100%;margin:0}body{min-width:360px;background:var(--app-background);color:var(--text-main)}button,input,select,textarea{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}summary{list-style:none}summary::-webkit-details-marker{display:none}.app-shell{width:100%;height:100vh;min-height:100vh;padding:10px}.panel{background:var(--panel-bg);border:1px solid var(--panel-border);border-radius:16px;box-shadow:var(--shadow-lg)}.controller-home{min-height:0;height:calc(100vh - 20px);display:grid;grid-template-rows:auto minmax(0,1fr);overflow:hidden}.controller-home-header{display:flex;justify-content:space-between;align-items:center;gap:14px;padding:14px 20px;background:#fff;border-bottom:1px solid #e0e2e6}.controller-home-brand{min-height:44px;display:inline-flex;align-items:center;gap:12px;color:#181d26;font-weight:600;font-size:1.05rem;letter-spacing:.02em}.controller-home-logo{width:36px;height:36px;object-fit:contain}.controller-home-language{display:inline-flex;align-items:center;gap:8px;color:var(--text-muted);font-size:.88rem}.controller-home-language-select{min-width:140px;max-width:180px;padding:8px 10px;border-radius:10px}.controller-home-content{min-height:0;overflow:auto;padding:24px 20px 22px;display:grid;gap:18px;align-content:start;background:#f8fafc}.home-account-entry{display:grid;gap:12px;padding:16px;border-radius:16px;border:1px solid #e0e2e6;background:#fff;box-shadow:#0f306a0d 0 0 20px}.home-account-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.home-account-head strong{font-size:1rem;font-weight:500;color:#181d26}.home-account-head span{color:var(--text-muted);font-size:.9rem}.home-account-form{display:grid;gap:10px}.home-account-input{width:100%}.home-account-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.home-category-stack{display:grid;gap:14px;align-content:start}.controller-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px}.controller-card{display:grid;gap:12px;padding:16px;border-radius:16px;border:1px solid #e0e2e6;background:#fff;box-shadow:#0f306a0d 0 0 20px}.controller-card.is-active{border-color:#1b61c96b;box-shadow:inset 0 0 0 1px #1b61c924,#2d7ff91f 0 2px 10px}.controller-card.is-disabled{background:#f8fafc}.controller-card-head{display:flex;justify-content:space-between;align-items:center;gap:10px}.controller-card-head h2{margin:0;font-size:1.02rem;color:#181d26;letter-spacing:.12px}.controller-card p{margin:0;color:#040e20b0;line-height:1.5}.controller-card-action{min-height:42px;justify-self:start}.home-feature-section{display:grid;gap:12px;padding:16px;border-radius:16px;border:1px solid #e0e2e6;background:#fff;box-shadow:#0f306a0d 0 0 20px}.home-feature-head{display:grid;gap:6px}.home-feature-head h2{margin:0;font-size:1.04rem;color:#181d26;letter-spacing:.12px}.home-feature-head p{margin:0;color:#040e20b0;line-height:1.45}.home-feature-card{display:grid;gap:12px;padding:16px;border-radius:16px;border:1px solid #e0e2e6;background:#fff;box-shadow:#0f306a0d 0 0 20px}.home-feature-card h3{margin:0;font-size:1rem;color:#181d26;letter-spacing:.12px}.home-feature-card p{margin:0;color:#040e20b0;line-height:1.45}.ai-application-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:12px}.ai-application-card{width:100%;text-align:left;display:grid;gap:10px;padding:14px;border-radius:16px;border:1px solid #e0e2e6;background:#fff;color:#181d26;transition:border-color .12s ease,box-shadow .12s ease,transform .12s ease}.ai-application-card:hover{transform:translateY(-1px);border-color:#1b61c9;box-shadow:#2d7ff92e 0 2px 10px}.ai-application-card.is-active{border-color:#1b61c961;box-shadow:inset 0 0 0 1px #1b61c91a}.ai-application-card-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.ai-application-card-icon{width:48px;height:48px;border-radius:12px;border:1px solid #d7e3f4;background:linear-gradient(155deg,#eef4fc,#dce8f8);display:inline-flex;align-items:center;justify-content:center;color:#1b61c9}.ai-application-card-icon.is-coco{border-color:#d1e6ec;background:linear-gradient(155deg,#edf7f9,#d8eaee);color:#0f7a8a}.ai-application-card-icon.is-crowd{border-color:#d3e4f5;background:linear-gradient(155deg,#eef5fc,#dbe8f7);color:#1f5fbf}.ai-application-card-icon.is-knn{border-color:#dadff3;background:linear-gradient(155deg,#f0f3fc,#dee4f6);color:#2e4db0}.ai-application-card-icon.is-color-shape{border-color:#dcd9f4;background:linear-gradient(155deg,#f1effa,#dfdaf3);color:#4637a8}.ai-application-card-icon.is-qr-barcode{border-color:#d5d7f0;background:linear-gradient(155deg,#eceef9,#d9dcee);color:#3b3ea1}.ai-application-card-icon.is-img-classification{border-color:#cfe2ec;background:linear-gradient(155deg,#ecf5fa,#d7e7ef);color:#1566a0}.ai-application-card-icon.is-text-classification{border-color:#d8d0e8;background:linear-gradient(155deg,#f0ecf6,#e0d8ec);color:#5e3b8a}.ai-application-card-icon.is-voice-command{border-color:#c0d4e8;background:linear-gradient(155deg,#e8f0f8,#d4e4f0);color:#2563a0}.ai-application-card-icon.is-sound-classification{border-color:#c0e0cc;background:linear-gradient(155deg,#e8f6ee,#d0e8da);color:#1a7a40}.ai-application-card-icon.is-voiceprint{border-color:#b8dce0;background:linear-gradient(155deg,#e6f4f4,#d0e8ea);color:#0d7377}.ai-application-card-icon svg{width:28px;height:28px;fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:2}.ai-application-card h3{margin:0;font-size:.98rem;color:#181d26;letter-spacing:.12px}.ai-application-card p{margin:0;color:#040e20b0;line-height:1.4;font-size:.85rem}.ai-application-card-link{font-size:.8rem;color:#1b61c9;font-weight:500;letter-spacing:.08px}.admin-shell{min-height:0;height:calc(100vh - 20px);display:grid;grid-template-rows:auto minmax(0,1fr);background:#fff}.admin-header{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:12px;align-items:center;padding:14px 18px;background:#fff;border-bottom:1px solid #e0e2e6}.admin-header-copy{min-width:0;display:grid;gap:5px}.admin-header-copy h1{margin:0;font-size:1.15rem;font-weight:600;color:#181d26}.admin-header-copy p{margin:0;color:var(--text-muted);line-height:1.45;font-size:.9rem}.admin-header-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.admin-main{min-height:0;overflow:hidden;padding:0;display:flex;background:#f8fafc}.admin-content{flex:1;min-width:0;overflow-y:auto;padding:20px;display:grid;gap:16px;align-content:start}.admin-nav{flex:0 0 172px;border-right:1px solid #e7ebf2;padding:14px 10px;display:flex;flex-direction:column;gap:2px;background:#fafbfe;overflow-y:auto}.admin-nav-group+.admin-nav-group{margin-top:10px;padding-top:10px;border-top:1px solid #eceff5}.admin-nav-group-title{position:sticky;top:-14px;z-index:1;background:#fafbfe;font-size:11px;font-weight:600;letter-spacing:.06em;color:#8a94ab;padding:4px 10px;user-select:none}.admin-nav-btn{display:block;width:100%;border:0;background:transparent;text-align:left;padding:8px 10px;border-radius:8px;font-size:13.5px;color:#454f63;transition:background .15s ease,color .15s ease}.admin-nav-btn:hover{background:#eef2fb;color:#3b82f6}.admin-nav-btn.active{background:#e4ecfd;color:#3b82f6;font-weight:600}.admin-panel{display:grid;gap:14px;padding:16px;border-radius:16px;background:#fff;border:1px solid #e0e2e6;box-shadow:#0f306a0d 0 0 20px}.admin-batch-textarea{width:100%;min-height:112px;resize:vertical}.admin-table-head{display:flex;justify-content:space-between;align-items:flex-end;gap:12px;flex-wrap:wrap}.admin-table-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.admin-table-wrap{width:100%;overflow:auto;border-radius:12px;border:1px solid #e0e2e6;background:#fff}.admin-table{width:100%;border-collapse:collapse;min-width:760px;background:#fff}.admin-table th,.admin-table td{text-align:left;padding:10px 12px;border-bottom:1px solid #e0e2e6;font-size:.9rem}.admin-table th{color:#181d26;font-weight:600;font-size:.82rem;white-space:nowrap}.admin-table tbody tr:hover{background:#f8fafc}.admin-overview-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px}.admin-overview-card{display:grid;gap:6px;padding:16px;border-radius:16px;border:1px solid #e0e2e6;background:#fff;box-shadow:#0f306a0d 0 0 20px}.admin-overview-card strong{font-size:.9rem;font-weight:500;color:#181d26}.admin-overview-card span{font-size:1.35rem;font-weight:700;color:#3b82f6}.admin-overview-card small{color:var(--text-muted);font-size:.8rem;line-height:1.45}.admin-inline-input{width:130px;min-width:0;padding:9px 10px}.admin-table tbody tr:nth-child(2n){background:#fafbfe}.admin-table tbody tr:hover{background:#eef3fc}.admin-form-row{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end}.admin-form-row .toolbar-project-input,.admin-form-row .select-input{width:100%}.admin-fg-200{flex:1 1 200px}.admin-fg-180{flex:1 1 180px}.admin-fg-160{flex:1 1 160px}.admin-fg-140{flex:1 1 140px}.admin-fg-120{flex:1 1 120px}.admin-fg-110{flex:0 0 110px}.admin-fg-100{flex:0 0 100px}.admin-fg-90{flex:0 0 90px}.admin-fg-160f{flex:0 0 160px}.admin-fg-full{flex:1 1 100%}.admin-fg-end{justify-content:flex-end}.admin-gap-8{gap:8px}.admin-mt-8{margin-top:8px}.admin-mt-10{margin-top:10px}.admin-mt-12{margin-top:12px}.admin-mt-16{margin-top:16px}.admin-mt-20{margin-top:20px}.admin-mb-12{margin-bottom:12px}.admin-sub-card{display:grid;gap:12px;padding:16px;background:#f8f9ff;border:1px solid #dbe1ff;border-radius:12px}.admin-error-text{color:#c62828;font-size:.85rem}.admin-ok-text{color:#2e7d32;font-size:.85rem}.secondary-button.admin-btn-danger{color:#c62828}.admin-batch-grid{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:14px;align-items:stretch}.admin-batch-grid-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;align-content:start}@media(max-width:960px){.admin-batch-grid{grid-template-columns:minmax(0,1fr)}}.admin-section-divider{margin-top:24px;border-top:1px solid #eee;padding-top:16px;display:grid;gap:14px}.admin-chart-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.admin-chart-card{background:#fff;border:1px solid #e0e2e6;border-radius:12px;padding:12px}.admin-chart-280{height:280px;width:100%}.admin-chart-240{height:240px;width:100%}.admin-chart-empty{height:280px;display:flex;align-items:center;justify-content:center}.admin-chart-empty-240{height:240px}.admin-district-detail{margin-top:16px;background:#f8f9ff;border:1px solid #dbe1ff;border-radius:12px;padding:16px}.admin-detail-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.admin-detail-title{font-size:1.05rem;color:#333}.admin-sub-label{font-weight:600;margin-bottom:8px;color:#555}.admin-table-scroll{max-height:240px;overflow-y:auto}.admin-empty-state{display:flex;flex-direction:column;align-items:center;gap:8px;padding:28px 0 12px}.admin-empty-state img{width:72px;height:72px;object-fit:contain;opacity:.85}.admin-empty-state p{margin:0;color:#8a94ab;font-size:.9rem}.secondary-button.admin-btn-sm,.primary-button.admin-btn-sm,.danger-button.admin-btn-sm{font-size:.78rem;padding:4px 10px;border-radius:8px}.secondary-button.admin-btn-md{font-size:.82rem;padding:4px 12px;border-radius:8px}.admin-table .admin-btn-sm+.admin-btn-sm{margin-left:6px}.admin-nowrap{white-space:nowrap}.admin-ellipsis-cell{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin-code{background:#f0e6ff;padding:2px 8px;border-radius:4px;color:#5e35b1;font-weight:600}.admin-code-clickable{font-size:1.05em;letter-spacing:.1em;cursor:pointer}.admin-note{display:block;color:#999}.admin-muted-sm{color:#999;font-size:.82rem}.admin-block-muted{display:block;color:#888}.admin-faint{color:#bbb}.admin-thumb{width:72px;height:40px;object-fit:cover;border-radius:4px;border:1px solid #eee}.admin-checkbox-lg{width:20px;height:20px;accent-color:#3b82f6}.admin-textarea-sm{min-height:60px}.admin-input-disabled{background:#f5f5f5}.secondary-button.admin-filter-active{font-weight:700;border-color:#3b82f6;color:#3b82f6}.admin-footer-link-row{display:flex;gap:8px;margin-bottom:8px;align-items:center}.admin-footer-link-row .admin-input-200{flex:0 0 200px}.admin-footer-link-row .admin-input-grow{flex:1}.admin-feature-card{flex:1 1 200px;background:#f8f9fa;border:1px dashed #ddd;border-radius:8px;padding:12px;display:flex;justify-content:space-between;align-items:center;gap:8px}.admin-feature-label{font-weight:600;color:#555}.admin-dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;min-height:120px;padding:18px 16px;border:1.5px dashed #b9c4da;border-radius:10px;background:#fafbff;color:#6b7587;cursor:pointer;text-align:center;transition:border-color .15s ease,background .15s ease}.admin-dropzone:hover,.admin-dropzone.is-dragover{border-color:#3b82f6;background:#eef3fd;color:#3b82f6}.admin-dropzone.has-file{border-style:solid;border-color:#9db4e8}.admin-dropzone-input{display:none}.admin-dropzone-text{font-size:13.5px;font-weight:600;max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin-dropzone-hint{font-size:12px;color:#98a1b3}.admin-shell .primary-button{background:#3b82f6;box-shadow:#3b82f647 0 1px 3px}.admin-shell .primary-button:hover{background:#2563eb}.admin-shell .toolbar-project-input:focus,.admin-shell .select-input:focus,.admin-shell .terminal-input:focus{border-color:#3b82f6}.cloud-shell{min-height:0;height:calc(100vh - 20px);display:grid;grid-template-rows:auto minmax(0,1fr)}.cloud-header{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:12px;align-items:center;padding:12px 14px;border-bottom:1px solid rgba(148,163,184,.14)}.cloud-header-copy{min-width:0;display:grid;gap:5px}.cloud-header-copy h1{margin:0;font-size:1.15rem}.cloud-header-copy p{margin:0;color:var(--text-muted);line-height:1.45;font-size:.9rem}.cloud-header-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.cloud-main{min-height:0;overflow:auto;padding:14px;display:grid;gap:14px;align-content:start}.cloud-controls{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;padding:12px;border-radius:14px;background:#0a1220e6;border:1px solid rgba(148,163,184,.1)}.cloud-tab-switch{flex-shrink:0}.cloud-search-form{display:flex;gap:10px;flex:0 1 380px}.cloud-search-input{width:100%}.cloud-list-panel{display:grid;gap:12px;padding:12px;border-radius:14px;background:#0a1220e6;border:1px solid rgba(148,163,184,.1)}.cloud-page-list{max-height:none}.cloud-page-project-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:10px;align-items:center}.cloud-share-toggle{display:inline-flex;align-items:center;gap:8px;white-space:nowrap;color:var(--text-muted);font-size:.9rem}.cloud-delete-button{border:1px solid rgba(239,68,68,.35);background:#ef444414;color:#dc2626;border-radius:8px;padding:6px 12px;font-size:.85rem;cursor:pointer;white-space:nowrap;transition:background .15s ease,border-color .15s ease}.cloud-delete-button:hover:not(:disabled){background:#ef444429;border-color:#ef44448c}.cloud-delete-button:disabled{opacity:.5;cursor:not-allowed}.cloud-share-toggle input{width:16px;height:16px;accent-color:#22c55e}.classroom-shell{min-height:0;height:calc(100vh - 20px);display:grid;grid-template-rows:auto minmax(0,1fr)}.classroom-header{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:12px;align-items:center;padding:12px 14px;border-bottom:1px solid rgba(148,163,184,.14)}.classroom-header-copy{min-width:0;display:grid;gap:5px}.classroom-header-copy h1{margin:0;font-size:1.15rem}.classroom-header-copy p{margin:0;color:var(--text-muted);line-height:1.45;font-size:.9rem}.classroom-header-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.classroom-main{min-height:0;overflow:auto;padding:14px;display:grid;gap:14px;align-content:start}.classroom-panel{display:grid;gap:12px;padding:12px;border-radius:14px;background:#0a1220e6;border:1px solid rgba(148,163,184,.1)}.classroom-panel-head{display:flex;align-items:flex-end;justify-content:space-between;gap:10px;flex-wrap:wrap}.classroom-panel-head span{color:var(--text-muted);font-size:.9rem}.classroom-grid-two{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px}.classroom-list-wrap{display:grid;gap:10px;align-content:start}.classroom-list-item{width:100%;display:grid;gap:4px;text-align:left;padding:12px 13px;border-radius:12px;border:1px solid rgba(148,163,184,.12);background:#0c1627c7;color:var(--text-main)}.classroom-list-item--with-edit{grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center}.classroom-list-item-main{display:grid;gap:4px;min-width:0;padding:0;border:none;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer}.classroom-list-item-main:disabled{cursor:default;opacity:.6}.classroom-list-item small{color:var(--text-muted);line-height:1.4}.classroom-list-item.active{border-color:#66d0ff8c;box-shadow:inset 0 0 0 1px #66d0ff40}.classroom-form{display:grid;gap:10px;align-content:start}.classroom-textarea{width:100%;resize:vertical}.classroom-submission-list{display:grid;gap:10px}.classroom-submission-item{display:grid;gap:10px;padding:12px;border-radius:12px;border:1px solid rgba(148,163,184,.12);background:#09111ed6}.classroom-submission-head{display:grid;gap:4px}.classroom-submission-head small{color:var(--text-muted)}.classroom-submission-form,.classroom-attendance{display:grid;gap:10px}.classroom-inline-input{width:180px;min-width:0}.classroom-layout{display:grid;grid-template-columns:280px minmax(0,1fr);gap:14px;align-items:start}.classroom-sidebar{min-width:0;display:grid;gap:12px}.classroom-sidebar-classes{grid-template-columns:1fr}.classroom-content{min-width:0;display:grid;gap:12px}.classroom-info-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.classroom-info-copy{min-width:0;display:grid;gap:4px}.classroom-info-copy strong{font-size:1.05rem}.classroom-info-copy small{color:var(--text-muted);line-height:1.4}.classroom-info-actions{flex-wrap:nowrap}.classroom-subtabs{display:flex;gap:6px;flex-wrap:wrap}.classroom-subtabs button{padding:8px 16px;border-radius:10px;border:1px solid rgba(125,211,252,.25);background:#02060e4d;color:var(--text-muted);font-size:.88rem;cursor:pointer}.classroom-subtabs button.active{border-color:#66d0ff;background:#66d0ff1f;color:#eaf6ff}.classroom-student-class-grid{grid-template-columns:repeat(auto-fill,minmax(230px,1fr))}@media(max-width:899px){.classroom-layout{grid-template-columns:1fr}.classroom-sidebar-classes{grid-template-columns:repeat(auto-fill,minmax(210px,1fr))}}.ai-app-shell{min-height:0;height:calc(100vh - 20px);display:grid;grid-template-rows:auto minmax(0,1fr);background:#fff;color:#181d26}.ai-app-header{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:12px;align-items:center;padding:12px 14px;border-bottom:1px solid #e0e2e6;background:#fff}.ai-app-header-copy{min-width:0;display:grid;gap:5px}.ai-app-header-copy h1{margin:0;font-size:1.15rem;color:#181d26;letter-spacing:.12px}.ai-app-header-copy p{margin:0;color:#040e20b0;line-height:1.45;font-size:.9rem}.ai-app-header-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.ai-app-main{min-height:0;overflow:auto;padding:14px;display:grid;gap:14px;align-content:start;background:#f8fafc}.ai-app-main.ai-app-two-column{grid-template-columns:minmax(320px,420px) minmax(0,1fr);align-items:start}.ai-app-column{min-width:0;display:grid;gap:14px;align-content:start}.ai-app-settings-column .ai-output-grid{grid-template-columns:1fr}.ai-app-preview-column .ai-face-stage{width:100%;max-width:none}.ai-app-panel{display:grid;gap:12px;padding:14px;border-radius:16px;background:#fff;border:1px solid #e0e2e6;box-shadow:#0f306a0d 0 0 20px}.ai-app-status-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px}.ai-app-status-item{display:grid;gap:6px;padding:12px;border-radius:12px;border:1px solid #e0e2e6;background:#f8fafc}.ai-app-status-item strong{font-size:.9rem;color:#181d26}.ai-app-status-item span{font-size:1.15rem;font-weight:700;color:#181d26}.ai-app-error{color:#dc2626}.ai-face-stage{position:relative;width:min(100%,960px);aspect-ratio:16 / 9;border-radius:16px;overflow:hidden;border:1px solid #e0e2e6;background:#f8fafc}.ai-face-stage.is-idle{border-style:dashed}.ai-face-video{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:cover;z-index:1}.ai-face-overlay{position:absolute;inset:0;pointer-events:none;z-index:2}.ai-face-box{position:absolute;border:2px solid #1b61c9;border-radius:10px;box-shadow:inset 0 0 0 1px #1b61c926,0 0 0 1px #1b61c91a}.ai-face-box span{position:absolute;top:0;left:0;transform:translateY(-100%);padding:2px 8px;border-radius:6px 6px 0 0;background:#1b61c9;color:#fff;font-size:.74rem;line-height:1.2;white-space:nowrap}.ai-face-stage-empty{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;text-align:center;padding:18px;color:#040e207d;background:#f8fafc;z-index:3}.ai-face-table{min-width:560px}.ai-output-status-grid .ai-app-status-item span{font-size:1rem}.ai-output-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px;align-items:end}.ai-output-grid .hardware-toggle{min-height:42px;padding:10px 12px;border-radius:12px;border:1px solid #e0e2e6;background:#fff}.ai-output-payload{display:grid;gap:8px;padding:12px;border-radius:12px;border:1px solid #e0e2e6;background:#fff}.ai-output-payload strong{font-size:.9rem;color:#181d26}.ai-output-payload code{display:block;white-space:pre-wrap;word-break:break-word;font-size:.8rem;color:#181d26}.workspace-shell{min-height:0;height:calc(100vh - 20px);display:grid;grid-template-rows:auto auto minmax(0,1fr) auto;position:relative;overflow:visible}.workspace-shell>.workspace-toolbar{grid-row:1}.workspace-shell>.course-source-banner{grid-row:2}.workspace-shell>.workspace-main{grid-row:3}.workspace-shell>.terminal-dock{grid-row:4}.workspace-toolbar{display:flex;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid rgba(148,163,184,.14);position:relative;z-index:30;overflow:visible;flex-wrap:nowrap;white-space:nowrap}.toolbar-section{min-width:0;display:flex;align-items:center;gap:6px;flex-wrap:nowrap;flex-shrink:1}.toolbar-section-left{flex-shrink:1;justify-content:flex-start}.toolbar-section-center{flex-shrink:0;margin:0 auto;justify-content:center}.toolbar-section-right{flex-shrink:0;margin-left:auto;justify-self:end;justify-content:flex-end;position:relative}.toolbar-brand{min-height:44px;display:inline-flex;align-items:center;justify-content:center;align-self:center;flex:0 0 auto;padding-inline:4px 2px}.toolbar-brand-button{border:0;background:transparent;color:inherit}.toolbar-brand-button:hover{transform:translateY(-1px)}.toolbar-brand-button:focus-visible{outline:none;border-radius:999px;box-shadow:0 0 0 3px #38bdf82e}.toolbar-logo{width:28px;height:28px;display:block;object-fit:contain;filter:drop-shadow(0 6px 16px rgba(102,208,255,.24))}.toolbar-section-left .toolbar-project-input{width:clamp(120px,14vw,240px)}.toolbar-project-input,.select-input,.file-input,.terminal-input{width:100%;border-radius:8px;border:1px solid #e0e2e6;background:#fff;color:#181d26;padding:6px 10px}.toolbar-project-input{width:clamp(100px,14vw,220px);font-size:13px}.file-input{padding:10px 12px}.toolbar-project-input:focus,.select-input:focus,.file-input:focus,.terminal-input:focus,.code-editor:focus{outline:none;border-color:#1b61c9;box-shadow:0 0 0 3px #1b61c91f}.toolbar-menu{position:relative}.toolbar-trigger,.toolbar-plain-button{min-height:34px;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:6px 12px;border:1px solid rgba(148,163,184,.18);border-radius:999px;background:#0f182ab8;color:var(--text-main);font-size:.875rem;font-weight:500;transition:transform .18s ease,background .18s ease,border-color .18s ease,box-shadow .18s ease;user-select:none;white-space:nowrap}.toolbar-icon-trigger{min-width:44px;padding-inline:10px;position:relative}.hardware-connect-icon{font-size:15px;line-height:1}.toolbar-icon{width:18px;height:18px;display:inline-block}.account-status-dot{position:absolute;right:9px;top:9px;width:8px;height:8px;border-radius:50%;border:1px solid rgba(7,16,29,.92);background:#94a3b8e6}.account-status-dot.is-connected{background:#22c55e}.toolbar-trigger:hover,.toolbar-plain-button:hover,.toolbar-menu[open]>.toolbar-trigger{transform:translateY(-1px);background:#15223aeb;border-color:var(--panel-border-strong);box-shadow:0 12px 24px #0003}.toolbar-meta,.status-badge{display:inline-flex;align-items:center;justify-content:center;min-height:28px;padding:4px 10px;border-radius:999px;background:#94a3b824;color:var(--text-main);font-size:.82rem;white-space:nowrap}.status-badge.is-connected,.toolbar-meta.is-connected{background:#22c55e2e;color:#b7f7c8}.status-badge.is-disconnected,.toolbar-meta.is-disconnected{background:#94a3b824;color:var(--text-muted)}.status-badge.is-warning,.toolbar-meta.is-warning{background:#f9731633;color:#ffd4b2}.toolbar-menu-panel{position:absolute;top:calc(100% + 8px);left:0;z-index:120;width:min(340px,calc(100vw - 48px));padding:12px;display:grid;gap:12px;border-radius:18px;background:#060d18fa;border:1px solid rgba(125,211,252,.14);box-shadow:0 24px 48px #00000057,inset 0 1px #ffffff0a}.toolbar-menu-wide .toolbar-menu-panel{width:min(430px,calc(100vw - 48px))}.program-mode-switch>summary.program-mode-chip{list-style:none;min-height:34px;display:inline-flex;align-items:center;gap:7px;padding:6px 12px;border:1px solid rgba(148,163,184,.18);border-radius:999px;background:#0f182ab8;color:var(--text-main);font-size:.875rem;font-weight:500;cursor:pointer;user-select:none;white-space:nowrap;transition:transform .18s ease,background .18s ease,border-color .18s ease}.program-mode-switch>summary.program-mode-chip::-webkit-details-marker{display:none}.program-mode-switch>summary.program-mode-chip:hover,.program-mode-switch[open]>summary.program-mode-chip{transform:translateY(-1px);background:#15223aeb;border-color:var(--panel-border-strong)}.program-mode-dot{width:8px;height:8px;border-radius:50%;background:#94a3b88c;flex:none}.program-mode-chip[data-mode=poll] .program-mode-dot{background:#f5b83d;box-shadow:0 0 6px #f5b83d8c}.program-mode-chip[data-mode=events] .program-mode-dot{background:#f27fb6;box-shadow:0 0 6px #f27fb68c}.program-mode-chip[data-mode=sm] .program-mode-dot{background:#7c83f0;box-shadow:0 0 6px #7c83f08c}.program-mode-caret{font-size:.7rem;opacity:.75}.ai-fab{position:absolute;right:44px;top:16%;z-index:8;display:flex;flex-direction:column;align-items:center;gap:4px;padding:8px;border:0;background:transparent;cursor:pointer;transition:transform .2s ease;animation:ai-fab-bob 3s ease-in-out infinite;touch-action:none;user-select:none;-webkit-user-select:none}.ai-fab.is-dragging{animation:none;cursor:grabbing;transition:none}.ai-fab.is-dragging .ai-fab-avatar{box-shadow:0 8px 22px #0f182a59,0 0 0 3px #60a5fab3}.ai-fab-avatar{width:56px;height:56px;border-radius:50%;background:#fff;box-shadow:0 4px 14px #0f182a40,0 0 0 2px #ffffffe6;object-fit:cover;transition:box-shadow .2s ease}.ai-fab-label{font-size:.72rem;font-weight:600;color:var(--text-main);background:#ffffffeb;border-radius:999px;padding:2px 8px;box-shadow:0 2px 8px #0f182a2e;white-space:nowrap}.ai-fab:hover{transform:translateY(-3px) scale(1.05);animation-play-state:paused}.ai-fab.is-dragging:hover{transform:none}.ai-fab.is-active .ai-fab-avatar{box-shadow:0 4px 16px #60a5fa80,0 0 0 3px #60a5fad9,0 0 18px #a78bfa99}@keyframes ai-fab-bob{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}.program-mode-panel{width:min(300px,calc(100vw - 48px));gap:6px;padding:8px}.program-mode-option{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;padding:8px 10px;border:none;border-radius:12px;background:transparent;color:var(--text-main);cursor:pointer;text-align:left;transition:background .15s ease}.program-mode-option:hover{background:#94a3b81f}.program-mode-option.active{background:#7dd3fc1f}.program-mode-option-text{display:grid;gap:2px}.program-mode-option-name{font-size:.88rem;font-weight:600}.program-mode-option-desc{font-size:.76rem;color:var(--text-muted)}.program-mode-check{color:#7dd3fc;font-weight:700}.device-menu-panel{left:auto;right:0;width:min(500px,calc(100vw - 24px));max-width:min(500px,calc(100vw - 24px));transform-origin:top right}.device-btn-wrap{position:relative;flex-shrink:0}.device-status-btn{display:inline-flex;align-items:center;gap:6px;min-height:34px;padding:6px 12px;border-radius:999px;border:1px solid rgba(148,163,184,.22);background:#0f182a99;color:#cbd5e1;font-size:.875rem;font-weight:500;cursor:pointer;white-space:nowrap;transition:all .15s}.device-status-btn:hover{background:#1e293be6;border-color:#60a5fa80}.device-status-btn.is-connected{color:#4ade80;border-color:#4ade8066}.device-status-btn.is-disconnected{color:#f87171}.settings-gear{display:none}.device-status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.dot-on{background:#4ade80;box-shadow:0 0 6px #4ade8080}.dot-off{background:#f87171}.device-status-text{font-size:.78rem;opacity:.7}.device-channel-badge{font-size:.66rem;opacity:.75;flex-shrink:0;border:1px solid rgba(148,163,184,.35);border-radius:999px;padding:1px 7px;margin-left:2px}.device-channel-reason{font-size:.72rem;color:#94a3b8;line-height:1.4;padding:2px 12px 6px;word-break:break-all}.device-download-link{color:#60a5fa;font-weight:600}.device-pairing-link{color:#7dd3fc;font-weight:600}.device-dropdown{position:absolute;top:calc(100% + 4px);right:0;z-index:50;background:#0f1b2d;border:1px solid rgba(148,163,184,.2);border-radius:10px;padding:6px;min-width:220px;box-shadow:0 8px 24px #0006}.device-menu-item{display:block;width:100%;text-align:left;border:none;background:transparent;color:#cbd5e1;padding:8px 12px;border-radius:6px;font-size:.875rem;cursor:pointer}.device-menu-item:hover{background:#1e293bcc}.device-menu-item:disabled{opacity:.4;cursor:default}.device-menu-divider{height:1px;background:#94a3b81f;margin:4px 0}.device-menu-section{padding:4px 8px}.device-menu-label{font-size:.72rem;color:#64748b;margin-bottom:6px}.device-field-group{display:block;margin-bottom:6px}.device-flash-btn{width:100%;min-height:32px}.hardware-menu-panel{width:min(560px,calc(100vw - 48px));max-height:72vh;overflow:auto}.example-menu-panel{width:min(460px,calc(100vw - 48px));max-height:72vh;overflow:auto}.account-menu .toolbar-menu-panel{left:auto;right:0;max-width:min(430px,calc(100vw - 24px));transform-origin:top right}.settings-menu .toolbar-menu-panel{left:auto;right:0}.menu-section{display:grid;gap:12px;padding:12px;border-radius:16px;background:#0b1220e6;border:1px solid rgba(148,163,184,.1)}.field-group{display:grid;gap:8px}.field-group span{color:var(--text-muted);font-size:.9rem}.menu-section-head{display:grid;gap:4px}.menu-section-head strong{font-size:.95rem}.menu-section-head span,.empty-hint{color:var(--text-muted);line-height:1.45;font-size:.9rem}.menu-action-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.hardware-toggle{display:inline-flex;align-items:center;gap:8px;color:var(--text-muted);font-size:.9rem}.hardware-toggle input{width:15px;height:15px;accent-color:#f97316}.menu-action,.primary-button,.secondary-button,.cloud-project-button,.view-switch button{transition:transform .18s ease,background .18s ease,box-shadow .18s ease,opacity .18s ease}.menu-action:hover,.primary-button:hover,.secondary-button:hover,.cloud-project-button:hover,.view-switch button:hover{transform:translateY(-1px)}.menu-action{width:100%;padding:12px 14px;border:1px solid #e0e2e6;border-radius:12px;background:#fff;color:#181d26;font-size:.875rem;text-align:left}.menu-action:hover{background:#f8fafc}.primary-button,.secondary-button{border:0;border-radius:12px;padding:10px 20px;font-weight:500;font-size:.95rem;letter-spacing:.08px}.primary-button{background:#1b61c9;color:#fff;box-shadow:#2d7ff947 0 1px 3px}.primary-button:hover{background:#254fad}.secondary-button{background:#fff;color:#181d26;border:1px solid #e0e2e6}.secondary-button:hover{background:#f8fafc}.ghost-button{border:0;border-radius:12px;padding:10px 20px;font-weight:500;font-size:.95rem;letter-spacing:.08px;background:transparent;color:#454f63}.ghost-button:hover:not(:disabled){background:#eef2f7;color:#181d26}.ghost-button:disabled{opacity:.5}.admin-logout-btn:hover:not(:disabled){background:#fdecec;color:#c03030}.admin-nav-icon{margin-right:8px;font-size:14px}.empty-state{display:grid;justify-items:center;gap:8px;padding:36px 16px;border:1px dashed #dde3ee;border-radius:12px;background:#fafbfe;color:#8a94ab;text-align:center}.empty-state-icon{font-size:28px;line-height:1}.empty-state p{margin:0;font-size:.9rem}.toolbar-run-button{min-height:34px;padding:6px 18px;border-radius:999px;font-size:.875rem;font-weight:600;white-space:nowrap}.view-switch{display:inline-flex;align-items:center;gap:6px;padding:4px;border-radius:999px;background:#0f182ab8;border:1px solid rgba(148,163,184,.18)}.view-switch button{display:inline-flex;align-items:center;justify-content:center;gap:4px;border:0;border-radius:999px;background:transparent;color:var(--text-muted);padding:6px 10px;font-size:.875rem;font-weight:500;white-space:nowrap}html:lang(en-US) .toolbar-section{gap:8px}html:lang(en-US) .toolbar-trigger,html:lang(en-US) .toolbar-plain-button,html:lang(en-US) .toolbar-run-button{padding-inline:10px}html:lang(en-US) .view-switch button{padding-inline:8px}.view-switch-icon{display:inline-flex;align-items:center;justify-content:center;min-width:1.1em;font-family:IBM Plex Mono,Cascadia Code,monospace;font-size:.92rem;line-height:1}.view-switch button.active{background:linear-gradient(135deg,#66d0ff47,#f9731647);color:var(--text-main);box-shadow:inset 0 0 0 1px #7dd3fc3d}.view-switch button.view-switch-ai.active{background:linear-gradient(135deg,#60a5fa61,#a78bfa61);color:var(--text-main);box-shadow:inset 0 0 0 1px #93c5fd66}.workspace-main{min-height:0;display:grid;grid-template-columns:minmax(0,1fr);overflow:hidden}.workspace-main.is-tutorial-open{grid-template-columns:minmax(0,1fr) minmax(340px,420px)}.workspace-main.is-tutorial-resizable{grid-template-columns:minmax(0,1fr) 12px minmax(340px,420px)}.editor-stage{height:100%;min-height:0;display:grid;gap:0;position:relative;z-index:1;overflow:hidden}.editor-stage.mode-blockly,.editor-stage.mode-code{grid-template-columns:1fr}.editor-stage.mode-split{grid-template-columns:minmax(0,1.25fr) minmax(360px,.95fr)}.editor-stage.mode-ai{grid-template-columns:minmax(0,1.2fr) minmax(400px,.9fr)}.editor-pane{height:100%;min-height:0;display:grid;grid-template-rows:auto minmax(0,1fr) auto;gap:12px;padding:12px 14px 14px;overflow:hidden}.editor-stage.mode-split .code-pane{border-left:0}.editor-pane-head{display:flex;justify-content:space-between;align-items:center;gap:14px;min-height:40px}.editor-pane-head-empty{min-height:0}.editor-pane-title{font-size:.95rem;font-weight:700}.split-divider{position:relative;width:12px;cursor:col-resize;user-select:none}.split-divider:before{content:"";position:absolute;top:10px;bottom:10px;left:50%;width:1px;transform:translate(-50%);background:#94a3b83d}.split-divider-grip{position:absolute;top:50%;left:50%;width:6px;height:48px;border-radius:999px;transform:translate(-50%,-50%);background:linear-gradient(180deg,#66d0ffcc,#f97316cc);box-shadow:0 0 0 3px #0a1220eb}.blockly-pane .blockly-host{min-height:0;height:100%}.code-editor{width:100%;max-height:100%;min-height:0;height:100%;padding:0;border-radius:16px;border:1px solid rgba(148,163,184,.12);background:var(--surface-bg-strong);color:var(--text-main);overflow:hidden}.code-editor-host{display:block;max-height:100%;min-height:0;height:100%}.code-editor-host,.code-editor-host .monaco-editor,.code-editor-host .monaco-editor .overflow-guard{max-height:100%}.warning-list{display:grid;gap:6px;padding:12px 14px;border-radius:14px;background:#38220742;border:1px solid rgba(249,115,22,.16)}.warning-title{margin:0;color:#ffd089;font-weight:700}.warning-item{margin:0;color:#ffe2bd}.tutorial-split-divider{position:relative;width:12px;cursor:col-resize;user-select:none;z-index:2}.tutorial-split-divider:before{content:"";position:absolute;top:10px;bottom:10px;left:50%;width:1px;transform:translate(-50%);background:#94a3b83d}.tutorial-split-divider-grip{position:absolute;top:50%;left:50%;width:6px;height:56px;border-radius:999px;transform:translate(-50%,-50%);background:linear-gradient(180deg,#66d0ffcc,#22c55ec7);box-shadow:0 0 0 3px #0a1220eb}.tutorial-panel{min-height:0;border-left:1px solid rgba(148,163,184,.14);background:#070e1ae6;display:grid;grid-template-rows:auto minmax(0,1fr);overflow:hidden}.workspace-main.is-tutorial-resizable .tutorial-panel{border-left:0}.tutorial-panel-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;padding:12px;border-bottom:1px solid rgba(148,163,184,.12)}.tutorial-panel-title{min-width:0;display:grid;gap:5px}.tutorial-panel-title h2{margin:0;font-size:1rem}.tutorial-panel-title p{margin:0;color:var(--text-muted);font-size:.85rem;line-height:1.45}.tutorial-panel-actions{display:flex;align-items:center;gap:8px}.tutorial-close-button{min-height:34px;padding-inline:12px;white-space:nowrap}.tutorial-panel-body{min-height:0;overflow:hidden;padding:12px;display:grid;grid-template-rows:minmax(0,1fr)}.tutorial-panel-layout{min-height:0;height:100%;display:grid;grid-template-columns:190px minmax(0,1fr);grid-template-rows:minmax(0,1fr);gap:10px}.tutorial-panel-layout.is-toc-collapsed{grid-template-columns:minmax(0,1fr)}.tutorial-toc-sidebar{min-height:0;height:100%;overflow:auto;border:1px solid rgba(148,163,184,.14);border-radius:12px;background:#0a1424cc;padding:8px}.tutorial-toc{display:grid;gap:6px;align-content:start}.tutorial-toc-item{width:100%;text-align:left;border:1px solid rgba(148,163,184,.2);border-radius:9px;background:#0f1a2cb8;color:var(--text-main);padding:7px 10px;font-size:.8rem;line-height:1.3;transition:transform .18s ease,border-color .18s ease,background .18s ease}.tutorial-toc-item:hover{transform:translateY(-1px);border-color:#7dd3fc85;background:#17263eeb}.tutorial-toc-item.depth-0{font-weight:700}.tutorial-toc-item.depth-1{margin-left:10px;width:calc(100% - 10px)}.tutorial-toc-item.depth-2{margin-left:20px;width:calc(100% - 20px);font-size:.78rem}.tutorial-toc-item.is-group,.tutorial-toc-item:disabled{cursor:default;transform:none;border-style:dashed;background:#1422379e;color:var(--text-muted);opacity:1}.tutorial-content-scroll,.block-help-scroll{min-height:0;height:100%;overflow:auto;overscroll-behavior:contain;display:grid;gap:12px;align-content:start}.tutorial-content-section{display:grid;gap:10px;padding:12px;border-radius:14px;border:1px solid rgba(148,163,184,.14);background:#0c1628c7}.tutorial-content-head{display:flex;align-items:flex-end;justify-content:space-between;gap:10px}.tutorial-content-head h3{margin:0;font-size:.96rem}.tutorial-content-head span{color:var(--text-muted);font-size:.8rem}.tutorial-video{width:100%;border-radius:12px;border:1px solid rgba(148,163,184,.22);background:#050b16}.tutorial-note{margin:0;color:var(--text-muted);font-size:.84rem;line-height:1.45}.tutorial-figure{margin:0;display:grid;gap:8px}.tutorial-figure img{width:100%;height:168px;object-fit:contain;border-radius:12px;border:1px solid rgba(148,163,184,.18);background:#080e18e6}.tutorial-figure figcaption{color:var(--text-muted);font-size:.84rem;line-height:1.45}.tutorial-gif{width:100%;max-height:220px;border-radius:12px;border:1px solid rgba(148,163,184,.2);object-fit:cover;background:#080e18e6}.tutorial-program-list{display:grid;gap:10px}.tutorial-program-card{display:grid;gap:8px;padding:10px;border-radius:12px;border:1px solid rgba(148,163,184,.14);background:#070f1cd9}.tutorial-program-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.tutorial-program-head strong{font-size:.9rem}.tutorial-load-button{min-height:32px;padding-inline:11px;font-size:.8rem}.tutorial-program-card p{margin:0;color:var(--text-muted);font-size:.84rem;line-height:1.45}.tutorial-code-preview{margin:0;padding:10px;border-radius:10px;border:1px solid rgba(148,163,184,.16);background:#040a13eb;color:#dbe7ff;max-height:190px;overflow:auto;font-family:IBM Plex Mono,Cascadia Code,monospace;font-size:.75rem;line-height:1.52}.tutorial-blockly-preview{min-height:120px;border-radius:10px;border:1px solid rgba(148,163,184,.16);background:#040a13eb;overflow:auto;display:block;padding:8px}.tutorial-blockly-preview img{width:auto;height:auto;max-width:100%;display:block;margin:0 auto}.tutorial-blockly-preview-loading{display:grid;place-items:center;color:var(--text-muted);font-size:.82rem}.block-help-fields{display:flex;flex-wrap:wrap;gap:8px}.block-help-field-chip{display:inline-flex;align-items:center;gap:8px;border-radius:999px;border:1px solid rgba(148,163,184,.24);background:#050c18b8;padding:6px 10px;max-width:100%}.block-help-field-chip strong{font-size:.76rem;color:#67e8f9}.block-help-field-chip span{font-size:.78rem;color:var(--text-main);word-break:break-word}.block-help-note-list{margin:0;padding-left:18px;display:grid;gap:6px;color:var(--text-muted);font-size:.84rem;line-height:1.45}.workspace-backpack-button{position:absolute;right:0;top:50%;transform:translateY(-50%);min-width:48px;min-height:124px;padding:12px 8px 10px;border:1px solid rgba(148,163,184,.24);border-right:0;border-radius:14px 0 0 14px;background:#0a1221e6;color:#dbe7ff;display:inline-grid;justify-items:center;align-content:center;gap:9px;box-shadow:0 14px 30px #00000059,inset 0 1px #ffffff0d;transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease,background .18s ease;z-index:90}.workspace-backpack-button:hover,.workspace-backpack-button.is-open{transform:translateY(calc(-50% - 1px));border-color:#7dd3fc8f;background:#0f1a2ef0;box-shadow:0 18px 34px #0006,0 0 0 2px #7dd3fc33}.workspace-backpack-text{writing-mode:vertical-rl;text-orientation:upright;font-size:.84rem;font-weight:700;letter-spacing:.1em;line-height:1}.workspace-backpack-button.is-latin .workspace-backpack-text{text-orientation:mixed;letter-spacing:.02em;font-size:.8rem}.workspace-backpack-count{min-width:24px;height:22px;padding:0 7px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;font-size:.76rem;font-weight:700;color:#fffaf7;background:linear-gradient(135deg,#f97316,#fb7185);border:1px solid rgba(7,16,29,.8)}.workspace-backpack-panel{position:absolute;top:12px;right:14px;bottom:14px;width:min(420px,calc(100vw - 42px));border-radius:18px;border:1px solid rgba(148,163,184,.18);background:#080f1cf2;box-shadow:0 26px 52px #0000005c,inset 0 1px #ffffff0a;display:grid;grid-template-rows:auto minmax(0,1fr);transform:translate(calc(100% + 20px));opacity:0;pointer-events:none;transition:transform .22s ease,opacity .22s ease;z-index:80}.workspace-backpack-panel.is-open{transform:translate(0);opacity:1;pointer-events:auto}.workspace-backpack-panel-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 12px 10px;border-bottom:1px solid rgba(148,163,184,.12)}.workspace-backpack-head-copy{display:grid;gap:4px}.workspace-backpack-head-copy strong{font-size:.94rem}.workspace-backpack-head-copy span{color:var(--text-muted);font-size:.82rem}.workspace-backpack-clear-button{padding-inline:12px;min-height:34px;font-size:.82rem}.workspace-backpack-empty{margin:12px;padding:14px;border-radius:12px;border:1px dashed rgba(148,163,184,.26);background:#0e182a85;color:var(--text-muted);font-size:.88rem;line-height:1.5}.workspace-backpack-list{min-height:0;overflow:auto;padding:12px;display:grid;gap:10px;align-content:start}.workspace-backpack-item{border-radius:14px;padding:8px;border:1px solid rgba(148,163,184,.16);background:#0e192cc7;cursor:grab;user-select:none;transition:border-color .18s ease,background .18s ease}.workspace-backpack-item:hover{border-color:#94a3b84d;background:#0e192ce6}.workspace-backpack-item:active{cursor:grabbing}.workspace-backpack-item:focus-visible{outline:2px solid rgba(103,232,249,.72);outline-offset:1px}.workspace-backpack-preview{height:220px;border-radius:12px;border:1px solid rgba(148,163,184,.14);background:#080f1ba8;overflow:hidden}.workspace-backpack-preview-image{width:100%;height:100%;display:block;object-fit:contain;-webkit-user-drag:none;user-select:none;pointer-events:none}.workspace-backpack-preview-loading{width:100%;height:100%;display:grid;place-items:center;color:var(--text-muted);font-size:.86rem;padding:8px;text-align:center}.workspace-backpack-context-menu{position:fixed;min-width:170px;z-index:450;padding:6px;border-radius:12px;border:1px solid rgba(148,163,184,.2);background:#070e19fa;box-shadow:0 18px 32px #0000006b}.workspace-backpack-context-item{width:100%;border:0;border-radius:9px;padding:9px 10px;text-align:left;color:var(--text-main);background:#81a3ff1f}.workspace-backpack-context-item:hover{background:#81a3ff33}.dialog-backdrop{position:fixed;inset:0;z-index:400;display:grid;place-items:center;padding:20px;background:#02060e9e;backdrop-filter:blur(12px)}.dialog-panel{width:min(460px,100%);display:grid;gap:18px;padding:22px;border-radius:20px;border:1px solid rgba(125,211,252,.16);background:linear-gradient(180deg,#0a1220fa,#070d18fa);box-shadow:0 28px 70px #0000006b,inset 0 1px #ffffff0a}.dialog-copy{display:grid;gap:10px}.dialog-copy h2{margin:0;font-size:1.15rem}.dialog-copy p{margin:0;color:var(--text-muted);line-height:1.6}.pairing-field{display:grid;gap:6px;font-size:.85rem;color:var(--text-muted)}.pairing-input{width:100%;padding:9px 12px;border-radius:10px;border:1px solid rgba(125,211,252,.35);background:#02060e80;color:#e2e8f0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.85rem;outline:none;transition:border-color .15s ease,box-shadow .15s ease;box-sizing:border-box}.pairing-input:focus{border-color:#38bdf8;box-shadow:0 0 0 3px #38bdf840}.pairing-hint{font-size:.75rem;opacity:.85}.pairing-error{color:#f87171!important;font-size:.8rem}.example-hardware-list{margin:0;padding:0 0 0 18px;display:grid;gap:6px;color:var(--text-muted);line-height:1.5}.example-hardware-replace{margin-left:6px;color:#fbbf24;font-size:.9em}.dialog-actions{display:flex;justify-content:flex-end;gap:10px;flex-wrap:wrap}.hardware-connector-backdrop{position:fixed;inset:0;z-index:500;display:grid;place-items:center;padding:0;background:#080f1a;backdrop-filter:none}.hardware-connector-panel{width:100vw;height:100vh;max-height:100vh;display:grid;grid-template-rows:auto minmax(0,1fr);gap:14px;padding:16px;border-radius:0;border:1px solid rgba(125,211,252,.16);background:#0b1220;box-shadow:none}.hardware-connector-header{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.hardware-connector-header h2{margin:0;font-size:1.2rem}.hardware-connector-header p{margin:6px 0 0;color:var(--text-muted);line-height:1.45}.hardware-connector-header-actions{display:flex;gap:10px;flex-wrap:wrap}.hardware-connector-header-actions button:disabled{opacity:.45;cursor:not-allowed}.hardware-connector-body{min-height:0;display:grid;grid-template-columns:320px minmax(0,1fr);gap:14px}.hardware-connector-sidebar{min-height:0;display:grid;grid-template-rows:auto minmax(0,1fr);gap:10px;padding:12px;border-radius:14px;border:1px solid rgba(148,163,184,.14);background:#080f1bc7}.hardware-connector-categories{display:flex;gap:8px;flex-wrap:wrap}.hardware-connector-category-chip{border:1px solid rgba(148,163,184,.2);border-radius:999px;background:#131e30b8;color:var(--text-muted);padding:7px 12px}.hardware-connector-category-chip.active{border-color:#66d0ff9e;color:#eaf5ff;background:#203656e6}.hardware-module-list{min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:8px;padding:4px 4px 4px 0;scrollbar-width:thin}.hardware-module-card{flex:0 0 auto;width:100%;text-align:left;display:grid;grid-template-columns:72px minmax(0,1fr);align-items:center;gap:10px;padding:8px 10px;border-radius:10px;border:1px solid rgba(148,163,184,.14);background:#0e1828d6;color:var(--text-main);overflow:hidden;cursor:pointer;transition:border-color .16s ease,background .16s ease,transform .16s ease}.hardware-module-card:hover{border-color:#66d0ff73;background:#111e32eb;transform:translateY(-1px)}.hardware-module-card.active{border-color:#60a5fabf;background:#13233af5}.hardware-module-card-thumb{width:72px;height:72px;object-fit:contain;object-position:center;border-radius:8px;border:none;background:#ffffffeb;padding:4px;box-sizing:border-box}.hardware-module-card-copy{min-width:0;display:grid;gap:4px;align-content:center}.hardware-module-card strong{font-size:.88rem;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hardware-module-card small{color:var(--text-muted);line-height:1.35;font-size:.72rem;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.hardware-module-card-tag{justify-self:start;margin-top:2px;border:1px solid rgba(148,163,184,.22);border-radius:999px;padding:2px 8px;font-size:.7rem;color:#b7cdee}.hardware-installed-modules{display:grid;gap:8px;padding-top:4px}.hardware-installed-modules h3{margin:0;font-size:.92rem}.hardware-installed-module-list{display:grid;gap:8px}.hardware-installed-module-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center}.hardware-installed-module-open{width:100%;text-align:left;border:1px solid rgba(148,163,184,.14);border-radius:10px;background:#101b2ddb;color:#deebff;padding:8px 10px}.hardware-installed-module-remove{border:1px solid rgba(251,113,133,.42);border-radius:999px;background:#7f1d1d3d;color:#ffd7df;padding:6px 10px}.hardware-stage-help-toggle{position:absolute;top:10px;right:10px;z-index:30;width:28px;height:28px;border-radius:999px;border:1px solid rgba(148,163,184,.35);background:#0e1828d9;color:#cfe4ff;font-size:.85rem;font-weight:700;cursor:pointer;transition:border-color .16s ease,color .16s ease,background .16s ease}.hardware-stage-help-toggle:hover,.hardware-stage-help-toggle.active{border-color:#66d0ff9e;color:#eaf5ff;background:#203656eb}.hardware-stage-help-popover{position:absolute;top:46px;right:10px;z-index:30;width:min(280px,72%);padding:10px 30px 10px 12px;border-radius:10px;border:1px solid rgba(148,163,184,.25);background:#0a1321f2;box-shadow:0 8px 24px #02081273}.hardware-stage-help-popover strong{font-size:.8rem;color:var(--text-strong)}.hardware-stage-help-popover p{margin:4px 0 0;color:var(--text-muted);font-size:.72rem;line-height:1.5}.hardware-stage-help-close{position:absolute;top:4px;right:8px;border:none;background:transparent;color:var(--text-muted);font-size:.95rem;line-height:1;cursor:pointer;padding:4px}.hardware-stage-help-close:hover{color:var(--text-strong)}.hardware-network-panel{margin-top:8px;padding:6px 8px;border-radius:10px;border:1px solid rgba(148,163,184,.16);background:#0a1321e6}.hardware-network-panel h3{margin:0 0 4px;font-size:.78rem;color:var(--text-strong)}.hardware-network-icons{display:flex;flex-wrap:wrap;gap:4px}.hardware-network-icon{position:relative;display:flex;flex-direction:column;align-items:center;width:52px;padding:4px 2px;border:1px solid rgba(148,163,184,.2);border-radius:8px;background:#0f1b31cc;cursor:pointer;transition:border-color .15s}.hardware-network-icon:hover{border-color:#3b82f6}.hardware-network-icon.loaded{border-color:#22c55e;background:#22c55e1a}.hardware-network-thumb{width:32px;height:32px;object-fit:contain;border-radius:4px}.hardware-network-placeholder{width:32px;height:32px;display:flex;align-items:center;justify-content:center;font-size:10px;color:var(--text-muted);background:#3b82f626;border-radius:4px}.hardware-network-label{font-size:9px;color:var(--text-muted);text-align:center;margin-top:2px;line-height:1.1;max-width:48px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hardware-network-status{position:absolute;top:2px;right:4px;font-size:10px;color:var(--text-muted)}.hardware-network-icon.loaded .hardware-network-status{color:#22c55e}.hardware-mode-toggle{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.hardware-mode-toggle button{border:1px solid rgba(148,163,184,.2);border-radius:10px;background:#0f1b2ecc;color:#d5e7ff;padding:8px 10px}.hardware-mode-toggle button.active{border-color:#60a5fabf;background:#1e3250f2}.hardware-selected-pin{min-height:36px;border-radius:10px;border:1px solid rgba(148,163,184,.16);background:#0b1423d1;padding:8px 10px}.hardware-layout-editor{min-height:0;display:grid;grid-template-rows:auto auto minmax(0,1fr);gap:8px;padding:10px;border-radius:12px;border:1px solid rgba(148,163,184,.16);background:#08101ce6}.hardware-layout-editor h3{margin:0;font-size:.92rem}.hardware-layout-fields{display:grid;gap:8px}.hardware-layout-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.hardware-layout-point-list{min-height:0;overflow:auto;display:grid;gap:6px;align-content:start}.hardware-layout-point-item{display:grid;grid-template-columns:auto minmax(0,1fr) 70px 70px;gap:6px;align-items:center;border-radius:10px;border:1px solid rgba(148,163,184,.12);background:#0c1626d6;padding:6px}.hardware-layout-point-item strong{font-size:.72rem;color:#dfeeff}.hardware-connector-stage-wrapper{min-height:0;display:block;position:relative}.hardware-connector-stage{min-height:0;overflow:auto;position:relative;border-radius:14px;border:1px solid rgba(148,163,184,.14);background:#0b1322}.hardware-connector-stage:before{display:none}.hardware-stage-canvas{position:relative;min-width:1320px;min-height:760px}.hardware-stage-sizer{position:relative}.hardware-stage-zoom-indicator{position:absolute;left:10px;bottom:10px;z-index:30;padding:5px 12px;border-radius:999px;border:1px solid rgba(148,163,184,.35);background:#0e1828d9;color:#cfe4ff;font-size:.75rem;font-weight:600;cursor:pointer;transition:border-color .16s ease,color .16s ease,background .16s ease}.hardware-stage-zoom-indicator:hover{border-color:#66d0ff9e;color:#eaf5ff;background:#203656eb}:root[data-theme=light] .hardware-stage-zoom-indicator{background:#ffffffeb;border-color:#64748b52;color:#1e3a8a}.hardware-board{position:absolute;touch-action:none}.hardware-board-image{width:100%;height:100%;object-fit:contain;object-position:left top;display:block;cursor:move;user-select:none;-webkit-user-drag:none}.hardware-board-port,.hardware-peripheral-pin{position:absolute;transform:translate(-50%,-50%);width:18px;height:18px;border:0;background:transparent;appearance:none;padding:0;min-height:0;font-size:0;line-height:0;cursor:pointer}.hardware-pin-edit-hint{margin-top:4px;color:#1b61c9;font-size:12px}.hardware-board-port:before,.hardware-peripheral-pin:before{content:"";position:absolute;left:50%;top:50%;width:8px;height:8px;border-radius:50%;transform:translate(-50%,-50%);background:transparent}.hardware-board-port:before{background:#1b61c9;width:12px;height:12px;box-shadow:0 0 0 2px #fffc}.hardware-board-port.active:before{background:#f97316;width:16px;height:16px;box-shadow:0 0 0 3px #f973164d}.hardware-board-port.connected:before{background:#22c55e}.hardware-board-port-label{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) translateY(-24px);font-size:16px;font-weight:700;line-height:1;font-family:inherit;letter-spacing:.3px;padding:4px 8px;border-radius:6px;background:#fffffff0;border:1px solid rgba(15,23,42,.18);color:#1e293b;box-shadow:0 1px 3px #0f172a59;pointer-events:none;white-space:nowrap}.hardware-board-port-label.is-below{transform:translate(-50%,-50%) translateY(24px) rotate(180deg)}.hardware-board-port.active .hardware-board-port-label{background:#1b61c9;color:#fff}.hardware-peripheral{position:absolute;touch-action:none}.hardware-peripheral-image{width:100%;height:100%;object-fit:contain;object-position:left top;display:block;cursor:move;user-select:none;-webkit-user-drag:none}.hardware-peripheral-pin:before{background:#f97316;width:10px;height:10px;box-shadow:0 0 0 2px #fffc}.hardware-peripheral-pin.active:before{background:#1b61c9;width:14px;height:14px;box-shadow:0 0 0 3px #1b61c94d}.hardware-peripheral-pin.snapping:before{background:#f59e0b;width:16px;height:16px;box-shadow:0 0 0 4px #f59e0b59;animation:hardware-pin-pulse .9s ease-in-out infinite}@keyframes hardware-pin-pulse{0%,to{box-shadow:0 0 0 3px #f59e0b59}50%{box-shadow:0 0 0 6px #f59e0b26}}.hardware-peripheral-pin.connected:before{background:#22c55e}.hardware-connector-lines{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none;z-index:6}.hardware-wire-path{stroke:#67e8f9;stroke-width:3;stroke-linecap:round;fill:none;filter:none}.hardware-wire-path.is-highlighted{stroke:#fef08a;stroke-width:4}.hardware-wire-path.is-dragging{stroke:#fbbf24;stroke-dasharray:8 6}.hardware-wire-end,.hardware-wire-end.is-highlighted,.hardware-wire-end.is-dragging{display:none}.hardware-wire-hit{fill:none;stroke:#0000;stroke-width:16;pointer-events:stroke;cursor:pointer}.hardware-align-guide{position:absolute;background:#67e8f9d9;box-shadow:0 0 4px #67e8f999;pointer-events:none;z-index:9}.hardware-align-guide.v{top:0;bottom:0;width:1px}.hardware-align-guide.h{left:0;right:0;height:1px}.hardware-stage-canvas.animating .hardware-peripheral,.hardware-stage-canvas.animating .hardware-board{transition:left .3s ease,top .3s ease,transform .3s ease}.hardware-board-port.warn:before{background:#ef4444;width:16px;height:16px;box-shadow:0 0 0 3px #ef444459}.hardware-stage-notice{position:absolute;left:50%;bottom:14px;transform:translate(-50%);z-index:40;max-width:70%;padding:8px 16px;border-radius:999px;border:1px solid rgba(148,163,184,.3);background:#0e1828f0;color:#eaf5ff;font-size:.78rem;line-height:1.4;text-align:center;pointer-events:none;box-shadow:0 6px 18px #02081266}:root[data-theme=light] .hardware-stage-notice{background:#fffffff5;border-color:#64748b52;color:#1e3a8a}.app-toast-host{position:fixed;top:64px;left:50%;transform:translate(-50%);z-index:200;display:grid;gap:8px;justify-items:center;pointer-events:none}.app-toast{pointer-events:auto;display:inline-flex;align-items:center;gap:8px;max-width:min(520px,86vw);padding:9px 16px;border-radius:999px;border:1px solid rgba(148,163,184,.3);background:#0e1828f0;color:#eaf5ff;font-size:.875rem;line-height:1.4;cursor:pointer;box-shadow:0 10px 28px #02081273}.app-toast-icon{flex-shrink:0;font-size:.9rem}.app-toast-info .app-toast-icon{color:#60a5fa}.app-toast-success{border-color:#4ade8073}.app-toast-success .app-toast-icon{color:#4ade80}.app-toast-error{border-color:#f8717180}.app-toast-error .app-toast-icon{color:#f87171}.app-toast-enter-active,.app-toast-leave-active{transition:opacity .22s ease,transform .22s ease}.app-toast-enter-from,.app-toast-leave-to{opacity:0;transform:translateY(-8px)}:root[data-theme=light] .app-toast{background:#fffffff7;border-color:#64748b52;color:#1f2937;box-shadow:0 10px 28px #0f172a2e}:root[data-theme=light] .app-toast-success{border-color:#22c55e66}:root[data-theme=light] .app-toast-error{border-color:#ef444466}.hardware-confirm-overlay{position:fixed;inset:0;z-index:60;display:grid;place-items:center;background:#0207108c}.hardware-confirm-dialog{width:min(360px,86vw);padding:20px 22px;border-radius:14px;border:1px solid rgba(148,163,184,.25);background:#0e1828fa;box-shadow:0 18px 48px #0208128c}.hardware-confirm-dialog strong{font-size:.98rem;color:var(--text-strong)}.hardware-confirm-dialog p{margin:8px 0 0;color:var(--text-muted);font-size:.82rem;line-height:1.55}.hardware-confirm-actions{margin-top:16px;display:flex;justify-content:flex-end;gap:10px}.danger-button{border:1px solid rgba(251,113,133,.5);border-radius:12px;padding:10px 20px;font-weight:500;font-size:.95rem;background:#be183ce6;color:#fff}.danger-button:hover{background:#dc264cf2}:root[data-theme=light] .hardware-confirm-dialog{background:#fffffffa;border-color:#64748b47}.dev-layout-backdrop{position:fixed;inset:0;z-index:520;background:#020710d1;backdrop-filter:blur(12px)}.dev-layout-panel{width:100vw;height:100vh;display:grid;grid-template-rows:auto minmax(0,1fr);gap:14px;padding:16px;border:1px solid rgba(125,211,252,.16);background:linear-gradient(180deg,#080f1bfa,#040a12fa)}.dev-layout-header{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.dev-layout-header h2{margin:0;font-size:1.18rem}.dev-layout-header p{margin:6px 0 0;color:var(--text-muted);line-height:1.45}.dev-layout-header-actions{display:flex;gap:10px;flex-wrap:wrap}.dev-layout-body{min-height:0;display:grid;grid-template-columns:340px minmax(0,1fr);gap:14px}.dev-layout-sidebar{min-height:0;display:grid;grid-template-rows:auto auto auto minmax(0,1fr);gap:10px;padding:12px;border-radius:14px;border:1px solid rgba(148,163,184,.14);background:#080f1bc7}.dev-layout-fields{display:grid;gap:8px}.dev-layout-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.dev-layout-point-list{min-height:0;overflow:auto;display:grid;gap:6px;align-content:start}.dev-layout-point-actions{display:flex;justify-content:flex-start}.dev-layout-point-item{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) 72px 72px auto;gap:6px;align-items:center;border-radius:10px;border:1px solid rgba(148,163,184,.12);background:#0c1626d6;padding:6px}.dev-layout-point-remove{border:1px solid rgba(251,113,133,.42);border-radius:999px;background:#7f1d1d3d;color:#ffd7df;padding:5px 9px}.dev-layout-stage{min-height:0;overflow:auto;position:relative;border-radius:14px;border:1px solid rgba(148,163,184,.14);background:radial-gradient(circle at 16% 10%,rgba(59,130,246,.16),transparent 28%),radial-gradient(circle at 88% 86%,rgba(249,115,22,.14),transparent 26%),linear-gradient(180deg,#070f1beb,#040a12f5)}.dev-layout-canvas{position:relative;min-width:1380px;min-height:820px}.dev-layout-board{position:absolute}.dev-layout-board-image{width:100%;height:100%;object-fit:contain;object-position:left top;display:block}.dev-layout-module{position:absolute}.dev-layout-module-image{width:100%;height:100%;object-fit:contain;object-position:left top;display:block;cursor:move}.dev-layout-module.active .dev-layout-module-image{filter:drop-shadow(0 0 10px rgba(103,232,249,.42))}.dev-layout-point-chip{position:absolute;transform:translate(-50%,-50%);border:0;background:transparent;font-size:.72rem;line-height:1.2;white-space:nowrap;padding:0 0 0 14px;min-height:10px;text-shadow:0 1px 4px rgba(0,0,0,.65);color:#d5e7ff}.dev-layout-point-chip:before{content:"";position:absolute;left:0;top:50%;width:8px;height:8px;border-radius:50%;transform:translateY(-50%);background:transparent}.dev-layout-point-chip.board{color:#bfe8ff}.dev-layout-point-chip.board:before{border:2px solid rgba(99,179,237,.88)}.dev-layout-point-chip.module{color:#ffc5d0}.dev-layout-point-chip.module:before{border:2px solid rgba(248,113,113,.88)}.dev-layout-point-chip.active{color:#ffe9a8}.dev-layout-point-chip.active:before{border-color:#fbbf24f2;box-shadow:0 0 0 2px #fbbf2438}.terminal-dock{padding:12px 14px 14px;border-top:1px solid rgba(148,163,184,.12);background:#040a1257}.terminal-shell{display:grid;gap:14px}.terminal-head{display:flex;justify-content:space-between;align-items:center;gap:12px}.terminal-actions,.terminal-shortcuts{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.terminal-shortcut{border:1px solid rgba(148,163,184,.14);border-radius:999px;background:#121d31c2;color:var(--text-main);padding:8px 12px;transition:transform .18s ease,background .18s ease}.terminal-shortcut:hover{transform:translateY(-1px);background:#1c2b46eb}.terminal-head h3{margin:0;font-size:.95rem}.terminal-head p{margin:6px 0 0;color:var(--text-muted);line-height:1.45}.terminal-surface{min-height:260px;border-radius:0;overflow:hidden;border:1px solid rgba(148,163,184,.12);background:#07101b}.terminal-surface .xterm,.terminal-surface .xterm-viewport,.terminal-surface .xterm-screen,.terminal-surface .xterm-screen canvas{border-radius:0}.terminal-curve{display:grid;gap:10px;padding:10px 12px 12px;border:1px solid rgba(148,163,184,.12);background:#060d18e0}.terminal-curve-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.terminal-curve-info{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.terminal-curve-title{font-size:.88rem;color:#dbe7ff}.terminal-curve-meta{color:var(--text-muted);font-size:.78rem}.terminal-curve-canvas-wrap{height:176px;border:1px solid rgba(148,163,184,.12);background:#050c17}.terminal-curve-canvas{width:100%;height:100%;display:block}.terminal-input-row{display:grid;grid-template-columns:minmax(120px,180px) minmax(0,1fr) auto;gap:10px}.terminal-send-format{width:100%}.cloud-project-list{display:grid;gap:10px;max-height:260px;overflow:auto}.cloud-project-button{width:100%;display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 14px;border:1px solid rgba(148,163,184,.12);border-radius:14px;background:#121d31c2;color:var(--text-main);text-align:left}.cloud-project-button small{color:var(--text-muted);white-space:nowrap}.example-tree{list-style:none;margin:0;padding:0;display:grid;gap:8px}.example-tree .example-tree{margin-top:8px;padding-left:14px;border-left:1px solid rgba(125,211,252,.12)}.example-tree-item{list-style:none}.example-folder{border-radius:14px;background:#0a1220c2;border:1px solid rgba(148,163,184,.1);padding:4px}.example-folder-summary{display:grid;gap:4px;padding:10px 12px;cursor:pointer}.example-folder-summary span,.example-leaf span{font-weight:700;font-size:.875rem}.example-folder-summary small,.example-leaf small{color:var(--text-muted);font-size:.78rem;line-height:1.45}.example-folder[open]{background:#0d1626f0}.example-leaf{width:100%;display:grid;gap:4px;padding:12px;border:1px solid rgba(148,163,184,.1);border-radius:14px;background:#0a1220c2;color:var(--text-main);text-align:left}.hidden-input{display:none}.blocklyToolboxDiv,.blocklyFlyout,.blocklyFlyoutBackground{border-radius:0}.blocklyToolboxDiv{background-color:var(--blockly-toolbox-bg)!important;color:var(--blockly-toolbox-fg)!important}.blocklyFlyoutBackground{fill:var(--blockly-flyout-bg)!important;fill-opacity:.98}.blocklyFlyout .blocklyText,.blocklyFlyout .blocklyFlyoutLabelText{fill:var(--blockly-flyout-fg)!important}.blocklyDropdownRect{fill:#ffffffeb!important}.zelos-soft-renderer .blocklyEditableField .blocklyDropdownText,.zelos-soft-renderer .blocklyNonEditableField .blocklyDropdownText,.zelos-soft-renderer .blocklyFlyout .blocklyDropdownText,.blocklyDropdownText,.blocklyFlyout .blocklyDropdownText{fill:#1f2b3d!important}.blocklyScrollbarHandle{fill:var(--blockly-scrollbar)!important}.blocklyDropDownDiv{background-color:#fff!important;color:#1f2b3d!important;border:1px solid #e2eaf5!important;box-shadow:0 6px 16px #1f2b3d1f!important}.blocklyWidgetDiv{background-color:#fff!important;color:#1f2b3d!important}.blocklyDropDownDiv .blocklyMenuItem,.blocklyWidgetDiv .blocklyMenuItem,.blocklyDropDownDiv .blocklyMenuItemContent,.blocklyWidgetDiv .blocklyMenuItemContent{color:#1f2b3d!important}.blocklyToolbox .blocklyToolboxCategoryLabel,.blocklyToolboxDiv .blocklyToolboxCategoryLabel{display:inline-flex;align-items:center;gap:11px;font-size:16px;line-height:1.15;font-weight:600;color:var(--blockly-toolbox-fg)}.blocklyToolbox .blocklyToolboxCategory,.blocklyToolboxDiv .blocklyToolboxCategory{min-height:34px;line-height:34px;margin-bottom:5px;padding-left:10px;padding-right:12px;color:var(--blockly-toolbox-fg)}.blocklyToolbox .blocklyToolboxCategoryIcon,.blocklyToolboxDiv .blocklyToolboxCategoryIcon{visibility:visible;background-image:none;width:26px;height:26px;box-sizing:border-box;position:relative;border-radius:50%;display:inline-block;vertical-align:middle;margin-left:4px;margin-right:10px;border:1px solid rgba(148,163,184,.55);color:#dbe7ff;background:#94a3b81f}.blocklyToolbox .blocklyToolboxCategoryIcon:after,.blocklyToolboxDiv .blocklyToolboxCategoryIcon:after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-size:15px;font-weight:700;line-height:1;text-align:center;width:max-content}.blocklyToolbox .blocklyToolboxSelected .blocklyToolboxCategoryIcon,.blocklyToolboxDiv .blocklyToolboxSelected .blocklyToolboxCategoryIcon{border-color:#ffffffb3;background:#fff3;color:#fff}.blocklyToolbox .toolbox-subcategory-icon-hidden,.blocklyToolboxDiv .toolbox-subcategory-icon-hidden{display:none}.blocklyToolbox .toolbox-icon-io:after,.blocklyToolboxDiv .toolbox-icon-io:after{content:"📌";font-size:14px}.blocklyToolbox .toolbox-icon-sensor:after,.blocklyToolboxDiv .toolbox-icon-sensor:after{content:"◉"}.blocklyToolbox .toolbox-icon-communication:after,.blocklyToolboxDiv .toolbox-icon-communication:after{content:"📡";font-size:17px}.blocklyToolbox .toolbox-icon-actuator:after,.blocklyToolboxDiv .toolbox-icon-actuator:after{content:"⚙"}.blocklyToolbox .toolbox-icon-display:after,.blocklyToolboxDiv .toolbox-icon-display:after{content:"🖥"}.blocklyToolbox .toolbox-icon-files:after,.blocklyToolboxDiv .toolbox-icon-files:after{content:"🗎";font-size:14px;font-family:Segoe UI Symbol,Noto Sans Symbols2,Arial Unicode MS,sans-serif}.blocklyToolbox .toolbox-icon-control:after,.blocklyToolboxDiv .toolbox-icon-control:after{content:"⏯"}.blocklyToolbox .toolbox-icon-logic:after,.blocklyToolboxDiv .toolbox-icon-logic:after{content:"∧"}.blocklyToolbox .toolbox-icon-math:after,.blocklyToolboxDiv .toolbox-icon-math:after{content:"∑"}.blocklyToolbox .toolbox-icon-text:after,.blocklyToolboxDiv .toolbox-icon-text:after{content:"T"}.blocklyToolbox .toolbox-icon-variables:after,.blocklyToolboxDiv .toolbox-icon-variables:after{content:"x"}.blocklyToolbox .toolbox-icon-functions:after,.blocklyToolboxDiv .toolbox-icon-functions:after{content:"f"}.blocklyToolbox .toolbox-icon-lists:after,.blocklyToolboxDiv .toolbox-icon-lists:after{content:"☰"}.blocklyToolbox .toolbox-icon-tuples:after,.blocklyToolboxDiv .toolbox-icon-tuples:after{content:"()";font-size:12px}.blocklyToolbox .toolbox-icon-sets:after,.blocklyToolboxDiv .toolbox-icon-sets:after{content:"∅"}.blocklyToolbox .toolbox-icon-dictionaries:after,.blocklyToolboxDiv .toolbox-icon-dictionaries:after{content:"{}";font-size:12px}.blocklyToolbox .toolbox-group-separator,.blocklyToolboxDiv .toolbox-group-separator{margin:6px 8px;height:1px;border-top:1px solid rgba(148,163,184,.28)}.blocklyMainBackground{fill:var(--blocklyGridPattern);stroke:none}.blocklySvg{background-color:var(--blockly-workspace-bg)!important}.blocklySvg pattern[id^=blocklyGridPattern] line{stroke:var(--blockly-grid-stroke)!important}:root[data-theme=light] .controller-card,:root[data-theme=light] .controller-card.is-disabled,:root[data-theme=light] .home-feature-section,:root[data-theme=light] .home-feature-card,:root[data-theme=light] .ai-application-card,:root[data-theme=light] .ai-app-panel,:root[data-theme=light] .cloud-controls,:root[data-theme=light] .cloud-list-panel,:root[data-theme=light] .classroom-panel,:root[data-theme=light] .classroom-list-item,:root[data-theme=light] .classroom-submission-item,:root[data-theme=light] .ai-app-status-item,:root[data-theme=light] .example-folder,:root[data-theme=light] .example-folder[open],:root[data-theme=light] .example-leaf{background:#fff;border-color:#e0e2e6}:root[data-theme=light] .home-account-entry,:root[data-theme=light] .admin-panel,:root[data-theme=light] .admin-overview-card{background:#fff;border-color:#e0e2e6}:root[data-theme=light] .classroom-subtabs button{background:#fff;border-color:#e0e2e6;color:#5f6b7a}:root[data-theme=light] .classroom-subtabs button.active{border-color:#1b61c9;background:#eef3fc;color:#1b61c9}:root[data-theme=light] .ai-face-stage{background:#f8fafc;border-color:#e0e2e6}:root[data-theme=light] .ai-application-card-link{color:#1b61c9}:root[data-theme=light] .admin-table{background:#fff}:root[data-theme=light] .admin-table tbody tr:nth-child(2n){background:#fafbfe}:root[data-theme=light] .admin-table tbody tr:hover{background:#eef3fc}:root[data-theme=light] .admin-nav{background:#fafbfe;border-color:#e7ebf2}:root[data-theme=light] .admin-nav-group+.admin-nav-group{border-color:#eceff5}:root[data-theme=light] .admin-nav-btn{color:#454f63}:root[data-theme=light] .admin-nav-btn:hover{background:#eef2fb;color:#3b82f6}:root[data-theme=light] .admin-nav-btn.active{background:#e4ecfd;color:#3b82f6}:root[data-theme=light] .admin-chart-card{background:#fff;border-color:#e0e2e6}:root[data-theme=light] .toolbar-project-input,:root[data-theme=light] .select-input,:root[data-theme=light] .file-input,:root[data-theme=light] .terminal-input{background:#fff;border-color:#e0e2e6}:root[data-theme=dark] .toolbar-project-input{background:#0f182ab8;border-color:#94a3b82e;color:var(--text-main)}:root[data-theme=dark] .toolbar-project-input::placeholder{color:#94a3b88c}:root[data-theme=dark] .toolbar-project-input:focus{border-color:#60a5fa8c;box-shadow:0 0 0 3px #60a5fa29}:root[data-theme=dark] .ai-fab-label{background:#0a1221e0;color:#dbe7ff;box-shadow:0 2px 8px #00000059}:root[data-theme=light] .toolbar-trigger,:root[data-theme=light] .toolbar-plain-button,:root[data-theme=light] .view-switch{background:#fff;border-color:#e0e2e6}:root[data-theme=light] .program-mode-switch>summary.program-mode-chip{background:#fff;border-color:#e0e2e6;color:#1f2937}:root[data-theme=light] .program-mode-switch>summary.program-mode-chip:hover,:root[data-theme=light] .program-mode-switch[open]>summary.program-mode-chip{background:#f8fafc;border-color:#d3d8e0}:root[data-theme=light] .toolbar-trigger:hover,:root[data-theme=light] .toolbar-plain-button:hover,:root[data-theme=light] .toolbar-menu[open]>.toolbar-trigger{background:#f8fafc;box-shadow:#2d7ff947 0 1px 3px}:root[data-theme=light] .toolbar-menu-panel{background:#fff;border-color:#e0e2e6;box-shadow:#00000052 0 0 1px,#00000014 0 0 2px,#2d7ff947 0 1px 3px}:root[data-theme=light] .menu-section{background:#f8fafc;border-color:#e0e2e6}:root[data-theme=light] .menu-action,:root[data-theme=light] .cloud-project-button,:root[data-theme=light] .terminal-shortcut{background:#fff;border-color:#e0e2e6;color:var(--text-main)}:root[data-theme=light] .menu-action:hover{background:#f8fafc}:root[data-theme=light] .secondary-button{background:#fff;color:#181d26;border:1px solid #e0e2e6}:root[data-theme=light] .view-switch button.active{background:#1b61c9;color:#fff;box-shadow:inset 0 0 0 1px #1b61c93d}:root[data-theme=light] .status-badge.is-connected,:root[data-theme=light] .toolbar-meta.is-connected{background:#16a34a2e;color:#166534}:root[data-theme=light] .status-badge.is-warning,:root[data-theme=light] .toolbar-meta.is-warning{background:#fb923c33;color:#9a3412}:root[data-theme=light] .warning-list{background:#fff4e5e0;border-color:#f973163d}:root[data-theme=light] .warning-title{color:#9a3412}:root[data-theme=light] .warning-item{color:#b45309}:root[data-theme=light] .tutorial-panel{background:#f6fbfff0;border-left-color:#64748b3d}:root[data-theme=light] .tutorial-content-section,:root[data-theme=light] .tutorial-program-card{background:#ffffffe6;border-color:#64748b33}:root[data-theme=light] .workspace-main.is-tutorial-open .tutorial-panel{border-left-color:#64748b3d}:root[data-theme=light] .workspace-main.is-tutorial-resizable .tutorial-panel{border-left:0}:root[data-theme=light] .tutorial-toc-item{background:#e8f2ffeb;border-color:#64748b3d;color:#1f2b3d}:root[data-theme=light] .tutorial-toc-sidebar{background:#eff7fff0;border-color:#64748b38}:root[data-theme=light] .tutorial-toc-item.is-group,:root[data-theme=light] .tutorial-toc-item:disabled{background:#dfebfceb;color:#5b6b83}:root[data-theme=light] .tutorial-video,:root[data-theme=light] .tutorial-figure img,:root[data-theme=light] .tutorial-gif,:root[data-theme=light] .tutorial-code-preview,:root[data-theme=light] .tutorial-blockly-preview{border-color:#64748b3d}:root[data-theme=light] .tutorial-code-preview,:root[data-theme=light] .tutorial-blockly-preview{background:#eef6fff2;color:#0f172a}:root[data-theme=light] .block-help-field-chip{background:#edf6fff2;border-color:#64748b3d}:root[data-theme=light] .block-help-field-chip strong{color:#0369a1}:root[data-theme=light] .dialog-panel{border-color:#3b82f633;background:linear-gradient(180deg,#fffffffa,#f5fafffa);box-shadow:0 28px 70px #0f172a33,inset 0 1px #ffffffdb}:root[data-theme=light] .dialog-backdrop{background:#bbc7db6b}:root[data-theme=light] .terminal-dock{background:#ebf3ff99}:root[data-theme=light] .workspace-backpack-button{background:#fffffff5;border-color:#64748b47;color:#1f2b3d;box-shadow:0 14px 26px #1e293b29,inset 0 1px #ffffffe0}:root[data-theme=light] .workspace-backpack-panel,:root[data-theme=light] .workspace-backpack-item,:root[data-theme=light] .workspace-backpack-empty,:root[data-theme=light] .workspace-backpack-preview,:root[data-theme=light] .workspace-backpack-context-menu{background:#f5fafff7;border-color:#64748b3d}:root[data-theme=light] .workspace-backpack-context-item{background:#bfdbfe99;color:#0f172a}:root[data-theme=light] .terminal-surface{background:#f8fbff;border-color:#64748b3d}:root[data-theme=light] .terminal-curve{background:#f5fafff2;border-color:#64748b3d}:root[data-theme=light] .terminal-curve-title{color:#1d4ed8}:root[data-theme=light] .terminal-curve-canvas-wrap{background:#fff;border-color:#64748b3d}:root[data-theme=light] .hardware-connector-backdrop,:root[data-theme=light] .hardware-connector-panel,:root[data-theme=light] .hardware-connector-sidebar,:root[data-theme=light] .hardware-stage-help-popover,:root[data-theme=light] .hardware-stage-help-toggle,:root[data-theme=light] .hardware-layout-editor,:root[data-theme=light] .hardware-connector-stage,:root[data-theme=light] .hardware-module-card,:root[data-theme=light] .hardware-module-card.active,:root[data-theme=light] .hardware-installed-module-open,:root[data-theme=light] .hardware-selected-pin,:root[data-theme=light] .hardware-layout-point-item,:root[data-theme=light] .hardware-mode-toggle button,:root[data-theme=light] .hardware-mode-toggle button.active,:root[data-theme=light] .dev-layout-panel,:root[data-theme=light] .dev-layout-sidebar,:root[data-theme=light] .dev-layout-point-item,:root[data-theme=light] .dev-layout-stage{background:#f4f9fff5;border-color:#64748b3d}:root[data-theme=light] .hardware-module-card-thumb{background:#fffffff2;border:1px solid rgba(100,116,139,.18)}:root[data-theme=light] .hardware-connector-category-chip{background:#e8f1ffe6;border-color:#64748b3d;color:#334155}:root[data-theme=light] .hardware-connector-category-chip.active{background:#bfdbfef2;color:#1e3a8a}:root[data-theme=light] .hardware-module-card-tag,:root[data-theme=light] .hardware-layout-point-item strong,:root[data-theme=light] .admin-overview-card span{color:#1e3a8a}:root[data-theme=light] .split-divider-grip{box-shadow:0 0 0 3px #d6e4f6eb}:root[data-theme=light] .tutorial-split-divider-grip{box-shadow:0 0 0 3px #d6e4f6eb}:root[data-theme=light] .blocklyToolbox .blocklyToolboxSelected .blocklyToolboxCategoryIcon,:root[data-theme=light] .blocklyToolboxDiv .blocklyToolboxSelected .blocklyToolboxCategoryIcon{border-color:#2563ebb8;background:#2563eb29;color:#1e3a8a}:root[data-theme=light] .blocklyToolbox .blocklyToolboxCategoryIcon,:root[data-theme=light] .blocklyToolboxDiv .blocklyToolboxCategoryIcon{color:#334155}@media(max-width:1500px){.workspace-toolbar{gap:5px;padding:6px 10px}.workspace-toolbar .toolbar-section{gap:4px}.workspace-toolbar .toolbar-trigger,.workspace-toolbar .toolbar-plain-button,.workspace-toolbar .toolbar-run-button,html:lang(en-US) .workspace-toolbar .toolbar-trigger,html:lang(en-US) .workspace-toolbar .toolbar-plain-button,html:lang(en-US) .workspace-toolbar .toolbar-run-button{padding-inline:9px;min-height:32px;font-size:.83rem}.workspace-toolbar .view-switch{gap:3px;padding:3px}.workspace-toolbar .view-switch button,html:lang(en-US) .workspace-toolbar .view-switch button{padding:5px 8px;font-size:.82rem}.toolbar-section-left .toolbar-project-input,.workspace-toolbar .toolbar-project-input{width:clamp(90px,9vw,140px)}.workspace-toolbar .device-channel-badge{display:none}.workspace-toolbar .save-status{font-size:11px}.hardware-connector-header>div:first-child{min-width:0;flex:1 1 auto}.hardware-connector-header h2{font-size:1.1rem}.hardware-connector-header p{margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hardware-connector-header-actions{gap:6px;flex-wrap:nowrap;flex-shrink:0}.hardware-connector-header-actions button{padding:8px 12px;font-size:.85rem;min-height:34px;white-space:nowrap}}@media(max-width:1360px){.workspace-main.is-tutorial-open{grid-template-columns:minmax(0,1fr) minmax(300px,360px)}.editor-stage.mode-split{grid-template-columns:1fr}.editor-stage.mode-split .code-pane{border-left:0;border-top:1px solid rgba(148,163,184,.12)}.workspace-toolbar{flex-wrap:nowrap;row-gap:4px}.toolbar-section-center,.toolbar-section-right{flex-shrink:1;min-width:0}.workspace-toolbar .device-status-text,.workspace-toolbar .settings-label{display:none}.workspace-toolbar .settings-gear{display:inline}}@media(max-width:1180px){.workspace-main.is-tutorial-open{grid-template-columns:1fr;grid-template-rows:minmax(0,1fr) minmax(320px,44vh)}.tutorial-panel{border-left:0;border-top:1px solid rgba(148,163,184,.14)}.workspace-toolbar{flex-wrap:nowrap;padding:6px 8px;gap:4px}.admin-header,.cloud-header,.ai-app-header{grid-template-columns:1fr;align-items:stretch}.ai-app-main.ai-app-two-column{grid-template-columns:1fr}.classroom-header{grid-template-columns:1fr;align-items:stretch}.admin-header-actions,.cloud-header-actions,.ai-app-header-actions,.classroom-header-actions{justify-content:flex-start}.cloud-search-form,.classroom-grid-two{grid-template-columns:1fr}.toolbar-section{flex-wrap:nowrap}.toolbar-menu-panel,.account-menu .toolbar-menu-panel{position:static;width:100%;margin-top:8px}.view-switch{justify-content:stretch}.view-switch button{flex:1}}@media(max-width:820px){.tutorial-panel-head,.tutorial-panel-actions,.tutorial-content-head{flex-direction:column;align-items:stretch}.tutorial-panel-layout{grid-template-columns:1fr}.tutorial-toc-sidebar{max-height:180px}.menu-action-row,.editor-pane-head,.terminal-head,.dialog-actions,.hardware-connector-header,.hardware-connector-header-actions,.admin-table-head,.home-account-head{flex-direction:column;align-items:stretch}.home-account-actions,.admin-table-actions,.cloud-header-actions,.ai-app-header-actions,.classroom-header-actions{width:100%}.cloud-page-project-row{grid-template-columns:1fr}.classroom-panel-head{flex-direction:column;align-items:stretch}.workspace-backpack-panel{right:10px;bottom:12px;width:min(360px,calc(100vw - 26px))}}@media(max-width:720px){.app-shell{padding:0}.controller-home{height:100vh;border-radius:0;border-left:0;border-right:0}.controller-home-header{padding-inline:12px;flex-wrap:wrap}.controller-home-content{padding-inline:12px}.controller-home-language{width:100%;justify-content:space-between}.controller-home-language-select{width:min(180px,100%)}.admin-shell,.cloud-shell,.ai-app-shell,.classroom-shell{height:100vh;border-radius:0;border-left:0;border-right:0}.admin-header,.cloud-header,.ai-app-header,.classroom-header,.admin-content,.cloud-main,.ai-app-main,.classroom-main{padding-inline:12px}.workspace-shell{height:100vh;border-radius:0;border-left:0;border-right:0}.workspace-toolbar,.editor-pane,.terminal-dock,.tutorial-panel-head,.tutorial-panel-body{padding-inline:12px}.terminal-input-row{grid-template-columns:1fr}.terminal-surface{min-height:220px}.terminal-curve-canvas-wrap{height:150px}.hardware-connector-backdrop{padding:0}.hardware-connector-panel{width:100%;max-height:100vh;height:100vh;border-radius:0}.workspace-backpack-button{right:0;top:50%;min-height:112px;min-width:44px;padding-inline:7px}.workspace-backpack-panel{inset:10px 8px;width:auto;transform:translate(0) translateY(8px)}.workspace-backpack-panel.is-open{transform:translate(0) translateY(0)}.hardware-connector-body{grid-template-columns:1fr}.hardware-connector-sidebar{grid-template-rows:auto minmax(0,180px) auto}.hardware-connector-stage{min-height:420px}.hardware-stage-canvas{min-width:1040px;min-height:620px}.dev-layout-panel{padding:12px}.dev-layout-body{grid-template-columns:1fr}.dev-layout-sidebar{grid-template-rows:auto auto auto minmax(0,220px)}.dev-layout-stage{min-height:420px}.dev-layout-canvas{min-width:1080px;min-height:700px}}.ai-pane{display:block;padding:0;overflow:hidden}.ai-panel{height:100%;min-height:0;display:grid;grid-template-rows:auto auto minmax(0,1fr) auto;background:#0a122080;border-left:1px solid rgba(148,163,184,.16)}.ai-panel-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px 16px 10px}.ai-panel-identity{display:flex;align-items:center;gap:10px;min-width:0}.ai-avatar{width:34px;height:34px;flex-shrink:0;filter:drop-shadow(0 2px 6px rgba(27,97,201,.35))}.ai-avatar-float{width:44px;height:44px;animation:ai-avatar-float 3s ease-in-out infinite}.ai-avatar-working{animation:ai-avatar-wiggle .9s ease-in-out infinite}@keyframes ai-avatar-float{0%,to{transform:translateY(0)}50%{transform:translateY(-4px)}}@keyframes ai-avatar-wiggle{0%,to{transform:rotate(-6deg)}50%{transform:rotate(6deg)}}.ai-panel-title-copy{display:grid;gap:2px;min-width:0}.ai-panel-title-copy strong{font-size:.95rem;color:var(--text-main)}.ai-panel-title-copy span{font-size:.75rem;color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ai-head-action{flex-shrink:0;padding:5px 12px;border-radius:999px;border:1px solid rgba(148,163,184,.25);background:transparent;color:var(--text-muted);font-size:.78rem;cursor:pointer;transition:all .15s}.ai-head-action:hover{border-color:#60a5fa8c;color:var(--text-main)}.ai-avatar-switch{display:inline-flex;gap:2px;padding:2px;border-radius:999px;border:1px solid rgba(148,163,184,.25);flex-shrink:0}.ai-avatar-option{width:26px;height:26px;padding:2px;border-radius:999px;border:1px solid transparent;background:transparent;cursor:pointer;opacity:.45;transition:all .15s}.ai-avatar-option img{width:100%;height:100%;object-fit:contain;display:block}.ai-avatar-option:hover{opacity:.8}.ai-avatar-option.is-active{opacity:1;border-color:#60a5fa99;background:#60a5fa1f}.ai-steps{display:flex;align-items:flex-start;margin:0;padding:4px 16px 12px;list-style:none;border-bottom:1px solid rgba(148,163,184,.12)}.ai-step{flex:1;display:grid;justify-items:center;gap:4px;position:relative;color:var(--text-muted)}.ai-step:not(:last-child):after{content:"";position:absolute;top:10px;left:calc(50% + 14px);right:calc(-50% + 14px);height:2px;border-radius:2px;background:#94a3b833}.ai-step.is-done:not(:last-child):after{background:#4ade8080}.ai-step-dot{width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;border:1px solid rgba(148,163,184,.35);background:#0f182acc;font-size:.66rem;z-index:1}.ai-step.is-done .ai-step-dot{border-color:#4ade8099;background:#22c55e33;color:#4ade80}.ai-step.is-active{color:var(--text-main)}.ai-step.is-active .ai-step-dot{border-color:#60a5fab3;background:#3b82f640;color:#93c5fd;box-shadow:0 0 10px #3b82f659}.ai-step-label{font-size:.68rem;white-space:nowrap}.ai-chat{min-height:0;overflow-y:auto;display:grid;gap:14px;align-content:start;padding:14px 16px}.ai-msg{display:flex;align-items:flex-end;gap:8px}.ai-msg-user{justify-content:flex-end}.ai-bubble{max-width:82%;padding:10px 14px;font-size:.875rem;line-height:1.55;color:var(--text-main);background:#1e2d48d9;border:1px solid rgba(148,163,184,.16);border-radius:14px 14px 14px 4px}.ai-msg-user .ai-bubble{background:linear-gradient(135deg,#1b61c9,#254fad);color:#fff;border:none;border-radius:14px 14px 4px}.ai-bubble p{margin:0 0 6px}.ai-bubble p:last-child{margin-bottom:0}.ai-bubble-wide{max-width:100%}.ai-question-list{margin:0;padding-left:18px;display:grid;gap:4px}.ai-hardware-cards{display:grid;gap:8px;margin:8px 0}.ai-hardware-card{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:12px;border:1px solid rgba(148,163,184,.2);background:#0a122099}.ai-hardware-card img{width:44px;height:44px;object-fit:contain;border-radius:8px;background:#ffffffeb;padding:3px;flex-shrink:0}.ai-hardware-card-copy{display:grid;gap:2px;min-width:0}.ai-hardware-card-copy strong{font-size:.85rem;color:var(--text-main)}.ai-hardware-card-copy span{font-size:.72rem;color:var(--text-muted)}.ai-hardware-card-copy .ai-hardware-detail{font-size:.72rem;color:var(--text-main);opacity:.85;font-weight:600}.ai-plan-note{font-size:.78rem;color:var(--text-muted)}.ai-plan-actions{display:flex;gap:8px;margin-top:10px}.ai-plan-confirm{flex:1;padding:8px 14px;border:none;border-radius:999px;background:linear-gradient(135deg,#1b61c9,#3b82f6);color:#fff;font-size:.82rem;font-weight:600;cursor:pointer;transition:all .15s}.ai-plan-confirm:hover{filter:brightness(1.1)}.ai-plan-adjust{padding:8px 14px;border-radius:999px;border:1px solid rgba(148,163,184,.3);background:transparent;color:var(--text-muted);font-size:.82rem;cursor:pointer;transition:all .15s}.ai-plan-adjust:hover{border-color:#60a5fa8c;color:var(--text-main)}.ai-bubble-typing{display:inline-flex;align-items:center;gap:8px;color:var(--text-muted);font-size:.8rem}.ai-typing-dots{display:inline-flex;gap:3px}.ai-typing-dots i{width:5px;height:5px;border-radius:50%;background:#60a5fa;animation:ai-typing 1.2s ease-in-out infinite}.ai-typing-dots i:nth-child(2){animation-delay:.15s}.ai-typing-dots i:nth-child(3){animation-delay:.3s}@keyframes ai-typing{0%,60%,to{transform:translateY(0);opacity:.4}30%{transform:translateY(-4px);opacity:1}}.ai-input-bar{display:flex;flex-direction:column;padding:12px 16px 14px;border-top:1px solid rgba(148,163,184,.12)}.ai-input-row{display:flex;gap:8px;width:100%}.ai-input{flex:1;min-width:0;padding:10px 14px;border-radius:999px;border:1px solid rgba(148,163,184,.25);background:#0f182acc;color:var(--text-main);font-size:.875rem;outline:none;transition:border-color .15s}.ai-input:focus{border-color:#60a5fa99}.ai-input::placeholder{color:var(--text-muted)}.ai-send{width:40px;height:40px;flex-shrink:0;border:none;border-radius:50%;background:linear-gradient(135deg,#1b61c9,#3b82f6);color:#fff;font-size:.9rem;cursor:pointer;transition:all .15s}.ai-send:hover{filter:brightness(1.12);transform:scale(1.05)}.ai-mic{width:40px;height:40px;flex-shrink:0;border:1px solid rgba(148,163,184,.25);border-radius:50%;background:#0f182acc;color:var(--text-main);font-size:1rem;cursor:pointer;transition:all .15s}.ai-mic:hover{filter:brightness(1.12)}.ai-mic:disabled{opacity:.45;cursor:not-allowed}.ai-mic.is-listening{border-color:#ef4444a6;color:#ef4444;animation:ai-mic-pulse 1.1s ease-in-out infinite}@keyframes ai-mic-pulse{0%,to{box-shadow:0 0 #ef444473}50%{box-shadow:0 0 0 7px #ef444400}}.ai-voice-hint{margin:6px 2px 0;font-size:.75rem;color:var(--text-muted);line-height:1.4}:root[data-theme=light] .ai-panel{background:#f1f6fde6;border-left-color:#64748b2e}:root[data-theme=light] .ai-bubble{background:#fff;border-color:#64748b2e;color:#1f2937}:root[data-theme=light] .ai-msg-user .ai-bubble{background:linear-gradient(135deg,#1b61c9,#254fad);color:#fff;border:none}:root[data-theme=light] .ai-hardware-card{background:#fff;border-color:#64748b2e}:root[data-theme=light] .ai-hardware-card-copy strong{color:#1f2937}:root[data-theme=light] .ai-step-dot{background:#fff}:root[data-theme=light] .ai-step.is-done .ai-step-dot{background:#22c55e26}:root[data-theme=light] .ai-step.is-active .ai-step-dot{background:#3b82f61f;color:#2563eb}:root[data-theme=light] .ai-input{background:#fff;border-color:#64748b40;color:#1f2937}:root[data-theme=light] .ai-mic{background:#fff}:root[data-theme=light] .ai-panel-title-copy strong{color:#1f2937}:root[data-theme=light] .view-switch button.view-switch-ai.active{background:linear-gradient(135deg,#60a5fa4d,#a78bfa4d);color:#1e3a8a}.toolbar-run-button.is-running{background:linear-gradient(135deg,#ef4444,#dc2626);border-color:#f87171a6;box-shadow:0 8px 22px #ef444459}.save-status{font-size:12px;color:var(--text-muted);white-space:nowrap;user-select:none}.save-status.is-dirty{color:#f59e0b}.save-status.is-saved{color:#34d399}.code-pane-head{padding:2px 4px}.code-pane-title{font-family:IBM Plex Mono,Cascadia Code,monospace;font-size:.875rem}.code-pane-badge{font-size:12px;padding:3px 10px;border-radius:999px;background:#3b82f624;color:#7db4ff;white-space:nowrap}.code-pane-badge.is-manual{background:#f59e0b24;color:#fbbf24}.blockly-pane{position:relative}.blockly-empty-guide{position:absolute;top:40%;left:230px;display:flex;align-items:center;gap:10px;pointer-events:none;opacity:.55;font-size:15px;color:var(--text-muted);z-index:5}.blockly-empty-guide.is-compact{opacity:.32;font-size:12px}.blockly-empty-guide-arrow{font-size:22px;animation:guide-nudge 1.6s ease-in-out infinite}@keyframes guide-nudge{0%,to{transform:translate(0)}50%{transform:translate(-8px)}}.terminal-dock{display:flex;flex-direction:column;padding-top:2px;overflow:hidden}.terminal-resize-handle{flex:none;height:12px;cursor:row-resize;display:flex;align-items:center;justify-content:center;touch-action:none}.terminal-resize-grip{width:48px;height:4px;border-radius:2px;background:#94a3b859;transition:background .18s ease}.terminal-resize-handle:hover .terminal-resize-grip{background:#94a3b8bf}.terminal-shell{display:flex;flex-direction:column;gap:10px;flex:1;min-height:0}.terminal-surface,.terminal-curve{flex:1;min-height:0}.terminal-head-left{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.terminal-title{font-size:.9rem;font-weight:600}.terminal-close{border:1px solid rgba(148,163,184,.14);border-radius:999px;background:#121d31c2;color:var(--text-main);width:30px;height:30px;font-size:15px;line-height:1;display:inline-flex;align-items:center;justify-content:center;transition:background .18s ease,border-color .18s ease}.terminal-close:hover{background:#ef444438;border-color:#ef444480}.workspace-statusbar{display:flex;justify-content:space-between;align-items:center;height:28px;padding:0 14px;border-top:1px solid rgba(148,163,184,.12);font-size:12px;color:var(--text-muted);user-select:none}.statusbar-side{display:flex;align-items:center;gap:14px}.statusbar-item.is-ok,.statusbar-item.is-saved{color:#34d399}.statusbar-item.is-dirty{color:#f59e0b}.statusbar-item.is-busy,.statusbar-item.is-running{color:#fbbf24}.blocklyToolbox .toolbox-group-separator.sep-hardware-group,.blocklyToolboxDiv .toolbox-group-separator.sep-hardware-group,.blocklyToolbox .toolbox-group-separator.sep-coding-group,.blocklyToolboxDiv .toolbox-group-separator.sep-coding-group{height:auto;margin:2px 8px;border-top:0;font-size:11px;letter-spacing:2px;color:var(--text-muted);opacity:.8;user-select:none;cursor:default}.blocklyToolbox .toolbox-group-separator.sep-coding-group,.blocklyToolboxDiv .toolbox-group-separator.sep-coding-group{border-top:1px solid rgba(148,163,184,.32);padding-top:8px}.blocklyToolbox .sep-hardware-group:before,.blocklyToolboxDiv .sep-hardware-group:before{content:"硬件模块"}.blocklyToolbox .sep-coding-group:before,.blocklyToolboxDiv .sep-coding-group:before{content:"编程积木"}html:lang(en-US) .blocklyToolbox .sep-hardware-group:before,html:lang(en-US) .blocklyToolboxDiv .sep-hardware-group:before{content:"HARDWARE"}html:lang(en-US) .blocklyToolbox .sep-coding-group:before,html:lang(en-US) .blocklyToolboxDiv .sep-coding-group:before{content:"CODING"}.blocklySvg .blocklyScrollbarBackground{opacity:.25}.blocklySvg .blocklyScrollbarHandle{opacity:.35;transition:opacity .2s ease}.blocklySvg .blocklyScrollbarHandle:hover{opacity:.8}.ai-head-actions{display:flex;gap:6px;flex-shrink:0}.ai-head-cancel:hover{border-color:#f8717199;color:#fca5a5}.ai-statusbar{display:flex;align-items:center;gap:8px;padding:6px 16px;border-bottom:1px solid rgba(148,163,184,.12);font-size:.74rem;color:var(--text-muted);min-height:28px}.ai-statusbar-message{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ai-badge{flex-shrink:0;padding:2px 8px;border-radius:999px;font-size:.68rem;line-height:1.4;border:1px solid transparent}.ai-badge-info{border-color:#60a5fa73;background:#3b82f626;color:#93c5fd}.ai-badge-warn{border-color:#fbbf2473;background:#f59e0b26;color:#fcd34d}.ai-bubble-progress{font-size:.78rem;color:var(--text-muted);padding:8px 12px}.ai-bubble-error{border-color:#f8717166}.ai-hint{margin-top:6px;font-size:.74rem;color:var(--text-muted)}.ai-hardware-port{flex-shrink:0;margin-left:auto;padding:2px 8px;border-radius:999px;border:1px solid rgba(96,165,250,.4);background:#3b82f61f;color:#93c5fd;font-size:.7rem;white-space:nowrap}.ai-assumption-list{margin:4px 0 0;padding-left:18px;display:grid;gap:3px;font-size:.76rem;color:var(--text-muted)}.ai-plan-state{margin:8px 0 0;font-size:.78rem;color:var(--text-muted)}.ai-plan-state-ok{color:#4ade80}.ai-plan-feedback{display:grid;gap:8px;margin-top:10px}.ai-plan-feedback-input{border-radius:12px;font-size:.82rem;padding:8px 12px}.ai-python{margin-top:8px;border:1px solid rgba(148,163,184,.2);border-radius:10px;background:#0a122099;overflow:hidden}.ai-python summary{padding:6px 10px;font-size:.76rem;color:var(--text-muted);cursor:pointer;user-select:none}.ai-python summary:hover{color:var(--text-main)}.ai-python pre{margin:0;padding:10px 12px;max-height:240px;overflow:auto;border-top:1px solid rgba(148,163,184,.15);font-size:.72rem;line-height:1.5;color:#a5f3fc;white-space:pre-wrap;word-break:break-all}:root[data-theme=light] .ai-statusbar{color:#64748b}:root[data-theme=light] .ai-badge-info{background:#3b82f61a;color:#2563eb}:root[data-theme=light] .ai-badge-warn{background:#f59e0b1f;color:#b45309}:root[data-theme=light] .ai-bubble-progress{color:#64748b}:root[data-theme=light] .ai-hardware-port{background:#3b82f614;color:#2563eb}:root[data-theme=light] .ai-plan-state-ok{color:#16a34a}:root[data-theme=light] .ai-python{background:#f8fafc;border-color:#64748b33}:root[data-theme=light] .ai-python pre{color:#0e7490;border-top-color:#64748b26}.mqtt-fold-head{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;padding:10px 12px;border:1px solid #e0e2e6;border-radius:12px;background:#f8fafc;color:#181d26;font:inherit;font-size:.92rem;font-weight:700;text-align:left;cursor:pointer;transition:background .15s ease,border-color .15s ease}.mqtt-fold-head:hover{background:#eef2f7;border-color:#d1d5db}.mqtt-fold-title{display:inline-flex;align-items:center;gap:8px;min-width:0}.mqtt-fold-chevron{flex-shrink:0;color:#64748b;font-size:.85rem;transition:transform .2s ease}.mqtt-fold.is-open>.mqtt-fold-head .mqtt-fold-chevron,.mqtt-fold-advanced.is-open>.mqtt-fold-head .mqtt-fold-chevron{transform:rotate(90deg)}.mqtt-fold-body{display:grid;gap:12px}.mqtt-fold-advanced{border:1px solid #e0e2e6;border-radius:12px;background:#f8fafc;overflow:hidden}.mqtt-fold-advanced>.mqtt-fold-head{border:none;border-radius:0;background:transparent;font-size:.84rem;font-weight:600;color:#64748b}.mqtt-fold-advanced>.mqtt-fold-head:hover{background:#64748b14;color:#181d26}.mqtt-fold-advanced>.mqtt-fold-body{padding:4px 12px 12px}:root[data-theme=light] .mqtt-fold-head{background:#f8fafc;border-color:#e0e2e6;color:#181d26}:root[data-theme=light] .mqtt-fold-head:hover{background:#eef2f7;border-color:#d1d5db}:root[data-theme=light] .mqtt-fold-chevron{color:#64748b}:root[data-theme=light] .mqtt-fold-advanced{background:#f8fafc;border-color:#e0e2e6}:root[data-theme=light] .mqtt-fold-advanced>.mqtt-fold-head{color:#64748b}:root[data-theme=light] .mqtt-fold-advanced>.mqtt-fold-head:hover{background:#64748b14;color:#181d26}.ai-rating-stars{display:flex;gap:4px;margin:8px 0}.ai-rating-star{border:none;background:transparent;font-size:1.5rem;line-height:1;padding:2px 4px;cursor:pointer;color:#94a3b88c;transition:transform .12s,color .12s}.ai-rating-star:hover{transform:scale(1.15)}.ai-rating-star.is-active{color:#f5b83d;text-shadow:0 0 10px rgba(245,184,61,.35)}.ai-rating-comment{margin-top:2px;width:100%;box-sizing:border-box}
