@font-face{font-family:Nunito;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/nunito-400-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Nunito;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/nunito-400-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Nunito;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/nunito-700-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Nunito;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/nunito-700-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Nunito;font-style:normal;font-weight:800;font-display:swap;src:url(/fonts/nunito-800-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Nunito;font-style:normal;font-weight:800;font-display:swap;src:url(/fonts/nunito-800-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Nunito;font-style:normal;font-weight:900;font-display:swap;src:url(/fonts/nunito-900-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Nunito;font-style:normal;font-weight:900;font-display:swap;src:url(/fonts/nunito-900-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Rubik;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/rubik-700-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Rubik;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/rubik-700-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Rubik;font-style:normal;font-weight:800;font-display:swap;src:url(/fonts/rubik-800-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Rubik;font-style:normal;font-weight:800;font-display:swap;src:url(/fonts/rubik-800-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%;margin:0}:root{--accent: #e0a020;--accent-hover: #edb133;--accent-deep: #b67d10;--accent-text: #8a5a06;--accent-tint: #fcf1d3;--accent-ink: #2b2a24;--second: #8db23a;--second-deep: #6e9126;--second-text: #3f6b12;--second-tint: #eef5dc;--go: #4a7f18;--go-hover: #558f1d;--go-deep: #365e10;--bg: #f7f5ee;--panel: #ffffff;--sidebar: #f8f1dc;--input-bg: #fff4d1;--input-line: #ecc766;--ink: #2b2a24;--muted: #6b675c;--line: #e5e1d6;--line-strong: #cfc9ba;--ok: #4f9a2a;--ok-ink: #3f6b12;--ok-tint: #eef5dc;--danger: #d8452b;--danger-tint: #fbe2dc;--warn: #9c5a08;--warn-tint: #fbe6cc;--info: #2a4a6b;--info-tint: #dfe9f8;--radius: 16px;--radius-sm: 12px;--radius-btn: 12px;--pill: 999px;--shadow: 0 8px 28px rgba(43, 42, 36, .14);--shadow-sm: 0 2px 6px rgba(43, 42, 36, .08);--focus: 0 0 0 4px rgba(224, 160, 32, .45);--font: "Nunito", system-ui, -apple-system, "Segoe UI", sans-serif;--font-display: "Rubik", "Nunito", system-ui, sans-serif;--font-mono: ui-monospace, SFMono-Regular, Menlo, monospace}body{font-family:var(--font);font-size:16px;line-height:1.4;background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;font-variant-ligatures:no-common-ligatures}.app{display:grid;grid-template-rows:auto minmax(0,1fr) auto;height:100%}button,input{font:inherit;color:inherit}:focus-visible{outline:none;box-shadow:var(--focus)}.btn{display:inline-flex;align-items:center;gap:8px;min-height:46px;padding:0 18px;border:2px solid var(--line-strong);border-radius:var(--radius-btn);background:var(--panel);font-size:1.02rem;font-weight:800;line-height:1;white-space:nowrap;cursor:pointer;transition:transform .08s ease,background-color .12s ease,border-color .12s ease,box-shadow .12s ease}.btn:hover:not(:disabled){border-color:var(--accent);background:var(--accent-tint)}.btn:active:not(:disabled){transform:scale(.96)}.btn:disabled{opacity:.45;cursor:default}.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);box-shadow:0 3px 0 var(--accent-deep)}.btn.primary:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover)}.btn.primary:active:not(:disabled){box-shadow:0 1px 0 var(--accent-deep);transform:translateY(2px) scale(.98)}.btn.primary:disabled{box-shadow:none}.btn.small{min-height:38px;padding:0 14px;font-size:.95rem}.btn.danger{color:var(--danger)}.btn.danger:hover:not(:disabled){border-color:var(--danger);background:var(--danger-tint)}.toolbar .btn.ghost{border-color:#fff;background:#fff;color:var(--ink)}.toolbar .btn.ghost:hover:not(:disabled){border-color:var(--accent-deep);background:#fff}.toolbar .btn.ghost.danger{color:var(--danger)}.toolbar .btn.light{border-color:var(--second-deep);background:#fff;color:var(--second-text)}.toolbar .btn.light:hover:not(:disabled){background:var(--second-tint)}.toolbar .btn.primary{background:var(--go);border-color:var(--go);color:#fff;box-shadow:0 3px 0 var(--go-deep)}.toolbar .btn.primary:hover:not(:disabled){background:var(--go-hover);border-color:var(--go-hover)}.toolbar .btn.primary:active:not(:disabled){box-shadow:0 1px 0 var(--go-deep)}.toolbar .btn.primary:disabled{background:#ffffff8c;border-color:transparent;color:var(--muted);opacity:1;box-shadow:none}.toolbar .btn.send{padding-right:22px;font-size:1.08rem}.toolbar :focus-visible{box-shadow:0 0 0 4px #2b2a2459}.toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-height:70px;padding:10px 16px;background:var(--accent);color:var(--ink);border-bottom:3px solid var(--accent-deep);position:relative;z-index:80}.brand{display:flex;align-items:center;margin-right:6px;-webkit-user-select:none;user-select:none}.brand-logo{display:block;height:34px;width:auto;filter:drop-shadow(1.5px 0 0 #fff) drop-shadow(-1.5px 0 0 #fff) drop-shadow(0 1.5px 0 #fff) drop-shadow(0 -1.5px 0 #fff) drop-shadow(1px 1px 0 #fff) drop-shadow(-1px -1px 0 #fff) drop-shadow(1px -1px 0 #fff) drop-shadow(-1px 1px 0 #fff)}.name-wrap{display:flex;align-items:center;gap:8px;flex:1 1 200px;max-width:360px;min-width:0}.name-input{min-height:46px;min-width:0;flex:1 1 140px;padding:0 16px;font-size:1.12rem;font-weight:800;color:var(--ink);border:2px solid var(--input-line);border-radius:var(--radius-btn);background:var(--input-bg);transition:background-color .12s ease,border-color .12s ease}.name-input::placeholder{color:var(--muted)}.name-input:hover{border-color:var(--accent-deep)}.name-input:focus{background:#fff8e6;border-color:var(--accent-deep);outline:none;box-shadow:none}.save-state{display:inline-flex;align-items:center;gap:4px;min-width:112px;color:var(--ink);font-size:.92rem;font-weight:700;opacity:0;transition:opacity .3s ease}.save-state.on{opacity:1}.save-state svg{width:16px;height:16px}.toolbar-spacer{flex:1}.connected-badge{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:0 14px;border-radius:var(--radius-btn);background:var(--ok-tint);color:var(--ok-ink);font-weight:800}.live-dot{width:10px;height:10px;border-radius:50%;background:var(--second);box-shadow:0 0 0 3px #8db23a4d}.workarea{display:flex;min-height:0;min-width:0}.blockly-host{flex:1 1 auto;min-width:0;height:100%;position:relative}.preview-head{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;font-family:var(--font-display);font-size:1.15rem;font-weight:700;color:var(--ink);border-bottom:2px solid var(--line)}.blockly-host .blocklyToolbox{padding:8px 0;background:var(--sidebar);border-right:2px solid var(--line)}.blockly-host .blocklyToolboxCategoryContainer{margin:0}.blockly-host .blocklyToolboxCategory{height:auto;line-height:1.1;margin:0 6px 2px;padding:7px 2px 6px;border:0!important;border-radius:14px;cursor:pointer;transition:background-color .12s ease}.blockly-host .blocklyToolboxCategory:not(.blocklyToolboxSelected):hover{background:#fff9}.blockly-host .blocklyToolboxCategory.blocklyToolboxSelected{background:var(--panel)}.blockly-host .blocklyTreeRowContentContainer{display:flex;flex-direction:column;align-items:center;gap:5px;width:76px}.blockly-host .blocklyToolboxCategoryLabel{padding:0 2px;font:700 12.5px/1.1 var(--font);color:var(--ink);text-align:center;white-space:normal;cursor:pointer}.blockly-host .blocklyToolboxSelected .blocklyToolboxCategoryLabel{color:var(--accent-text);font-weight:800}.cc-cat-tile{position:relative;display:block;width:34px;height:34px;border-radius:10px;background:var(--cat, #999);box-shadow:inset 0 1px #ffffff47,inset 0 -3px #0000002e;transition:transform .12s ease,box-shadow .12s ease}.blockly-host .blocklyToolboxCategory:hover .cc-cat-tile{transform:translateY(-1px) scale(1.06)}.blockly-host .blocklyToolboxSelected .cc-cat-tile{transform:scale(1.08)}.blockly-host .blocklyToolboxCategoryContainer,.blockly-host .blocklyToolboxCategoryContainer.blocklyActiveFocus,.blockly-host .blocklyToolboxCategoryContainer.blocklyPassiveFocus,.blockly-host .blocklyToolbox.blocklyActiveFocus,.blockly-host .blocklyToolbox.blocklyPassiveFocus,.blockly-host .blocklyToolboxCategoryGroup:focus{outline:none;box-shadow:none;border:0!important}.blockly-host .blocklyToolboxCategoryContainer:focus-visible>.blocklyToolboxCategory{box-shadow:inset 0 0 0 3px var(--accent-deep)}.cc-cat-tile:after{content:"";position:absolute;inset:6px;background:#fff;-webkit-mask:var(--glyph) center / contain no-repeat;mask:var(--glyph) center / contain no-repeat}.cc-glyph-events{--glyph: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M13 2 4 14h7l-1 8 9-12h-7z' fill='black'/></svg>")}.cc-glyph-cube{--glyph: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linejoin='round' stroke-linecap='round'><path d='M12 3l8 4.5v9L12 21l-8-4.5v-9z'/><path d='M12 12l8-4.5M12 12 4 7.5M12 12v9'/></svg>")}.cc-glyph-screen{--glyph: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='black'><rect x='3' y='3' width='5' height='5' rx='1'/><rect x='9.5' y='3' width='5' height='5' rx='1'/><rect x='16' y='3' width='5' height='5' rx='1'/><rect x='3' y='9.5' width='5' height='5' rx='1'/><rect x='9.5' y='9.5' width='5' height='5' rx='1'/><rect x='16' y='9.5' width='5' height='5' rx='1'/><rect x='3' y='16' width='5' height='5' rx='1'/><rect x='9.5' y='16' width='5' height='5' rx='1'/><rect x='16' y='16' width='5' height='5' rx='1'/></svg>")}.cc-glyph-sound{--glyph: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' stroke='black' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'><path d='M3 9v6h4l5 4V5L7 9z' fill='black'/><path d='M16 8.5a5 5 0 0 1 0 7' fill='none'/><path d='M18.8 5.5a9 9 0 0 1 0 13' fill='none'/></svg>")}.cc-glyph-motion{--glyph: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'><path d='M3 12h18M15 6l6 6-6 6M9 6l-6 6 6 6'/></svg>")}.cc-glyph-distance{--glyph: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'><path d='M4 4v16M20 4v16M8 12h8M13 9l3 3-3 3M11 9l-3 3 3 3'/></svg>")}.cc-glyph-lists{--glyph: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' stroke='black' stroke-width='2.6' stroke-linecap='round'><path d='M10 6h10M10 12h10M10 18h10'/><circle cx='4.5' cy='6' r='1.6' fill='black' stroke='none'/><circle cx='4.5' cy='12' r='1.6' fill='black' stroke='none'/><circle cx='4.5' cy='18' r='1.6' fill='black' stroke='none'/></svg>")}.cc-glyph-logic{--glyph: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linejoin='round'><path d='M12 3l9 9-9 9-9-9z'/><path d='M8.5 12h7' stroke-linecap='round'/></svg>")}.cc-glyph-loops{--glyph: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'><path d='M20 12a8 8 0 1 1-2.3-5.7'/><path d='M21 3v6h-6'/></svg>")}.cc-glyph-math{--glyph: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round'><path d='M7 3.5v7M3.5 7h7M13.5 7h7M4 14.5l6 6M10 14.5l-6 6M13.5 17.5h7'/><circle cx='17' cy='14' r='1.4' fill='black' stroke='none'/><circle cx='17' cy='21' r='1.4' fill='black' stroke='none'/></svg>")}.cc-glyph-text{--glyph: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'><path d='M4 20 11 4l7 16M6.5 14h9'/><path d='M19 4h2M19 8h2' stroke-width='2.2'/></svg>")}.cc-glyph-variables{--glyph: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'><rect x='3.5' y='3.5' width='17' height='17' rx='3'/><path d='M9 9l6 6M15 9l-6 6'/></svg>")}.blockly-host .blocklyMainBackground{stroke:none}.blockly-host .blocklyScrollbarHandle{rx:5;ry:5}.blockly-host .blocklyZoom>image,.blockly-host .blocklyTrash>image{opacity:.55}.blockly-host .blocklyZoom>image:hover,.blockly-host .blocklyTrash>image:hover{opacity:.9}.ccDotMatrixEditor .bitmapPixelGrid{margin:14px 14px 10px;padding:8px;gap:2px;border-radius:10px;background:#b92b26;box-shadow:inset 0 0 0 1.5px #a02420}.ccDotMatrixEditor .pixelButton{width:30px;height:30px;border:0;border-radius:50%;padding:0}.ccDotMatrixEditor .pixelButton:focus-visible{outline:2px solid #ffd27a;outline-offset:-3px}.ccDotMatrixEditor .controlButton{margin:4px 0;min-width:120px;padding:7px 16px;border:0;border-radius:999px;background:#fff;color:#8f1f1b;font:800 14px Nunito,system-ui,sans-serif;cursor:pointer}.ccDotMatrixEditor .controlButton:hover{background:#ffe9e4}.statusbar{background:var(--panel);border-top:2px solid var(--line)}.status-line{display:flex;align-items:center;gap:12px;min-height:52px;padding:8px 16px;font-size:1.02rem}.status-dot{flex:0 0 auto;width:12px;height:12px;border-radius:50%;background:var(--line-strong);transition:background-color .2s ease}.status-dot.ready{background:var(--ok);box-shadow:0 0 0 3px var(--ok-tint)}.status-dot.transferring,.status-dot.connecting,.status-dot.selecting,.status-dot.reconnecting{background:var(--accent);box-shadow:0 0 0 3px var(--accent-tint);animation:pulse 1s ease-in-out infinite}.status-dot.disconnected{background:var(--danger)}@keyframes pulse{0%,to{transform:scale(1)}50%{transform:scale(1.35)}}.status-text{font-weight:800}.progress{flex:1;max-width:360px;height:14px;border-radius:7px;background:var(--line);overflow:hidden}.progress-fill{height:100%;border-radius:7px;background:linear-gradient(90deg,var(--second),var(--accent));transition:width .15s ease}.wake-hint{color:var(--muted);font-size:.95rem}.strip{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 16px;font-weight:700}.strip.error{background:var(--danger-tint);color:var(--danger)}.strip.warn{background:var(--warn-tint);color:var(--warn)}.strip.chrome{background:var(--info-tint);color:var(--info)}.strip-dismiss{min-height:36px;padding:0 12px;border:none;border-radius:var(--pill);background:transparent;font-weight:800;color:inherit;cursor:pointer;text-decoration:underline}.toast{position:fixed;left:50%;bottom:96px;display:flex;align-items:center;gap:10px;padding:14px 26px;border-radius:var(--radius-btn);background:var(--ok);color:#fff;font-size:1.1rem;font-weight:800;box-shadow:var(--shadow);z-index:1030;transform:translate(-50%);animation:toast-in .25s cubic-bezier(.2,.9,.3,1.3)}@keyframes toast-in{0%{transform:translate(-50%,24px);opacity:0}to{transform:translate(-50%);opacity:1}}.drawer-backdrop{position:fixed;inset:0;background:#2b262059;z-index:1000}.drawer{position:fixed;top:0;bottom:0;left:0;width:360px;max-width:90vw;display:flex;flex-direction:column;gap:14px;padding:16px;background:var(--panel);border-right:2px solid var(--line);box-shadow:var(--shadow);transform:translate(-105%);transition:transform .2s ease;z-index:1001}.drawer.open{transform:translate(0)}.drawer-head{display:flex;align-items:center;justify-content:space-between}.drawer-title{font-family:var(--font-display);font-size:1.5rem;font-weight:800;color:var(--ink)}.drawer-actions{display:flex;gap:10px;flex-wrap:wrap}.drawer-empty{margin:0;padding:12px;color:var(--muted)}.project-list{list-style:none;margin:0;padding:0;overflow-y:auto;display:flex;flex-direction:column;gap:10px}.project-list li{display:flex;flex-direction:column;gap:10px;padding:12px;border:2px solid var(--line);border-radius:var(--radius);background:#fff}.project-list li.current{border-color:var(--accent);background:var(--accent-tint)}.project-meta{display:flex;flex-direction:column;gap:2px}.project-name{font-weight:800;font-size:1.1rem}.project-sub{color:var(--muted);font-size:.9rem}.project-actions{display:flex;gap:8px;flex-wrap:wrap}.modal-backdrop{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:#2b262073;z-index:1010}.modal{display:flex;flex-direction:column;gap:14px;max-width:460px;margin:16px;padding:24px;border-radius:20px;border-top:6px solid var(--accent);background:var(--panel);box-shadow:var(--shadow);animation:modal-in .2s ease-out}@keyframes modal-in{0%{transform:translateY(12px) scale(.98);opacity:0}to{transform:none;opacity:1}}.modal h2{margin:0;font-family:var(--font-display);font-size:1.4rem;font-weight:800;color:var(--ink)}.modal p{margin:0;line-height:1.5}.modal-actions{display:flex;gap:12px;justify-content:flex-end}.injectionDiv .blocklyFlyoutButton .blocklyFlyoutButtonBackground{fill:var(--panel);stroke:#e6418f;stroke-width:2px}.injectionDiv .blocklyFlyoutButton .blocklyFlyoutButtonShadow{fill:#c22f74}.injectionDiv .blocklyFlyoutButton .blocklyText{fill:var(--ink);font-weight:800}.injectionDiv .blocklyFlyoutButton:hover .blocklyFlyoutButtonBackground{fill:var(--accent-tint)}.voice-modal{width:min(460px,calc(100vw - 32px))}.voice-stage{display:flex;align-items:center;gap:18px;min-height:92px}.voice-rec{flex:none;display:grid;place-items:center;width:84px;height:84px;border:4px solid var(--line-strong);border-radius:50%;background:var(--panel);cursor:pointer;transition:transform .08s ease,border-color .12s ease}.voice-rec:hover:not(:disabled){border-color:var(--danger)}.voice-rec:active:not(:disabled){transform:scale(.94)}.voice-rec:disabled{opacity:.45;cursor:default}.voice-rec-dot{width:44px;height:44px;border-radius:50%;background:var(--danger)}.voice-rec.on{border-color:var(--danger);animation:voice-pulse 1s ease-in-out infinite}.voice-rec-square{width:30px;height:30px;border-radius:6px;background:var(--danger)}@keyframes voice-pulse{50%{box-shadow:0 0 0 8px var(--danger-tint)}}.voice-status{flex:1;display:flex;flex-direction:column;gap:8px;min-width:0}.voice-meter,.voice-progress{height:10px;border-radius:5px;background:var(--line);overflow:hidden}.voice-progress{height:4px}.voice-meter span,.voice-progress span{display:block;height:100%;border-radius:inherit}.voice-meter span{background:var(--ok);transition:width .06s linear}.voice-progress span{background:var(--muted)}.voice-take{display:flex;flex-wrap:wrap;gap:10px}.voice-len{font-weight:600;color:var(--muted)}.voice-err{padding:10px 12px;border-radius:12px;background:var(--danger-tint);color:var(--ink)}.voice-name{display:flex;flex-wrap:wrap;align-items:center;gap:10px}.voice-name span{font-weight:800}.voice-name input{flex:1 1 140px;min-height:46px;padding:0 12px;border:2px solid var(--line-strong);border-radius:12px;background:var(--input-bg);font:inherit;color:var(--ink)}.voice-list h3{margin:0 0 8px;font-family:var(--font-display);font-size:1.05rem;color:var(--ink)}.voice-list ul{display:flex;flex-direction:column;gap:6px;max-height:220px;margin:0;padding:0;overflow-y:auto;list-style:none}.voice-list li{display:flex;align-items:center;gap:10px}.voice-item-name{flex:1;min-width:0;overflow:hidden;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.voice-empty{color:var(--muted)}@media(max-width:1440px){.save-state .lbl{display:none}.save-state{min-width:0}}@media(max-width:860px){.toolbar{gap:8px}.save-state{display:none}}.cube-panel{width:300px;flex:0 0 auto;display:flex;flex-direction:column;min-height:0;overflow-y:auto;border-left:2px solid var(--line);background:var(--panel)}.panel-body{display:flex;flex-direction:column;gap:14px;padding:16px}.panel-hero{display:flex;flex-direction:column;align-items:center;gap:4px;padding:28px 16px 16px;text-align:center}.panel-hero .btn{margin-top:8px}.panel-actions{display:flex;flex-wrap:wrap;gap:8px;border-top:2px solid var(--line);margin-top:4px;padding-top:14px}.panel-hero .cube-glyph{opacity:.6}.tower-wrap{position:relative;min-height:40px}.cube-tower{display:block;width:152px;height:auto;overflow:visible}.tower-hit{fill:transparent;cursor:pointer;outline:none}.tower-ring{fill:none;stroke:var(--ink);stroke-width:3;stroke-linejoin:round;opacity:.45;pointer-events:none}.tower-ring.sel{stroke:var(--ink);stroke-width:5.5;opacity:1}.tower-kiss{stroke:var(--muted);stroke-width:3;stroke-dasharray:5 6;stroke-linecap:round}.cable-line{fill:none;stroke:#4a443c;stroke-width:5;stroke-linecap:round}.cable-plug{fill:#9a9186;stroke:#4a443c;stroke-width:2}.tower-info{position:absolute;right:0;transform:translateY(-50%);display:flex;align-items:center;gap:9px;width:172px;padding:8px 10px;border:2px solid var(--line);border-radius:var(--radius);background:#fff;box-shadow:var(--shadow);pointer-events:none}.chain-meta{display:flex;flex-direction:column;min-width:0}.chain-here{align-self:flex-start;margin-top:3px;padding:2px 8px;border-radius:var(--pill);background:var(--accent);color:var(--accent-ink);font-size:.75rem;font-weight:800}.peer-name{font-weight:800}.peer-sub{color:var(--muted);font-size:.85rem}.tower-port{margin:0;color:var(--muted);font-size:.85rem}.panel-empty{margin:0;padding:14px 16px;color:var(--muted);line-height:1.45}.panel-note{margin:0;padding:10px 12px;border:2px dashed var(--line-strong);border-radius:var(--radius);color:var(--muted);font-size:.85rem;line-height:1.4}.help-overlay{position:fixed;inset:0;display:flex;flex-direction:column;background:var(--bg);z-index:1005}.help-head{display:flex;align-items:center;gap:12px;min-height:70px;padding:10px 16px;background:var(--accent);color:var(--ink);border-bottom:3px solid var(--accent-deep);position:relative;z-index:1}.help-head .btn{border-color:#fff;background:#fff;color:var(--ink)}.help-title{margin:0;font-family:var(--font-display);font-size:1.4rem;font-weight:800;white-space:nowrap}.help-search{flex:1;min-width:0;min-height:46px;padding:0 18px;font-size:1.05rem;font-weight:700;border:2px solid var(--input-line);border-radius:var(--radius-btn);background:var(--input-bg);color:var(--ink)}.help-search:focus{background:#fff8e6;border-color:var(--accent-deep);outline:none;box-shadow:none}.help-nav{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:10px 16px;background:var(--panel);border-bottom:2px solid var(--line)}.help-count{margin-left:auto;color:var(--muted);font-weight:700}.help-body{flex:1;overflow-y:auto;padding:20px max(16px,calc((100% - 860px)/2)) 40px}.help-intro{padding:16px 20px;border:2px solid var(--line);border-radius:var(--radius);background:var(--panel);margin-bottom:24px}.help-intro h3{margin:0 0 10px;font-family:var(--font-display);font-size:1.25rem;font-weight:700;color:var(--ink)}.help-intro p{margin:0 0 10px;line-height:1.55}.help-cat{margin-bottom:28px;scroll-margin-top:8px}.help-cat-title{margin:0 0 4px;padding-bottom:6px;font-family:var(--font-display);font-size:1.25rem;font-weight:700;color:var(--ink);border-bottom:2px solid var(--line)}.help-entry{display:flex;flex-direction:column;gap:8px;margin:12px 0;padding:14px 16px;border:2px solid var(--line);border-radius:var(--radius);background:#fff}.help-entry-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}.help-entry-title{margin:0;font-size:1.1rem;font-weight:800}.help-sig{padding:2px 8px;border-radius:8px;background:var(--bg);font-family:var(--font-mono);font-size:.95rem}.help-role{padding:4px 10px;border-radius:var(--pill);background:var(--warn-tint);color:var(--warn);font-size:.8rem;font-weight:800}.help-desc,.help-returns{margin:0;line-height:1.5}.help-returns{color:var(--muted);font-size:.95rem}.help-desc code,.help-param code,.help-returns code,.help-intro p code{padding:1px 5px;border-radius:6px;background:var(--bg);font-family:var(--font-mono);font-size:.9em}.help-params{display:flex;flex-direction:column;gap:4px}.help-param{display:grid;grid-template-columns:auto 1fr;gap:10px;align-items:baseline;font-size:.95rem}.help-example{display:flex;align-items:flex-start;gap:10px}.help-code{flex:1;min-width:0;margin:0;padding:12px 14px;border:1px solid var(--line);border-radius:10px;background:var(--bg);overflow-x:auto;font-family:var(--font-mono);font-size:.95rem;line-height:1.45}.help-empty{margin:0;padding:24px 0;color:var(--muted);font-size:1.1rem}.chooser-list{display:flex;flex-direction:column;gap:8px;margin:12px 0 4px}.chooser-item{display:flex;justify-content:space-between;align-items:center;gap:12px;text-align:left;font-size:1.05rem;padding:10px 16px;border-radius:var(--radius)}.chooser-prog{font-size:.8rem;opacity:.8;font-weight:400}@media(prefers-reduced-motion:reduce){.status-dot,.toast,.modal{animation:none}.btn,.cc-cat-tile{transition:none}}.page{min-height:100%;display:flex;flex-direction:column;background:var(--bg)}.page-band .brand{text-decoration:none}.page-body{width:100%;max-width:880px;margin:0 auto;padding:28px 16px 64px;display:flex;flex-direction:column;gap:18px}.page-body.wide{max-width:1120px}.page-title{margin:0;font-family:var(--font-display);font-size:1.9rem;font-weight:800;line-height:1.15}.page-lead{margin:0;font-size:1.1rem;color:var(--muted);line-height:1.5}.muted{color:var(--muted)}.card{background:var(--panel);border:2px solid var(--line);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow-sm)}.card h2{margin:0 0 8px;font-family:var(--font-display);font-size:1.3rem;font-weight:800}.row{display:flex;align-items:center;gap:10px}.row.wrap{flex-wrap:wrap}.row.center{justify-content:center}.row.spread{justify-content:space-between}.row.inline{display:inline-flex}.btn.big{min-height:56px;font-size:1.15rem;justify-content:center}a.btn{text-decoration:none;color:inherit}.splash{min-height:60vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;color:var(--muted);font-weight:700}.splash-logo{height:42px;opacity:.85}.account-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.toolbar .account-bar .btn{border-color:#fff;background:#fff;color:var(--ink)}.account-chip{display:inline-flex;align-items:center;gap:6px;min-height:46px;padding:0 14px;border-radius:var(--radius-btn);background:#ffffff8c;font-weight:800}.account-avatar{font-size:1.5rem;line-height:1}.account-badge{font-size:.8rem;font-weight:700;color:var(--accent-text)}.form{display:flex;flex-direction:column;gap:14px}.field{display:flex;flex-direction:column;gap:6px}.field-label{font-size:.85rem;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.field-input{min-height:48px;width:100%;min-width:0;padding:10px 14px;border:2px solid var(--input-line);border-radius:var(--radius-sm);background:var(--input-bg);font-size:1.05rem}.field-input:focus{outline:none;border-color:var(--accent-deep);box-shadow:var(--focus)}.field-input.narrow{max-width:200px}select.field-input{appearance:auto}.field-hint{font-size:.85rem;color:var(--muted)}.check{display:flex;align-items:flex-start;gap:10px;font-size:.95rem;cursor:pointer}.check input{width:20px;height:20px;margin-top:2px;accent-color:var(--accent-deep);flex:none}.form-error{margin:0;padding:10px 14px;border-radius:var(--radius-sm);background:var(--danger-tint);color:var(--danger);font-weight:700}.form-links{display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;margin:16px 0 0;font-size:.95rem}.form-links a,.back-link,.login-url{color:var(--accent-text);font-weight:800}.auth-card{max-width:460px;width:100%;margin:0 auto;border-top:6px solid var(--accent);display:flex;flex-direction:column;gap:16px}.note{margin:8px 0 0;padding:8px 12px;border-radius:var(--radius-sm);font-weight:700}.note.warn{background:var(--warn-tint);color:var(--warn)}.landing-card{width:100%;max-width:520px;margin:6vh auto 0;display:flex;flex-direction:column;gap:16px;padding:28px;border-top:6px solid var(--accent);text-align:center}.landing-card .row{justify-content:center}.field-input.big{min-height:56px;font-size:1.3rem;text-align:center}.code-input{text-transform:uppercase;font-weight:800;letter-spacing:.06em}.code-input::placeholder{text-transform:none;letter-spacing:normal;font-weight:600}.student-login{display:flex;flex-direction:column;gap:18px;align-items:stretch}.student-login-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.class-code-pill{display:inline-block;padding:4px 12px;border-radius:var(--pill);background:var(--accent-tint);border:2px solid var(--input-line);font-weight:800;letter-spacing:.05em;font-variant-numeric:tabular-nums}.class-name{font-family:var(--font-display);font-weight:800;font-size:1.2rem}.avatar-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(124px,1fr));gap:12px}.avatar-btn{width:100%;min-height:124px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:10px;border:2px solid var(--line);border-radius:var(--radius);background:var(--panel);box-shadow:0 3px 0 var(--line-strong);cursor:pointer;transition:transform .08s ease,border-color .12s ease}.avatar-btn:hover{border-color:var(--accent);background:var(--accent-tint)}.avatar-btn:active{transform:translateY(2px);box-shadow:0 1px 0 var(--line-strong)}.avatar-emoji{font-size:3rem;line-height:1}.avatar-emoji.big{font-size:4rem}.avatar-name{font-weight:800;font-size:1.1rem;text-align:center;overflow-wrap:anywhere}.secret-step{display:flex;flex-direction:column;align-items:center;gap:16px;text-align:center}.secret-who{display:flex;flex-direction:column;align-items:center;gap:6px}.secret-slots{display:flex;gap:12px}.secret-slot{width:72px;height:72px;display:flex;align-items:center;justify-content:center;border:3px dashed var(--line-strong);border-radius:var(--radius);font-size:2.4rem;background:var(--panel)}.secret-slot.filled{border-style:solid;border-color:var(--accent);background:var(--accent-tint)}.secret-slots.shake{animation:shake .4s ease}@keyframes shake{20%,60%{transform:translate(-8px)}40%,80%{transform:translate(8px)}}.picture-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;width:100%;max-width:400px}.picture-btn{aspect-ratio:1;display:flex;align-items:center;justify-content:center;border:2px solid var(--line);border-radius:var(--radius);background:var(--panel);box-shadow:0 3px 0 var(--line-strong);font-size:2.3rem;cursor:pointer}.picture-btn:hover:not(:disabled){border-color:var(--accent);background:var(--accent-tint)}.picture-btn:active:not(:disabled){transform:translateY(2px);box-shadow:0 1px 0 var(--line-strong)}.picture-btn:disabled{opacity:.5}.new-class{flex-wrap:wrap}.new-class .field-input:first-child{flex:1 1 220px}.class-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}.class-item{padding:0}.class-item.archived{opacity:.6}.class-link{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:16px 20px;color:inherit;text-decoration:none;border-radius:var(--radius)}.class-link:hover{background:var(--accent-tint)}.class-item-name{font-family:var(--font-display);font-weight:800;font-size:1.25rem;margin-right:auto}.tag{display:inline-block;margin-left:6px;padding:2px 10px;border-radius:var(--pill);font-size:.8rem;font-weight:800;background:var(--line);color:var(--muted)}.tag.warn,.tag.pending{background:var(--warn-tint);color:var(--warn)}.tag.approved{background:var(--ok-tint);color:var(--ok-ink)}.tag.rejected{background:var(--danger-tint);color:var(--danger)}.back-link{text-decoration:none}.class-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.code-card{display:flex;flex-wrap:wrap;align-items:center;gap:18px 28px;border-top:6px solid var(--accent)}.code-block{display:flex;flex-direction:column;gap:4px;min-width:0}.code-block.grow{flex:1 1 260px}.class-code-big{font-family:var(--font-display);font-size:2.4rem;font-weight:800;letter-spacing:.06em;font-variant-numeric:tabular-nums}.login-url{font-size:1.05rem;overflow-wrap:anywhere}.names-input{min-height:110px;margin:8px 0 12px;resize:vertical;font-family:var(--font)}.report{margin:12px 0 0;padding-left:20px;color:var(--muted)}.report li:first-child{color:var(--ok-ink);font-weight:800}.table{width:100%;border-collapse:collapse}.table th{text-align:left;font-size:.8rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);padding:8px;border-bottom:2px solid var(--line)}.table td{padding:8px;border-bottom:1px solid var(--line);vertical-align:middle}.table td.actions{text-align:right;white-space:nowrap}.table td.actions .btn+.btn{margin-left:8px}.avatar-cell{font-size:1.6rem;margin-right:8px;vertical-align:middle}.link-btn{border:0;background:none;padding:4px 0;font-weight:800;font-size:1.05rem;cursor:pointer;border-bottom:2px dashed transparent}.link-btn:hover{border-bottom-color:var(--accent)}.secret-inline{display:inline-flex;gap:6px;font-size:1.5rem}.danger-zone{justify-content:flex-end}.plain-list{list-style:none;margin:8px 0 0;padding:0}.plain-list li{display:flex;gap:10px;padding:8px 0;border-bottom:1px solid var(--line)}@media(max-width:640px){.table thead{display:none}.table tr{display:flex;flex-wrap:wrap;gap:6px 12px;padding:10px 0;border-bottom:1px solid var(--line)}.table td{border:0;padding:2px 0}.table td.actions{width:100%;text-align:left;white-space:normal}.class-code-big{font-size:1.9rem}}.cards-page{padding:24px 16px;background:var(--bg);min-height:100%}.cards-head{display:flex;align-items:center;flex-wrap:wrap;gap:12px;margin-bottom:20px}.cards-head p{width:100%;margin:0}.cards-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px}.login-card{display:flex;flex-direction:column;gap:10px;padding:14px 16px;background:#fff;border:2px dashed var(--line-strong);border-radius:var(--radius-sm);break-inside:avoid}.login-card-top{display:flex;align-items:center;gap:10px}.login-card-avatar{font-size:2.2rem;line-height:1}.login-card-name{font-family:var(--font-display);font-weight:800;font-size:1.4rem}.login-card-mid{display:flex;align-items:center;gap:14px}.login-card-qr svg{display:block;width:84px;height:84px}.login-card-code{font-family:var(--font-display);font-weight:800;font-size:1.3rem;letter-spacing:.05em}.login-card-url{font-size:.85rem;color:var(--muted);overflow-wrap:anywhere}.login-card-secret{display:flex;align-items:center;gap:12px}.login-card-pics{display:flex;gap:12px}.login-card-pic{display:flex;flex-direction:column;align-items:center;font-size:1.8rem;line-height:1.1}.login-card-pic small{font-size:.7rem;color:var(--muted)}@media print{.no-print{display:none!important}.cards-page{padding:0;background:#fff}.cards-grid{grid-template-columns:1fr 1fr;gap:6mm}}.school-picker{display:flex;flex-direction:column;gap:12px}.field.grow{flex:1 1 160px}.combo{position:relative}.combo-list{position:absolute;z-index:20;top:100%;left:0;right:0;margin:4px 0 0;padding:6px;list-style:none;max-height:280px;overflow-y:auto;background:var(--panel);border:2px solid var(--line-strong);border-radius:var(--radius-sm);box-shadow:var(--shadow)}.combo-item{padding:8px 10px;border-radius:8px;cursor:pointer;line-height:1.3}.combo-item.active{background:var(--accent-tint)}.combo-group{display:block;margin:6px 0 4px;font-size:.75rem;font-weight:800;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.combo-empty{padding:8px 10px;color:var(--muted);font-size:.9rem}.school-chosen{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border:2px solid var(--second);border-radius:var(--radius-sm);background:var(--second-tint)}.school-chosen-name{font-weight:800}.muted.small{font-size:.82rem}select{font:inherit;color:inherit}
